Source: browser.js

/**
 * Platform dependant utilities for the openEO JS Client.
 * 
 * Browser implementation
 * 
 * @class
 * @hideconstructor
 */
class Environment {

	static handleErrorResponse(error) {
		return new Promise((_, reject) => {
			let fileReader = new FileReader();
			fileReader.onerror = event => {
				fileReader.abort();
				reject(event.target.error);
			};
			fileReader.onload = () => reject(JSON.parse(fileReader.result));
			fileReader.readAsText(error.response.data);
		});
	}

	static getResponseType() {
		return 'blob';
	}

	/**
	 * Encodes a string into Base64 encoding.
	 * 
	 * @static
	 * @param {string} str - String to encode.
	 * @returns {string} String encoded in Base64.
	 */
	static base64encode(str) {
		// btoa is JS's ugly name for encodeBase64
		return btoa(str);
	}

	static fileNameForUpload(source) {
		return source.name.split(/(\\|\/)/g).pop();
	}

	static dataForUpload(source) {
		return source;
	}

	static async downloadResults(/*con, assets, targetFolder*/) {
		throw new Error("downloadResults is not supported in a browser environment.");
	}

	/**
	 * Offers data to download in the browser.
	 * 
	 * NOTE: Only supported in a browser environment.
	 * This method may fail with overly big data.
	 * 
	 * @static
	 * @param {*} data - Data to download.
	 * @param {string} filename - File name that is suggested to the user.
	 * @see https://github.com/kennethjiang/js-file-download/blob/master/file-download.js
	 */
	/* istanbul ignore next */
	static async saveToFile(data, filename) {
		return new Promise(resolve => {
			let blob = new Blob([data], {type: 'application/octet-stream'});
			let blobURL = window.URL.createObjectURL(blob);
			let tempLink = document.createElement('a');
			tempLink.style.display = 'none';
			tempLink.href = blobURL;
			tempLink.setAttribute('download', filename); 
			
			if (typeof tempLink.download === 'undefined') {
				tempLink.setAttribute('target', '_blank');
			}
			
			document.body.appendChild(tempLink);
			tempLink.click();
			document.body.removeChild(tempLink);
			window.URL.revokeObjectURL(blobURL);
			resolve();
		});
	}
}

module.exports = Environment;