UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.54 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import t from"../request.js";import{ModuleError as e,ModuleErrorCodes as r}from"./executionError.js";import{parseScript as o}from"./parser.js";import s from"./featureset/support/RecentlyUsedCache.js";import i from"../portal/Portal.js";class c{constructor(t){this.portalUri=t}static{this.mocks={}}static{this.cachedModules=new s(30)}normalizeModuleUri(t){const o=/^[a-z0-9A-Z]+(@[0-9]+\.[0-9]+\.[0-9]+)?([?|/].*)?$/gi,s=/(?<portalurl>.+)\/home\/item\.html\?id=(?<itemid>.+)$/gi,l=/(?<portalurl>.+)\/sharing\/rest\/content\/users\/[a-zA-Z0-9]+\/items\/(?<itemid>.+)$/gi,a=/(?<portalurl>.+)\/sharing\/rest\/content\/items\/(?<itemid>.+)$/gi,u=/(?<itemid>.*)@(?<versionstring>[0-9]+\.[0-9]+\.[0-9]+)([?|/].*)?$/gi;if(t.startsWith("portal+")){let c=t.slice(7),n="",m=c,d=!1;for(const t of[s,a,l]){const e=t.exec(c);if(null!==e){const t=e.groups;m=t.itemid,n=t.portalurl,d=!0;break}}if(!1===d){if(!o.test(c))throw new e(r.UnsupportedUriProtocol,{uri:t});m=c,n=this.portalUri}m.includes("/")&&(m=m.split("/")[0]),m.includes("?")&&(m=m.split("?")[0]);let h="current";const p=u.exec(m);if(null!==p){const t=p.groups;m=t.itemid,h=t.versionstring}return c=new i({url:n}).restUrl+"/content/items/"+m+"/resources/"+h+".arc",{url:c,scheme:"portal",uri:"PO:"+c}}if(t.startsWith("mock")){if("mock"===t){return{url:"",scheme:"mock",data:'\n export var hello = 1;\n export function helloWorld() {\n return "Hello World " + hello;\n }\n ',uri:"mock"}}const e=t.replace("mock:","");if(void 0!==c.mocks[e])return{url:"",scheme:"mock",data:c.mocks[e],uri:t}}throw new e(r.UnrecognizedUri,{uri:t})}async fetchModule(t){const e=c.cachedModules.getFromCache(t.uri);if(e)return e;const r=this.fetchSource(t);c.cachedModules.addToCache(t.uri,r);let o=null;try{o=await r}catch(s){throw c.cachedModules.removeFromCache(t.uri),s}return o}async fetchSource(s){if("portal"===s.scheme){const e=await t(s.url,{responseType:"text",query:{}});if(e.data)return o(e.data,[])}if("mock"===s.scheme)return o(s.data??"",[]);throw new e(r.UnsupportedUriProtocol)}static create(t){return new c(t)}static{this._default=null}static getDefault(){return this._default??(c._default=c._moduleResolverFactory())}static set moduleResolverClass(t){this._moduleResolverFactory=t,this._default=null}static{this._moduleResolverFactory=()=>{const t=i.getDefault();return new c(t.url)}}}export{c as ArcadeModuleResolver};