diff --git a/index.html b/index.html index 9c958ef1..be1b4462 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -
\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Logo.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Logo.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Logo.vue?vue&type=template&id=af3cbbb2&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\nimport style0 from \"./Logo.vue?vue&type=style&index=0&id=af3cbbb2&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af3cbbb2\",\n null\n \n)\n\nexport default component.exports","export default {\n\t// Set this to connect to a back-end automatically when opening the Web Editor,\n\t// so you could set this to https://example.com and then the Web Editor connects\n\t// to the corresponding back-end automatically.\n\tserverUrl: '',\n\n\t// The name of the service\n\tserviceName: 'openEO',\n\t// The name of the app\n\tappName: 'Web Editor',\n\n\t// Skip login and automatically load up the \"discovery mode\"\n\tskipLogin: false,\n\n\t// Default location for maps\n\t// Default to the center of the EU in Wuerzburg: \n\t// https://en.wikipedia.org/wiki/Geographical_midpoint_of_Europe#Geographic_centre_of_the_European_Union\n\t// The zoom level should show most of Europe\n\tmapLocation: [49.8, 9.9],\n\tmapZoom: 4,\n\n\t// OSM Nominatim compliant geocoder URL, remove to disable\n\tgeocoder: \"https://nominatim.openstreetmap.org/search\",\n\n\t// A message shown on the login page\n\tloginMessage: '',\n\n\t// The logo to show\n\tlogo: './logo.png',\n\n\t// Defaults for notifications\n\tsnotifyDefaults: {\n\t\ttimeout: 10000,\n\t\ttitleMaxLength: 30,\n\t\tbodyMaxLength: 120,\n\t\tshowProgressBar: true,\n\t\tcloseOnClick: true,\n\t\tpauseOnHover: true\n\t},\n\n\t// List of supported web map services (all lower-cased)\n\tsupportedMapServices: [\n\t\t'xyz',\n\t\t'wmts'\n\t],\n\n\t// List of supported batch job sharing services\n\tsupportedBatchJobSharingServices: [\n\t\t'ShareEditor',\n\t\t'CopyUrl',\n\t\t'BlueskyShare',\n\t\t'MastodonSocialShare',\n\t\t'XShare'\n\t],\n\n\t// List of supported web service sharing services\n\tsupportedWebServiceSharingServices: [\n\t\t'ShareEditor',\n\t\t'CopyUrl',\n\t\t'BlueskyShare',\n\t\t'MastodonSocialShare',\n\t\t'XShare'\n\t],\n\n\t// List of supported wizards\n\tsupportedWizards: [\n\t\t{\n\t\t\tcomponent: 'SpectralIndices',\n\t\t\ttitle: 'Compute Spectral Indices',\n\t\t\tdescription: 'A spectral index is a mathematical equation that is applied on the various spectral bands of an image per pixel. It is often used to highlight vegetation, urban areas, snow, burn, soil, or water/drought/moisture stress. Provided by Awesome Spectral Indices (https://github.com/awesome-spectral-indices/awesome-spectral-indices).',\n\t\t\trequiredProcesses: ['reduce_dimension']\n\t\t}\n\t],\n\n\t// Configure the (base)maps\n\tbasemaps: [\n\t\t{\n\t\t\t// Title for the basemap\n\t\t\ttitle: \"OpenStreetMap\",\n\t\t\t// Templated URI for the XYZ basemap.\n\t\t\turl: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t// Attributon for the basemap. HTML is allowed.\n\t\t\tattributions: '© OpenStreetMap contributors.',\n\t\t\t// Maximum zoom level\n\t\t\tmaxZoom: 19\n\t\t}\n\t],\n\n\t// Import processes from openeo-community-examples repo\n\timportCommunityExamples: true,\n\n\t// Additional process namespaces to load by default\n\tprocessNamespaces: [],\n\n\t// Key is the OIDC provider id, value is the client ID\n\toidcClientIds: {},\n\n\t// Show a warning if HTTP is used instead of HTTPS\n\tshowHttpWarning: true,\n\n\t// refresh interval for jobs/user data/services etc. in minutes - doesn't apply to logs.\n\t// It's recommended to use a value between 1 and 5 minutes.\n\tdataRefreshInterval: 2,\n\n\t// Show or hide experimental and/or deprecated entites by default (e.g. processes, collections)\n\tshowExperimentalByDefault: false,\n\tshowDeprecatedByDefault: false,\n\n\t// number of items to show per page in the UI (jobs, services, files, UDPs) - null to disable pagination\n\tpageLimit: 50,\n\t\n};","export default {\n\tdata() {\n\t\treturn {\n\t\t\teventBusListeners: {}\n\t\t};\n\t},\n\tbeforeDestroy() {\n\t\tfor (var eventName in this.eventBusListeners) {\n\t\t\tthis.$root.$off(eventName, this.eventBusListeners[eventName]);\n\t\t}\n\t},\n\tmethods: {\n\t\thasListener(eventName) {\n\t\t\treturn !!this.eventBusListeners[eventName];\n\t\t},\n\t\tlisten(eventName, callback) {\n\t\t\tthis.unlisten(eventName);\n\t\t\tthis.$root.$on(eventName, callback);\n\t\t\tthis.eventBusListeners[eventName] = callback;\n\t\t},\n\t\tunlisten(eventName) {\n\t\t\tif (this.hasListener(eventName)) {\n\t\t\t\tthis.$root.$off(eventName, this.eventBusListeners[eventName]);\n\t\t\t\tdelete this.eventBusListeners[eventName];\n\t\t\t}\n\t\t},\n\t\tbroadcast() {\n\t\t\tthis.$root.$emit(...arguments);\n\t\t}\n\t}\n}","import proj4 from 'proj4';\nimport { get as getProjection, transformExtent } from 'ol/proj';\nimport Projection from 'ol/proj/Projection';\nimport { register } from 'ol/proj/proj4';\n\nimport Utils from '../../utils';\n\nexport default class ProjManager {\n\n\tstatic async get(data) {\n\t\tif (data instanceof Projection) {\n\t\t\treturn data;\n\t\t}\n\n\t\treturn await ProjManager._load(data);\n\t}\n\n\tstatic add(code, meta, extent) {\n\t\ttry {\n\t\t\tproj4.defs(code, meta);\n\t\t\tregister(proj4);\n\t\t\tlet projection = getProjection(code);\n\t\t\tif (Array.isArray(extent)) {\n\t\t\t\textent = transformExtent(extent, 'EPSG:4326', projection);\n\t\t\t\tprojection.setExtent(extent);\n\t\t\t}\n\t\t\tif (meta.includes('+datum=WGS84')) {\n\t\t\t\tprojection.basemap = true;\n\t\t\t}\n\t\t\treturn projection;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Get projection details from STAC (todo: add collection support)\n\tstatic async addFromStac(stac) {\n\t\tif (Utils.isObject(stac) && Utils.isObject(stac.properties)) {\n\t\t\tif (stac.properties['proj:code']) {\n\t\t\t\treturn await ProjManager.get(stac.properties['proj:code']);\n\t\t\t}\n\t\t\telse if (stac.properties['proj:wkt2']) {\n\t\t\t\treturn ProjManager.add(stac.id, stac.properties['proj:wkt2']);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tstatic async _load(crs) {\n\t\tlet code, id;\n\t\tif (typeof crs === 'string' && crs.match(/^EPSG:\\d+$/i)) {\n\t\t\tcode = crs.toUpperCase();\n\t\t\tid = crs.substr(5);\n\t\t}\n\t\telse if (Number.isInteger(crs)) {\n\t\t\tcode = `EPSG:${crs}`\n\t\t\tid = String(crs);\n\t\t}\n\t\telse {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Get projection from cache\n\t\tlet projection = getProjection(code);\n\t\tif (projection) {\n\t\t\treturn projection;\n\t\t}\n\n\t\t// Get projection from database\n\t\tlet epsg = await import('../../assets/epsg-proj.json');\n\t\tif (id in epsg) {\n\t\t\treturn ProjManager.add(code, epsg[id][0], epsg[id][1]);\n\t\t}\n\n\t\t// No projection found\n\t\treturn null;\n\t}\n\n}","import { SupportedFormat } from './format';\n\nclass CSV extends SupportedFormat {\n\n\tconstructor(asset, delim = [',', ';']) {\n\t\tsuper(asset, 'TableViewer', 'fa-table');\n\t\tthis.delim = delim;\n\t}\n\n\tasync parseData(data) {\n\t\tif (typeof data === 'string') {\n\t\t\t// Parse CSV\n\t\t\tlet array = this.parseCSV(data.trim());\n\t\t\t// Convert values into numbers, if possible\n\t\t\treturn array.map(row => row.map(col => {\n\t\t\t\tcol = col.trim();\n\t\t\t\tif (col.length === 0) {\n\t\t\t\t\treturn NaN;\n\t\t\t\t}\n\t\t\t\telse if (!isNaN(col)) { // https://stackoverflow.com/a/35759874/9709414\n\t\t\t\t\treturn parseFloat(col);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn col;\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t\treturn data;\n\t}\n\n\t// From https://stackoverflow.com/questions/1293147/example-javascript-code-to-parse-csv-data\n\tparseCSV(str) {\n\t\tvar arr = [];\n\t\tvar quote = false; // 'true' means we're inside a quoted field\n\t\n\t\t// Iterate over each character, keep track of current row and column (of the returned array)\n\t\tfor (var row = 0, col = 0, c = 0; c < str.length; c++) {\n\t\t\tvar cc = str[c], nc = str[c+1]; // Current character, next character\n\t\t\tarr[row] = arr[row] || []; // Create a new row if necessary\n\t\t\tarr[row][col] = arr[row][col] || ''; // Create a new column (start with empty string) if necessary\n\t\n\t\t\t// If the current character is a quotation mark, and we're inside a\n\t\t\t// quoted field, and the next character is also a quotation mark,\n\t\t\t// add a quotation mark to the current column and skip the next character\n\t\t\tif (cc == '\"' && quote && nc == '\"') {\n\t\t\t\tarr[row][col] += cc; ++c;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's just one quotation mark, begin/end quoted field\n\t\t\tif (cc == '\"') {\n\t\t\t\tquote = !quote;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a elimiter and we're not in a quoted field, move on to the next column\n\t\t\tif (this.delim.includes(cc) && !quote) {\n\t\t\t\t++col;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a newline (CRLF) and we're not in a quoted field, skip the next character\n\t\t\t// and move on to the next row and move to column 0 of that new row\n\t\t\tif (cc == '\\r' && nc == '\\n' && !quote) {\n\t\t\t\t++row; col = 0; ++c;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a newline (LF or CR) and we're not in a quoted field,\n\t\t\t// move on to the next row and move to column 0 of that new row\n\t\t\tif (cc == '\\n' && !quote) {\n\t\t\t\t++row; col = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (cc == '\\r' && !quote) {\n\t\t\t\t++row; col = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Otherwise, append the current character to the current column\n\t\t\tarr[row][col] += cc;\n\t\t}\n\t\treturn arr;\n\t}\n\n}\n\nexport default CSV;","import Utils from '../utils.js';\n\nexport class Format {\n\n\tconstructor(asset) {\n\t\tObject.assign(this, asset);\n\t\tthis.context = null;\n\t}\n\n\tsetContext(context) {\n\t\tthis.context = context;\n\t}\n\n\tgetContext() {\n\t\treturn this.context;\n\t}\n\n\tgetUrl() {\n\t\treturn this.href;\n\t}\n\n\tcanGroup() {\n\t\treturn false;\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tdownload(filename = null) {\n\t\tlet tempLink = document.createElement('a');\n\t\ttempLink.style.display = 'none';\n\t\ttempLink.href = this.getUrl();\n\t\ttempLink.setAttribute('download', filename ? filename : Utils.makeFileName(\"result\", this.type));\n\t\ttempLink.setAttribute('target', '_blank');\n\t\tdocument.body.appendChild(tempLink);\n\t\ttempLink.click();\n\t\tdocument.body.removeChild(tempLink);\n\t}\n\n\tasync loadData(connection) {\n\t\tif (!this.loaded) {\n\t\t\tthis.data = await this.fetchData(connection);\n\t\t\tthis.loaded = true;\n\t\t}\n\t}\n\n\tgetData() {\n\t\tif (!this.loaded) {\n\t\t\tthrow new Error('Data must be loaded before');\n\t\t}\n\t\treturn this.data;\n\t}\n\n\tasync fetchData(connection) {\n\t\tlet blob;\n\t\tlet url = this.getUrl();\n\t\tif (url.startsWith('blob:')) {\n\t\t\tlet response = await fetch(url);\n\t\t\tblob = await response.blob();\n\t\t}\n\t\telse {\n\t\t\tlet auth = false;\n\t\t\ttry {\n\t\t\t\tlet apiUrl = new URL(connection.getUrl());\n\t\t\t\tlet requestUrl = new URL(url);\n\t\t\t\tauth = apiUrl.origin === requestUrl.origin;\n\t\t\t} catch (error) {}\n\n\t\t\tblob = await connection.download(url, auth);\n\t\t}\n\t\tlet promise = new Promise((resolve, reject) => {\n\t\t\tlet reader = new FileReader();\n\t\t\treader.onload = event => resolve(event.target.result);\n\t\t\treader.onerror = reject;\n\t\t\tif (this.isBinary()) {\n\t\t\t\treader.readAsBinaryString(blob);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treader.readAsText(blob);\n\t\t\t}\n\t\t});\n\t\tlet data = await promise;\n\t\treturn await this.parseData(data);\n\t}\n\n\tasync parseData(data) {\n\t\treturn data;\n\t}\n\n}\n\nexport class SupportedFormat extends Format {\n\n\tconstructor(asset, component = null, icon = 'fa-database', props = {}, events = {}) {\n\t\tsuper(asset);\n\t\tthis.loaded = false;\n\t\tthis.component = component;\n\t\tthis.props = props;\n\t\tif (!this.props.data) {\n\t\t\tthis.props.data = this;\n\t\t}\n\t\tthis.icon = icon;\n\t\tthis.events = events;\n\t}\n\n\tisBinary() {\n\t\treturn false;\n\t}\n\n}\n\nexport class UnsupportedFormat extends Format {\n\n\tconstructor(asset) {\n\t\tsuper(asset);\n\t}\n\n}\n\nexport class FormatCollection extends SupportedFormat {\n\n}","import { SupportedFormat } from './format';\nimport Utils from '../utils';\nimport ProjManager from '../components/maps/projManager';\n\nimport { fromUrl as tiffFromUrl, fromBlob as tiffFromBlob, globals as _ } from 'geotiff';\n\nimport { toUserExtent } from 'ol/proj';\nimport Projection from 'ol/proj/Projection';\nimport { fromCode as unitsFromCode } from 'ol/proj/Units';\n\nconst GDAL_MIN = 'STATISTICS_MINIMUM';\nconst GDAL_MAX = 'STATISTICS_MAXIMUM';\nconst GDAL_NAME = 'DESCRIPTION';\n\nclass GeoTIFF extends SupportedFormat {\n\n\tconstructor(asset, stac) {\n\t\tsuper(asset, \"MapViewer\", 'fa-map', { removableLayers: true });\n\t\tthis._bands = [];\n\t\tthis._nodata = [];\n\t\tthis.img = null;\n\t\tthis.projection = null;\n\t\tthis.extent = null;\n\t\tthis.convertToRGB = false;\n\t\tthis.stac = stac;\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tcanGroup() {\n\t\treturn true;\n\t}\n\n\tasync loadData(connection) {\n\t\tif (!this.loaded) {\n\t\t\tawait this.parseMetadata();\n\t\t\tthis.loaded = true;\n\t\t}\n\t\treturn this;\n\t}\n\n\tgetData() {\n\t\treturn this;\n\t}\n\n\tasync parseMetadata() {\n\t\tlet stacHasExtent = this.stac && (this.stac.geometry || this.stac.extent);\n\n\t\t// Get projection from STAC\n\t\tthis.projection = await ProjManager.addFromStac(this.stac);\n\n\t\t// Get nodata from STAC file:nodata\n\t\tif (Array.isArray(this['file:nodata']) && this['file:nodata'].length > 0) {\n\t\t\tthis._nodata = Utils.parseNodata(this['file:nodata']);\n\t\t}\n\n\t\t// Get min/max/nodata from STAC bands\n\t\tif (Array.isArray(this.bands) && this.bands.length > 0) {\n\t\t\tthis.bands.forEach((band, i) => {\n\t\t\t\t// Get name from band\n\t\t\t\tif (band.name) {\n\t\t\t\t\tthis.setBandInfo(i, {\n\t\t\t\t\t\tname: band.name\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Set min/max from statistics\n\t\t\t\tif (Utils.isObject(band.statistics)) {\n\t\t\t\t\tthis.setBandInfo(i, {\n\t\t\t\t\t\tmin: band.statistics.minimum,\n\t\t\t\t\t\tmax: band.statistics.maximum\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// per-band no-data values are not supported, simply read the no-data from the first occurance if not defined yet\n\t\t\t\tif (this._nodata.length === 0 && typeof band.nodata !== 'undefined') {\n\t\t\t\t\tthis._nodata.push(Utils.parseNodata(band.nodata));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Load example tiff image\n\t\tlet tiff;\n\t\tif (this.getBlob()) {\n\t\t\ttiff = await tiffFromBlob(this.getBlob());\n\t\t}\n\t\telse {\n\t\t\ttiff = await tiffFromUrl(this.getUrl());\n\t\t}\n\t\tthis.img = await tiff.getImage();\n\n\t\t// Get data for each band / sample\n\t\tfor (let i = 0; i < this.img.getSamplesPerPixel(); i++) {\n\t\t\tlet data = {};\n\n\t\t\t// Use min/max for data type (as fallback)\n\t\t\ttry {\n\t\t\t\tlet dummy = this.img.getArrayForSample(i);\n\t\t\t\tif (!Number.isFinite(this._bands[i].min)) {\n\t\t\t\t\tdata.min = this.getMinForDataType(dummy);\n\t\t\t\t}\n\t\t\t\tif (!Number.isFinite(this._bands[i].max)) {\n\t\t\t\t\tdata.max = this.getMaxForDataType(dummy);\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\n\t\t\t// Set min/max/name from statistics, if available\n\t\t\tlet band = this.img.getGDALMetadata(i);\n\t\t\tif (Utils.isObject(band)) {\n\t\t\t\tif (GDAL_MIN in band) {\n\t\t\t\t\tdata.min = parseFloat(band[GDAL_MIN]);\n\t\t\t\t}\n\t\t\t\tif (GDAL_MAX in band) {\n\t\t\t\t\tdata.max = parseFloat(band[GDAL_MAX]);\n\t\t\t\t}\n\t\t\t\tif (GDAL_NAME in band) {\n\t\t\t\t\tdata.name = band[GDAL_NAME];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setBandInfo(i, data);\n\n\t\t\t// get no-data values if needed\n\t\t\tlet nodata = this.img.getGDALNoData();\n\t\t\tif (this._nodata.length === 0 && nodata !== null) {\n\t\t\t\tthis._nodata.push(nodata);\n\t\t\t}\n\t\t}\n\n\t\t// Get projection from GeoTiff\n\t\tlet code;\n\t\tif (!this.projection && this.img.geoKeys) {\n\t\t\tlet { ProjectedCSTypeGeoKey, GeographicTypeGeoKey, ProjLinearUnitsGeoKey, GeogAngularUnitsGeoKey } = this.img.geoKeys;\n\t\t\tif (ProjectedCSTypeGeoKey) {\n\t\t\t\tcode = 'EPSG:' + ProjectedCSTypeGeoKey;\n\t\t\t\tthis.projection = await ProjManager.get(code);\n\t\t\t}\n\t\t\tif (!this.projection && GeographicTypeGeoKey) {\n\t\t\t\tcode = 'EPSG:' + GeographicTypeGeoKey;\n\t\t\t\tthis.projection = await ProjManager.get(code);\n\t\t\t}\n\n\t\t\tif (!this.projection && code) {\n\t\t\t\tconst units = (ProjLinearUnitsGeoKey && unitsFromCode(ProjLinearUnitsGeoKey)) || (GeogAngularUnitsGeoKey && unitsFromCode(GeogAngularUnitsGeoKey));\n\t\t\t\tif (units) {\n\t\t\t\t\tthis.projection = new Projection({ code, units });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Get extent from geotiff\n\t\tif (!stacHasExtent) {\n\t\t\ttry {\n\t\t\t\tlet bbox = this.img.getBoundingBox();\n\t\t\t\tthis.extent = toUserExtent(bbox, this.projection);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t}\n\n\t\t// Store color map as RGB\n\t\tif (this.img.fileDirectory.ColorMap) {\n\t\t\tconst map = Array.from(this.img.fileDirectory.ColorMap);\n\t\t\tconst greenOffset = map.length / 3;\n\t\t\tconst blueOffset = map.length / 3 * 2;\n\t\t\tthis.colorMap = [];\n\t\t\tfor (let i = 0; i < greenOffset; i++) {\n\t\t\t\tthis.colorMap.push([\n\t\t\t\t\tMath.trunc(map[i] / 65536 * 256),\n\t\t\t\t\tMath.trunc(map[i + greenOffset] / 65536 * 256),\n\t\t\t\t\tMath.trunc(map[i + blueOffset] / 65536 * 256),\n\t\t\t\t\tthis._nodata.includes(i) ? 0 : 1\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\t// Get photometric interpretation\n\t\tswitch (this.img.fileDirectory.PhotometricInterpretation) {\n\t\t\tcase _.photometricInterpretations.CMYK:\n\t\t\tcase _.photometricInterpretations.YCbCr:\n\t\t\tcase _.photometricInterpretations.CIELab:\n\t\t\t\tthis.convertToRGB = true;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// RGB and (Black/White)IsZero are handled via user control\n\t\t\t\t// Palette is handled directly by our styling\n\t\t\t\tthis.convertToRGB = false;\n\t\t}\n\t}\n\n\tsetBandInfo(i, data) {\n\t\tif (this._bands[i]) {\n\t\t\tObject.assign(this._bands[i], data);\n\t\t}\n\t\telse {\n\t\t\tthis._bands.push(Object.assign({ id: i + 1 }, data));\n\t\t}\n\t}\n\n\tgetBlob() {\n\t\treturn this.blob;\n\t}\n\n\tgetNoData() {\n\t\treturn this._nodata;\n\t}\n\n\tgetContext() {\n\t\treturn this.stac;\n\t}\n\n\tgetBands() {\n\t\treturn this._bands;\n\t}\n\n\tgetProjection() {\n\t\treturn this.projection;\n\t}\n\n\tgetExtent() {\n\t\treturn this.extent;\n\t}\n\n\tgetColorMap() {\n\t\treturn this.colorMap;\n\t}\n\n\tgetMinForDataType(array) {\n\t\tif (array instanceof Int8Array) {\n\t\t\treturn -128;\n\t\t}\n\t\tif (array instanceof Int16Array) {\n\t\t\treturn -32768;\n\t\t}\n\t\tif (array instanceof Int32Array) {\n\t\t\treturn -2147483648;\n\t\t}\n\t\tif (array instanceof Float32Array) {\n\t\t\treturn 1.2e-38;\n\t\t}\n\t\treturn 0;\n\t}\n\t\n\tgetMaxForDataType(array) {\n\t\tif (array instanceof Int8Array) {\n\t\t\treturn 127;\n\t\t}\n\t\tif (array instanceof Uint8Array) {\n\t\t\treturn 255;\n\t\t}\n\t\tif (array instanceof Uint8ClampedArray) {\n\t\t\treturn 255;\n\t\t}\n\t\tif (array instanceof Int16Array) {\n\t\t\treturn 32767;\n\t\t}\n\t\tif (array instanceof Uint16Array) {\n\t\t\treturn 65535;\n\t\t}\n\t\tif (array instanceof Int32Array) {\n\t\t\treturn 2147483647;\n\t\t}\n\t\tif (array instanceof Uint32Array) {\n\t\t\treturn 4294967295;\n\t\t}\n\t\tif (array instanceof Float32Array) {\n\t\t\treturn 3.4e38;\n\t\t}\n\t\treturn 255;\n\t}\n\n}\n\nexport default GeoTIFF;","import Utils from '../utils';\nimport { SupportedFormat } from './format';\n\nclass JSON_ extends SupportedFormat {\n\n\tconstructor(asset, component = \"DataViewer\") {\n\t\tsuper(asset, component);\n\n\t\tthis.isGeoJson = false;\n\t\t// this.isCovJson = false;\n\t}\n\n\tasync parseData(data) {\n\t\tif (typeof data === 'string') {\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t}\n\t\t}\n\t\tif (Utils.detectGeoJson(data)) {\n\t\t\tthis.isGeoJson = true;\n\t\t\tthis.component = 'MapViewer';\n\t\t\tthis.icon = 'fa-map';\n\t\t}\n\t\telse if (this.isTable(data)) {\n\t\t\tthis.component = 'TableViewer';\n\t\t\tthis.icon = 'fa-table';\n\t\t}\n\t\treturn data;\n\t}\n\n\tisTable(data) {\n\t\tif (!data || typeof data !== 'object' || Utils.size(data) === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tlet values = Object.values(data);\n\t\tlet keys = Object.keys(values[0]);\n\t\treturn !values.some(row => !row || typeof row !== 'object' || !Utils.equals(Object.keys(row), keys));\n\t}\n}\n\nexport default JSON_;","import Utils from './utils';\nimport Process from './process';\nimport { Formula } from '@openeo/js-client';\nimport { ProcessGraph } from '@openeo/js-processgraphs';\n\nexport default {\n\tmathProcesses: null,\n\tgetMathProcesses() {\n\t\tif (!this.mathProcesses) {\n\t\t\tthis.mathProcesses = this.all().filter(Process.isMathProcess);\n\t\t}\n\t\treturn this.mathProcesses;\n\t},\n\tisMath(process) {\n\t\tif (process instanceof ProcessGraph) {\n\t\t\tprocess = process.process;\n\t\t}\n\t\tif (!Utils.isObject(process) || Utils.size(process.process_graph) === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet mathProcessIds = this.getMathProcesses().map(p => p.id)\n\t\t\t.concat(Object.values(Formula.operatorMapping))\n\t\t\t.concat(Object.keys(Formula.arrayOperatorMapping))\n\t\t\t.concat(['array_element']);\n\t\tlet unsupportedFuncs = Object.values(process.process_graph).find(node => !mathProcessIds.includes(node.process_id));\n\t\treturn (typeof unsupportedFuncs === 'undefined');\n\t}\n};","import { SupportedFormat } from './format';\n\nclass BrowserImage extends SupportedFormat {\n\n\tconstructor(asset) {\n\t\tsuper(asset, 'ImageViewer', 'fa-image');\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tasync fetchData() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\timg.onerror = () => reject(new Error('Failed to load the image'));\n\t\t\timg.onload = () => resolve(img);\n\t\t\timg.fetchPriotity = 'high';\n\t\t\timg.decoding = 'sync';\n\t\t\timg.src = this.getUrl();\n\t\t});\n\t}\n\n}\n\nexport default BrowserImage;","import { SupportedFormat } from './format';\n\nclass NativeType extends SupportedFormat {\n\n\tconstructor(asset) {\n\t\tsuper(asset, \"DataViewer\");\n\t}\n\n}\n\nexport default NativeType;","import CSV from './csv';\n\nclass TSV extends CSV {\n\n\tconstructor(asset) {\n\t\tsuper(asset, [\"\\t\"]);\n\t}\n\n}\n\nexport default TSV;","import contentType from 'content-type';\n\nimport BrowserImage from '../formats/browserImage';\nimport CSV from '../formats/csv';\nimport GeoTIFF from '../formats/geotiff';\nimport JSON_ from '../formats/json';\nimport NativeType from './native';\nimport TSV from '../formats/tsv';\nimport { UnsupportedFormat } from './format';\n\nexport default class FormatRegistry {\n\n\tconstructor() {\n\t}\n\n\tcreateFilesFromSTAC(stac, resource = null) {\n\t\tlet files = Object.values(stac.assets)\n\t\t\t.filter(asset => !Array.isArray(asset.roles) || !asset.roles.includes(\"metadata\"))\n\t\t\t.map(asset => this.createFileFromAsset(asset, stac));\n\t\tif (resource) {\n\t\t\tfiles.forEach(file => file.setContext(resource));\n\t\t}\n\t\treturn files;\n\t}\n\n\tcreateFilesFromBlob(data) {\n\t\tif (!(data instanceof Blob)) {\n\t\t\tthrow new Error(\"Given data is not a valid Blob\");\n\t\t}\n\t\treturn this.createFilesFromSTAC({\n\t\t\tstac_version: \"1.0.0\",\n\t\t\ttype: \"Feature\",\n\t\t\tgeometry: null,\n\t\t\tproperties: {},\n\t\t\tlinks: [],\n\t\t\tassets: {\n\t\t\t\tresult: {\n\t\t\t\t\thref: URL.createObjectURL(data),\n\t\t\t\t\tblob: data,\n\t\t\t\t\ttype: data.type\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tcreateFileFromAsset(asset, stac) {\n\t\ttry {\n\t\t\t// Detect by media type\n\t\t\tif (typeof asset.type === 'string') {\n\t\t\t\tlet mime = contentType.parse(asset.type.toLowerCase());\n\t\t\t\tswitch(mime.type) {\n\t\t\t\t\tcase 'image/png':\n\t\t\t\t\tcase 'image/jpg':\n\t\t\t\t\tcase 'image/jpeg':\n\t\t\t\t\tcase 'image/gif':\n\t\t\t\t\tcase 'image/webp':\n\t\t\t\t\t\treturn new BrowserImage(asset);\n\t\t\t\t\tcase 'application/json':\n\t\t\t\t\tcase 'text/json':\n\t\t\t\t\tcase 'application/geo+json':\n\t\t\t\t\t\treturn new JSON_(asset);\n\t\t\t\t\tcase 'text/plain':\n\t\t\t\t\t\treturn new NativeType(asset);\n\t\t\t\t\tcase 'text/csv':\n\t\t\t\t\t\treturn new CSV(asset);\n\t\t\t\t\tcase 'text/tab-separated-values':\n\t\t\t\t\t\treturn new TSV(asset);\n\t\t\t\t\tcase 'image/tiff':\n\t\t\t\t\t\treturn new GeoTIFF(asset, stac);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Fallback: Detect by file extension\n\t\t\tif (typeof asset.href === 'string') {\n\t\t\t\tlet extension = asset.href.split(/[#?]/)[0].split('.').pop().trim().toLowerCase();\n\t\t\t\tswitch(extension) {\n\t\t\t\t\tcase 'png':\n\t\t\t\t\tcase 'jpg':\n\t\t\t\t\tcase 'jpeg':\n\t\t\t\t\tcase 'gif':\n\t\t\t\t\tcase 'webp':\n\t\t\t\t\t\treturn new BrowserImage(asset);\n\t\t\t\t\tcase 'json':\n\t\t\t\t\tcase 'geojson':\n\t\t\t\t\t\treturn new JSON_(asset);\n\t\t\t\t\tcase 'txt':\n\t\t\t\t\t\treturn new NativeType(asset);\n\t\t\t\t\tcase 'csv':\n\t\t\t\t\t\treturn new CSV(asset);\n\t\t\t\t\tcase 'tsv':\n\t\t\t\t\t\treturn new TSV(asset);\n\t\t\t\t\tcase 'tif':\n\t\t\t\t\tcase 'tiff':\n\t\t\t\t\t\treturn new GeoTIFF(asset, stac);\n\t\t\t\t}\n\t\t\t}\n\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\treturn new UnsupportedFormat(asset);\n\t}\n\n}","import Vue from 'vue';\nimport Utils from '../utils';\nimport { Job, Service, UserProcess } from '@openeo/js-client';\nimport { ProcessGraph } from '@openeo/js-processgraphs';\nimport FormatRegistry from '../formats/formatRegistry.js';\nimport StacMigrate from '@radiantearth/stac-migrate';\n\nconst serverStorage = \"serverUrls\";\n\nconst getDefaultState = () => {\n\treturn {\n\t\tappMode: null,\n\t\tstoredServers: JSON.parse(localStorage.getItem(serverStorage) || \"[]\"),\n\t\tcontext: null,\n\t\tprocess: null,\n\t\tdiscoverySearchTerm: '',\n\t\thightestModalZIndex: 1000,\n\t\tepsgCodes: [],\n\t\tinitialProcess: null,\n\t\tinitialNode: null,\n\t\topenWizard: null,\n\t\topenWizardProps: {},\n\t\tcollectionPreview: null,\n\t\tviewerOptions: {},\n\t\tmodelDnD: null,\n\t\tformatRegistry: new FormatRegistry(),\n\t};\n};\n\nexport default {\n\tnamespaced: true,\n\tstate: getDefaultState(),\n\tgetters: {\n\t\thasProcess: state => Utils.isObject(state.process) && Utils.size(state.process) > 0 && Utils.size(state.process.process_graph),\n\t\tgetModelNodeFromDnD: (state, getters, rootState, rootGetters) => () => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (!state.modelDnD) {\n\t\t\t\t\tresolve(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst getterFn = () => {\n\t\t\t\t\tswitch(state.modelDnD.type) {\n\t\t\t\t\t\tcase 'collection':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'load_collection',\n\t\t\t\t\t\t\t\targuments: rootGetters.collectionDefaults(state.modelDnD.data.id)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'process':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: state.modelDnD.data.id,\n\t\t\t\t\t\t\t\tnamespace: state.modelDnD.data.namespace,\n\t\t\t\t\t\t\t\targuments: {}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'udf':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'run_udf',\n\t\t\t\t\t\t\t\targuments: state.modelDnD.data\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'fileformat':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'save_result',\n\t\t\t\t\t\t\t\targuments: {format: state.modelDnD.data.name, options: {}}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (state.modelDnD.loading) {\n\t\t\t\t\tlet id = setInterval(() => {\n\t\t\t\t\t\tif (!state.modelDnD || state.modelDnD.loading) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearInterval(id);\n\t\t\t\t\t\tresolve(getterFn());\n\t\t\t\t\t}, 50);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(getterFn());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tactions: {\n\t\tasync loadEpsgCodes(cx) {\n\t\t\tif (cx.state.epsgCodes.length === 0) {\n\t\t\t\tlet res = await import('../assets/epsg-names.json');\n\t\t\t\tcx.commit('epsgCodes', res.default);\n\t\t\t}\n\t\t},\n\t\tasync loadInitialProcess(cx) {\n\t\t\tif (cx.state.process) {\n\t\t\t\treturn; // Process already loaded (usually during a later login)\n\t\t\t}\n\t\t\tif (Utils.isUrl(cx.state.initialProcess)) {\n\t\t\t\tlet response = await Utils.axios().get(cx.state.initialProcess);\n\t\t\t\tif (Utils.isObject(response.data)) {\n\t\t\t\t\tvar pg = new ProcessGraph(response.data);\n\t\t\t\t\tpg.parse();\n\t\t\t\t\tcx.commit('setProcess', response.data);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof cx.state.initialProcess === 'string' && cx.state.initialProcess.length > 0) {\n\t\t\t\tlet [id, namespace] = Utils.extractUDPParams(cx.state.initialProcess);\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('loadProcess', {id, namespace}, {root: true});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn(error);\n\t\t\t\t}\n\t\t\t\tcx.commit('setProcess', {\n\t\t\t\t\tprocess_graph: {\n\t\t\t\t\t\t[id]: {\n\t\t\t\t\t\t\tprocess_id: id,\n\t\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\t\tresult: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync loadForAppMode(cx) {\n\t\t\tif (!cx.state.appMode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (cx.state.appMode.resultType !== 'service') {\n\t\t\t\ttry {\n\t\t\t\t\tlet response = await Utils.axios().get(cx.state.appMode.resultUrl);\n\t\t\t\t\tif (Utils.isObject(response.data)) {\n\t\t\t\t\t\tcx.commit('setAppModeData', response.data);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthrow new Error(\"Sorry, the shared data is not available anymore!\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmutations: {\n\t\tsetModelDnD(state, obj = null) {\n\t\t\tstate.modelDnD = obj;\n\t\t},\n\t\tsetDiscoverySearchTerm(state, searchTerm) {\n\t\t\tstate.discoverySearchTerm = typeof searchTerm === 'string' ? searchTerm : '';\n\t\t},\n\t\tsetInitialProcess(state, process) {\n\t\t\tstate.initialProcess = process;\n\t\t},\n\t\tsetInitialNode(state, node) {\n\t\t\tstate.initialNode = node;\n\t\t},\n\t\tsetAppMode(state, appMode) {\n\t\t\tstate.appMode = {\n\t\t\t\t...appMode,\n\t\t\t\ttitle: 'Results',\n\t\t\t\tdata: null,\n\t\t\t\texpires: null\n\t\t\t};\n\t\t},\n\t\tsetAppModeData(state, data) {\n\t\t\tif (data.type) {\n\t\t\t\tdata = StacMigrate.stac(data, false);\n\t\t\t}\n\n\t\t\tVue.set(state.appMode, 'data', data);\n\n\t\t\tlet process, title, expires;\n\t\t\tif (data.type === 'Collection') {\n\t\t\t\tprocess = Utils.getProcessingExpression(data) || Utils.getProcessingExpression(data.summaries);\n\t\t\t\ttitle = data.title;\n\t\t\t\texpires = data.expires;\n\t\t\t}\n\t\t\telse if (data.type === 'Feature') {\n\t\t\t\tprocess = Utils.getProcessingExpression(data.properties);\n\t\t\t\ttitle = data.properties?.title;\n\t\t\t\texpires = data.properties?.expires;\n\t\t\t}\n\t\t\tif (process) {\n\t\t\t\tstate.process = process;\n\t\t\t}\n\t\t\tif (title) {\n\t\t\t\tVue.set(state.appMode, 'title', title);\n\t\t\t\tVue.set(state.appMode, 'expires', expires);\n\t\t\t\tstate.context = title;\n\t\t\t}\n\t\t},\n\t\tsetViewerOptions(state, options) {\n\t\t\tstate.viewerOptions = options || {};\n\t\t},\n\t\tsetOpenWizard(state, {component, options}) {\n\t\t\tstate.openWizard = component;\n\t\t\tif (component) {\n\t\t\t\tstate.openWizardProps = options;\n\t\t\t}\n\t\t},\n\t\tsetCollectionPreview(state, collectionID) {\n\t\t\tstate.collectionPreview = collectionID;\n\t\t\tif (!state.discoverySearchTerm) {\n\t\t\t\tstate.discoverySearchTerm = typeof collectionID === 'string' ? collectionID : '';\n\t\t\t}\n\t\t},\n\t\topenModal(state) {\n\t\t\tstate.hightestModalZIndex = state.hightestModalZIndex + 1;\n\t\t},\n\t\tcloseModal(state) {\n\t\t\tstate.hightestModalZIndex = state.hightestModalZIndex - 1;\n\t\t},\n\t\taddServer(state, url) {\n\t\t\tif (state.storedServers.indexOf(url) === -1) {\n\t\t\t\tstate.storedServers.push(url);\n\t\t\t}\n\t\t\tlocalStorage.setItem(serverStorage, JSON.stringify(state.storedServers));\n\t\t},\n\t\tremoveServer(state, url) {\n\t\t\tstate.storedServers.splice(state.storedServers.indexOf(url), 1);\n\t\t\tlocalStorage.setItem(serverStorage, JSON.stringify(state.storedServers));\n\t\t},\n\t\tsetContext(state, obj) {\n\t\t\tstate.context = obj;\n\t\t\tif (obj instanceof Job || obj instanceof Service) {\n\t\t\t\tstate.process = obj.process;\n\t\t\t}\n\t\t\telse if (obj instanceof UserProcess) {\n\t\t\t\tstate.process = obj.toJSON();\n\t\t\t}\n\t\t\telse if (Utils.isObject(obj) && obj.process) {\n\t\t\t\tstate.process = obj.process;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstate.process = obj;\n\t\t\t}\n\t\t},\n\t\tsetProcess(state, process) {\n\t\t\tstate.process = process;\n\t\t},\n\t\tepsgCodes(state, epsgCodes) {\n\t\t\tstate.epsgCodes = epsgCodes;\n\t\t},\n\t\treset(state) {\n\t\t\tObject.assign(state, getDefaultState());\n\t\t}\n\t}\n};\n","import { UserProcess } from '@openeo/js-client';\nimport { Utils } from '@openeo/js-commons';\nimport Vue from 'vue';\n\nexport default ({namespace, listFn, paginateFn, createFn, updateFn, deleteFn, readFn, readFnById, customizations, primaryKey}) => {\n\tif (!primaryKey) {\n\t\tprimaryKey = 'id';\n\t}\n\tconst getDefaultState = () => {\n\t\treturn {\n\t\t\tpages: null,\n\t\t\thasMore: false,\n\t\t\t[namespace]: []\n\t\t};\n\t};\n\tlet definition = {\n\t\tnamespaced: true,\n\t\tstate: getDefaultState(),\n\t\tgetters: {\n\t\t\tsupportsList: (state, getters, rootState, rootGetters) => rootGetters.supports(listFn),\n\t\t\tsupportsCreate: (state, getters, rootState, rootGetters) => rootGetters.supports(createFn),\n\t\t\tsupportsUpdate: (state, getters, rootState, rootGetters) => rootGetters.supports(updateFn),\n\t\t\tsupportsDelete: (state, getters, rootState, rootGetters) => rootGetters.supports(deleteFn),\n\t\t\tsupportsRead: (state, getters, rootState, rootGetters) => rootGetters.supports(readFn),\n\t\t\tgetById: (state) => (id) => {\n\t\t\t\tlet data = state[namespace].find(x => x[primaryKey] === id);\n\t\t\t\treturn typeof data !== 'undefined' ? data : null;\n\t\t\t}\n\t\t},\n\t\tactions: {\n\t\t\tasync create(cx, parameters) {\n\t\t\t\tif (cx.getters.supportsCreate) {\n\t\t\t\t\tlet connection = cx.rootState.connection;\n\t\t\t\t\tlet data = await connection[createFn].apply(connection, parameters);\n\t\t\t\t\tcx.commit('upsert', data);\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Adding is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync delete(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsDelete) {\n\t\t\t\t\tawait data[deleteFn]();\n\t\t\t\t\tcx.commit('delete', data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Deleting is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync update(cx, {data, parameters}) {\n\t\t\t\tif (cx.getters.supportsUpdate) {\n\t\t\t\t\tlet updated = await data[updateFn](parameters);\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Updating is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync read(cx, {data}) {\n\t\t\t\tlet updated = null;\n\t\t\t\tif (!(data instanceof UserProcess)) {\n\t\t\t\t\tlet id = Utils.isObject(data) ? data[primaryKey] : data;\n\t\t\t\t\t// Try to get UserProcess from store\n\t\t\t\t\tdata = cx.getters.getById(id);\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\t// Try to load UserProcess from Connection\n\t\t\t\t\t\tupdated = await cx.rootState.connection[readFnById](data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!updated) {\n\t\t\t\t\t// Try to update UserProcess\n\t\t\t\t\tupdated = await data[readFn]();\n\t\t\t\t}\n\t\t\t\t// Update or insert, depending on previous state\n\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t\tasync list(cx) {\n\t\t\t\tconst count = cx.state[namespace].length;\n\t\t\t\tif (cx.getters.supportsList) {\n\t\t\t\t\t// Pass over existing data so that it can be updated (for all complete entities, only update fields that exist in the new object)\n\t\t\t\t\t// instead of getting replaced, see https://github.com/Open-EO/openeo-web-editor/issues/234\n\t\t\t\t\tlet pageLimit = Math.max(cx.rootState.pageLimit, count);\n\t\t\t\t\tif (paginateFn) {\n\t\t\t\t\t\tconst pages = cx.rootState.connection[paginateFn](pageLimit, cx.state[namespace]);\n\t\t\t\t\t\tconst data = await pages.nextPage();\n\t\t\t\t\t\tcx.commit('reset'); // Keep close to the update to avoid flickering\n\t\t\t\t\t\tcx.commit('pages', pages);\n\t\t\t\t\t\tcx.commit('data', data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst data = await cx.rootState.connection[listFn](cx.state[namespace]);\n\t\t\t\t\t\tcx.commit('reset'); // Keep close to the update to avoid flickering\n\t\t\t\t\t\tcx.commit('data', data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn cx.state[namespace];\n\t\t\t},\n\t\t\tasync nextPage(cx) {\n\t\t\t\tif (!cx.state.pages || !cx.state.hasMore) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcx.commit('data', await cx.state.pages.nextPage());\n\t\t\t\treturn cx.state[namespace];\n\t\t\t}\n\t\t},\n\t\tmutations: {\n\t\t\tdata(state, data) {\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\tfor (let d of data) {\n\t\t\t\t\t\tstate[namespace].push(d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.hasMore = state.pages ? state.pages.hasNextPage() : false;\n\t\t\t},\n\t\t\tpages(state, pages) {\n\t\t\t\tstate.pages = pages;\n\t\t\t},\n\t\t\tupsert(state, data) {\n\t\t\t\tlet id = data[primaryKey];\n\t\t\t\tlet index = state[namespace].findIndex(x => x[primaryKey] === id);\n\t\t\t\tlet observableData = Vue.observable(data);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tVue.set(state[namespace], index, observableData);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstate[namespace].push(observableData);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete(state, data) {\n\t\t\t\tlet id = data[primaryKey];\n\t\t\t\tlet index = state[namespace].findIndex(x => x[primaryKey] === id);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tVue.delete(state[namespace], index);\n\t\t\t\t}\n\t\t\t},\n\t\t\treset(state) {\n\t\t\t\tObject.assign(state, getDefaultState());\n\t\t\t}\n\t\t}\n\t};\n\t// Override with custom definitions\n\tfor(let key in customizations) {\n\t\tObject.assign(definition[key], customizations[key]);\n\t}\n\treturn definition;\n};","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'files',\n\tlistFn: 'listFiles',\n\tpaginateFn: 'paginateFiles',\n\tcreateFn: 'uploadFile',\n\tupdateFn: 'uploadFile',\n\tdeleteFn: 'deleteFile',\n\treadFn: 'downloadFile',\n\treadFnById: 'getFile',\n\tprimaryKey: 'path',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'jobs',\n\tlistFn: 'listJobs',\n\tpaginateFn: 'paginateJobs',\n\tcreateFn: 'createJob',\n\tupdateFn: 'updateJob',\n\tdeleteFn: 'deleteJob',\n\treadFn: 'describeJob',\n\treadFnById: 'getJob',\n\tcustomizations: {\n\t\tgetters: {\n\t\t\tsupportsQueue: (state, getters, rootState, rootGetters) => rootGetters.supports('startJob'),\n\t\t\tsupportsCancel: (state, getters, rootState, rootGetters) => rootGetters.supports('stopJob')\n\t\t},\n\t\tactions: {\n\t\t\tasync queue(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsQueue) {\n\t\t\t\t\tlet updated = await data.startJob();\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Queueing a batch job is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync cancel(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsCancel) {\n\t\t\t\t\tlet updated = await data.stopJob();\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Canceling a batch job is not supported by the server.\");\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'services',\n\tlistFn: 'listServices',\n\tpaginateFn: 'paginateServices',\n\tcreateFn: 'createService',\n\tupdateFn: 'updateService',\n\tdeleteFn: 'deleteService',\n\treadFn: 'describeService',\n\treadFnById: 'getService',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\nimport Utils from '../utils';\n\nexport default storeFactory({\n\tnamespace: 'userProcesses',\n\tlistFn: 'listUserProcesses',\n\tpaginateFn: null,\n\tcreateFn: 'setUserProcess',\n\tupdateFn: 'replaceUserProcess',\n\tdeleteFn: 'deleteUserProcess',\n\treadFn: 'describeUserProcess',\n\treadFnById: 'getUserProcess',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t\tdata(state, data) {\n\t\t\t\tstate.userProcesses = data\n\t\t\t\t\t.map(p => Object.assign(p, {namespace: 'user'}))\n\t\t\t\t\t.filter(p => (typeof p.id === 'string'))\n\t\t\t\t\t.sort(Utils.sortById);\n\t\t\t}\n\t\t}\n\t}\n});","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport { OpenEO, FileTypes, Formula } from '@openeo/js-client';\nimport { ProcessRegistry } from '@openeo/js-commons';\nimport StacMigrate from '@radiantearth/stac-migrate';\nimport Utils from '../utils.js';\nimport ProcessRegistryExtension from '../registryExtension.js';\nimport Config from '../../config';\n// Sub-modules\nimport editor from './editor';\nimport files from './files';\nimport jobs from './jobs';\nimport services from './services';\nimport userProcesses from './userProcesses';\n\nVue.use(Vuex);\n\nFormula.arrayOperatorMapping = {\n\t'product': '*',\n\t'sum': '+'\n};\nFormula.reverseOperatorMapping = (() => {\n\tconst mapping = {};\n\tfor(const op in Formula.operatorMapping) {\n\t\tmapping[Formula.operatorMapping[op]] = op;\n\t}\n\treturn Object.assign(mapping, Formula.arrayOperatorMapping);\n})();\n\nconst getDefaultState = () => {\n\treturn {\n\t\tconnection: null,\n\t\tactiveRequests: 0,\n\t\tdiscoveryCompleted: false,\n\t\tisAuthenticated: false,\n\t\tuserInfo: {},\n\t\tconnectionError: null,\n\t\tbeforeLogoutListener: {},\n\t\tauthProviders: [],\n\t\tfileFormats: {},\n\t\tserviceTypes: {},\n\t\tudfRuntimes: {},\n\t\tprocessesUpdated: 0,\n\t\tcollections: [],\n\t\tprocessNamespaces: Config.processNamespaces || [],\n\t\tpageLimit: Config.pageLimit,\n\t};\n};\n\nexport default new Vuex.Store({\n//\tstrict: true, // Can't enable, js-client gets mutated externally\n\tmodules: {\n\t\teditor,\n\t\tfiles,\n\t\tjobs,\n\t\tservices,\n\t\tuserProcesses\n\t},\n\tstate: getDefaultState(),\n\tgetters: {\n\t\ttitle: (state) => {\n\t\t\tif (state.connection !== null && state.connection.capabilities() !== null) {\n\t\t\t\tconst title = state.connection.capabilities().title();\n\t\t\t\treturn title ? title : state.connection.getUrl();\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tcapabilities: (state) => state.connection !== null ? state.connection.capabilities() : null,\n\t\tsupports: (state) => (feature) => state.connection !== null && state.connection.capabilities() !== null && state.connection.capabilities().hasFeature(feature),\n\t\tcurrency: (state) => {\n\t\t\tlet currency = '';\n\t\t\tif (state.connection && state.connection.capabilities().currency() !== null) {\n\t\t\t\tcurrency = state.connection.capabilities().currency();\n\t\t\t}\n\t\t\treturn currency;\n\t\t},\n\t\tisConnected: (state) => state.connection !== null && state.connection.capabilities() !== null,\n\t\tisDiscovered: (state) => state.connection !== null && state.discoveryCompleted,\n\t\tsupportsBilling: (state) => state.connection !== null && state.connection.capabilities().currency() !== null,\n\t\tsupportsBillingPlans: (state) => state.connection !== null && state.connection.capabilities().currency() !== null && state.connection.capabilities().listPlans().length > 0,\n\t\tapiVersion: (state) => state.connection !== null ? state.connection.capabilities().apiVersion() : null,\n\t\tfileFormats: (state) => state.fileFormats instanceof FileTypes ? state.fileFormats.toJSON() : {input: {}, output: {}},\n\t\tcollectionDefaults: (state) => (id) => {\n\t\t\tconst collection = state.collections.find(c => c.id === id);\n\t\t\tif (!Utils.isObject(collection)) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tlet spatial_extent = null;\n\t\t\ttry {\n\t\t\t\tspatial_extent = Utils.extentToBBox(collection.extent.spatial.bbox[0]);\n\t\t\t} catch (error) {}\n\n\t\t\tlet temporal_extent = null;\n\t\t\ttry {\n\t\t\t\ttemporal_extent = collection.extent.temporal.interval[0];\n\t\t\t\tif (temporal_extent[0] === null && temporal_extent[1] === null) {\n\t\t\t\t\ttemporal_extent = null;\n\t\t\t\t}\n\t\t\t\telse if (temporal_extent[0] == temporal_extent[1]) {\n\t\t\t\t\ttemporal_extent[1] = null;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\t\n\t\t\tlet bands = null;\n\t\t\treturn {id, spatial_extent, temporal_extent, bands};\n\t\t},\n\t\tprocesses: (state) => {\n\t\t\tlet registry\n\t\t\tif (state.processesUpdated && state.connection !== null) {\n\t\t\t\tregistry = state.connection.processes;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tregistry = new ProcessRegistry();\n\t\t\t}\n\t\t\treturn Object.assign(registry, ProcessRegistryExtension);\n\t\t},\n\t\tsupportsMath: (state, getters) => {\n\t\t\tif (!state.processesUpdated) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor(let i in Formula.operatorMapping) {\n\t\t\t\tlet processId = Formula.operatorMapping[i];\n\t\t\t\tif (!getters.processes.has(processId)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\tactions: {\n\t\tasync connect(cx, url) {\n\t\t\tawait cx.dispatch('logout');\n\n\t\t\t// Connect and request capabilities\n\t\t\tlet connection = null;\n\t\t\ttry {\n\t\t\t\tconnection = await OpenEO.connect(url, {addNamespaceToProcess: true});\n\t\t\t} catch (error) {\n\t\t\t\tif(error.message == 'Network Error' || error.name == 'NetworkError') {\n\t\t\t\t\terror = new Error(\"Server is not available.\");\n\t\t\t\t}\n\t\t\t\tcx.commit('setConnectionError', error);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Request auth provider list\n\t\t\ttry {\n\t\t\t\tconst providers = await connection.listAuthProviders();\n\t\t\t\tcx.commit('authProviders', providers);\n\t\t\t} catch (error) {\n\t\t\t\tcx.commit('setConnectionError', error);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconnection.on('authProviderChanged', async (provider) => {\n\t\t\t\tcx.commit('authenticated', provider !== null);\n\t\t\t\tif (cx.state.discoveryCompleted) {\n\t\t\t\t\tawait cx.dispatch('discover', true);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconnection.on('processesChanged', () => cx.commit('updateProcesses'));\n\n\t\t\t// Only commit the connection change after requesting the auth providers\n\t\t\t// as this indicates that the connection procedure has finished.\n\t\t\tcx.commit('connection', connection);\n\n\t\t\treturn true;\n\t\t},\n\n\t\tasync discover(cx, refresh = false) {\n\t\t\tlet promises = [];\n\t\t\tlet errors = [];\n\t\t\tlet capabilities = cx.state.connection.capabilities();\n\n\t\t\t// Request collections\n\t\t\tif (capabilities.hasFeature('listCollections')) {\n\t\t\t\tpromises.push(cx.state.connection.listCollections()\n\t\t\t\t\t.then(response => cx.commit('collections', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\t\t\telse {\n\t\t\t\terrors.push(new Error(\"Collections not supported by the server.\"));\n\t\t\t}\n\n\t\t\tif (!refresh) { // Only load on first discovery, otherwise the JS client already refreshes the data\n\t\t\t\t// Request processes\n\t\t\t\tif (capabilities.hasFeature('listProcesses')) {\n\t\t\t\t\tpromises.push(cx.state.connection.listProcesses()\n\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\terrors.push(new Error(\"Pre-defined processes not supported by the server.\"));\n\t\t\t\t}\n\n\t\t\t\t// Request processes from namespaces\n\t\t\t\tif (cx.state.processNamespaces.length > 0) {\n\t\t\t\t\tfor(let namespace of cx.state.processNamespaces) {\n\t\t\t\t\t\tpromises.push(cx.state.connection.listProcesses(namespace)\n\t\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Request custom processes\n\t\t\t\tif (capabilities.hasFeature('listUserProcesses') && cx.state.connection.isAuthenticated()) {\n\t\t\t\t\tpromises.push(cx.dispatch('userProcesses/list')\n\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Request supported output formats\n\t\t\tif (capabilities.hasFeature('listFileTypes')) {\n\t\t\t\tpromises.push(cx.state.connection.listFileTypes()\n\t\t\t\t\t.then(response => cx.commit('fileFormats', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request supported service types\n\t\t\tif (capabilities.hasFeature('listServiceTypes')) {\n\t\t\t\tpromises.push(cx.state.connection.listServiceTypes()\n\t\t\t\t\t.then(response => cx.commit('serviceTypes', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request supported UDF runtimes\n\t\t\tif (capabilities.hasFeature('listUdfRuntimes')) {\n\t\t\t\tpromises.push(cx.state.connection.listUdfRuntimes()\n\t\t\t\t\t.then(response => cx.commit('udfRuntimes', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request user account information\n\t\t\tconst promise = cx.dispatch('describeAccount')\n\t\t\t\t.catch(error => errors.push(error));\n\t\t\tpromises.push(promise);\n\n\t\t\tawait Promise.all(promises);\n\n\t\t\t// Request initial process\n\t\t\tif (!refresh) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('editor/loadInitialProcess');\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Request results for app mode\n\t\t\tif (!refresh) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('editor/loadForAppMode');\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcx.commit('discoveryCompleted');\n\t\t\treturn errors;\n\t\t},\n\n\t\t// Request user account info\n\t\tasync describeAccount(cx) {\n\t\t\tif (cx.getters.supports('describeAccount') && cx.state.isAuthenticated) {\n\t\t\t\tconst response = await cx.state.connection.describeAccount();\n\t\t\t\tcx.commit('userInfo', response);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcx.commit('userInfo');\n\t\t\t}\n\t\t},\n\n\t\tasync describeCollection(cx, id) {\n\t\t\tlet collection = cx.state.collections.find(c => c.id === id);\n\t\t\tif (!collection || !collection._loaded) {\n\t\t\t\tcollection = await cx.state.connection.describeCollection(id);\n\t\t\t\tcollection = StacMigrate.collection(collection, false);\n\t\t\t\tcx.commit('fillCollection', collection);\n\t\t\t}\n\t\t\treturn collection;\n\t\t},\n\n\t\tasync loadProcess(cx, {id, namespace}) {\n\t\t\tconst process = cx.getters.processes.get(id, namespace);\n\t\t\tif (!Utils.isObject(process)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (process.namespace !== 'backend') {\n\t\t\t\tif (process.namespace === 'user') {\n\t\t\t\t\tawait cx.dispatch('userProcesses/read', {data: process});\n\t\t\t\t}\n\t\t\t\telse if (process.namespace && namespace !== 'backend') {\n\t\t\t\t\tawait cx.state.connection.describeProcess(id, process.namespace);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cx.getters.processes.get(id, namespace);\n\t\t},\n\n\t\tasync beforeLogout(cx) {\n\t\t\tawait Promise.all(Object.values(cx.state.beforeLogoutListener).map(listener => listener()));\n\t\t},\n\n\t\tasync logout(cx, disconnect = false) {\n\t\t\tawait cx.dispatch('beforeLogout');\n\n\t\t\tif (disconnect) {\n\t\t\t\t// Remove listeners, we don't need them anymore if we connect anyway\n\t\t\t\tcx.state.connection.off('authProviderChanged');\n\t\t\t\tcx.state.connection.off('processesChanged');\n\t\t\t}\n\n\t\t\tif (cx.state.isAuthenticated) {\n\t\t\t\t// Logout (mostly for OIDC)\n\t\t\t\tconst authProvider = cx.state.connection.getAuthProvider();\n\t\t\t\tif (authProvider !== null) {\n\t\t\t\t\tawait authProvider.logout();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disconnect) {\n\t\t\t\t// Reset values\n\t\t\t\tcx.commit('reset', this.isAuthenticated);\n\t\t\t\tcx.commit('jobs/reset');\n\t\t\t\tcx.commit('files/reset');\n\t\t\t\tcx.commit('services/reset');\n\t\t\t\tcx.commit('userProcesses/reset');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcx.commit('authenticated', false);\n\t\t\t}\n\t\t}\n\t},\n\tmutations: {\n\t\tdiscoveryCompleted(state, completed = true) {\n\t\t\tstate.discoveryCompleted = completed;\n\t\t},\n\t\tconnection(state, connection) {\n\t\t\tstate.connection = connection;\n\t\t},\n\t\tauthProviders(state, authProviders) {\n\t\t\tstate.authProviders = authProviders;\n\t\t},\n\t\tuserInfo(state, info) {\n\t\t\tstate.userInfo = Utils.isObject(info) ? info : {};\n\t\t},\n\t\tfileFormats(state, fileFormats) {\n\t\t\tstate.fileFormats = fileFormats;\n\t\t},\n\t\tserviceTypes(state, serviceTypes) {\n\t\t\t// Make keys uppercase for simplicity\n\t\t\tif (Utils.isObject(serviceTypes)) {\n\t\t\t\tconst obj = {};\n\t\t\t\tfor(const key in serviceTypes) {\n\t\t\t\t\tobj[key.toUpperCase()] = serviceTypes[key];\n\t\t\t\t}\n\t\t\t\tstate.serviceTypes = obj;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstate.serviceTypes = serviceTypes;\n\t\t\t}\n\t\t},\n\t\tudfRuntimes(state, udfRuntimes) {\n\t\t\tstate.udfRuntimes = udfRuntimes;\n\t\t},\n\t\tupdateProcesses(state) {\n\t\t\tstate.processesUpdated++;\n\t\t},\n\t\taddProcessNamespacesToRequest(state, namespaces) {\n\t\t\tif (typeof namespaces === 'string') {\n\t\t\t\tnamespaces = namespaces.split(',');\n\t\t\t}\n\t\t\tif (!Array.isArray(namespaces)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor(let namespace of namespaces) {\n\t\t\t\tif (namespace && !state.processNamespaces.includes(namespace)) {\n\t\t\t\t\tstate.processNamespaces.push(namespace);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfillCollection(state, data) {\n\t\t\tlet index = state.collections.findIndex(c => c.id === data.id);\n\t\t\tif (index !== -1) {\n\t\t\t\tdata._loaded = true;\n\t\t\t\tVue.set(state.collections, index, data);\n\t\t\t}\n\t\t},\n\t\tcollections(state, data) {\n\t\t\tstate.collections = data.collections\n\t\t\t\t.map(c => StacMigrate.collection(c, false))\n\t\t\t\t.filter(c => (typeof c.id === 'string'))\n\t\t\t\t.sort(Utils.sortById);\n\t\t},\n\t\tsetConnectionError(state, error) {\n\t\t\tstate.connectionError = error;\n\t\t},\n\t\tauthenticated(state, isAuthenticated) {\n\t\t\tstate.isAuthenticated = isAuthenticated;\n\t\t\tif (!isAuthenticated) {\n\t\t\t\tstate.userInfo = {};\n\t\t\t}\n\t\t},\n\t\treset(state, keepConnection = false) {\n\t\t\tObject.assign(state, getDefaultState(), {\n\t\t\t\tconnection: keepConnection ? state.connection : null\n\t\t\t});\n\t\t},\n\t\tstartActiveRequest(state) {\n\t\t\tstate.activeRequests += 1;\n\t\t},\n\t\tendActiveRequest(state) {\n\t\t\tstate.activeRequests -= 1;\n\t\t},\n\t\tbeforeLogoutListener(state, {key, listener}) {\n\t\t\tif (typeof listener === 'function') {\n\t\t\t\tstate.beforeLogoutListener[key] = listener;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVue.delete(state.beforeLogoutListener, key);\n\t\t\t}\n\t\t}\n\t}\n});","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"container\",class:{connecting: !_vm.isDiscovered}},[_c('transition',{attrs:{\"name\":\"connect-fade\",\"mode\":\"out-in\"}},[(!_vm.isDiscovered)?_c('ConnectForm',{key:\"1\",attrs:{\"skipLogin\":_vm.skipLogin}}):_c('IDE',{key:\"2\"})],1),_vm._l((_vm.modals),function(modal){return [_c(modal.component,_vm._g(_vm._b({key:modal.id,tag:\"component\",on:{\"closed\":function($event){return _vm.hideModal(modal)}}},'component',modal.props,false),modal.events))]}),_c('vue-snotify'),(_vm.tourType)?_c('Tour',{model:{value:(_vm.tourType),callback:function ($$v) {_vm.tourType=$$v},expression:\"tourType\"}}):_vm._e(),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.activeRequests > 0),expression:\"activeRequests > 0\"}],attrs:{\"id\":\"activeRequests\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-2x\"})])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"connectPage\"},[_c('Logo'),_c('div',{staticClass:\"connectContainer\"},[_c('div',{staticClass:\"helpBtn\",attrs:{\"title\":\"Show help\"},on:{\"click\":_vm.showHelp}},[_c('i',{staticClass:\"fas fa-question fa-fw\"}),_vm._v(\" Help\")]),(_vm.httpsUrl)?_c('div',{staticClass:\"message error\"},[_c('i',{staticClass:\"fas fa-shield-alt\"}),_c('span',[_vm._v(\"You are using an \"),_c('strong',[_vm._v(\"insecure\")]),_vm._v(\" HTTP connection, which is not encrypted. Please use HTTPS if possible.\"),_c('br'),_c('a',{attrs:{\"href\":_vm.httpsUrl}},[_vm._v(\"Click here to switch to a secured HTTPS connection.\")])])]):_vm._e(),(_vm.message)?_c('div',{staticClass:\"message warning\"},[_c('i',{staticClass:\"fas fa-bullhorn\"}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.message)}})]):_vm._e(),_c('transition',{attrs:{\"name\":\"connect-fade\",\"mode\":\"out-in\"},on:{\"before-enter\":_vm.initProviders}},[(_vm.showConnectForm)?_c('form',{staticClass:\"connect\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submitForm.apply(null, arguments)}}},[_c('h3',[_vm._v(\"Connect to server\")]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"serverUrl\"}},[_vm._v(\"URL:\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.trim\",value:(_vm.serverUrl),expression:\"serverUrl\",modifiers:{\"lazy\":true,\"trim\":true}}],staticClass:\"tour-connect-url\",attrs:{\"type\":\"text\",\"id\":\"serverUrl\",\"disabled\":_vm.autoConnect},domProps:{\"value\":(_vm.serverUrl)},on:{\"change\":function($event){_vm.serverUrl=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}}),(_vm.allowOtherServers)?_c('button',{staticClass:\"tour-connect-history\",attrs:{\"type\":\"button\",\"title\":\"Select previously used server\"},on:{\"click\":_vm.showServerSelector}},[_c('i',{staticClass:\"fas fa-book\"})]):_vm._e()])]),_c('div',{staticClass:\"row\"},[_c('button',{staticClass:\"connectBtn tour-connect-retry\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_vm._v(\" Connect\")])])]):(_vm.showLoginForm)?_c('div',{staticClass:\"login\"},[_c('h3',[_vm._v(\"Log in to \"+_vm._s(_vm.title))]),_c('Tabs',{ref:\"providers\",attrs:{\"id\":\"credentials\",\"pills\":true,\"pillsMultiline\":true},on:{\"selected\":_vm.providerSelected},scopedSlots:_vm._u([{key:\"dynamic\",fn:function({ tab }){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery(tab.data)}}},[(tab.data.description)?_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(_vm._s(tab.data.description))])]):_vm._e(),(!_vm.hasPredefinedOidcClientId)?[_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Client ID:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.userOidcClientId),expression:\"userOidcClientId\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"type\":\"text\",\"required\":\"required\"},domProps:{\"value\":(_vm.userOidcClientId)},on:{\"input\":function($event){if($event.target.composing)return;_vm.userOidcClientId=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-exclamation-circle\"}),_c('span',[_vm._v(\"You need to specify the \"),_c('em',[_vm._v(\"Client ID\")]),_vm._v(\" provided to you by the provider. You need to allow the \"),_c('a',{attrs:{\"href\":_vm.oidcRedirectUrl,\"target\":\"_blank\",\"title\":_vm.oidcRedirectUrl}},[_vm._v(\"URL of this service\")]),_vm._v(\" as redirect URL with the authentication service.\")])])]:_vm._e(),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-window-restore\"}),_c('span',[_vm._v(\"Clicking the button below may open a new window for login.\")])]),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_c('i',{staticClass:\"fab fa-openid\"}),_vm._v(\" Log in with \"+_vm._s(tab.name))])],1)],2)]}},(_vm.basicProvider)?{key:\"basic\",fn:function({ tab }){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery(tab.data)}}},[_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(\"The \"),_c('tt',[_vm._v(\"HTTP Basic\")]),_vm._v(\" authentication method is mostly used for development and testing purposes.\")],1)]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"username\"}},[_vm._v(\"Username:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.username),expression:\"username\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"id\":\"username\",\"type\":\"text\",\"required\":\"required\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing)return;_vm.username=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Password:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.password),expression:\"password\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"id\":\"password\",\"type\":\"password\",\"required\":\"required\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing)return;_vm.password=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_vm._v(\" Log in\")])],1)])]}}:null,{key:\"noauth\",fn:function(){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery()}}},[_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(\"Choose this if you don't have credentials for the service provider and just want to explore the service with its available data and processes. You may not be able to process any data.\")])]),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_c('i',{staticClass:\"fas fa-user-slash\"}),_vm._v(\" Proceed without logging in\")])],1)])]},proxy:true}],null,true)}),(_vm.allowOtherServers)?_c('div',{staticClass:\"switch tour-login-switch\"},[_c('a',{on:{\"click\":function($event){return _vm.switchServer()}}},[_vm._v(\"Switch server\")])]):_vm._e()],1):_vm._e()])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.show)?_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-check-circle\"}),(_vm.terms && _vm.privacy)?_c('span',[_vm._v(\"By clicking the button below, you agree to our \"),_c('a',{attrs:{\"href\":_vm.terms.href,\"title\":_vm.terms.title,\"target\":\"_blank\"}},[_vm._v(\"Terms of Service\")]),_vm._v(\" and that you have read our \"),_c('a',{attrs:{\"href\":_vm.privacy.href,\"title\":_vm.privacy.title,\"target\":\"_blank\"}},[_vm._v(\"Privacy Policy\")]),_vm._v(\".\")]):(_vm.terms)?_c('span',[_vm._v(\"By clicking the button below, you agree to our \"),_c('a',{attrs:{\"href\":_vm.terms.href,\"title\":_vm.terms.title,\"target\":\"_blank\"}},[_vm._v(\"Terms of Service\")]),_vm._v(\".\")]):(_vm.privacy)?_c('span',[_vm._v(\"By clicking the button below, you agree that you have read our \"),_c('a',{attrs:{\"href\":_vm.privacy.href,\"title\":_vm.privacy.title,\"target\":\"_blank\"}},[_vm._v(\"Privacy Policy\")]),_vm._v(\".\")]):_vm._e()]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TermsOfServiceConsent.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TermsOfServiceConsent.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TermsOfServiceConsent.vue?vue&type=template&id=52726e94\"\nimport script from \"./TermsOfServiceConsent.vue?vue&type=script&lang=js\"\nexport * from \"./TermsOfServiceConsent.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConnectForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConnectForm.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ConnectForm.vue?vue&type=template&id=714226be&scoped=true\"\nimport script from \"./ConnectForm.vue?vue&type=script&lang=js\"\nexport * from \"./ConnectForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./ConnectForm.vue?vue&type=style&index=0&id=714226be&prod&lang=scss&scoped=true\"\nimport style1 from \"./ConnectForm.vue?vue&type=style&index=1&id=714226be&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"714226be\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Page.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Page.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Page.vue?vue&type=template&id=5b68e2ee\"\nimport script from \"./Page.vue?vue&type=script&lang=js\"\nexport * from \"./Page.vue?vue&type=script&lang=js\"\nimport style0 from \"./Page.vue?vue&type=style&index=0&id=5b68e2ee&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export default {\n\n}","import Vue from 'vue';\nimport Snotify from 'vue-snotify';\nimport 'vue-snotify/styles/simple.css';\nimport store from './store/index';\nimport Config from '../config';\nimport Page from './Page.vue';\nimport filters from './filters';\nimport Clipboard from 'v-clipboard';\n\nVue.use(Snotify);\nVue.use(Clipboard);\n\n// Don't show too many repetitive error messages\nVue.prototype.$snotify.singleError = function () {\n\tlet message = arguments[0];\n\tif (message !== this.lastMessage) {\n\t\tthis.lastMessage = message;\n\t\tthis.error(...arguments);\n\t\tsetTimeout(() => this.lastMessage = null, 1000);\n\t}\n};\n\nVue.config.productionTip = false;\nVue.config.errorHandler = function (err, vm, info) {\n\tconsole.error(err, info);\n\tif (!vm || !vm.$snotify) {\n\t\treturn;\n\t}\n\n\tlet message;\n\tif (err instanceof Error) {\n\t\tmessage = err.message;\n\t}\n\telse if (typeof err === 'string') {\n\t\tmessage = err;\n\t}\n\n\tif (message) {\n\t\tvm.$snotify.singleError(message, 'Error', Config.snotifyDefaults);\n\t}\n};\nVue.prototype.$config = Config;\n\nfor(var name in filters) {\n\tVue.filter(name, filters[name]);\n}\n\nconst app = new Vue({\n\tstore,\n\trender: h => h(Page)\n}).$mount('#app');\n\nwindow.addEventListener(\"unhandledrejection\", function(event) {\n\tconsole.warn(event);\n\tif (typeof event.reason === 'String' || event.reason instanceof Error) {\n\t\tapp.$snotify.singleError(event.reason, 'Error', Config.snotifyDefaults);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n});\n","import Utils from './utils';\nimport { ProcessSchema, ProcessDataType } from '@openeo/js-commons';\n\nexport default class Process {\n\n\tstatic isMathProcess(p, operatorMapping = {}) {\n\t\tif (!Utils.isObject(p)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Skip processes handled by operators, if given\n\t\tlet operatorProcesses = Object.values(operatorMapping);\n\t\tif (operatorProcesses.includes(p.id)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Process must return a numerical value\n\t\tif (!Utils.isObject(p.returns) || !p.returns.schema) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet allowedTypes = ['number', 'integer', 'any'];\n\t\tlet returns = new ProcessSchema(p.returns.schema);\n\t\tif (!allowedTypes.includes(returns.nativeDataType())) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Required Process parameters must accept numerical values\n\t\tif (Array.isArray(p.parameters)) {\n\t\t\tfor(var i in p.parameters) {\n\t\t\t\tlet param = p.parameters[i];\n\t\t\t\tif (param.optional) {\n\t\t\t\t\tcontinue; // Skip optional parameters\n\t\t\t\t}\n\t\t\t\tif (!param.schema) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tlet schema = new ProcessSchema(param.schema);\n\t\t\t\tif (!allowedTypes.includes(schema.nativeDataType())) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// ToDo: Parameters with a dash (and other operators) in them are a problem\n\n\t\treturn true;\n\t}\n\n\tstatic arrayOf(datatype) {\n\t\tif (!(datatype instanceof ProcessDataType)) {\n\t\t\tdatatype = new ProcessDataType(datatype);\n\t\t}\n\t\tif (datatype.nativeDataType() === 'array' && Utils.isObject(datatype.schema.items)) {\n\t\t\tlet subtype = new ProcessDataType(datatype.schema.items);\n\t\t\treturn subtype.dataType();\n\t\t}\n\t\treturn undefined;\n\t}\n}","import VueUtils from '@openeo/vue-components/utils';\nimport { Job, OpenEO, Service, UserFile, UserProcess } from '@openeo/js-client';\nimport { mapState, mapActions, mapMutations, mapGetters } from 'vuex';\nimport contentType from 'content-type';\nimport Config from '../config';\nimport axios from 'axios';\n\nclass Utils extends VueUtils {\n\n\tstatic axios() {\n\t\treturn OpenEO.Environment.axios;\n\t}\n\n\tstatic saveToFile(content, filename) {\n\t\treturn OpenEO.Environment.saveToFile(content, filename);\n\t}\n\n\tstatic getPreviewLinkFromSTAC(stac) {\n\t\tif (Utils.isObject(stac) && Array.isArray(stac.links)) {\n\t\t\tlet link = stac.links.find(link => Utils.isObject(link) && typeof link.rel === 'string' && Config.supportedMapServices.includes(link.rel.toLowerCase()));\n\t\t\tif (link) {\n\t\t\t\treturn link;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tstatic isMapServiceSupported(mapType) {\n\t\tif (typeof mapType !== 'string') {\n\t\t\treturn false;\n\t\t}\n\t\treturn Config.supportedMapServices.includes(mapType.toLowerCase());\n\t}\n\n\tstatic parseNodata(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(nodata => Utils.parseNodata(nodata));\n\t\t}\n\t\telse {\n\t\t\treturn typeof value === \"string\" && value.toLowerCase() === \"nan\" ? Number.NaN : value;\n\t\t}\n\t}\n\n\tstatic isActiveJobStatusCode(status) {\n\t\tif (typeof status !== 'string') {\n\t\t\treturn null;\n\t\t}\n\t\tswitch (status.toLowerCase()) {\n\t\t\tcase 'running':\n\t\t\tcase 'queued':\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tstatic exception(vm, error, alt) {\n\t\tconsole.error(error);\n\t\tvar buttons = [];\n\t\tvar title = null; \n\t\tvar message = alt;\n\t\tif (Utils.isObject(error) && typeof error.message === 'string') {\n\t\t\tif (error.code > 0) {\n\t\t\t\ttitle = \"Error #\" + error.code; \n\t\t\t}\n\t\t\telse {\n\t\t\t\ttitle = alt; \n\t\t\t}\n\t\t\tmessage = error.message;\n\n\t\t\tbuttons.push({\n\t\t\t\ttext: 'Show Details',\n\t\t\t\taction: () => vm.$root.$emit('showError', error)\n\t\t\t});\n\t\t}\n\t\telse if (typeof error === 'string') {\n\t\t\tmessage = error; \n\t\t\ttitle = alt; \n\t\t}\n\t\tbuttons.push({\n\t\t\ttext: 'Copy',\n\t\t\taction: toast => {\n\t\t\t\tlet success = vm.$clipboard(message);\n\t\t\t\tlet button = toast.config.buttons.find(btn => btn.text === 'Copy');\n\t\t\t\tif (button) {\n\t\t\t\t\tbutton.text = success ? \"✔️ Copied\" : \"❌ Failed\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tvar typeDefaults = {\n\t\t\tbuttons\n\t\t}; \n\t\tvm.$snotify.singleError(message, title, Object.assign({}, vm.$config.snotifyDefaults, typeDefaults)); \n\t} \n\tstatic error(vm, message, title = null) {\n\t\tvm.$snotify.singleError(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic warn(vm, message, title = null) {\n\t\tvm.$snotify.warning(message, title, vm.$config.snotifyDefaults);\n\t}\n\tstatic info(vm, message, title = null) {\n\t\tvm.$snotify.info(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic ok(vm, message, title = null) {\n\t\tvm.$snotify.success(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic confirm(vm, message, buttons = []) {\n\t\tvar typeDefaults = {\n\t\t\tbuttons: buttons\n\t\t}; \n\t\tvm.$snotify.confirm(message, null, Object.assign({}, vm.$config.snotifyDefaults, typeDefaults)); \n\t}\n\t\n\tstatic isChildOfModal(that) {\n\t\treturn that.$parent && that.$parent.$options.name == 'Modal'; \n\t}\n\n\tstatic getFileNameFromURL(url) {\n\t\t//this removes the anchor at the end, if there is one\n\t\turl = url.substring(0, (url.indexOf(\"#\") == -1)?url.length:url.indexOf(\"#\")); \n\t\t//this removes the query after the file name, if there is one\n\t\turl = url.substring(0, (url.indexOf(\"?\") == -1)?url.length:url.indexOf(\"?\")); \n\t\t//this removes everything before the last slash in the path\n\t\turl = url.substring(url.lastIndexOf(\"/\") + 1, url.length); \n\t\treturn url; \n\t}\n\n\tstatic makeFileName(filename, type) {\n\t\tif (filename.includes('.') || typeof type !== 'string') {\n\t\t\treturn filename;\n\t\t}\n\t\tif (!type.includes('/')) {\n\t\t\treturn filename + '.' + type;\n\t\t}\n\n\t\tlet ext = null;\n\t\ttry {\n\t\t\tlet mime = contentType.parse(type);\n\t\t\tswitch(mime.type.toLowerCase()) {\n\t\t\t\tcase 'application/json':\n\t\t\t\tcase 'application/zip':\n\t\t\t\tcase 'image/png':\n\t\t\t\tcase 'image/jpg':\n\t\t\t\tcase 'image/jpeg':\n\t\t\t\tcase 'image/gif':\n\t\t\t\tcase 'image/tiff':\n\t\t\t\tcase 'text/csv':\n\t\t\t\tcase 'text/html':\n\t\t\t\t\text = type.split('/')[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'text/plain':\n\t\t\t\t\text = 'txt';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'application/netcdf':\n\t\t\t\tcase 'application/x-netcdf':\n\t\t\t\t\text = 'nc'\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t} catch (error) {}\n\n\t\tif (ext !== null) {\n\t\t\treturn filename + '.' + ext;\n\t\t}\n\t\telse {\n\t\t\treturn filename;\n\t\t}\n\t}\n\n\tstatic replaceParam(url, paramName, paramValue) {\n\t\tvar urlObj = new URL(url);\n\t\tvar query = new URLSearchParams(urlObj.search); \n\t\tquery.set(paramName, paramValue);\n\t\turlObj.search = query.toString();\n\t\treturn urlObj.toString();\n\t}\n\n\tstatic paramsForPrefix(prefix, sep = '~') {\n\t\tprefix += sep;\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tlet params = {};\n\t\tfor(let [key, value] of urlParams) {\n\t\t\tif (key.startsWith(prefix)) {\n\t\t\t\tparams[key.substring(prefix.length)] = value;\n\t\t\t}\n\t\t}\n\t\treturn params; \n\t}\n\n\tstatic param(name) {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tif (urlParams.has(name)) {\n\t\t\treturn urlParams.get(name);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tstatic isBboxInWebMercator(bboxes) {\n\t\tif (!bboxes) {\n\t\t\treturn null;\n\t\t}\n\t\tif (!Array.isArray(bboxes)) {\n\t\t\tbboxes = [bboxes];\n\t\t}\n\t\tlet maxBounds = {south: -85.06, north: 85.06}; // Max. south/north bounds for Web Mercator\n\t\treturn !bboxes.find(bbox => bbox.south < maxBounds.south || bbox.north > maxBounds.north);\n\t}\n\tstatic extentToBBox(extent) {\n\t\tif (!Array.isArray(extent)) {\n\t\t\treturn null;\n\t\t}\n\t\tvar hasZ = extent.length >= 6;\n let obj = {\n\t\t\twest: extent[0],\n\t\t\teast: extent[hasZ ? 3 : 2],\n\t\t\tsouth: extent[1],\n\t\t\tnorth: extent[hasZ ? 4 : 3]\n\t\t};\n\t\tif (hasZ) {\n\t\t\tobj.base = extent[2];\n\t\t\tobj.height = extent[5];\n\t\t}\n\t\treturn obj;\n\t}\n\tstatic sortById(a, b) {\n\t\treturn VueUtils.compareStringCaseInsensitive(a.id, b.id);\n\t}\n\n\tstatic range(start, end) {\n\t\tif (end < start) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.from({length: 1 + end - start}, (_, i) => start + i);\n\t}\n\n\tstatic newArray(length, defaultValue = 0) {\n\t\tif (length < 1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.from({length}, () => defaultValue);\n\t}\n\n\tstatic fitArray(arr, length, defaultValue = 0) {\n\t\tif (length < 1) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (length > arr.length) {\n\t\t\treturn arr.concat(Utils.newArray(length - arr.length, defaultValue));\n\t\t}\n\t\telse if (length < arr.length) {\n\t\t\treturn arr.slice(0, length);\n\t\t}\n\t\telse {\n\t\t\treturn arr;\n\t\t}\n\t}\n\n\t// Based on https://github.com/hughsk/path-sort\n\tstatic sortByPath(a, b) {\n\t\ta = a.split('/');\n\t\tb = b.split('/');\n\t\tvar l = Math.max(a.length, b.length);\n\t\tfor (var i = 0; i < l; i += 1) {\n\t\t\tif (!(i in a)) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse if (!(i in b)) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a[i].toUpperCase() > b[i].toUpperCase()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a[i].toUpperCase() < b[i].toUpperCase()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t\tif (a.length < b.length) {\n\t\t\treturn -1;\n\t\t}\n\t\telse if (a.length > b.length) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tstatic getUniqueId() {\n\t\treturn Math.random().toString(36).substr(2, 9);\n\t}\n\n\tstatic formatIdOrTitle(value) {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn value;\n\t\t}\n\t\telse if (value.startsWith('#')) {\n\t\t\treturn `${value}`;\n\t}\n\t\telse if (value === 'Unnamed') {\n\t\t\treturn `${value}`;\n\t\t}\n\t\telse {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tstatic getResourceTitle(obj, showType = false) {\n\t\tlet title;\n\t\tlet isObj = Utils.isObject(obj);\n\t\tif (typeof obj === 'string') {\n\t\t\ttitle = obj;\n\t\t}\n\t\telse if (obj instanceof UserProcess) {\n\t\t\ttitle = obj.id;\n\t\t}\n\t\telse if (obj instanceof UserFile) {\n\t\t\ttitle = obj.path;\n\t\t}\n\t\telse if (isObj && typeof obj.stac_version === 'string') {\n\t\t\ttitle = obj.id;\n\t\t}\n\t\telse if (isObj && obj.title) {\n\t\t\ttitle = obj.title;\n\t\t}\n\t\telse if (isObj && obj.id) {\n\t\t\tlet id = new String(obj.id);\n\t\t\tif (id.length > 10) {\n\t\t\t\ttitle = obj.id.substr(0, 5) + '…' + obj.id.substr(-5);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttitle = obj.id\n\t\t\t}\n\t\t\ttitle = '#' + title;\n\t\t}\n\t\telse {\n\t\t\ttitle = 'Unnamed';\n\t\t}\n\t\tif (showType) {\n\t\t\tlet type;\n\t\t\tif (typeof showType === 'string') {\n\t\t\t\ttype = showType;\n\t\t\t}\n\t\t\telse if (obj instanceof Job) {\n\t\t\t\ttype = 'Job';\n\t\t\t}\n\t\t\telse if (obj instanceof Service) {\n\t\t\t\ttype = 'Service';\n\t\t\t}\n\t\t\telse if (obj instanceof UserProcess) {\n\t\t\t\ttype = 'Process';\n\t\t\t}\n\t\t\telse if (obj instanceof UserFile) {\n\t\t\t\ttype = 'File';\n\t\t\t}\n\t\t\telse if (isObj && typeof obj.stac_version === 'string' && obj.type === 'Collection') {\n\t\t\t\ttype = obj.type;\n\t\t\t}\n\n\t\t\tif (type) {\n\t\t\t\ttitle = `${title} (${type})`;\n\t\t\t}\n\t\t}\n\t\treturn title;\n\t}\n\n\tstatic resolveJsonRefs(schema) {\n\t\tvar resolver = obj => {\n\t\t\tif (!obj || typeof obj !== 'object') {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tfor(var key in obj) {\n\t\t\t\tvar value = obj[key];\n\t\t\t\tif (Utils.isObject(value) && typeof value.$ref === 'string' && value.$ref.match(/^#(\\/[^\\/]+)+$/i)) {\n\t\t\t\t\tvar parts = value.$ref.split('/').slice(1);\n\t\t\t\t\tvar result = schema;\n\t\t\t\t\twhile (parts.length) {\n\t\t\t\t\t\tlet propertyName = parts.shift();\n\t\t\t\t\t\tresult = result[propertyName];\n\t\t\t\t\t\tif (typeof result === 'undefined') {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tobj[key] = result;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tobj[key] = resolver(value);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t\treturn resolver(schema);\n\t}\n\tstatic extractUDPParams(process) {\n\t\tconst pos = process.indexOf('@');\n\t\tif (pos < 0) {\n\t\t\treturn [process, undefined];\n\t\t}\n\t\telse {\n\t\t\tconst id = process.substring(0, pos);\n\t\t\tconst namespace = process.substring(pos + 1);\n\t\t\treturn [id, namespace];\n\t\t}\n\t}\n\tstatic getProcessingExpression(stac) {\n\t\tlet key = 'processing:expression';\n\t\tif (!Utils.isObject(stac) || !stac[key]) {\n\t\t\treturn null;\n\t\t}\n\t\tlet obj = stac[key];\n\t\tif (Array.isArray(obj)) {\n\t\t\tif (obj.length > 0) {\n\t\t\t\tobj = obj[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif (Utils.isObject(obj) && obj.format === 'openeo' && Utils.isObject(obj.expression)) {\n\t\t\treturn obj.expression;\n\t\t}\n\t\telse {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tstatic confirmOpenAll(files) {\n\t\treturn confirm(`You are about to open ${files.length} individual files / tabs, which could slow down the web browser. Are you sure you want to open all of them?`);\n\t}\n\n};\n\nUtils.mapState = mapState;\nUtils.mapGetters = mapGetters;\nUtils.mapMutations = mapMutations;\nUtils.mapActions = mapActions;\n\nexport default Utils;\n","if(typeof L === 'undefined') { var e = new Error(\"Cannot find module 'L'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = L;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"424\":\"1e8cc4a5\",\"434\":\"3db284dc\",\"510\":\"1c7dfa80\",\"768\":\"8ff8aaf2\",\"847\":\"e24b2127\",\"887\":\"575d445d\",\"897\":\"896d6d76\",\"996\":\"4a71094e\",\"1026\":\"cb48ffc0\",\"1030\":\"040e5eea\",\"1160\":\"70bc40fb\",\"1189\":\"a32f94fa\",\"1203\":\"f48ebf4f\",\"1237\":\"b0e48530\",\"1279\":\"8878690a\",\"1323\":\"c2b88a54\",\"1358\":\"4dae7370\",\"1485\":\"bdb1342e\",\"1533\":\"7706a550\",\"1765\":\"98930619\",\"2053\":\"8f3b63df\",\"2195\":\"c25082b0\",\"2263\":\"c2d4312b\",\"2327\":\"6048d1aa\",\"2365\":\"674df960\",\"2388\":\"6f9bd704\",\"2559\":\"06b84f86\",\"2604\":\"9be79866\",\"2638\":\"d819825a\",\"2693\":\"900e8e1e\",\"2764\":\"34f8c39a\",\"2810\":\"e968ed13\",\"2855\":\"2da0a86a\",\"2869\":\"d962d520\",\"2919\":\"5a7da297\",\"3165\":\"76bb6a25\",\"3166\":\"067ac4f1\",\"3221\":\"a34a4762\",\"3249\":\"8768e225\",\"3271\":\"5a5d98ba\",\"3291\":\"a294dd66\",\"3324\":\"1543dc9c\",\"3383\":\"d94b2f5f\",\"3411\":\"6052053a\",\"3504\":\"22567424\",\"3592\":\"0b38c0e8\",\"3800\":\"4319672c\",\"3876\":\"50abede2\",\"4011\":\"7c8bfd07\",\"4016\":\"7fd9cf7f\",\"4054\":\"e7b8b9c7\",\"4066\":\"8cdb91a9\",\"4120\":\"c763dc51\",\"4152\":\"62572df3\",\"4279\":\"b012468e\",\"4285\":\"1e12bb8a\",\"4375\":\"13fc5959\",\"4387\":\"6a9d95fe\",\"4394\":\"f147b645\",\"4432\":\"d3d8c74c\",\"4475\":\"2d81f41f\",\"4477\":\"accede65\",\"4625\":\"fdcb0b05\",\"4638\":\"086ea810\",\"4818\":\"544d77b8\",\"5121\":\"3d0716e1\",\"5213\":\"f5f2cae9\",\"5237\":\"8caff225\",\"5262\":\"d2b1dab9\",\"5457\":\"55d83d50\",\"5624\":\"56a54c83\",\"5630\":\"6c8fe1c8\",\"5640\":\"f63e0ac2\",\"5677\":\"32e52a2e\",\"5742\":\"6ee57240\",\"5771\":\"e0cf67f9\",\"5865\":\"ba589820\",\"5981\":\"bde59e8d\",\"5983\":\"b8efedd3\",\"6036\":\"ac16f8d5\",\"6191\":\"a9dcd16c\",\"6192\":\"a7d24100\",\"6238\":\"6cb2e842\",\"6457\":\"0b71882d\",\"6550\":\"be13e8db\",\"6568\":\"66ede871\",\"6617\":\"548c5e31\",\"6660\":\"5db6ed47\",\"6689\":\"0404eca3\",\"6709\":\"9bbce368\",\"6846\":\"d8f3c03b\",\"6885\":\"e5fa8c84\",\"7123\":\"e7255bc1\",\"7186\":\"f9d85ef1\",\"7217\":\"1f57add2\",\"7237\":\"c8c92bc7\",\"7261\":\"cec7eb87\",\"7336\":\"f9de7ab6\",\"7349\":\"58ee9351\",\"7383\":\"99feb92e\",\"7497\":\"5f104927\",\"7745\":\"43fb5188\",\"7759\":\"f248fb9a\",\"7828\":\"a23933d0\",\"8053\":\"d1bcf10d\",\"8080\":\"2fc3db24\",\"8141\":\"f85ed200\",\"8152\":\"02c6d375\",\"8324\":\"9f2b9735\",\"8354\":\"9d3cdc3f\",\"8396\":\"6d066bd8\",\"8580\":\"f55cb38d\",\"8645\":\"257fe523\",\"8807\":\"edb0a018\",\"9047\":\"9e2b4217\",\"9066\":\"429507d1\",\"9201\":\"16e2764c\",\"9237\":\"b0457669\",\"9238\":\"1ce8f980\",\"9403\":\"c278a2cb\",\"9409\":\"9dc12ac6\",\"9544\":\"676b63d4\",\"9546\":\"03a9f682\",\"9873\":\"0533e950\",\"9882\":\"0cfed7b6\",\"9989\":\"fe90c1ea\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"434\":\"48f88ab7\",\"768\":\"9a253916\",\"847\":\"5e455ed7\",\"887\":\"8c892279\",\"897\":\"9a7c4e56\",\"996\":\"489c003a\",\"1026\":\"ee56a981\",\"1194\":\"5e953040\",\"1203\":\"1291b8f6\",\"1279\":\"6559def7\",\"1485\":\"a6dad948\",\"1533\":\"ee70e6ee\",\"1765\":\"ec5ea63d\",\"2053\":\"591e8359\",\"2327\":\"43969cb2\",\"2388\":\"08c8f94b\",\"2604\":\"68de8223\",\"2638\":\"e35e8688\",\"2693\":\"357ded33\",\"2722\":\"13fcb001\",\"2810\":\"bb165d6b\",\"2855\":\"9be81686\",\"2869\":\"f3cd8e29\",\"3165\":\"cedc5992\",\"3166\":\"2f6e3d85\",\"3221\":\"f6c5b858\",\"3249\":\"b1500b27\",\"3271\":\"6244371c\",\"3324\":\"58afa197\",\"3383\":\"70bcc47a\",\"3411\":\"8624a8a9\",\"3504\":\"bb165d6b\",\"3592\":\"2a21fdfd\",\"4016\":\"209ecd26\",\"4066\":\"c792bb6a\",\"4120\":\"1490740e\",\"4152\":\"6d1bdf91\",\"4279\":\"a22f3053\",\"4285\":\"b812a1c3\",\"4375\":\"8cbfaf98\",\"4387\":\"4f91105e\",\"4475\":\"3532f099\",\"4741\":\"f6d430d3\",\"4818\":\"a7c04fab\",\"5213\":\"84e10245\",\"5457\":\"326fc780\",\"5630\":\"b1500b27\",\"5677\":\"35500620\",\"5742\":\"d62d95a4\",\"5771\":\"f5601ccf\",\"5865\":\"951674bc\",\"5981\":\"662a7223\",\"6036\":\"84e10245\",\"6192\":\"5fb184c3\",\"6238\":\"c4731012\",\"6550\":\"f0b49cc1\",\"6660\":\"a22f3053\",\"6689\":\"b4a63b64\",\"6709\":\"de23863b\",\"6846\":\"4e980861\",\"7123\":\"a8f318bf\",\"7186\":\"1abe4ef8\",\"7217\":\"9812215a\",\"7336\":\"788ebcdc\",\"7383\":\"43a1e437\",\"7745\":\"70bcc47a\",\"7759\":\"052469b3\",\"7828\":\"be08d5c1\",\"8053\":\"48f88ab7\",\"8080\":\"f6d430d3\",\"8141\":\"f3930676\",\"8152\":\"281aa3b1\",\"8324\":\"257d9fa6\",\"8354\":\"8f8ad761\",\"8396\":\"a5e993af\",\"8580\":\"9e19226e\",\"8645\":\"ee56a981\",\"8807\":\"e797fa00\",\"9047\":\"13422022\",\"9066\":\"84e10245\",\"9201\":\"19b52578\",\"9238\":\"70bcc47a\",\"9403\":\"f665615a\",\"9409\":\"dd741b46\",\"9873\":\"bb165d6b\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"@openeo/web-editor:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"434\":1,\"768\":1,\"847\":1,\"887\":1,\"897\":1,\"996\":1,\"1026\":1,\"1194\":1,\"1203\":1,\"1279\":1,\"1485\":1,\"1533\":1,\"1765\":1,\"2053\":1,\"2327\":1,\"2388\":1,\"2604\":1,\"2638\":1,\"2693\":1,\"2722\":1,\"2810\":1,\"2855\":1,\"2869\":1,\"3165\":1,\"3166\":1,\"3221\":1,\"3249\":1,\"3271\":1,\"3324\":1,\"3383\":1,\"3411\":1,\"3504\":1,\"3592\":1,\"4016\":1,\"4066\":1,\"4120\":1,\"4152\":1,\"4279\":1,\"4285\":1,\"4375\":1,\"4387\":1,\"4475\":1,\"4741\":1,\"4818\":1,\"5213\":1,\"5457\":1,\"5630\":1,\"5677\":1,\"5742\":1,\"5771\":1,\"5865\":1,\"5981\":1,\"6036\":1,\"6192\":1,\"6238\":1,\"6550\":1,\"6660\":1,\"6689\":1,\"6709\":1,\"6846\":1,\"7123\":1,\"7186\":1,\"7217\":1,\"7336\":1,\"7383\":1,\"7745\":1,\"7759\":1,\"7828\":1,\"8053\":1,\"8080\":1,\"8141\":1,\"8152\":1,\"8324\":1,\"8354\":1,\"8396\":1,\"8580\":1,\"8645\":1,\"8807\":1,\"9047\":1,\"9066\":1,\"9201\":1,\"9238\":1,\"9403\":1,\"9409\":1,\"9873\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(1194|2722|4741)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunk_openeo_web_editor\"] = globalThis[\"webpackChunk_openeo_web_editor\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [6905,3684,2475,950,2660,4881,7900,6296,7274,1834,6337,9456,6937,7256,6964], () => (__webpack_require__(15424)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticClass","$config","logo","attrs","serviceName","_e","_v","_s","appName","on","showWebEditorInfo","version","staticRenderFns","name","mixins","EventBusMixin","data","Package","methods","broadcast","component","serverUrl","skipLogin","mapLocation","mapZoom","geocoder","loginMessage","snotifyDefaults","timeout","titleMaxLength","bodyMaxLength","showProgressBar","closeOnClick","pauseOnHover","supportedMapServices","supportedBatchJobSharingServices","supportedWebServiceSharingServices","supportedWizards","title","description","requiredProcesses","basemaps","url","attributions","maxZoom","importCommunityExamples","processNamespaces","oidcClientIds","showHttpWarning","dataRefreshInterval","showExperimentalByDefault","showDeprecatedByDefault","pageLimit","eventBusListeners","beforeDestroy","eventName","$root","$off","hasListener","listen","callback","unlisten","$on","$emit","arguments","ProjManager","get","Projection","_load","add","code","meta","extent","proj4","defs","register","projection","getProjection","Array","isArray","transformExtent","setExtent","includes","basemap","error","console","addFromStac","stac","Utils","isObject","properties","id","crs","match","toUpperCase","substr","Number","isInteger","String","epsg","CSV","SupportedFormat","constructor","asset","delim","super","parseData","array","parseCSV","trim","map","row","col","length","NaN","isNaN","parseFloat","str","arr","quote","c","cc","nc","Format","Object","assign","context","setContext","getContext","getUrl","href","canGroup","isBinary","download","filename","tempLink","document","createElement","style","display","setAttribute","makeFileName","type","body","appendChild","click","removeChild","loadData","connection","loaded","fetchData","getData","Error","blob","startsWith","response","fetch","auth","apiUrl","URL","requestUrl","origin","promise","Promise","resolve","reject","reader","FileReader","onload","event","target","result","onerror","readAsBinaryString","readAsText","icon","props","events","UnsupportedFormat","GDAL_MIN","GDAL_MAX","GDAL_NAME","GeoTIFF","removableLayers","_bands","_nodata","img","convertToRGB","parseMetadata","tiff","stacHasExtent","geometry","parseNodata","bands","forEach","band","i","setBandInfo","statistics","min","minimum","max","maximum","nodata","push","getBlob","tiffFromBlob","tiffFromUrl","getImage","getSamplesPerPixel","dummy","getArrayForSample","isFinite","getMinForDataType","getMaxForDataType","getGDALMetadata","getGDALNoData","geoKeys","ProjectedCSTypeGeoKey","GeographicTypeGeoKey","ProjLinearUnitsGeoKey","GeogAngularUnitsGeoKey","units","unitsFromCode","bbox","getBoundingBox","toUserExtent","warn","fileDirectory","ColorMap","from","greenOffset","blueOffset","colorMap","Math","trunc","PhotometricInterpretation","_","CMYK","YCbCr","CIELab","getNoData","getBands","getExtent","getColorMap","Int8Array","Int16Array","Int32Array","Float32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","JSON_","isGeoJson","JSON","parse","log","detectGeoJson","isTable","size","values","keys","some","equals","mathProcesses","getMathProcesses","all","filter","Process","isMathProcess","isMath","process","ProcessGraph","process_graph","mathProcessIds","p","concat","Formula","operatorMapping","arrayOperatorMapping","unsupportedFuncs","find","node","process_id","BrowserImage","Image","crossOrigin","fetchPriotity","decoding","src","NativeType","TSV","FormatRegistry","createFilesFromSTAC","resource","files","assets","roles","createFileFromAsset","file","createFilesFromBlob","Blob","stac_version","links","createObjectURL","mime","contentType","toLowerCase","extension","split","pop","serverStorage","getDefaultState","appMode","storedServers","localStorage","getItem","discoverySearchTerm","hightestModalZIndex","epsgCodes","initialProcess","initialNode","openWizard","openWizardProps","collectionPreview","viewerOptions","modelDnD","formatRegistry","namespaced","state","getters","hasProcess","getModelNodeFromDnD","rootState","rootGetters","getterFn","collectionDefaults","namespace","format","options","loading","setInterval","clearInterval","actions","loadEpsgCodes","cx","res","commit","default","loadInitialProcess","isUrl","axios","pg","extractUDPParams","dispatch","root","loadForAppMode","resultType","resultUrl","mutations","setModelDnD","obj","setDiscoverySearchTerm","searchTerm","setInitialProcess","setInitialNode","setAppMode","expires","setAppModeData","StacMigrate","Vue","getProcessingExpression","summaries","setViewerOptions","setOpenWizard","setCollectionPreview","collectionID","openModal","closeModal","addServer","indexOf","setItem","stringify","removeServer","splice","Job","Service","UserProcess","toJSON","setProcess","reset","listFn","paginateFn","createFn","updateFn","deleteFn","readFn","readFnById","customizations","primaryKey","pages","hasMore","definition","supportsList","supports","supportsCreate","supportsUpdate","supportsDelete","supportsRead","getById","x","create","parameters","apply","delete","update","updated","read","list","count","nextPage","d","hasNextPage","upsert","index","findIndex","observableData","observable","key","storeFactory","supportsQueue","supportsCancel","queue","startJob","cancel","stopJob","userProcesses","sort","sortById","use","Vuex","reverseOperatorMapping","mapping","op","activeRequests","discoveryCompleted","isAuthenticated","userInfo","connectionError","beforeLogoutListener","authProviders","fileFormats","serviceTypes","udfRuntimes","processesUpdated","collections","Config","modules","editor","jobs","services","capabilities","feature","hasFeature","currency","isConnected","isDiscovered","supportsBilling","supportsBillingPlans","listPlans","apiVersion","FileTypes","input","output","collection","spatial_extent","extentToBBox","spatial","temporal_extent","temporal","interval","processes","registry","ProcessRegistry","ProcessRegistryExtension","supportsMath","processId","has","connect","OpenEO","addNamespaceToProcess","message","providers","listAuthProviders","async","provider","discover","refresh","promises","errors","listCollections","then","catch","listProcesses","listFileTypes","listServiceTypes","listUdfRuntimes","describeAccount","describeCollection","_loaded","loadProcess","describeProcess","beforeLogout","listener","logout","disconnect","off","authProvider","getAuthProvider","completed","info","updateProcesses","addProcessNamespacesToRequest","namespaces","fillCollection","setConnectionError","authenticated","keepConnection","startActiveRequest","endActiveRequest","class","connecting","_l","modals","modal","_g","_b","tag","$event","hideModal","tourType","model","value","$$v","expression","directives","rawName","showHelp","httpsUrl","domProps","initProviders","showConnectForm","preventDefault","submitForm","modifiers","autoConnect","$forceUpdate","allowOtherServers","showServerSelector","showLoginForm","ref","providerSelected","scopedSlots","_u","fn","tab","initDiscovery","hasPredefinedOidcClientId","userOidcClientId","composing","oidcRedirectUrl","basicProvider","username","password","proxy","switchServer","show","terms","privacy","computed","mapGetters","getLinkForRel","rel","l","components","Logo","Tabs","Tab","TermsOfServiceConsent","Boolean","mapState","isLocalUrl","window","location","protocol","toString","replace","getType","defaultClient","oidcClientId","oidcProviders","watch","newVal","w","h","t","screen","availWidth","availHeight","oidcOptions","automaticSilentRenew","popupWindowFeatures","OidcProvider","redirectUrl","created","serverFromQuery","param","prompt","uiMethod","signinCallback","exception","mounted","onpopstate","evt","historyNavigate","history","replaceState","mapActions","mapMutations","hostname","initConnection","pushState","makeUrl","$refs","tabs","addProviders","addTab","getTitle","getId","$nextTick","resetActiveTab","programmatically","authType","login","offlineScope","setClientId","client","detectDefaultClient","grant_types","addListener","error_description","discoveryErrors","server","params","URLSearchParams","search","set","query","ConnectForm","IDE","AddMapDataModal","CollectionModal","DataModal","DownloadAssetsModal","ErrorModal","ExportCodeModal","ExpressionModal","FileFormatModal","ImportProcessModal","JobEstimateModal","JobInfoModal","ListModal","ParameterModal","ProcessModal","ProcessParameterModal","ServerInfoModal","ServiceInfoModal","ShareModal","Tour","UdfRuntimeModal","WebEditorModal","WizardModal","paramsForPrefix","interceptors","request","config","showError","showData","showModal","showListModal","showCollection","showProcess","showProcessParameter","setTitle","where","stopTour","newTitle","subtitle","Date","now","other","listActions","parameter","Snotify","Clipboard","prototype","$snotify","singleError","lastMessage","setTimeout","productionTip","errorHandler","err","vm","filters","app","store","Page","$mount","addEventListener","reason","stopPropagation","operatorProcesses","returns","schema","allowedTypes","ProcessSchema","nativeDataType","optional","arrayOf","datatype","ProcessDataType","items","subtype","dataType","VueUtils","Environment","saveToFile","content","getPreviewLinkFromSTAC","link","isMapServiceSupported","mapType","isActiveJobStatusCode","status","alt","buttons","text","action","toast","success","$clipboard","button","btn","typeDefaults","warning","ok","confirm","isChildOfModal","that","$parent","$options","getFileNameFromURL","substring","lastIndexOf","ext","replaceParam","paramName","paramValue","urlObj","prefix","sep","urlParams","isBboxInWebMercator","bboxes","maxBounds","south","north","hasZ","west","east","base","height","a","b","compareStringCaseInsensitive","range","start","end","newArray","defaultValue","fitArray","slice","sortByPath","getUniqueId","random","formatIdOrTitle","getResourceTitle","showType","isObj","UserFile","path","resolveJsonRefs","resolver","$ref","parts","propertyName","shift","pos","undefined","confirmOpenAll","L","e","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","m","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","r","n","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","mode","ns","def","current","getOwnPropertyNames","o","defineProperty","enumerable","f","chunkId","reduce","u","miniCssF","g","globalThis","Function","prop","hasOwnProperty","inProgress","dataWebpackPrefix","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","onScriptComplete","prev","clearTimeout","doneFns","parentNode","bind","head","Symbol","toStringTag","nmd","paths","children","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","insertBefore","nextSibling","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app.8b7e1a9c.js","mappings":"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","sources":["webpack://@openeo/web-editor/./src/components/Logo.vue","webpack://@openeo/web-editor/src/components/Logo.vue","webpack://@openeo/web-editor/./src/components/Logo.vue?c0bc","webpack://@openeo/web-editor/./src/components/Logo.vue?0cc9","webpack://@openeo/web-editor/./config.js","webpack://@openeo/web-editor/./src/components/EventBusMixin.js","webpack://@openeo/web-editor/./src/components/maps/projManager.js","webpack://@openeo/web-editor/./src/formats/csv.js","webpack://@openeo/web-editor/./src/formats/format.js","webpack://@openeo/web-editor/./src/formats/geotiff.js","webpack://@openeo/web-editor/./src/formats/json.js","webpack://@openeo/web-editor/./src/registryExtension.js","webpack://@openeo/web-editor/./src/formats/browserImage.js","webpack://@openeo/web-editor/./src/formats/native.js","webpack://@openeo/web-editor/./src/formats/tsv.js","webpack://@openeo/web-editor/./src/formats/formatRegistry.js","webpack://@openeo/web-editor/./src/store/editor.js","webpack://@openeo/web-editor/./src/store/storeFactory.js","webpack://@openeo/web-editor/./src/store/files.js","webpack://@openeo/web-editor/./src/store/jobs.js","webpack://@openeo/web-editor/./src/store/services.js","webpack://@openeo/web-editor/./src/store/userProcesses.js","webpack://@openeo/web-editor/./src/store/index.js","webpack://@openeo/web-editor/./src/Page.vue","webpack://@openeo/web-editor/./src/components/ConnectForm.vue","webpack://@openeo/web-editor/./src/components/TermsOfServiceConsent.vue","webpack://@openeo/web-editor/src/components/TermsOfServiceConsent.vue","webpack://@openeo/web-editor/./src/components/TermsOfServiceConsent.vue?ce8c","webpack://@openeo/web-editor/./src/components/TermsOfServiceConsent.vue?4902","webpack://@openeo/web-editor/src/components/ConnectForm.vue","webpack://@openeo/web-editor/./src/components/ConnectForm.vue?e1e0","webpack://@openeo/web-editor/./src/components/ConnectForm.vue?757a","webpack://@openeo/web-editor/src/Page.vue","webpack://@openeo/web-editor/./src/Page.vue?99ee","webpack://@openeo/web-editor/./src/Page.vue?0126","webpack://@openeo/web-editor/./src/filters.js","webpack://@openeo/web-editor/./src/main.js","webpack://@openeo/web-editor/./src/process.js","webpack://@openeo/web-editor/./src/utils.js","webpack://@openeo/web-editor/external var \"L\"","webpack://@openeo/web-editor/webpack/bootstrap","webpack://@openeo/web-editor/webpack/runtime/chunk loaded","webpack://@openeo/web-editor/webpack/runtime/compat get default export","webpack://@openeo/web-editor/webpack/runtime/create fake namespace object","webpack://@openeo/web-editor/webpack/runtime/define property getters","webpack://@openeo/web-editor/webpack/runtime/ensure chunk","webpack://@openeo/web-editor/webpack/runtime/get javascript chunk filename","webpack://@openeo/web-editor/webpack/runtime/get mini-css chunk filename","webpack://@openeo/web-editor/webpack/runtime/global","webpack://@openeo/web-editor/webpack/runtime/hasOwnProperty shorthand","webpack://@openeo/web-editor/webpack/runtime/load script","webpack://@openeo/web-editor/webpack/runtime/make namespace object","webpack://@openeo/web-editor/webpack/runtime/node module decorator","webpack://@openeo/web-editor/webpack/runtime/publicPath","webpack://@openeo/web-editor/webpack/runtime/css loading","webpack://@openeo/web-editor/webpack/runtime/jsonp chunk loading","webpack://@openeo/web-editor/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"logo\"},[(_vm.$config.logo)?_c('img',{attrs:{\"src\":_vm.$config.logo,\"alt\":_vm.$config.serviceName}}):_vm._e(),_c('h2',[_vm._v(_vm._s(_vm.$config.appName)+\" \"),_c('span',{staticClass:\"version\",on:{\"click\":_vm.showWebEditorInfo}},[_vm._v(_vm._s(_vm.version))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Logo.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Logo.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Logo.vue?vue&type=template&id=af3cbbb2&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\nimport style0 from \"./Logo.vue?vue&type=style&index=0&id=af3cbbb2&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af3cbbb2\",\n null\n \n)\n\nexport default component.exports","export default {\n\t// Set this to connect to a back-end automatically when opening the Web Editor,\n\t// so you could set this to https://example.com and then the Web Editor connects\n\t// to the corresponding back-end automatically.\n\tserverUrl: '',\n\n\t// The name of the service\n\tserviceName: 'openEO',\n\t// The name of the app\n\tappName: 'Web Editor',\n\n\t// Skip login and automatically load up the \"discovery mode\"\n\tskipLogin: false,\n\n\t// Default location for maps\n\t// Default to the center of the EU in Wuerzburg: \n\t// https://en.wikipedia.org/wiki/Geographical_midpoint_of_Europe#Geographic_centre_of_the_European_Union\n\t// The zoom level should show most of Europe\n\tmapLocation: [49.8, 9.9],\n\tmapZoom: 4,\n\n\t// OSM Nominatim compliant geocoder URL, remove to disable\n\tgeocoder: \"https://nominatim.openstreetmap.org/search\",\n\n\t// A message shown on the login page\n\tloginMessage: '',\n\n\t// The logo to show\n\tlogo: './logo.png',\n\n\t// Defaults for notifications\n\tsnotifyDefaults: {\n\t\ttimeout: 10000,\n\t\ttitleMaxLength: 30,\n\t\tbodyMaxLength: 120,\n\t\tshowProgressBar: true,\n\t\tcloseOnClick: true,\n\t\tpauseOnHover: true\n\t},\n\n\t// List of supported web map services (all lower-cased)\n\tsupportedMapServices: [\n\t\t'xyz',\n\t\t'wmts'\n\t],\n\n\t// List of supported batch job sharing services\n\tsupportedBatchJobSharingServices: [\n\t\t'ShareEditor',\n\t\t'CopyUrl',\n\t\t'BlueskyShare',\n\t\t'MastodonSocialShare',\n\t\t'XShare'\n\t],\n\n\t// List of supported web service sharing services\n\tsupportedWebServiceSharingServices: [\n\t\t'ShareEditor',\n\t\t'CopyUrl',\n\t\t'BlueskyShare',\n\t\t'MastodonSocialShare',\n\t\t'XShare'\n\t],\n\n\t// List of supported wizards\n\tsupportedWizards: [\n\t\t{\n\t\t\tcomponent: 'SpectralIndices',\n\t\t\ttitle: 'Compute Spectral Indices',\n\t\t\tdescription: 'A spectral index is a mathematical equation that is applied on the various spectral bands of an image per pixel. It is often used to highlight vegetation, urban areas, snow, burn, soil, or water/drought/moisture stress. Provided by Awesome Spectral Indices (https://github.com/awesome-spectral-indices/awesome-spectral-indices).',\n\t\t\trequiredProcesses: ['reduce_dimension']\n\t\t}\n\t],\n\n\t// Configure the (base)maps\n\tbasemaps: [\n\t\t{\n\t\t\t// Title for the basemap\n\t\t\ttitle: \"OpenStreetMap\",\n\t\t\t// Templated URI for the XYZ basemap.\n\t\t\turl: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t// Attributon for the basemap. HTML is allowed.\n\t\t\tattributions: '© OpenStreetMap contributors.',\n\t\t\t// Maximum zoom level\n\t\t\tmaxZoom: 19\n\t\t}\n\t],\n\n\t// Import processes from openeo-community-examples repo\n\timportCommunityExamples: true,\n\n\t// Additional process namespaces to load by default\n\tprocessNamespaces: [],\n\n\t// Key is the OIDC provider id, value is the client ID\n\toidcClientIds: {},\n\n\t// Show a warning if HTTP is used instead of HTTPS\n\tshowHttpWarning: true,\n\n\t// refresh interval for jobs/user data/services etc. in minutes - doesn't apply to logs.\n\t// It's recommended to use a value between 1 and 5 minutes.\n\tdataRefreshInterval: 2,\n\n\t// Show or hide experimental and/or deprecated entites by default (e.g. processes, collections)\n\tshowExperimentalByDefault: false,\n\tshowDeprecatedByDefault: false,\n\n\t// number of items to show per page in the UI (jobs, services, files, UDPs) - null to disable pagination\n\tpageLimit: 50,\n\t\n};","export default {\n\tdata() {\n\t\treturn {\n\t\t\teventBusListeners: {}\n\t\t};\n\t},\n\tbeforeDestroy() {\n\t\tfor (var eventName in this.eventBusListeners) {\n\t\t\tthis.$root.$off(eventName, this.eventBusListeners[eventName]);\n\t\t}\n\t},\n\tmethods: {\n\t\thasListener(eventName) {\n\t\t\treturn !!this.eventBusListeners[eventName];\n\t\t},\n\t\tlisten(eventName, callback) {\n\t\t\tthis.unlisten(eventName);\n\t\t\tthis.$root.$on(eventName, callback);\n\t\t\tthis.eventBusListeners[eventName] = callback;\n\t\t},\n\t\tunlisten(eventName) {\n\t\t\tif (this.hasListener(eventName)) {\n\t\t\t\tthis.$root.$off(eventName, this.eventBusListeners[eventName]);\n\t\t\t\tdelete this.eventBusListeners[eventName];\n\t\t\t}\n\t\t},\n\t\tbroadcast() {\n\t\t\tthis.$root.$emit(...arguments);\n\t\t}\n\t}\n}","import proj4 from 'proj4';\nimport { get as getProjection, transformExtent } from 'ol/proj';\nimport Projection from 'ol/proj/Projection';\nimport { register } from 'ol/proj/proj4';\n\nimport Utils from '../../utils';\n\nexport default class ProjManager {\n\n\tstatic async get(data) {\n\t\tif (data instanceof Projection) {\n\t\t\treturn data;\n\t\t}\n\n\t\treturn await ProjManager._load(data);\n\t}\n\n\tstatic add(code, meta, extent) {\n\t\ttry {\n\t\t\tproj4.defs(code, meta);\n\t\t\tregister(proj4);\n\t\t\tlet projection = getProjection(code);\n\t\t\tif (Array.isArray(extent)) {\n\t\t\t\textent = transformExtent(extent, 'EPSG:4326', projection);\n\t\t\t\tprojection.setExtent(extent);\n\t\t\t}\n\t\t\tif (meta.includes('+datum=WGS84')) {\n\t\t\t\tprojection.basemap = true;\n\t\t\t}\n\t\t\treturn projection;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Get projection details from STAC (todo: add collection support)\n\tstatic async addFromStac(stac) {\n\t\tif (Utils.isObject(stac) && Utils.isObject(stac.properties)) {\n\t\t\tif (stac.properties['proj:code']) {\n\t\t\t\treturn await ProjManager.get(stac.properties['proj:code']);\n\t\t\t}\n\t\t\telse if (stac.properties['proj:wkt2']) {\n\t\t\t\treturn ProjManager.add(stac.id, stac.properties['proj:wkt2']);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tstatic async _load(crs) {\n\t\tlet code, id;\n\t\tif (typeof crs === 'string' && crs.match(/^EPSG:\\d+$/i)) {\n\t\t\tcode = crs.toUpperCase();\n\t\t\tid = crs.substr(5);\n\t\t}\n\t\telse if (Number.isInteger(crs)) {\n\t\t\tcode = `EPSG:${crs}`\n\t\t\tid = String(crs);\n\t\t}\n\t\telse {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Get projection from cache\n\t\tlet projection = getProjection(code);\n\t\tif (projection) {\n\t\t\treturn projection;\n\t\t}\n\n\t\t// Get projection from database\n\t\tlet epsg = await import('../../assets/epsg-proj.json');\n\t\tif (id in epsg) {\n\t\t\treturn ProjManager.add(code, epsg[id][0], epsg[id][1]);\n\t\t}\n\n\t\t// No projection found\n\t\treturn null;\n\t}\n\n}","import { SupportedFormat } from './format';\n\nclass CSV extends SupportedFormat {\n\n\tconstructor(asset, delim = [',', ';']) {\n\t\tsuper(asset, 'TableViewer', 'fa-table');\n\t\tthis.delim = delim;\n\t}\n\n\tasync parseData(data) {\n\t\tif (typeof data === 'string') {\n\t\t\t// Parse CSV\n\t\t\tlet array = this.parseCSV(data.trim());\n\t\t\t// Convert values into numbers, if possible\n\t\t\treturn array.map(row => row.map(col => {\n\t\t\t\tcol = col.trim();\n\t\t\t\tif (col.length === 0) {\n\t\t\t\t\treturn NaN;\n\t\t\t\t}\n\t\t\t\telse if (!isNaN(col)) { // https://stackoverflow.com/a/35759874/9709414\n\t\t\t\t\treturn parseFloat(col);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn col;\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t\treturn data;\n\t}\n\n\t// From https://stackoverflow.com/questions/1293147/example-javascript-code-to-parse-csv-data\n\tparseCSV(str) {\n\t\tvar arr = [];\n\t\tvar quote = false; // 'true' means we're inside a quoted field\n\t\n\t\t// Iterate over each character, keep track of current row and column (of the returned array)\n\t\tfor (var row = 0, col = 0, c = 0; c < str.length; c++) {\n\t\t\tvar cc = str[c], nc = str[c+1]; // Current character, next character\n\t\t\tarr[row] = arr[row] || []; // Create a new row if necessary\n\t\t\tarr[row][col] = arr[row][col] || ''; // Create a new column (start with empty string) if necessary\n\t\n\t\t\t// If the current character is a quotation mark, and we're inside a\n\t\t\t// quoted field, and the next character is also a quotation mark,\n\t\t\t// add a quotation mark to the current column and skip the next character\n\t\t\tif (cc == '\"' && quote && nc == '\"') {\n\t\t\t\tarr[row][col] += cc; ++c;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's just one quotation mark, begin/end quoted field\n\t\t\tif (cc == '\"') {\n\t\t\t\tquote = !quote;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a elimiter and we're not in a quoted field, move on to the next column\n\t\t\tif (this.delim.includes(cc) && !quote) {\n\t\t\t\t++col;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a newline (CRLF) and we're not in a quoted field, skip the next character\n\t\t\t// and move on to the next row and move to column 0 of that new row\n\t\t\tif (cc == '\\r' && nc == '\\n' && !quote) {\n\t\t\t\t++row; col = 0; ++c;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// If it's a newline (LF or CR) and we're not in a quoted field,\n\t\t\t// move on to the next row and move to column 0 of that new row\n\t\t\tif (cc == '\\n' && !quote) {\n\t\t\t\t++row; col = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (cc == '\\r' && !quote) {\n\t\t\t\t++row; col = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Otherwise, append the current character to the current column\n\t\t\tarr[row][col] += cc;\n\t\t}\n\t\treturn arr;\n\t}\n\n}\n\nexport default CSV;","import Utils from '../utils.js';\n\nexport class Format {\n\n\tconstructor(asset) {\n\t\tObject.assign(this, asset);\n\t\tthis.context = null;\n\t}\n\n\tsetContext(context) {\n\t\tthis.context = context;\n\t}\n\n\tgetContext() {\n\t\treturn this.context;\n\t}\n\n\tgetUrl() {\n\t\treturn this.href;\n\t}\n\n\tcanGroup() {\n\t\treturn false;\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tdownload(filename = null) {\n\t\tlet tempLink = document.createElement('a');\n\t\ttempLink.style.display = 'none';\n\t\ttempLink.href = this.getUrl();\n\t\ttempLink.setAttribute('download', filename ? filename : Utils.makeFileName(\"result\", this.type));\n\t\ttempLink.setAttribute('target', '_blank');\n\t\tdocument.body.appendChild(tempLink);\n\t\ttempLink.click();\n\t\tdocument.body.removeChild(tempLink);\n\t}\n\n\tasync loadData(connection) {\n\t\tif (!this.loaded) {\n\t\t\tthis.data = await this.fetchData(connection);\n\t\t\tthis.loaded = true;\n\t\t}\n\t}\n\n\tgetData() {\n\t\tif (!this.loaded) {\n\t\t\tthrow new Error('Data must be loaded before');\n\t\t}\n\t\treturn this.data;\n\t}\n\n\tasync fetchData(connection) {\n\t\tlet blob;\n\t\tlet url = this.getUrl();\n\t\tif (url.startsWith('blob:')) {\n\t\t\tlet response = await fetch(url);\n\t\t\tblob = await response.blob();\n\t\t}\n\t\telse {\n\t\t\tlet auth = false;\n\t\t\ttry {\n\t\t\t\tlet apiUrl = new URL(connection.getUrl());\n\t\t\t\tlet requestUrl = new URL(url);\n\t\t\t\tauth = apiUrl.origin === requestUrl.origin;\n\t\t\t} catch (error) {}\n\n\t\t\tblob = await connection.download(url, auth);\n\t\t}\n\t\tlet promise = new Promise((resolve, reject) => {\n\t\t\tlet reader = new FileReader();\n\t\t\treader.onload = event => resolve(event.target.result);\n\t\t\treader.onerror = reject;\n\t\t\tif (this.isBinary()) {\n\t\t\t\treader.readAsBinaryString(blob);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treader.readAsText(blob);\n\t\t\t}\n\t\t});\n\t\tlet data = await promise;\n\t\treturn await this.parseData(data);\n\t}\n\n\tasync parseData(data) {\n\t\treturn data;\n\t}\n\n}\n\nexport class SupportedFormat extends Format {\n\n\tconstructor(asset, component = null, icon = 'fa-database', props = {}, events = {}) {\n\t\tsuper(asset);\n\t\tthis.loaded = false;\n\t\tthis.component = component;\n\t\tthis.props = props;\n\t\tif (!this.props.data) {\n\t\t\tthis.props.data = this;\n\t\t}\n\t\tthis.icon = icon;\n\t\tthis.events = events;\n\t}\n\n\tisBinary() {\n\t\treturn false;\n\t}\n\n}\n\nexport class UnsupportedFormat extends Format {\n\n\tconstructor(asset) {\n\t\tsuper(asset);\n\t}\n\n}\n\nexport class FormatCollection extends SupportedFormat {\n\n}","import { SupportedFormat } from './format';\nimport Utils from '../utils';\nimport ProjManager from '../components/maps/projManager';\n\nimport { fromUrl as tiffFromUrl, fromBlob as tiffFromBlob, globals as _ } from 'geotiff';\n\nimport { toUserExtent } from 'ol/proj';\nimport Projection from 'ol/proj/Projection';\nimport { fromCode as unitsFromCode } from 'ol/proj/Units';\n\nconst GDAL_MIN = 'STATISTICS_MINIMUM';\nconst GDAL_MAX = 'STATISTICS_MAXIMUM';\nconst GDAL_NAME = 'DESCRIPTION';\n\nclass GeoTIFF extends SupportedFormat {\n\n\tconstructor(asset, stac) {\n\t\tsuper(asset, \"MapViewer\", 'fa-map', { removableLayers: true });\n\t\tthis._bands = [];\n\t\tthis._nodata = [];\n\t\tthis.img = null;\n\t\tthis.projection = null;\n\t\tthis.extent = null;\n\t\tthis.convertToRGB = false;\n\t\tthis.stac = stac;\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tcanGroup() {\n\t\treturn true;\n\t}\n\n\tasync loadData(connection) {\n\t\tif (!this.loaded) {\n\t\t\tawait this.parseMetadata();\n\t\t\tthis.loaded = true;\n\t\t}\n\t\treturn this;\n\t}\n\n\tgetData() {\n\t\treturn this;\n\t}\n\n\tasync parseMetadata() {\n\t\tlet stacHasExtent = this.stac && (this.stac.geometry || this.stac.extent);\n\n\t\t// Get projection from STAC\n\t\tthis.projection = await ProjManager.addFromStac(this.stac);\n\n\t\t// Get nodata from STAC file:nodata\n\t\tif (Array.isArray(this['file:nodata']) && this['file:nodata'].length > 0) {\n\t\t\tthis._nodata = Utils.parseNodata(this['file:nodata']);\n\t\t}\n\n\t\t// Get min/max/nodata from STAC bands\n\t\tif (Array.isArray(this.bands) && this.bands.length > 0) {\n\t\t\tthis.bands.forEach((band, i) => {\n\t\t\t\t// Get name from band\n\t\t\t\tif (band.name) {\n\t\t\t\t\tthis.setBandInfo(i, {\n\t\t\t\t\t\tname: band.name\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Set min/max from statistics\n\t\t\t\tif (Utils.isObject(band.statistics)) {\n\t\t\t\t\tthis.setBandInfo(i, {\n\t\t\t\t\t\tmin: band.statistics.minimum,\n\t\t\t\t\t\tmax: band.statistics.maximum\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// per-band no-data values are not supported, simply read the no-data from the first occurance if not defined yet\n\t\t\t\tif (this._nodata.length === 0 && typeof band.nodata !== 'undefined') {\n\t\t\t\t\tthis._nodata.push(Utils.parseNodata(band.nodata));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Load example tiff image\n\t\tlet tiff;\n\t\tif (this.getBlob()) {\n\t\t\ttiff = await tiffFromBlob(this.getBlob());\n\t\t}\n\t\telse {\n\t\t\ttiff = await tiffFromUrl(this.getUrl());\n\t\t}\n\t\tthis.img = await tiff.getImage();\n\n\t\t// Get data for each band / sample\n\t\tfor (let i = 0; i < this.img.getSamplesPerPixel(); i++) {\n\t\t\tlet data = {};\n\n\t\t\t// Use min/max for data type (as fallback)\n\t\t\ttry {\n\t\t\t\tlet dummy = this.img.getArrayForSample(i);\n\t\t\t\tif (!Number.isFinite(this._bands[i].min)) {\n\t\t\t\t\tdata.min = this.getMinForDataType(dummy);\n\t\t\t\t}\n\t\t\t\tif (!Number.isFinite(this._bands[i].max)) {\n\t\t\t\t\tdata.max = this.getMaxForDataType(dummy);\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\n\t\t\t// Set min/max/name from statistics, if available\n\t\t\tlet band = this.img.getGDALMetadata(i);\n\t\t\tif (Utils.isObject(band)) {\n\t\t\t\tif (GDAL_MIN in band) {\n\t\t\t\t\tdata.min = parseFloat(band[GDAL_MIN]);\n\t\t\t\t}\n\t\t\t\tif (GDAL_MAX in band) {\n\t\t\t\t\tdata.max = parseFloat(band[GDAL_MAX]);\n\t\t\t\t}\n\t\t\t\tif (GDAL_NAME in band) {\n\t\t\t\t\tdata.name = band[GDAL_NAME];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setBandInfo(i, data);\n\n\t\t\t// get no-data values if needed\n\t\t\tlet nodata = this.img.getGDALNoData();\n\t\t\tif (this._nodata.length === 0 && nodata !== null) {\n\t\t\t\tthis._nodata.push(nodata);\n\t\t\t}\n\t\t}\n\n\t\t// Get projection from GeoTiff\n\t\tlet code;\n\t\tif (!this.projection && this.img.geoKeys) {\n\t\t\tlet { ProjectedCSTypeGeoKey, GeographicTypeGeoKey, ProjLinearUnitsGeoKey, GeogAngularUnitsGeoKey } = this.img.geoKeys;\n\t\t\tif (ProjectedCSTypeGeoKey) {\n\t\t\t\tcode = 'EPSG:' + ProjectedCSTypeGeoKey;\n\t\t\t\tthis.projection = await ProjManager.get(code);\n\t\t\t}\n\t\t\tif (!this.projection && GeographicTypeGeoKey) {\n\t\t\t\tcode = 'EPSG:' + GeographicTypeGeoKey;\n\t\t\t\tthis.projection = await ProjManager.get(code);\n\t\t\t}\n\n\t\t\tif (!this.projection && code) {\n\t\t\t\tconst units = (ProjLinearUnitsGeoKey && unitsFromCode(ProjLinearUnitsGeoKey)) || (GeogAngularUnitsGeoKey && unitsFromCode(GeogAngularUnitsGeoKey));\n\t\t\t\tif (units) {\n\t\t\t\t\tthis.projection = new Projection({ code, units });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Get extent from geotiff\n\t\tif (!stacHasExtent) {\n\t\t\ttry {\n\t\t\t\tlet bbox = this.img.getBoundingBox();\n\t\t\t\tthis.extent = toUserExtent(bbox, this.projection);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t}\n\n\t\t// Store color map as RGB\n\t\tif (this.img.fileDirectory.ColorMap) {\n\t\t\tconst map = Array.from(this.img.fileDirectory.ColorMap);\n\t\t\tconst greenOffset = map.length / 3;\n\t\t\tconst blueOffset = map.length / 3 * 2;\n\t\t\tthis.colorMap = [];\n\t\t\tfor (let i = 0; i < greenOffset; i++) {\n\t\t\t\tthis.colorMap.push([\n\t\t\t\t\tMath.trunc(map[i] / 65536 * 256),\n\t\t\t\t\tMath.trunc(map[i + greenOffset] / 65536 * 256),\n\t\t\t\t\tMath.trunc(map[i + blueOffset] / 65536 * 256),\n\t\t\t\t\tthis._nodata.includes(i) ? 0 : 1\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\t// Get photometric interpretation\n\t\tswitch (this.img.fileDirectory.PhotometricInterpretation) {\n\t\t\tcase _.photometricInterpretations.CMYK:\n\t\t\tcase _.photometricInterpretations.YCbCr:\n\t\t\tcase _.photometricInterpretations.CIELab:\n\t\t\t\tthis.convertToRGB = true;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// RGB and (Black/White)IsZero are handled via user control\n\t\t\t\t// Palette is handled directly by our styling\n\t\t\t\tthis.convertToRGB = false;\n\t\t}\n\t}\n\n\tsetBandInfo(i, data) {\n\t\tif (this._bands[i]) {\n\t\t\tObject.assign(this._bands[i], data);\n\t\t}\n\t\telse {\n\t\t\tthis._bands.push(Object.assign({ id: i + 1 }, data));\n\t\t}\n\t}\n\n\tgetBlob() {\n\t\treturn this.blob;\n\t}\n\n\tgetNoData() {\n\t\treturn this._nodata;\n\t}\n\n\tgetContext() {\n\t\treturn this.stac;\n\t}\n\n\tgetBands() {\n\t\treturn this._bands;\n\t}\n\n\tgetProjection() {\n\t\treturn this.projection;\n\t}\n\n\tgetExtent() {\n\t\treturn this.extent;\n\t}\n\n\tgetColorMap() {\n\t\treturn this.colorMap;\n\t}\n\n\tgetMinForDataType(array) {\n\t\tif (array instanceof Int8Array) {\n\t\t\treturn -128;\n\t\t}\n\t\tif (array instanceof Int16Array) {\n\t\t\treturn -32768;\n\t\t}\n\t\tif (array instanceof Int32Array) {\n\t\t\treturn -2147483648;\n\t\t}\n\t\tif (array instanceof Float32Array) {\n\t\t\treturn 1.2e-38;\n\t\t}\n\t\treturn 0;\n\t}\n\t\n\tgetMaxForDataType(array) {\n\t\tif (array instanceof Int8Array) {\n\t\t\treturn 127;\n\t\t}\n\t\tif (array instanceof Uint8Array) {\n\t\t\treturn 255;\n\t\t}\n\t\tif (array instanceof Uint8ClampedArray) {\n\t\t\treturn 255;\n\t\t}\n\t\tif (array instanceof Int16Array) {\n\t\t\treturn 32767;\n\t\t}\n\t\tif (array instanceof Uint16Array) {\n\t\t\treturn 65535;\n\t\t}\n\t\tif (array instanceof Int32Array) {\n\t\t\treturn 2147483647;\n\t\t}\n\t\tif (array instanceof Uint32Array) {\n\t\t\treturn 4294967295;\n\t\t}\n\t\tif (array instanceof Float32Array) {\n\t\t\treturn 3.4e38;\n\t\t}\n\t\treturn 255;\n\t}\n\n}\n\nexport default GeoTIFF;","import Utils from '../utils';\nimport { SupportedFormat } from './format';\n\nclass JSON_ extends SupportedFormat {\n\n\tconstructor(asset, component = \"DataViewer\") {\n\t\tsuper(asset, component);\n\n\t\tthis.isGeoJson = false;\n\t\t// this.isCovJson = false;\n\t}\n\n\tasync parseData(data) {\n\t\tif (typeof data === 'string') {\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t}\n\t\t}\n\t\tif (Utils.detectGeoJson(data)) {\n\t\t\tthis.isGeoJson = true;\n\t\t\tthis.component = 'MapViewer';\n\t\t\tthis.icon = 'fa-map';\n\t\t}\n\t\telse if (this.isTable(data)) {\n\t\t\tthis.component = 'TableViewer';\n\t\t\tthis.icon = 'fa-table';\n\t\t}\n\t\treturn data;\n\t}\n\n\tisTable(data) {\n\t\tif (!data || typeof data !== 'object' || Utils.size(data) === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tlet values = Object.values(data);\n\t\tlet keys = Object.keys(values[0]);\n\t\treturn !values.some(row => !row || typeof row !== 'object' || !Utils.equals(Object.keys(row), keys));\n\t}\n}\n\nexport default JSON_;","import Utils from './utils';\nimport Process from './process';\nimport { Formula } from '@openeo/js-client';\nimport { ProcessGraph } from '@openeo/js-processgraphs';\n\nexport default {\n\tmathProcesses: null,\n\tgetMathProcesses() {\n\t\tif (!this.mathProcesses) {\n\t\t\tthis.mathProcesses = this.all().filter(Process.isMathProcess);\n\t\t}\n\t\treturn this.mathProcesses;\n\t},\n\tisMath(process) {\n\t\tif (process instanceof ProcessGraph) {\n\t\t\tprocess = process.process;\n\t\t}\n\t\tif (!Utils.isObject(process) || Utils.size(process.process_graph) === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet mathProcessIds = this.getMathProcesses().map(p => p.id)\n\t\t\t.concat(Object.values(Formula.operatorMapping))\n\t\t\t.concat(Object.keys(Formula.arrayOperatorMapping))\n\t\t\t.concat(['array_element']);\n\t\tlet unsupportedFuncs = Object.values(process.process_graph).find(node => !mathProcessIds.includes(node.process_id));\n\t\treturn (typeof unsupportedFuncs === 'undefined');\n\t}\n};","import { SupportedFormat } from './format';\n\nclass BrowserImage extends SupportedFormat {\n\n\tconstructor(asset) {\n\t\tsuper(asset, 'ImageViewer', 'fa-image');\n\t}\n\n\tisBinary() {\n\t\treturn true;\n\t}\n\n\tasync fetchData() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\timg.onerror = () => reject(new Error('Failed to load the image'));\n\t\t\timg.onload = () => resolve(img);\n\t\t\timg.fetchPriotity = 'high';\n\t\t\timg.decoding = 'sync';\n\t\t\timg.src = this.getUrl();\n\t\t});\n\t}\n\n}\n\nexport default BrowserImage;","import { SupportedFormat } from './format';\n\nclass NativeType extends SupportedFormat {\n\n\tconstructor(asset) {\n\t\tsuper(asset, \"DataViewer\");\n\t}\n\n}\n\nexport default NativeType;","import CSV from './csv';\n\nclass TSV extends CSV {\n\n\tconstructor(asset) {\n\t\tsuper(asset, [\"\\t\"]);\n\t}\n\n}\n\nexport default TSV;","import contentType from 'content-type';\n\nimport BrowserImage from '../formats/browserImage';\nimport CSV from '../formats/csv';\nimport GeoTIFF from '../formats/geotiff';\nimport JSON_ from '../formats/json';\nimport NativeType from './native';\nimport TSV from '../formats/tsv';\nimport { UnsupportedFormat } from './format';\n\nexport default class FormatRegistry {\n\n\tconstructor() {\n\t}\n\n\tcreateFilesFromSTAC(stac, resource = null) {\n\t\tlet files = Object.values(stac.assets)\n\t\t\t.filter(asset => !Array.isArray(asset.roles) || !asset.roles.includes(\"metadata\"))\n\t\t\t.map(asset => this.createFileFromAsset(asset, stac));\n\t\tif (resource) {\n\t\t\tfiles.forEach(file => file.setContext(resource));\n\t\t}\n\t\treturn files;\n\t}\n\n\tcreateFilesFromBlob(data) {\n\t\tif (!(data instanceof Blob)) {\n\t\t\tthrow new Error(\"Given data is not a valid Blob\");\n\t\t}\n\t\treturn this.createFilesFromSTAC({\n\t\t\tstac_version: \"1.0.0\",\n\t\t\ttype: \"Feature\",\n\t\t\tgeometry: null,\n\t\t\tproperties: {},\n\t\t\tlinks: [],\n\t\t\tassets: {\n\t\t\t\tresult: {\n\t\t\t\t\thref: URL.createObjectURL(data),\n\t\t\t\t\tblob: data,\n\t\t\t\t\ttype: data.type\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tcreateFileFromAsset(asset, stac) {\n\t\ttry {\n\t\t\t// Detect by media type\n\t\t\tif (typeof asset.type === 'string') {\n\t\t\t\tlet mime = contentType.parse(asset.type.toLowerCase());\n\t\t\t\tswitch(mime.type) {\n\t\t\t\t\tcase 'image/png':\n\t\t\t\t\tcase 'image/jpg':\n\t\t\t\t\tcase 'image/jpeg':\n\t\t\t\t\tcase 'image/gif':\n\t\t\t\t\tcase 'image/webp':\n\t\t\t\t\t\treturn new BrowserImage(asset);\n\t\t\t\t\tcase 'application/json':\n\t\t\t\t\tcase 'text/json':\n\t\t\t\t\tcase 'application/geo+json':\n\t\t\t\t\t\treturn new JSON_(asset);\n\t\t\t\t\tcase 'text/plain':\n\t\t\t\t\t\treturn new NativeType(asset);\n\t\t\t\t\tcase 'text/csv':\n\t\t\t\t\t\treturn new CSV(asset);\n\t\t\t\t\tcase 'text/tab-separated-values':\n\t\t\t\t\t\treturn new TSV(asset);\n\t\t\t\t\tcase 'image/tiff':\n\t\t\t\t\t\treturn new GeoTIFF(asset, stac);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Fallback: Detect by file extension\n\t\t\tif (typeof asset.href === 'string') {\n\t\t\t\tlet extension = asset.href.split(/[#?]/)[0].split('.').pop().trim().toLowerCase();\n\t\t\t\tswitch(extension) {\n\t\t\t\t\tcase 'png':\n\t\t\t\t\tcase 'jpg':\n\t\t\t\t\tcase 'jpeg':\n\t\t\t\t\tcase 'gif':\n\t\t\t\t\tcase 'webp':\n\t\t\t\t\t\treturn new BrowserImage(asset);\n\t\t\t\t\tcase 'json':\n\t\t\t\t\tcase 'geojson':\n\t\t\t\t\t\treturn new JSON_(asset);\n\t\t\t\t\tcase 'txt':\n\t\t\t\t\t\treturn new NativeType(asset);\n\t\t\t\t\tcase 'csv':\n\t\t\t\t\t\treturn new CSV(asset);\n\t\t\t\t\tcase 'tsv':\n\t\t\t\t\t\treturn new TSV(asset);\n\t\t\t\t\tcase 'tif':\n\t\t\t\t\tcase 'tiff':\n\t\t\t\t\t\treturn new GeoTIFF(asset, stac);\n\t\t\t\t}\n\t\t\t}\n\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\treturn new UnsupportedFormat(asset);\n\t}\n\n}","import Vue from 'vue';\nimport Utils from '../utils';\nimport { Job, Service, UserProcess } from '@openeo/js-client';\nimport { ProcessGraph } from '@openeo/js-processgraphs';\nimport FormatRegistry from '../formats/formatRegistry.js';\nimport StacMigrate from '@radiantearth/stac-migrate';\n\nconst serverStorage = \"serverUrls\";\n\nconst getDefaultState = () => {\n\treturn {\n\t\tappMode: null,\n\t\tstoredServers: JSON.parse(localStorage.getItem(serverStorage) || \"[]\"),\n\t\tcontext: null,\n\t\tprocess: null,\n\t\tdiscoverySearchTerm: '',\n\t\thightestModalZIndex: 1000,\n\t\tepsgCodes: [],\n\t\tinitialProcess: null,\n\t\tinitialNode: null,\n\t\topenWizard: null,\n\t\topenWizardProps: {},\n\t\tcollectionPreview: null,\n\t\tviewerOptions: {},\n\t\tmodelDnD: null,\n\t\tformatRegistry: new FormatRegistry(),\n\t};\n};\n\nexport default {\n\tnamespaced: true,\n\tstate: getDefaultState(),\n\tgetters: {\n\t\thasProcess: state => Utils.isObject(state.process) && Utils.size(state.process) > 0 && Utils.size(state.process.process_graph),\n\t\tgetModelNodeFromDnD: (state, getters, rootState, rootGetters) => () => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (!state.modelDnD) {\n\t\t\t\t\tresolve(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst getterFn = () => {\n\t\t\t\t\tswitch(state.modelDnD.type) {\n\t\t\t\t\t\tcase 'collection':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'load_collection',\n\t\t\t\t\t\t\t\targuments: rootGetters.collectionDefaults(state.modelDnD.data.id)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'process':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: state.modelDnD.data.id,\n\t\t\t\t\t\t\t\tnamespace: state.modelDnD.data.namespace,\n\t\t\t\t\t\t\t\targuments: {}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'udf':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'run_udf',\n\t\t\t\t\t\t\t\targuments: state.modelDnD.data\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'fileformat':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tprocess_id: 'save_result',\n\t\t\t\t\t\t\t\targuments: {format: state.modelDnD.data.name, options: {}}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (state.modelDnD.loading) {\n\t\t\t\t\tlet id = setInterval(() => {\n\t\t\t\t\t\tif (!state.modelDnD || state.modelDnD.loading) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearInterval(id);\n\t\t\t\t\t\tresolve(getterFn());\n\t\t\t\t\t}, 50);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(getterFn());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tactions: {\n\t\tasync loadEpsgCodes(cx) {\n\t\t\tif (cx.state.epsgCodes.length === 0) {\n\t\t\t\tlet res = await import('../assets/epsg-names.json');\n\t\t\t\tcx.commit('epsgCodes', res.default);\n\t\t\t}\n\t\t},\n\t\tasync loadInitialProcess(cx) {\n\t\t\tif (cx.state.process) {\n\t\t\t\treturn; // Process already loaded (usually during a later login)\n\t\t\t}\n\t\t\tif (Utils.isUrl(cx.state.initialProcess)) {\n\t\t\t\tlet response = await Utils.axios().get(cx.state.initialProcess);\n\t\t\t\tif (Utils.isObject(response.data)) {\n\t\t\t\t\tvar pg = new ProcessGraph(response.data);\n\t\t\t\t\tpg.parse();\n\t\t\t\t\tcx.commit('setProcess', response.data);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof cx.state.initialProcess === 'string' && cx.state.initialProcess.length > 0) {\n\t\t\t\tlet [id, namespace] = Utils.extractUDPParams(cx.state.initialProcess);\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('loadProcess', {id, namespace}, {root: true});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn(error);\n\t\t\t\t}\n\t\t\t\tcx.commit('setProcess', {\n\t\t\t\t\tprocess_graph: {\n\t\t\t\t\t\t[id]: {\n\t\t\t\t\t\t\tprocess_id: id,\n\t\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\t\tresult: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync loadForAppMode(cx) {\n\t\t\tif (!cx.state.appMode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (cx.state.appMode.resultType !== 'service') {\n\t\t\t\ttry {\n\t\t\t\t\tlet response = await Utils.axios().get(cx.state.appMode.resultUrl);\n\t\t\t\t\tif (Utils.isObject(response.data)) {\n\t\t\t\t\t\tcx.commit('setAppModeData', response.data);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthrow new Error(\"Sorry, the shared data is not available anymore!\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmutations: {\n\t\tsetModelDnD(state, obj = null) {\n\t\t\tstate.modelDnD = obj;\n\t\t},\n\t\tsetDiscoverySearchTerm(state, searchTerm) {\n\t\t\tstate.discoverySearchTerm = typeof searchTerm === 'string' ? searchTerm : '';\n\t\t},\n\t\tsetInitialProcess(state, process) {\n\t\t\tstate.initialProcess = process;\n\t\t},\n\t\tsetInitialNode(state, node) {\n\t\t\tstate.initialNode = node;\n\t\t},\n\t\tsetAppMode(state, appMode) {\n\t\t\tstate.appMode = {\n\t\t\t\t...appMode,\n\t\t\t\ttitle: 'Results',\n\t\t\t\tdata: null,\n\t\t\t\texpires: null\n\t\t\t};\n\t\t},\n\t\tsetAppModeData(state, data) {\n\t\t\tif (data.type) {\n\t\t\t\tdata = StacMigrate.stac(data, false);\n\t\t\t}\n\n\t\t\tVue.set(state.appMode, 'data', data);\n\n\t\t\tlet process, title, expires;\n\t\t\tif (data.type === 'Collection') {\n\t\t\t\tprocess = Utils.getProcessingExpression(data) || Utils.getProcessingExpression(data.summaries);\n\t\t\t\ttitle = data.title;\n\t\t\t\texpires = data.expires;\n\t\t\t}\n\t\t\telse if (data.type === 'Feature') {\n\t\t\t\tprocess = Utils.getProcessingExpression(data.properties);\n\t\t\t\ttitle = data.properties?.title;\n\t\t\t\texpires = data.properties?.expires;\n\t\t\t}\n\t\t\tif (process) {\n\t\t\t\tstate.process = process;\n\t\t\t}\n\t\t\tif (title) {\n\t\t\t\tVue.set(state.appMode, 'title', title);\n\t\t\t\tVue.set(state.appMode, 'expires', expires);\n\t\t\t\tstate.context = title;\n\t\t\t}\n\t\t},\n\t\tsetViewerOptions(state, options) {\n\t\t\tstate.viewerOptions = options || {};\n\t\t},\n\t\tsetOpenWizard(state, {component, options}) {\n\t\t\tstate.openWizard = component;\n\t\t\tif (component) {\n\t\t\t\tstate.openWizardProps = options;\n\t\t\t}\n\t\t},\n\t\tsetCollectionPreview(state, collectionID) {\n\t\t\tstate.collectionPreview = collectionID;\n\t\t\tif (!state.discoverySearchTerm) {\n\t\t\t\tstate.discoverySearchTerm = typeof collectionID === 'string' ? collectionID : '';\n\t\t\t}\n\t\t},\n\t\topenModal(state) {\n\t\t\tstate.hightestModalZIndex = state.hightestModalZIndex + 1;\n\t\t},\n\t\tcloseModal(state) {\n\t\t\tstate.hightestModalZIndex = state.hightestModalZIndex - 1;\n\t\t},\n\t\taddServer(state, url) {\n\t\t\tif (state.storedServers.indexOf(url) === -1) {\n\t\t\t\tstate.storedServers.push(url);\n\t\t\t}\n\t\t\tlocalStorage.setItem(serverStorage, JSON.stringify(state.storedServers));\n\t\t},\n\t\tremoveServer(state, url) {\n\t\t\tstate.storedServers.splice(state.storedServers.indexOf(url), 1);\n\t\t\tlocalStorage.setItem(serverStorage, JSON.stringify(state.storedServers));\n\t\t},\n\t\tsetContext(state, obj) {\n\t\t\tstate.context = obj;\n\t\t\tif (obj instanceof Job || obj instanceof Service) {\n\t\t\t\tstate.process = obj.process;\n\t\t\t}\n\t\t\telse if (obj instanceof UserProcess) {\n\t\t\t\tstate.process = obj.toJSON();\n\t\t\t}\n\t\t\telse if (Utils.isObject(obj) && obj.process) {\n\t\t\t\tstate.process = obj.process;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstate.process = obj;\n\t\t\t}\n\t\t},\n\t\tsetProcess(state, process) {\n\t\t\tstate.process = process;\n\t\t},\n\t\tepsgCodes(state, epsgCodes) {\n\t\t\tstate.epsgCodes = epsgCodes;\n\t\t},\n\t\treset(state) {\n\t\t\tObject.assign(state, getDefaultState());\n\t\t}\n\t}\n};\n","import { UserProcess } from '@openeo/js-client';\nimport { Utils } from '@openeo/js-commons';\nimport Vue from 'vue';\n\nexport default ({namespace, listFn, paginateFn, createFn, updateFn, deleteFn, readFn, readFnById, customizations, primaryKey}) => {\n\tif (!primaryKey) {\n\t\tprimaryKey = 'id';\n\t}\n\tconst getDefaultState = () => {\n\t\treturn {\n\t\t\tpages: null,\n\t\t\thasMore: false,\n\t\t\t[namespace]: []\n\t\t};\n\t};\n\tlet definition = {\n\t\tnamespaced: true,\n\t\tstate: getDefaultState(),\n\t\tgetters: {\n\t\t\tsupportsList: (state, getters, rootState, rootGetters) => rootGetters.supports(listFn),\n\t\t\tsupportsCreate: (state, getters, rootState, rootGetters) => rootGetters.supports(createFn),\n\t\t\tsupportsUpdate: (state, getters, rootState, rootGetters) => rootGetters.supports(updateFn),\n\t\t\tsupportsDelete: (state, getters, rootState, rootGetters) => rootGetters.supports(deleteFn),\n\t\t\tsupportsRead: (state, getters, rootState, rootGetters) => rootGetters.supports(readFn),\n\t\t\tgetById: (state) => (id) => {\n\t\t\t\tlet data = state[namespace].find(x => x[primaryKey] === id);\n\t\t\t\treturn typeof data !== 'undefined' ? data : null;\n\t\t\t}\n\t\t},\n\t\tactions: {\n\t\t\tasync create(cx, parameters) {\n\t\t\t\tif (cx.getters.supportsCreate) {\n\t\t\t\t\tlet connection = cx.rootState.connection;\n\t\t\t\t\tlet data = await connection[createFn].apply(connection, parameters);\n\t\t\t\t\tcx.commit('upsert', data);\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Adding is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync delete(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsDelete) {\n\t\t\t\t\tawait data[deleteFn]();\n\t\t\t\t\tcx.commit('delete', data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Deleting is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync update(cx, {data, parameters}) {\n\t\t\t\tif (cx.getters.supportsUpdate) {\n\t\t\t\t\tlet updated = await data[updateFn](parameters);\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Updating is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync read(cx, {data}) {\n\t\t\t\tlet updated = null;\n\t\t\t\tif (!(data instanceof UserProcess)) {\n\t\t\t\t\tlet id = Utils.isObject(data) ? data[primaryKey] : data;\n\t\t\t\t\t// Try to get UserProcess from store\n\t\t\t\t\tdata = cx.getters.getById(id);\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\t// Try to load UserProcess from Connection\n\t\t\t\t\t\tupdated = await cx.rootState.connection[readFnById](data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!updated) {\n\t\t\t\t\t// Try to update UserProcess\n\t\t\t\t\tupdated = await data[readFn]();\n\t\t\t\t}\n\t\t\t\t// Update or insert, depending on previous state\n\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\treturn updated;\n\t\t\t},\n\t\t\tasync list(cx) {\n\t\t\t\tconst count = cx.state[namespace].length;\n\t\t\t\tif (cx.getters.supportsList) {\n\t\t\t\t\t// Pass over existing data so that it can be updated (for all complete entities, only update fields that exist in the new object)\n\t\t\t\t\t// instead of getting replaced, see https://github.com/Open-EO/openeo-web-editor/issues/234\n\t\t\t\t\tlet pageLimit = Math.max(cx.rootState.pageLimit, count);\n\t\t\t\t\tif (paginateFn) {\n\t\t\t\t\t\tconst pages = cx.rootState.connection[paginateFn](pageLimit, cx.state[namespace]);\n\t\t\t\t\t\tconst data = await pages.nextPage();\n\t\t\t\t\t\tcx.commit('reset'); // Keep close to the update to avoid flickering\n\t\t\t\t\t\tcx.commit('pages', pages);\n\t\t\t\t\t\tcx.commit('data', data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst data = await cx.rootState.connection[listFn](cx.state[namespace]);\n\t\t\t\t\t\tcx.commit('reset'); // Keep close to the update to avoid flickering\n\t\t\t\t\t\tcx.commit('data', data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn cx.state[namespace];\n\t\t\t},\n\t\t\tasync nextPage(cx) {\n\t\t\t\tif (!cx.state.pages || !cx.state.hasMore) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcx.commit('data', await cx.state.pages.nextPage());\n\t\t\t\treturn cx.state[namespace];\n\t\t\t}\n\t\t},\n\t\tmutations: {\n\t\t\tdata(state, data) {\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\tfor (let d of data) {\n\t\t\t\t\t\tstate[namespace].push(d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.hasMore = state.pages ? state.pages.hasNextPage() : false;\n\t\t\t},\n\t\t\tpages(state, pages) {\n\t\t\t\tstate.pages = pages;\n\t\t\t},\n\t\t\tupsert(state, data) {\n\t\t\t\tlet id = data[primaryKey];\n\t\t\t\tlet index = state[namespace].findIndex(x => x[primaryKey] === id);\n\t\t\t\tlet observableData = Vue.observable(data);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tVue.set(state[namespace], index, observableData);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstate[namespace].push(observableData);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete(state, data) {\n\t\t\t\tlet id = data[primaryKey];\n\t\t\t\tlet index = state[namespace].findIndex(x => x[primaryKey] === id);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tVue.delete(state[namespace], index);\n\t\t\t\t}\n\t\t\t},\n\t\t\treset(state) {\n\t\t\t\tObject.assign(state, getDefaultState());\n\t\t\t}\n\t\t}\n\t};\n\t// Override with custom definitions\n\tfor(let key in customizations) {\n\t\tObject.assign(definition[key], customizations[key]);\n\t}\n\treturn definition;\n};","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'files',\n\tlistFn: 'listFiles',\n\tpaginateFn: 'paginateFiles',\n\tcreateFn: 'uploadFile',\n\tupdateFn: 'uploadFile',\n\tdeleteFn: 'deleteFile',\n\treadFn: 'downloadFile',\n\treadFnById: 'getFile',\n\tprimaryKey: 'path',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'jobs',\n\tlistFn: 'listJobs',\n\tpaginateFn: 'paginateJobs',\n\tcreateFn: 'createJob',\n\tupdateFn: 'updateJob',\n\tdeleteFn: 'deleteJob',\n\treadFn: 'describeJob',\n\treadFnById: 'getJob',\n\tcustomizations: {\n\t\tgetters: {\n\t\t\tsupportsQueue: (state, getters, rootState, rootGetters) => rootGetters.supports('startJob'),\n\t\t\tsupportsCancel: (state, getters, rootState, rootGetters) => rootGetters.supports('stopJob')\n\t\t},\n\t\tactions: {\n\t\t\tasync queue(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsQueue) {\n\t\t\t\t\tlet updated = await data.startJob();\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Queueing a batch job is not supported by the server.\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync cancel(cx, {data}) {\n\t\t\t\tif (cx.getters.supportsCancel) {\n\t\t\t\t\tlet updated = await data.stopJob();\n\t\t\t\t\tcx.commit('upsert', updated);\n\t\t\t\t\treturn updated;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error(\"Canceling a batch job is not supported by the server.\");\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\n\nexport default storeFactory({\n\tnamespace: 'services',\n\tlistFn: 'listServices',\n\tpaginateFn: 'paginateServices',\n\tcreateFn: 'createService',\n\tupdateFn: 'updateService',\n\tdeleteFn: 'deleteService',\n\treadFn: 'describeService',\n\treadFnById: 'getService',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t}\n\t}\n});","import storeFactory from './storeFactory';\nimport Utils from '../utils';\n\nexport default storeFactory({\n\tnamespace: 'userProcesses',\n\tlistFn: 'listUserProcesses',\n\tpaginateFn: null,\n\tcreateFn: 'setUserProcess',\n\tupdateFn: 'replaceUserProcess',\n\tdeleteFn: 'deleteUserProcess',\n\treadFn: 'describeUserProcess',\n\treadFnById: 'getUserProcess',\n\tcustomizations: {\n\t\tgetters: {\n\t\t},\n\t\tactions: {\n\t\t},\n\t\tmutations: {\n\t\t\tdata(state, data) {\n\t\t\t\tstate.userProcesses = data\n\t\t\t\t\t.map(p => Object.assign(p, {namespace: 'user'}))\n\t\t\t\t\t.filter(p => (typeof p.id === 'string'))\n\t\t\t\t\t.sort(Utils.sortById);\n\t\t\t}\n\t\t}\n\t}\n});","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport { OpenEO, FileTypes, Formula } from '@openeo/js-client';\nimport { ProcessRegistry } from '@openeo/js-commons';\nimport StacMigrate from '@radiantearth/stac-migrate';\nimport Utils from '../utils.js';\nimport ProcessRegistryExtension from '../registryExtension.js';\nimport Config from '../../config';\n// Sub-modules\nimport editor from './editor';\nimport files from './files';\nimport jobs from './jobs';\nimport services from './services';\nimport userProcesses from './userProcesses';\n\nVue.use(Vuex);\n\nFormula.arrayOperatorMapping = {\n\t'product': '*',\n\t'sum': '+'\n};\nFormula.reverseOperatorMapping = (() => {\n\tconst mapping = {};\n\tfor(const op in Formula.operatorMapping) {\n\t\tmapping[Formula.operatorMapping[op]] = op;\n\t}\n\treturn Object.assign(mapping, Formula.arrayOperatorMapping);\n})();\n\nconst getDefaultState = () => {\n\treturn {\n\t\tconnection: null,\n\t\tactiveRequests: 0,\n\t\tdiscoveryCompleted: false,\n\t\tisAuthenticated: false,\n\t\tuserInfo: {},\n\t\tconnectionError: null,\n\t\tbeforeLogoutListener: {},\n\t\tauthProviders: [],\n\t\tfileFormats: {},\n\t\tserviceTypes: {},\n\t\tudfRuntimes: {},\n\t\tprocessesUpdated: 0,\n\t\tcollections: [],\n\t\tprocessNamespaces: Config.processNamespaces || [],\n\t\tpageLimit: Config.pageLimit,\n\t};\n};\n\nexport default new Vuex.Store({\n//\tstrict: true, // Can't enable, js-client gets mutated externally\n\tmodules: {\n\t\teditor,\n\t\tfiles,\n\t\tjobs,\n\t\tservices,\n\t\tuserProcesses\n\t},\n\tstate: getDefaultState(),\n\tgetters: {\n\t\ttitle: (state) => {\n\t\t\tif (state.connection !== null && state.connection.capabilities() !== null) {\n\t\t\t\tconst title = state.connection.capabilities().title();\n\t\t\t\treturn title ? title : state.connection.getUrl();\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tcapabilities: (state) => state.connection !== null ? state.connection.capabilities() : null,\n\t\tsupports: (state) => (feature) => state.connection !== null && state.connection.capabilities() !== null && state.connection.capabilities().hasFeature(feature),\n\t\tcurrency: (state) => {\n\t\t\tlet currency = '';\n\t\t\tif (state.connection && state.connection.capabilities().currency() !== null) {\n\t\t\t\tcurrency = state.connection.capabilities().currency();\n\t\t\t}\n\t\t\treturn currency;\n\t\t},\n\t\tisConnected: (state) => state.connection !== null && state.connection.capabilities() !== null,\n\t\tisDiscovered: (state) => state.connection !== null && state.discoveryCompleted,\n\t\tsupportsBilling: (state) => state.connection !== null && state.connection.capabilities().currency() !== null,\n\t\tsupportsBillingPlans: (state) => state.connection !== null && state.connection.capabilities().currency() !== null && state.connection.capabilities().listPlans().length > 0,\n\t\tapiVersion: (state) => state.connection !== null ? state.connection.capabilities().apiVersion() : null,\n\t\tfileFormats: (state) => state.fileFormats instanceof FileTypes ? state.fileFormats.toJSON() : {input: {}, output: {}},\n\t\tcollectionDefaults: (state) => (id) => {\n\t\t\tconst collection = state.collections.find(c => c.id === id);\n\t\t\tif (!Utils.isObject(collection)) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tlet spatial_extent = null;\n\t\t\ttry {\n\t\t\t\tspatial_extent = Utils.extentToBBox(collection.extent.spatial.bbox[0]);\n\t\t\t} catch (error) {}\n\n\t\t\tlet temporal_extent = null;\n\t\t\ttry {\n\t\t\t\ttemporal_extent = collection.extent.temporal.interval[0];\n\t\t\t\tif (temporal_extent[0] === null && temporal_extent[1] === null) {\n\t\t\t\t\ttemporal_extent = null;\n\t\t\t\t}\n\t\t\t\telse if (temporal_extent[0] == temporal_extent[1]) {\n\t\t\t\t\ttemporal_extent[1] = null;\n\t\t\t\t}\n\t\t\t} catch (error) {}\n\t\n\t\t\tlet bands = null;\n\t\t\treturn {id, spatial_extent, temporal_extent, bands};\n\t\t},\n\t\tprocesses: (state) => {\n\t\t\tlet registry\n\t\t\tif (state.processesUpdated && state.connection !== null) {\n\t\t\t\tregistry = state.connection.processes;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tregistry = new ProcessRegistry();\n\t\t\t}\n\t\t\treturn Object.assign(registry, ProcessRegistryExtension);\n\t\t},\n\t\tsupportsMath: (state, getters) => {\n\t\t\tif (!state.processesUpdated) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor(let i in Formula.operatorMapping) {\n\t\t\t\tlet processId = Formula.operatorMapping[i];\n\t\t\t\tif (!getters.processes.has(processId)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\tactions: {\n\t\tasync connect(cx, url) {\n\t\t\tawait cx.dispatch('logout');\n\n\t\t\t// Connect and request capabilities\n\t\t\tlet connection = null;\n\t\t\ttry {\n\t\t\t\tconnection = await OpenEO.connect(url, {addNamespaceToProcess: true});\n\t\t\t} catch (error) {\n\t\t\t\tif(error.message == 'Network Error' || error.name == 'NetworkError') {\n\t\t\t\t\terror = new Error(\"Server is not available.\");\n\t\t\t\t}\n\t\t\t\tcx.commit('setConnectionError', error);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Request auth provider list\n\t\t\ttry {\n\t\t\t\tconst providers = await connection.listAuthProviders();\n\t\t\t\tcx.commit('authProviders', providers);\n\t\t\t} catch (error) {\n\t\t\t\tcx.commit('setConnectionError', error);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconnection.on('authProviderChanged', async (provider) => {\n\t\t\t\tcx.commit('authenticated', provider !== null);\n\t\t\t\tif (cx.state.discoveryCompleted) {\n\t\t\t\t\tawait cx.dispatch('discover', true);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconnection.on('processesChanged', () => cx.commit('updateProcesses'));\n\n\t\t\t// Only commit the connection change after requesting the auth providers\n\t\t\t// as this indicates that the connection procedure has finished.\n\t\t\tcx.commit('connection', connection);\n\n\t\t\treturn true;\n\t\t},\n\n\t\tasync discover(cx, refresh = false) {\n\t\t\tlet promises = [];\n\t\t\tlet errors = [];\n\t\t\tlet capabilities = cx.state.connection.capabilities();\n\n\t\t\t// Request collections\n\t\t\tif (capabilities.hasFeature('listCollections')) {\n\t\t\t\tpromises.push(cx.state.connection.listCollections()\n\t\t\t\t\t.then(response => cx.commit('collections', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\t\t\telse {\n\t\t\t\terrors.push(new Error(\"Collections not supported by the server.\"));\n\t\t\t}\n\n\t\t\tif (!refresh) { // Only load on first discovery, otherwise the JS client already refreshes the data\n\t\t\t\t// Request processes\n\t\t\t\tif (capabilities.hasFeature('listProcesses')) {\n\t\t\t\t\tpromises.push(cx.state.connection.listProcesses()\n\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\terrors.push(new Error(\"Pre-defined processes not supported by the server.\"));\n\t\t\t\t}\n\n\t\t\t\t// Request processes from namespaces\n\t\t\t\tif (cx.state.processNamespaces.length > 0) {\n\t\t\t\t\tfor(let namespace of cx.state.processNamespaces) {\n\t\t\t\t\t\tpromises.push(cx.state.connection.listProcesses(namespace)\n\t\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Request custom processes\n\t\t\t\tif (capabilities.hasFeature('listUserProcesses') && cx.state.connection.isAuthenticated()) {\n\t\t\t\t\tpromises.push(cx.dispatch('userProcesses/list')\n\t\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Request supported output formats\n\t\t\tif (capabilities.hasFeature('listFileTypes')) {\n\t\t\t\tpromises.push(cx.state.connection.listFileTypes()\n\t\t\t\t\t.then(response => cx.commit('fileFormats', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request supported service types\n\t\t\tif (capabilities.hasFeature('listServiceTypes')) {\n\t\t\t\tpromises.push(cx.state.connection.listServiceTypes()\n\t\t\t\t\t.then(response => cx.commit('serviceTypes', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request supported UDF runtimes\n\t\t\tif (capabilities.hasFeature('listUdfRuntimes')) {\n\t\t\t\tpromises.push(cx.state.connection.listUdfRuntimes()\n\t\t\t\t\t.then(response => cx.commit('udfRuntimes', response))\n\t\t\t\t\t.catch(error => errors.push(error)));\n\t\t\t}\n\n\t\t\t// Request user account information\n\t\t\tconst promise = cx.dispatch('describeAccount')\n\t\t\t\t.catch(error => errors.push(error));\n\t\t\tpromises.push(promise);\n\n\t\t\tawait Promise.all(promises);\n\n\t\t\t// Request initial process\n\t\t\tif (!refresh) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('editor/loadInitialProcess');\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Request results for app mode\n\t\t\tif (!refresh) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cx.dispatch('editor/loadForAppMode');\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcx.commit('discoveryCompleted');\n\t\t\treturn errors;\n\t\t},\n\n\t\t// Request user account info\n\t\tasync describeAccount(cx) {\n\t\t\tif (cx.getters.supports('describeAccount') && cx.state.isAuthenticated) {\n\t\t\t\tconst response = await cx.state.connection.describeAccount();\n\t\t\t\tcx.commit('userInfo', response);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcx.commit('userInfo');\n\t\t\t}\n\t\t},\n\n\t\tasync describeCollection(cx, id) {\n\t\t\tlet collection = cx.state.collections.find(c => c.id === id);\n\t\t\tif (!collection || !collection._loaded) {\n\t\t\t\tcollection = await cx.state.connection.describeCollection(id);\n\t\t\t\tcollection = StacMigrate.collection(collection, false);\n\t\t\t\tcx.commit('fillCollection', collection);\n\t\t\t}\n\t\t\treturn collection;\n\t\t},\n\n\t\tasync loadProcess(cx, {id, namespace}) {\n\t\t\tconst process = cx.getters.processes.get(id, namespace);\n\t\t\tif (!Utils.isObject(process)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (process.namespace !== 'backend') {\n\t\t\t\tif (process.namespace === 'user') {\n\t\t\t\t\tawait cx.dispatch('userProcesses/read', {data: process});\n\t\t\t\t}\n\t\t\t\telse if (process.namespace && namespace !== 'backend') {\n\t\t\t\t\tawait cx.state.connection.describeProcess(id, process.namespace);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cx.getters.processes.get(id, namespace);\n\t\t},\n\n\t\tasync beforeLogout(cx) {\n\t\t\tawait Promise.all(Object.values(cx.state.beforeLogoutListener).map(listener => listener()));\n\t\t},\n\n\t\tasync logout(cx, disconnect = false) {\n\t\t\tawait cx.dispatch('beforeLogout');\n\n\t\t\tif (disconnect) {\n\t\t\t\t// Remove listeners, we don't need them anymore if we connect anyway\n\t\t\t\tcx.state.connection.off('authProviderChanged');\n\t\t\t\tcx.state.connection.off('processesChanged');\n\t\t\t}\n\n\t\t\tif (cx.state.isAuthenticated) {\n\t\t\t\t// Logout (mostly for OIDC)\n\t\t\t\tconst authProvider = cx.state.connection.getAuthProvider();\n\t\t\t\tif (authProvider !== null) {\n\t\t\t\t\tawait authProvider.logout();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disconnect) {\n\t\t\t\t// Reset values\n\t\t\t\tcx.commit('reset', this.isAuthenticated);\n\t\t\t\tcx.commit('jobs/reset');\n\t\t\t\tcx.commit('files/reset');\n\t\t\t\tcx.commit('services/reset');\n\t\t\t\tcx.commit('userProcesses/reset');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcx.commit('authenticated', false);\n\t\t\t}\n\t\t}\n\t},\n\tmutations: {\n\t\tdiscoveryCompleted(state, completed = true) {\n\t\t\tstate.discoveryCompleted = completed;\n\t\t},\n\t\tconnection(state, connection) {\n\t\t\tstate.connection = connection;\n\t\t},\n\t\tauthProviders(state, authProviders) {\n\t\t\tstate.authProviders = authProviders;\n\t\t},\n\t\tuserInfo(state, info) {\n\t\t\tstate.userInfo = Utils.isObject(info) ? info : {};\n\t\t},\n\t\tfileFormats(state, fileFormats) {\n\t\t\tstate.fileFormats = fileFormats;\n\t\t},\n\t\tserviceTypes(state, serviceTypes) {\n\t\t\t// Make keys uppercase for simplicity\n\t\t\tif (Utils.isObject(serviceTypes)) {\n\t\t\t\tconst obj = {};\n\t\t\t\tfor(const key in serviceTypes) {\n\t\t\t\t\tobj[key.toUpperCase()] = serviceTypes[key];\n\t\t\t\t}\n\t\t\t\tstate.serviceTypes = obj;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstate.serviceTypes = serviceTypes;\n\t\t\t}\n\t\t},\n\t\tudfRuntimes(state, udfRuntimes) {\n\t\t\tstate.udfRuntimes = udfRuntimes;\n\t\t},\n\t\tupdateProcesses(state) {\n\t\t\tstate.processesUpdated++;\n\t\t},\n\t\taddProcessNamespacesToRequest(state, namespaces) {\n\t\t\tif (typeof namespaces === 'string') {\n\t\t\t\tnamespaces = namespaces.split(',');\n\t\t\t}\n\t\t\tif (!Array.isArray(namespaces)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor(let namespace of namespaces) {\n\t\t\t\tif (namespace && !state.processNamespaces.includes(namespace)) {\n\t\t\t\t\tstate.processNamespaces.push(namespace);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfillCollection(state, data) {\n\t\t\tlet index = state.collections.findIndex(c => c.id === data.id);\n\t\t\tif (index !== -1) {\n\t\t\t\tdata._loaded = true;\n\t\t\t\tVue.set(state.collections, index, data);\n\t\t\t}\n\t\t},\n\t\tcollections(state, data) {\n\t\t\tstate.collections = data.collections\n\t\t\t\t.map(c => StacMigrate.collection(c, false))\n\t\t\t\t.filter(c => (typeof c.id === 'string'))\n\t\t\t\t.sort(Utils.sortById);\n\t\t},\n\t\tsetConnectionError(state, error) {\n\t\t\tstate.connectionError = error;\n\t\t},\n\t\tauthenticated(state, isAuthenticated) {\n\t\t\tstate.isAuthenticated = isAuthenticated;\n\t\t\tif (!isAuthenticated) {\n\t\t\t\tstate.userInfo = {};\n\t\t\t}\n\t\t},\n\t\treset(state, keepConnection = false) {\n\t\t\tObject.assign(state, getDefaultState(), {\n\t\t\t\tconnection: keepConnection ? state.connection : null\n\t\t\t});\n\t\t},\n\t\tstartActiveRequest(state) {\n\t\t\tstate.activeRequests += 1;\n\t\t},\n\t\tendActiveRequest(state) {\n\t\t\tstate.activeRequests -= 1;\n\t\t},\n\t\tbeforeLogoutListener(state, {key, listener}) {\n\t\t\tif (typeof listener === 'function') {\n\t\t\t\tstate.beforeLogoutListener[key] = listener;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVue.delete(state.beforeLogoutListener, key);\n\t\t\t}\n\t\t}\n\t}\n});","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"container\",class:{connecting: !_vm.isDiscovered}},[_c('transition',{attrs:{\"name\":\"connect-fade\",\"mode\":\"out-in\"}},[(!_vm.isDiscovered)?_c('ConnectForm',{key:\"1\",attrs:{\"skipLogin\":_vm.skipLogin}}):_c('IDE',{key:\"2\"})],1),_vm._l((_vm.modals),function(modal){return [_c(modal.component,_vm._g(_vm._b({key:modal.id,tag:\"component\",on:{\"closed\":function($event){return _vm.hideModal(modal)}}},'component',modal.props,false),modal.events))]}),_c('vue-snotify'),(_vm.tourType)?_c('Tour',{model:{value:(_vm.tourType),callback:function ($$v) {_vm.tourType=$$v},expression:\"tourType\"}}):_vm._e(),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.activeRequests > 0),expression:\"activeRequests > 0\"}],attrs:{\"id\":\"activeRequests\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-2x\"})])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"connectPage\"},[_c('Logo'),_c('div',{staticClass:\"connectContainer\"},[_c('div',{staticClass:\"helpBtn\",attrs:{\"title\":\"Show help\"},on:{\"click\":_vm.showHelp}},[_c('i',{staticClass:\"fas fa-question fa-fw\"}),_vm._v(\" Help\")]),(_vm.httpsUrl)?_c('div',{staticClass:\"message error\"},[_c('i',{staticClass:\"fas fa-shield-alt\"}),_c('span',[_vm._v(\"You are using an \"),_c('strong',[_vm._v(\"insecure\")]),_vm._v(\" HTTP connection, which is not encrypted. Please use HTTPS if possible.\"),_c('br'),_c('a',{attrs:{\"href\":_vm.httpsUrl}},[_vm._v(\"Click here to switch to a secured HTTPS connection.\")])])]):_vm._e(),(_vm.message)?_c('div',{staticClass:\"message warning\"},[_c('i',{staticClass:\"fas fa-bullhorn\"}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.message)}})]):_vm._e(),_c('transition',{attrs:{\"name\":\"connect-fade\",\"mode\":\"out-in\"},on:{\"before-enter\":_vm.initProviders}},[(_vm.showConnectForm)?_c('form',{staticClass:\"connect\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submitForm.apply(null, arguments)}}},[_c('h3',[_vm._v(\"Connect to server\")]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"serverUrl\"}},[_vm._v(\"URL:\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.trim\",value:(_vm.serverUrl),expression:\"serverUrl\",modifiers:{\"lazy\":true,\"trim\":true}}],staticClass:\"tour-connect-url\",attrs:{\"type\":\"text\",\"id\":\"serverUrl\",\"disabled\":_vm.autoConnect},domProps:{\"value\":(_vm.serverUrl)},on:{\"change\":function($event){_vm.serverUrl=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}}),(_vm.allowOtherServers)?_c('button',{staticClass:\"tour-connect-history\",attrs:{\"type\":\"button\",\"title\":\"Select previously used server\"},on:{\"click\":_vm.showServerSelector}},[_c('i',{staticClass:\"fas fa-book\"})]):_vm._e()])]),_c('div',{staticClass:\"row\"},[_c('button',{staticClass:\"connectBtn tour-connect-retry\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_vm._v(\" Connect\")])])]):(_vm.showLoginForm)?_c('div',{staticClass:\"login\"},[_c('h3',[_vm._v(\"Log in to \"+_vm._s(_vm.title))]),_c('Tabs',{ref:\"providers\",attrs:{\"id\":\"credentials\",\"pills\":true,\"pillsMultiline\":true},on:{\"selected\":_vm.providerSelected},scopedSlots:_vm._u([{key:\"dynamic\",fn:function({ tab }){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery(tab.data)}}},[(tab.data.description)?_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(_vm._s(tab.data.description))])]):_vm._e(),(!_vm.hasPredefinedOidcClientId)?[_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Client ID:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.userOidcClientId),expression:\"userOidcClientId\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"type\":\"text\",\"required\":\"required\"},domProps:{\"value\":(_vm.userOidcClientId)},on:{\"input\":function($event){if($event.target.composing)return;_vm.userOidcClientId=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-exclamation-circle\"}),_c('span',[_vm._v(\"You need to specify the \"),_c('em',[_vm._v(\"Client ID\")]),_vm._v(\" provided to you by the provider. You need to allow the \"),_c('a',{attrs:{\"href\":_vm.oidcRedirectUrl,\"target\":\"_blank\",\"title\":_vm.oidcRedirectUrl}},[_vm._v(\"URL of this service\")]),_vm._v(\" as redirect URL with the authentication service.\")])])]:_vm._e(),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-window-restore\"}),_c('span',[_vm._v(\"Clicking the button below may open a new window for login.\")])]),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_c('i',{staticClass:\"fab fa-openid\"}),_vm._v(\" Log in with \"+_vm._s(tab.name))])],1)],2)]}},(_vm.basicProvider)?{key:\"basic\",fn:function({ tab }){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery(tab.data)}}},[_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(\"The \"),_c('tt',[_vm._v(\"HTTP Basic\")]),_vm._v(\" authentication method is mostly used for development and testing purposes.\")],1)]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"username\"}},[_vm._v(\"Username:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.username),expression:\"username\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"id\":\"username\",\"type\":\"text\",\"required\":\"required\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing)return;_vm.username=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Password:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.password),expression:\"password\",modifiers:{\"trim\":true}}],staticClass:\"input\",attrs:{\"id\":\"password\",\"type\":\"password\",\"required\":\"required\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing)return;_vm.password=$event.target.value.trim()},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_vm._v(\" Log in\")])],1)])]}}:null,{key:\"noauth\",fn:function(){return [_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.initDiscovery()}}},[_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',[_vm._v(\"Choose this if you don't have credentials for the service provider and just want to explore the service with its available data and processes. You may not be able to process any data.\")])]),_c('div',{staticClass:\"row bottom\"},[_c('TermsOfServiceConsent'),_c('button',{staticClass:\"connectBtn\",class:{loading: _vm.loading},attrs:{\"type\":\"submit\"}},[_c('i',{staticClass:\"fas fa-spinner fa-spin fa-lg\"}),_c('i',{staticClass:\"fas fa-user-slash\"}),_vm._v(\" Proceed without logging in\")])],1)])]},proxy:true}],null,true)}),(_vm.allowOtherServers)?_c('div',{staticClass:\"switch tour-login-switch\"},[_c('a',{on:{\"click\":function($event){return _vm.switchServer()}}},[_vm._v(\"Switch server\")])]):_vm._e()],1):_vm._e()])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.show)?_c('div',{staticClass:\"row help\"},[_c('i',{staticClass:\"fas fa-check-circle\"}),(_vm.terms && _vm.privacy)?_c('span',[_vm._v(\"By clicking the button below, you agree to our \"),_c('a',{attrs:{\"href\":_vm.terms.href,\"title\":_vm.terms.title,\"target\":\"_blank\"}},[_vm._v(\"Terms of Service\")]),_vm._v(\" and that you have read our \"),_c('a',{attrs:{\"href\":_vm.privacy.href,\"title\":_vm.privacy.title,\"target\":\"_blank\"}},[_vm._v(\"Privacy Policy\")]),_vm._v(\".\")]):(_vm.terms)?_c('span',[_vm._v(\"By clicking the button below, you agree to our \"),_c('a',{attrs:{\"href\":_vm.terms.href,\"title\":_vm.terms.title,\"target\":\"_blank\"}},[_vm._v(\"Terms of Service\")]),_vm._v(\".\")]):(_vm.privacy)?_c('span',[_vm._v(\"By clicking the button below, you agree that you have read our \"),_c('a',{attrs:{\"href\":_vm.privacy.href,\"title\":_vm.privacy.title,\"target\":\"_blank\"}},[_vm._v(\"Privacy Policy\")]),_vm._v(\".\")]):_vm._e()]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TermsOfServiceConsent.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TermsOfServiceConsent.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TermsOfServiceConsent.vue?vue&type=template&id=52726e94\"\nimport script from \"./TermsOfServiceConsent.vue?vue&type=script&lang=js\"\nexport * from \"./TermsOfServiceConsent.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConnectForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConnectForm.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ConnectForm.vue?vue&type=template&id=714226be&scoped=true\"\nimport script from \"./ConnectForm.vue?vue&type=script&lang=js\"\nexport * from \"./ConnectForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./ConnectForm.vue?vue&type=style&index=0&id=714226be&prod&lang=scss&scoped=true\"\nimport style1 from \"./ConnectForm.vue?vue&type=style&index=1&id=714226be&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"714226be\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Page.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Page.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Page.vue?vue&type=template&id=5b68e2ee\"\nimport script from \"./Page.vue?vue&type=script&lang=js\"\nexport * from \"./Page.vue?vue&type=script&lang=js\"\nimport style0 from \"./Page.vue?vue&type=style&index=0&id=5b68e2ee&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export default {\n\n}","import Vue from 'vue';\nimport Snotify from 'vue-snotify';\nimport 'vue-snotify/styles/simple.css';\nimport store from './store/index';\nimport Config from '../config';\nimport Page from './Page.vue';\nimport filters from './filters';\nimport Clipboard from 'v-clipboard';\n\nVue.use(Snotify);\nVue.use(Clipboard);\n\n// Don't show too many repetitive error messages\nVue.prototype.$snotify.singleError = function () {\n\tlet message = arguments[0];\n\tif (message !== this.lastMessage) {\n\t\tthis.lastMessage = message;\n\t\tthis.error(...arguments);\n\t\tsetTimeout(() => this.lastMessage = null, 1000);\n\t}\n};\n\nVue.config.productionTip = false;\nVue.config.errorHandler = function (err, vm, info) {\n\tconsole.error(err, info);\n\tif (!vm || !vm.$snotify) {\n\t\treturn;\n\t}\n\n\tlet message;\n\tif (err instanceof Error) {\n\t\tmessage = err.message;\n\t}\n\telse if (typeof err === 'string') {\n\t\tmessage = err;\n\t}\n\n\tif (message) {\n\t\tvm.$snotify.singleError(message, 'Error', Config.snotifyDefaults);\n\t}\n};\nVue.prototype.$config = Config;\n\nfor(var name in filters) {\n\tVue.filter(name, filters[name]);\n}\n\nconst app = new Vue({\n\tstore,\n\trender: h => h(Page)\n}).$mount('#app');\n\nwindow.addEventListener(\"unhandledrejection\", function(event) {\n\tconsole.warn(event);\n\tif (typeof event.reason === 'String' || event.reason instanceof Error) {\n\t\tapp.$snotify.singleError(event.reason, 'Error', Config.snotifyDefaults);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n});\n","import Utils from './utils';\nimport { ProcessSchema, ProcessDataType } from '@openeo/js-commons';\n\nexport default class Process {\n\n\tstatic isMathProcess(p, operatorMapping = {}) {\n\t\tif (!Utils.isObject(p)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Skip processes handled by operators, if given\n\t\tlet operatorProcesses = Object.values(operatorMapping);\n\t\tif (operatorProcesses.includes(p.id)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Process must return a numerical value\n\t\tif (!Utils.isObject(p.returns) || !p.returns.schema) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet allowedTypes = ['number', 'integer', 'any'];\n\t\tlet returns = new ProcessSchema(p.returns.schema);\n\t\tif (!allowedTypes.includes(returns.nativeDataType())) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Required Process parameters must accept numerical values\n\t\tif (Array.isArray(p.parameters)) {\n\t\t\tfor(var i in p.parameters) {\n\t\t\t\tlet param = p.parameters[i];\n\t\t\t\tif (param.optional) {\n\t\t\t\t\tcontinue; // Skip optional parameters\n\t\t\t\t}\n\t\t\t\tif (!param.schema) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tlet schema = new ProcessSchema(param.schema);\n\t\t\t\tif (!allowedTypes.includes(schema.nativeDataType())) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// ToDo: Parameters with a dash (and other operators) in them are a problem\n\n\t\treturn true;\n\t}\n\n\tstatic arrayOf(datatype) {\n\t\tif (!(datatype instanceof ProcessDataType)) {\n\t\t\tdatatype = new ProcessDataType(datatype);\n\t\t}\n\t\tif (datatype.nativeDataType() === 'array' && Utils.isObject(datatype.schema.items)) {\n\t\t\tlet subtype = new ProcessDataType(datatype.schema.items);\n\t\t\treturn subtype.dataType();\n\t\t}\n\t\treturn undefined;\n\t}\n}","import VueUtils from '@openeo/vue-components/utils';\nimport { Job, OpenEO, Service, UserFile, UserProcess } from '@openeo/js-client';\nimport { mapState, mapActions, mapMutations, mapGetters } from 'vuex';\nimport contentType from 'content-type';\nimport Config from '../config';\nimport axios from 'axios';\n\nclass Utils extends VueUtils {\n\n\tstatic axios() {\n\t\treturn OpenEO.Environment.axios;\n\t}\n\n\tstatic saveToFile(content, filename) {\n\t\treturn OpenEO.Environment.saveToFile(content, filename);\n\t}\n\n\tstatic getPreviewLinkFromSTAC(stac) {\n\t\tif (Utils.isObject(stac) && Array.isArray(stac.links)) {\n\t\t\tlet link = stac.links.find(link => Utils.isObject(link) && typeof link.rel === 'string' && Config.supportedMapServices.includes(link.rel.toLowerCase()));\n\t\t\tif (link) {\n\t\t\t\treturn link;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tstatic isMapServiceSupported(mapType) {\n\t\tif (typeof mapType !== 'string') {\n\t\t\treturn false;\n\t\t}\n\t\treturn Config.supportedMapServices.includes(mapType.toLowerCase());\n\t}\n\n\tstatic parseNodata(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(nodata => Utils.parseNodata(nodata));\n\t\t}\n\t\telse {\n\t\t\treturn typeof value === \"string\" && value.toLowerCase() === \"nan\" ? Number.NaN : value;\n\t\t}\n\t}\n\n\tstatic isActiveJobStatusCode(status) {\n\t\tif (typeof status !== 'string') {\n\t\t\treturn null;\n\t\t}\n\t\tswitch (status.toLowerCase()) {\n\t\t\tcase 'running':\n\t\t\tcase 'queued':\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tstatic exception(vm, error, alt) {\n\t\tconsole.error(error);\n\t\tvar buttons = [];\n\t\tvar title = null; \n\t\tvar message = alt;\n\t\tif (Utils.isObject(error) && typeof error.message === 'string') {\n\t\t\tif (error.code > 0) {\n\t\t\t\ttitle = \"Error #\" + error.code; \n\t\t\t}\n\t\t\telse {\n\t\t\t\ttitle = alt; \n\t\t\t}\n\t\t\tmessage = error.message;\n\n\t\t\tbuttons.push({\n\t\t\t\ttext: 'Show Details',\n\t\t\t\taction: () => vm.$root.$emit('showError', error)\n\t\t\t});\n\t\t}\n\t\telse if (typeof error === 'string') {\n\t\t\tmessage = error; \n\t\t\ttitle = alt; \n\t\t}\n\t\tbuttons.push({\n\t\t\ttext: 'Copy',\n\t\t\taction: toast => {\n\t\t\t\tlet success = vm.$clipboard(message);\n\t\t\t\tlet button = toast.config.buttons.find(btn => btn.text === 'Copy');\n\t\t\t\tif (button) {\n\t\t\t\t\tbutton.text = success ? \"✔️ Copied\" : \"❌ Failed\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tvar typeDefaults = {\n\t\t\tbuttons\n\t\t}; \n\t\tvm.$snotify.singleError(message, title, Object.assign({}, vm.$config.snotifyDefaults, typeDefaults)); \n\t} \n\tstatic error(vm, message, title = null) {\n\t\tvm.$snotify.singleError(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic warn(vm, message, title = null) {\n\t\tvm.$snotify.warning(message, title, vm.$config.snotifyDefaults);\n\t}\n\tstatic info(vm, message, title = null) {\n\t\tvm.$snotify.info(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic ok(vm, message, title = null) {\n\t\tvm.$snotify.success(message, title, vm.$config.snotifyDefaults); \n\t}\n\tstatic confirm(vm, message, buttons = []) {\n\t\tvar typeDefaults = {\n\t\t\tbuttons: buttons\n\t\t}; \n\t\tvm.$snotify.confirm(message, null, Object.assign({}, vm.$config.snotifyDefaults, typeDefaults)); \n\t}\n\t\n\tstatic isChildOfModal(that) {\n\t\treturn that.$parent && that.$parent.$options.name == 'Modal'; \n\t}\n\n\tstatic getFileNameFromURL(url) {\n\t\t//this removes the anchor at the end, if there is one\n\t\turl = url.substring(0, (url.indexOf(\"#\") == -1)?url.length:url.indexOf(\"#\")); \n\t\t//this removes the query after the file name, if there is one\n\t\turl = url.substring(0, (url.indexOf(\"?\") == -1)?url.length:url.indexOf(\"?\")); \n\t\t//this removes everything before the last slash in the path\n\t\turl = url.substring(url.lastIndexOf(\"/\") + 1, url.length); \n\t\treturn url; \n\t}\n\n\tstatic makeFileName(filename, type) {\n\t\tif (filename.includes('.') || typeof type !== 'string') {\n\t\t\treturn filename;\n\t\t}\n\t\tif (!type.includes('/')) {\n\t\t\treturn filename + '.' + type;\n\t\t}\n\n\t\tlet ext = null;\n\t\ttry {\n\t\t\tlet mime = contentType.parse(type);\n\t\t\tswitch(mime.type.toLowerCase()) {\n\t\t\t\tcase 'application/json':\n\t\t\t\tcase 'application/zip':\n\t\t\t\tcase 'image/png':\n\t\t\t\tcase 'image/jpg':\n\t\t\t\tcase 'image/jpeg':\n\t\t\t\tcase 'image/gif':\n\t\t\t\tcase 'image/tiff':\n\t\t\t\tcase 'text/csv':\n\t\t\t\tcase 'text/html':\n\t\t\t\t\text = type.split('/')[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'text/plain':\n\t\t\t\t\text = 'txt';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'application/netcdf':\n\t\t\t\tcase 'application/x-netcdf':\n\t\t\t\t\text = 'nc'\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t} catch (error) {}\n\n\t\tif (ext !== null) {\n\t\t\treturn filename + '.' + ext;\n\t\t}\n\t\telse {\n\t\t\treturn filename;\n\t\t}\n\t}\n\n\tstatic replaceParam(url, paramName, paramValue) {\n\t\tvar urlObj = new URL(url);\n\t\tvar query = new URLSearchParams(urlObj.search); \n\t\tquery.set(paramName, paramValue);\n\t\turlObj.search = query.toString();\n\t\treturn urlObj.toString();\n\t}\n\n\tstatic paramsForPrefix(prefix, sep = '~') {\n\t\tprefix += sep;\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tlet params = {};\n\t\tfor(let [key, value] of urlParams) {\n\t\t\tif (key.startsWith(prefix)) {\n\t\t\t\tparams[key.substring(prefix.length)] = value;\n\t\t\t}\n\t\t}\n\t\treturn params; \n\t}\n\n\tstatic param(name) {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tif (urlParams.has(name)) {\n\t\t\treturn urlParams.get(name);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tstatic isBboxInWebMercator(bboxes) {\n\t\tif (!bboxes) {\n\t\t\treturn null;\n\t\t}\n\t\tif (!Array.isArray(bboxes)) {\n\t\t\tbboxes = [bboxes];\n\t\t}\n\t\tlet maxBounds = {south: -85.06, north: 85.06}; // Max. south/north bounds for Web Mercator\n\t\treturn !bboxes.find(bbox => bbox.south < maxBounds.south || bbox.north > maxBounds.north);\n\t}\n\tstatic extentToBBox(extent) {\n\t\tif (!Array.isArray(extent)) {\n\t\t\treturn null;\n\t\t}\n\t\tvar hasZ = extent.length >= 6;\n let obj = {\n\t\t\twest: extent[0],\n\t\t\teast: extent[hasZ ? 3 : 2],\n\t\t\tsouth: extent[1],\n\t\t\tnorth: extent[hasZ ? 4 : 3]\n\t\t};\n\t\tif (hasZ) {\n\t\t\tobj.base = extent[2];\n\t\t\tobj.height = extent[5];\n\t\t}\n\t\treturn obj;\n\t}\n\tstatic sortById(a, b) {\n\t\treturn VueUtils.compareStringCaseInsensitive(a.id, b.id);\n\t}\n\n\tstatic range(start, end) {\n\t\tif (end < start) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.from({length: 1 + end - start}, (_, i) => start + i);\n\t}\n\n\tstatic newArray(length, defaultValue = 0) {\n\t\tif (length < 1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.from({length}, () => defaultValue);\n\t}\n\n\tstatic fitArray(arr, length, defaultValue = 0) {\n\t\tif (length < 1) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (length > arr.length) {\n\t\t\treturn arr.concat(Utils.newArray(length - arr.length, defaultValue));\n\t\t}\n\t\telse if (length < arr.length) {\n\t\t\treturn arr.slice(0, length);\n\t\t}\n\t\telse {\n\t\t\treturn arr;\n\t\t}\n\t}\n\n\t// Based on https://github.com/hughsk/path-sort\n\tstatic sortByPath(a, b) {\n\t\ta = a.split('/');\n\t\tb = b.split('/');\n\t\tvar l = Math.max(a.length, b.length);\n\t\tfor (var i = 0; i < l; i += 1) {\n\t\t\tif (!(i in a)) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse if (!(i in b)) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a[i].toUpperCase() > b[i].toUpperCase()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a[i].toUpperCase() < b[i].toUpperCase()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t\tif (a.length < b.length) {\n\t\t\treturn -1;\n\t\t}\n\t\telse if (a.length > b.length) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tstatic getUniqueId() {\n\t\treturn Math.random().toString(36).substr(2, 9);\n\t}\n\n\tstatic formatIdOrTitle(value) {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn value;\n\t\t}\n\t\telse if (value.startsWith('#')) {\n\t\t\treturn `${value}`;\n\t}\n\t\telse if (value === 'Unnamed') {\n\t\t\treturn `${value}`;\n\t\t}\n\t\telse {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tstatic getResourceTitle(obj, showType = false) {\n\t\tlet title;\n\t\tlet isObj = Utils.isObject(obj);\n\t\tif (typeof obj === 'string') {\n\t\t\ttitle = obj;\n\t\t}\n\t\telse if (obj instanceof UserProcess) {\n\t\t\ttitle = obj.id;\n\t\t}\n\t\telse if (obj instanceof UserFile) {\n\t\t\ttitle = obj.path;\n\t\t}\n\t\telse if (isObj && typeof obj.stac_version === 'string') {\n\t\t\ttitle = obj.id;\n\t\t}\n\t\telse if (isObj && obj.title) {\n\t\t\ttitle = obj.title;\n\t\t}\n\t\telse if (isObj && obj.id) {\n\t\t\tlet id = new String(obj.id);\n\t\t\tif (id.length > 10) {\n\t\t\t\ttitle = obj.id.substr(0, 5) + '…' + obj.id.substr(-5);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttitle = obj.id\n\t\t\t}\n\t\t\ttitle = '#' + title;\n\t\t}\n\t\telse {\n\t\t\ttitle = 'Unnamed';\n\t\t}\n\t\tif (showType) {\n\t\t\tlet type;\n\t\t\tif (typeof showType === 'string') {\n\t\t\t\ttype = showType;\n\t\t\t}\n\t\t\telse if (obj instanceof Job) {\n\t\t\t\ttype = 'Job';\n\t\t\t}\n\t\t\telse if (obj instanceof Service) {\n\t\t\t\ttype = 'Service';\n\t\t\t}\n\t\t\telse if (obj instanceof UserProcess) {\n\t\t\t\ttype = 'Process';\n\t\t\t}\n\t\t\telse if (obj instanceof UserFile) {\n\t\t\t\ttype = 'File';\n\t\t\t}\n\t\t\telse if (isObj && typeof obj.stac_version === 'string' && obj.type === 'Collection') {\n\t\t\t\ttype = obj.type;\n\t\t\t}\n\n\t\t\tif (type) {\n\t\t\t\ttitle = `${title} (${type})`;\n\t\t\t}\n\t\t}\n\t\treturn title;\n\t}\n\n\tstatic resolveJsonRefs(schema) {\n\t\tvar resolver = obj => {\n\t\t\tif (!obj || typeof obj !== 'object') {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tfor(var key in obj) {\n\t\t\t\tvar value = obj[key];\n\t\t\t\tif (Utils.isObject(value) && typeof value.$ref === 'string' && value.$ref.match(/^#(\\/[^\\/]+)+$/i)) {\n\t\t\t\t\tvar parts = value.$ref.split('/').slice(1);\n\t\t\t\t\tvar result = schema;\n\t\t\t\t\twhile (parts.length) {\n\t\t\t\t\t\tlet propertyName = parts.shift();\n\t\t\t\t\t\tresult = result[propertyName];\n\t\t\t\t\t\tif (typeof result === 'undefined') {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tobj[key] = result;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tobj[key] = resolver(value);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t\treturn resolver(schema);\n\t}\n\tstatic extractUDPParams(process) {\n\t\tconst pos = process.indexOf('@');\n\t\tif (pos < 0) {\n\t\t\treturn [process, undefined];\n\t\t}\n\t\telse {\n\t\t\tconst id = process.substring(0, pos);\n\t\t\tconst namespace = process.substring(pos + 1);\n\t\t\treturn [id, namespace];\n\t\t}\n\t}\n\tstatic getProcessingExpression(stac) {\n\t\tlet key = 'processing:expression';\n\t\tif (!Utils.isObject(stac) || !stac[key]) {\n\t\t\treturn null;\n\t\t}\n\t\tlet obj = stac[key];\n\t\tif (Array.isArray(obj)) {\n\t\t\tif (obj.length > 0) {\n\t\t\t\tobj = obj[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif (Utils.isObject(obj) && obj.format === 'openeo' && Utils.isObject(obj.expression)) {\n\t\t\treturn obj.expression;\n\t\t}\n\t\telse {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tstatic confirmOpenAll(files) {\n\t\treturn confirm(`You are about to open ${files.length} individual files / tabs, which could slow down the web browser. Are you sure you want to open all of them?`);\n\t}\n\n};\n\nUtils.mapState = mapState;\nUtils.mapGetters = mapGetters;\nUtils.mapMutations = mapMutations;\nUtils.mapActions = mapActions;\n\nexport default Utils;\n","if(typeof L === 'undefined') { var e = new Error(\"Cannot find module 'L'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = L;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"424\":\"1e8cc4a5\",\"434\":\"3db284dc\",\"510\":\"1c7dfa80\",\"768\":\"8ff8aaf2\",\"847\":\"e24b2127\",\"887\":\"575d445d\",\"897\":\"896d6d76\",\"996\":\"4a71094e\",\"1026\":\"cb48ffc0\",\"1030\":\"040e5eea\",\"1160\":\"70bc40fb\",\"1189\":\"a32f94fa\",\"1203\":\"f48ebf4f\",\"1237\":\"b0e48530\",\"1279\":\"8878690a\",\"1323\":\"c2b88a54\",\"1358\":\"4dae7370\",\"1485\":\"bdb1342e\",\"1533\":\"7706a550\",\"1765\":\"98930619\",\"2053\":\"8f3b63df\",\"2195\":\"c25082b0\",\"2263\":\"c2d4312b\",\"2327\":\"6048d1aa\",\"2365\":\"674df960\",\"2388\":\"6f9bd704\",\"2559\":\"06b84f86\",\"2604\":\"9be79866\",\"2638\":\"d819825a\",\"2693\":\"900e8e1e\",\"2764\":\"34f8c39a\",\"2810\":\"e968ed13\",\"2855\":\"2da0a86a\",\"2869\":\"d962d520\",\"2919\":\"5a7da297\",\"3165\":\"76bb6a25\",\"3166\":\"067ac4f1\",\"3221\":\"a34a4762\",\"3249\":\"8768e225\",\"3271\":\"5a5d98ba\",\"3291\":\"a294dd66\",\"3324\":\"1543dc9c\",\"3383\":\"d94b2f5f\",\"3411\":\"6052053a\",\"3504\":\"22567424\",\"3592\":\"0b38c0e8\",\"3800\":\"4319672c\",\"3876\":\"50abede2\",\"4011\":\"7c8bfd07\",\"4016\":\"7fd9cf7f\",\"4054\":\"e7b8b9c7\",\"4066\":\"8cdb91a9\",\"4120\":\"c763dc51\",\"4152\":\"62572df3\",\"4279\":\"b012468e\",\"4285\":\"1e12bb8a\",\"4375\":\"13fc5959\",\"4387\":\"6a9d95fe\",\"4394\":\"f147b645\",\"4432\":\"d3d8c74c\",\"4475\":\"2d81f41f\",\"4477\":\"accede65\",\"4625\":\"fdcb0b05\",\"4638\":\"086ea810\",\"4818\":\"544d77b8\",\"5121\":\"3d0716e1\",\"5213\":\"f5f2cae9\",\"5237\":\"8caff225\",\"5262\":\"d2b1dab9\",\"5457\":\"55d83d50\",\"5624\":\"56a54c83\",\"5630\":\"6c8fe1c8\",\"5640\":\"f63e0ac2\",\"5677\":\"32e52a2e\",\"5742\":\"6ee57240\",\"5771\":\"e0cf67f9\",\"5865\":\"ba589820\",\"5981\":\"bde59e8d\",\"5983\":\"b8efedd3\",\"6036\":\"ac16f8d5\",\"6191\":\"a9dcd16c\",\"6192\":\"a7d24100\",\"6238\":\"6cb2e842\",\"6457\":\"0b71882d\",\"6550\":\"be13e8db\",\"6568\":\"66ede871\",\"6617\":\"548c5e31\",\"6660\":\"5db6ed47\",\"6689\":\"0404eca3\",\"6709\":\"9bbce368\",\"6846\":\"d8f3c03b\",\"6885\":\"e5fa8c84\",\"7123\":\"e7255bc1\",\"7186\":\"f9d85ef1\",\"7217\":\"1f57add2\",\"7237\":\"c8c92bc7\",\"7261\":\"cec7eb87\",\"7336\":\"f9de7ab6\",\"7349\":\"58ee9351\",\"7383\":\"99feb92e\",\"7497\":\"5f104927\",\"7745\":\"43fb5188\",\"7759\":\"f248fb9a\",\"7828\":\"a23933d0\",\"8053\":\"d1bcf10d\",\"8080\":\"2fc3db24\",\"8141\":\"f85ed200\",\"8152\":\"02c6d375\",\"8324\":\"9f2b9735\",\"8354\":\"9d3cdc3f\",\"8396\":\"6d066bd8\",\"8580\":\"f55cb38d\",\"8645\":\"257fe523\",\"8807\":\"edb0a018\",\"9047\":\"9e2b4217\",\"9066\":\"429507d1\",\"9201\":\"16e2764c\",\"9237\":\"b0457669\",\"9238\":\"1ce8f980\",\"9403\":\"c278a2cb\",\"9409\":\"9dc12ac6\",\"9544\":\"676b63d4\",\"9546\":\"03a9f682\",\"9873\":\"0533e950\",\"9882\":\"0cfed7b6\",\"9989\":\"fe90c1ea\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"434\":\"48f88ab7\",\"768\":\"9a253916\",\"847\":\"5e455ed7\",\"887\":\"8c892279\",\"897\":\"9a7c4e56\",\"996\":\"489c003a\",\"1026\":\"ee56a981\",\"1194\":\"5e953040\",\"1203\":\"1291b8f6\",\"1279\":\"6559def7\",\"1485\":\"a6dad948\",\"1533\":\"ee70e6ee\",\"1765\":\"ec5ea63d\",\"2053\":\"591e8359\",\"2327\":\"43969cb2\",\"2388\":\"08c8f94b\",\"2604\":\"68de8223\",\"2638\":\"e35e8688\",\"2693\":\"357ded33\",\"2722\":\"13fcb001\",\"2810\":\"bb165d6b\",\"2855\":\"9be81686\",\"2869\":\"f3cd8e29\",\"3165\":\"cedc5992\",\"3166\":\"2f6e3d85\",\"3221\":\"f6c5b858\",\"3249\":\"b1500b27\",\"3271\":\"6244371c\",\"3324\":\"58afa197\",\"3383\":\"70bcc47a\",\"3411\":\"8624a8a9\",\"3504\":\"bb165d6b\",\"3592\":\"2a21fdfd\",\"4016\":\"209ecd26\",\"4066\":\"c792bb6a\",\"4120\":\"1490740e\",\"4152\":\"6d1bdf91\",\"4279\":\"a22f3053\",\"4285\":\"b812a1c3\",\"4375\":\"8cbfaf98\",\"4387\":\"4f91105e\",\"4475\":\"3532f099\",\"4741\":\"f6d430d3\",\"4818\":\"a7c04fab\",\"5213\":\"84e10245\",\"5457\":\"326fc780\",\"5630\":\"b1500b27\",\"5677\":\"35500620\",\"5742\":\"d62d95a4\",\"5771\":\"f5601ccf\",\"5865\":\"951674bc\",\"5981\":\"662a7223\",\"6036\":\"84e10245\",\"6192\":\"5fb184c3\",\"6238\":\"c4731012\",\"6550\":\"f0b49cc1\",\"6660\":\"a22f3053\",\"6689\":\"b4a63b64\",\"6709\":\"de23863b\",\"6846\":\"4e980861\",\"7123\":\"a8f318bf\",\"7186\":\"1abe4ef8\",\"7217\":\"9812215a\",\"7336\":\"788ebcdc\",\"7383\":\"43a1e437\",\"7745\":\"70bcc47a\",\"7759\":\"052469b3\",\"7828\":\"be08d5c1\",\"8053\":\"48f88ab7\",\"8080\":\"f6d430d3\",\"8141\":\"f3930676\",\"8152\":\"281aa3b1\",\"8324\":\"257d9fa6\",\"8354\":\"8f8ad761\",\"8396\":\"a5e993af\",\"8580\":\"9e19226e\",\"8645\":\"ee56a981\",\"8807\":\"e797fa00\",\"9047\":\"13422022\",\"9066\":\"84e10245\",\"9201\":\"19b52578\",\"9238\":\"70bcc47a\",\"9403\":\"f665615a\",\"9409\":\"dd741b46\",\"9873\":\"bb165d6b\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"@openeo/web-editor:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"434\":1,\"768\":1,\"847\":1,\"887\":1,\"897\":1,\"996\":1,\"1026\":1,\"1194\":1,\"1203\":1,\"1279\":1,\"1485\":1,\"1533\":1,\"1765\":1,\"2053\":1,\"2327\":1,\"2388\":1,\"2604\":1,\"2638\":1,\"2693\":1,\"2722\":1,\"2810\":1,\"2855\":1,\"2869\":1,\"3165\":1,\"3166\":1,\"3221\":1,\"3249\":1,\"3271\":1,\"3324\":1,\"3383\":1,\"3411\":1,\"3504\":1,\"3592\":1,\"4016\":1,\"4066\":1,\"4120\":1,\"4152\":1,\"4279\":1,\"4285\":1,\"4375\":1,\"4387\":1,\"4475\":1,\"4741\":1,\"4818\":1,\"5213\":1,\"5457\":1,\"5630\":1,\"5677\":1,\"5742\":1,\"5771\":1,\"5865\":1,\"5981\":1,\"6036\":1,\"6192\":1,\"6238\":1,\"6550\":1,\"6660\":1,\"6689\":1,\"6709\":1,\"6846\":1,\"7123\":1,\"7186\":1,\"7217\":1,\"7336\":1,\"7383\":1,\"7745\":1,\"7759\":1,\"7828\":1,\"8053\":1,\"8080\":1,\"8141\":1,\"8152\":1,\"8324\":1,\"8354\":1,\"8396\":1,\"8580\":1,\"8645\":1,\"8807\":1,\"9047\":1,\"9066\":1,\"9201\":1,\"9238\":1,\"9403\":1,\"9409\":1,\"9873\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(1194|2722|4741)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunk_openeo_web_editor\"] = globalThis[\"webpackChunk_openeo_web_editor\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [6905,3684,2475,950,2660,4881,7900,6296,7274,1834,6337,9456,6937,7256,6964], () => (__webpack_require__(15424)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticClass","$config","logo","attrs","serviceName","_e","_v","_s","appName","on","showWebEditorInfo","version","staticRenderFns","name","mixins","EventBusMixin","data","Package","methods","broadcast","component","serverUrl","skipLogin","mapLocation","mapZoom","geocoder","loginMessage","snotifyDefaults","timeout","titleMaxLength","bodyMaxLength","showProgressBar","closeOnClick","pauseOnHover","supportedMapServices","supportedBatchJobSharingServices","supportedWebServiceSharingServices","supportedWizards","title","description","requiredProcesses","basemaps","url","attributions","maxZoom","importCommunityExamples","processNamespaces","oidcClientIds","showHttpWarning","dataRefreshInterval","showExperimentalByDefault","showDeprecatedByDefault","pageLimit","eventBusListeners","beforeDestroy","eventName","$root","$off","hasListener","listen","callback","unlisten","$on","$emit","arguments","ProjManager","get","Projection","_load","add","code","meta","extent","proj4","defs","register","projection","getProjection","Array","isArray","transformExtent","setExtent","includes","basemap","error","console","addFromStac","stac","Utils","isObject","properties","id","crs","match","toUpperCase","substr","Number","isInteger","String","epsg","CSV","SupportedFormat","constructor","asset","delim","super","parseData","array","parseCSV","trim","map","row","col","length","NaN","isNaN","parseFloat","str","arr","quote","c","cc","nc","Format","Object","assign","context","setContext","getContext","getUrl","href","canGroup","isBinary","download","filename","tempLink","document","createElement","style","display","setAttribute","makeFileName","type","body","appendChild","click","removeChild","loadData","connection","loaded","fetchData","getData","Error","blob","startsWith","response","fetch","auth","apiUrl","URL","requestUrl","origin","promise","Promise","resolve","reject","reader","FileReader","onload","event","target","result","onerror","readAsBinaryString","readAsText","icon","props","events","UnsupportedFormat","GDAL_MIN","GDAL_MAX","GDAL_NAME","GeoTIFF","removableLayers","_bands","_nodata","img","convertToRGB","parseMetadata","tiff","stacHasExtent","geometry","parseNodata","bands","forEach","band","i","setBandInfo","statistics","min","minimum","max","maximum","nodata","push","getBlob","tiffFromBlob","tiffFromUrl","getImage","getSamplesPerPixel","dummy","getArrayForSample","isFinite","getMinForDataType","getMaxForDataType","getGDALMetadata","getGDALNoData","geoKeys","ProjectedCSTypeGeoKey","GeographicTypeGeoKey","ProjLinearUnitsGeoKey","GeogAngularUnitsGeoKey","units","unitsFromCode","bbox","getBoundingBox","toUserExtent","warn","fileDirectory","ColorMap","from","greenOffset","blueOffset","colorMap","Math","trunc","PhotometricInterpretation","_","CMYK","YCbCr","CIELab","getNoData","getBands","getExtent","getColorMap","Int8Array","Int16Array","Int32Array","Float32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","JSON_","isGeoJson","JSON","parse","log","detectGeoJson","isTable","size","values","keys","some","equals","mathProcesses","getMathProcesses","all","filter","Process","isMathProcess","isMath","process","ProcessGraph","process_graph","mathProcessIds","p","concat","Formula","operatorMapping","arrayOperatorMapping","unsupportedFuncs","find","node","process_id","BrowserImage","Image","crossOrigin","fetchPriotity","decoding","src","NativeType","TSV","FormatRegistry","createFilesFromSTAC","resource","files","assets","roles","createFileFromAsset","file","createFilesFromBlob","Blob","stac_version","links","createObjectURL","mime","contentType","toLowerCase","extension","split","pop","serverStorage","getDefaultState","appMode","storedServers","localStorage","getItem","discoverySearchTerm","hightestModalZIndex","epsgCodes","initialProcess","initialNode","openWizard","openWizardProps","collectionPreview","viewerOptions","modelDnD","formatRegistry","namespaced","state","getters","hasProcess","getModelNodeFromDnD","rootState","rootGetters","getterFn","collectionDefaults","namespace","format","options","loading","setInterval","clearInterval","actions","loadEpsgCodes","cx","res","commit","default","loadInitialProcess","isUrl","axios","pg","extractUDPParams","dispatch","root","loadForAppMode","resultType","resultUrl","mutations","setModelDnD","obj","setDiscoverySearchTerm","searchTerm","setInitialProcess","setInitialNode","setAppMode","expires","setAppModeData","StacMigrate","Vue","getProcessingExpression","summaries","setViewerOptions","setOpenWizard","setCollectionPreview","collectionID","openModal","closeModal","addServer","indexOf","setItem","stringify","removeServer","splice","Job","Service","UserProcess","toJSON","setProcess","reset","listFn","paginateFn","createFn","updateFn","deleteFn","readFn","readFnById","customizations","primaryKey","pages","hasMore","definition","supportsList","supports","supportsCreate","supportsUpdate","supportsDelete","supportsRead","getById","x","create","parameters","apply","delete","update","updated","read","list","count","nextPage","d","hasNextPage","upsert","index","findIndex","observableData","observable","key","storeFactory","supportsQueue","supportsCancel","queue","startJob","cancel","stopJob","userProcesses","sort","sortById","use","Vuex","reverseOperatorMapping","mapping","op","activeRequests","discoveryCompleted","isAuthenticated","userInfo","connectionError","beforeLogoutListener","authProviders","fileFormats","serviceTypes","udfRuntimes","processesUpdated","collections","Config","modules","editor","jobs","services","capabilities","feature","hasFeature","currency","isConnected","isDiscovered","supportsBilling","supportsBillingPlans","listPlans","apiVersion","FileTypes","input","output","collection","spatial_extent","extentToBBox","spatial","temporal_extent","temporal","interval","processes","registry","ProcessRegistry","ProcessRegistryExtension","supportsMath","processId","has","connect","OpenEO","addNamespaceToProcess","message","providers","listAuthProviders","async","provider","discover","refresh","promises","errors","listCollections","then","catch","listProcesses","listFileTypes","listServiceTypes","listUdfRuntimes","describeAccount","describeCollection","_loaded","loadProcess","describeProcess","beforeLogout","listener","logout","disconnect","off","authProvider","getAuthProvider","completed","info","updateProcesses","addProcessNamespacesToRequest","namespaces","fillCollection","setConnectionError","authenticated","keepConnection","startActiveRequest","endActiveRequest","class","connecting","_l","modals","modal","_g","_b","tag","$event","hideModal","tourType","model","value","$$v","expression","directives","rawName","showHelp","httpsUrl","domProps","initProviders","showConnectForm","preventDefault","submitForm","modifiers","autoConnect","$forceUpdate","allowOtherServers","showServerSelector","showLoginForm","ref","providerSelected","scopedSlots","_u","fn","tab","initDiscovery","hasPredefinedOidcClientId","userOidcClientId","composing","oidcRedirectUrl","basicProvider","username","password","proxy","switchServer","show","terms","privacy","computed","mapGetters","getLinkForRel","rel","l","components","Logo","Tabs","Tab","TermsOfServiceConsent","Boolean","mapState","isLocalUrl","window","location","protocol","toString","replace","getType","defaultClient","oidcClientId","oidcProviders","watch","newVal","w","h","t","screen","availWidth","availHeight","oidcOptions","automaticSilentRenew","popupWindowFeatures","OidcProvider","redirectUrl","created","serverFromQuery","param","prompt","uiMethod","signinCallback","exception","mounted","onpopstate","evt","historyNavigate","history","replaceState","mapActions","mapMutations","hostname","initConnection","pushState","makeUrl","$refs","tabs","addProviders","addTab","getTitle","getId","$nextTick","resetActiveTab","programmatically","authType","login","offlineScope","setClientId","client","detectDefaultClient","grant_types","addListener","error_description","discoveryErrors","server","params","URLSearchParams","search","set","query","ConnectForm","IDE","AddMapDataModal","CollectionModal","DataModal","DownloadAssetsModal","ErrorModal","ExportCodeModal","ExpressionModal","FileFormatModal","ImportProcessModal","JobEstimateModal","JobInfoModal","ListModal","ParameterModal","ProcessModal","ProcessParameterModal","ServerInfoModal","ServiceInfoModal","ShareModal","Tour","UdfRuntimeModal","WebEditorModal","WizardModal","paramsForPrefix","interceptors","request","config","showError","showData","showModal","showListModal","showCollection","showProcess","showProcessParameter","setTitle","where","stopTour","newTitle","subtitle","Date","now","other","listActions","parameter","Snotify","Clipboard","prototype","$snotify","singleError","lastMessage","setTimeout","productionTip","errorHandler","err","vm","filters","app","store","Page","$mount","addEventListener","reason","stopPropagation","operatorProcesses","returns","schema","allowedTypes","ProcessSchema","nativeDataType","optional","arrayOf","datatype","ProcessDataType","items","subtype","dataType","VueUtils","Environment","saveToFile","content","getPreviewLinkFromSTAC","link","isMapServiceSupported","mapType","isActiveJobStatusCode","status","alt","buttons","text","action","toast","success","$clipboard","button","btn","typeDefaults","warning","ok","confirm","isChildOfModal","that","$parent","$options","getFileNameFromURL","substring","lastIndexOf","ext","replaceParam","paramName","paramValue","urlObj","prefix","sep","urlParams","isBboxInWebMercator","bboxes","maxBounds","south","north","hasZ","west","east","base","height","a","b","compareStringCaseInsensitive","range","start","end","newArray","defaultValue","fitArray","slice","sortByPath","getUniqueId","random","formatIdOrTitle","getResourceTitle","showType","isObj","UserFile","path","resolveJsonRefs","resolver","$ref","parts","propertyName","shift","pos","undefined","confirmOpenAll","L","e","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","m","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","r","n","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","mode","ns","def","current","getOwnPropertyNames","o","defineProperty","enumerable","f","chunkId","reduce","u","miniCssF","g","globalThis","Function","prop","hasOwnProperty","inProgress","dataWebpackPrefix","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","onScriptComplete","prev","clearTimeout","doneFns","parentNode","bind","head","Symbol","toStringTag","nmd","paths","children","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","insertBefore","nextSibling","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file