UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 2.42 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import t from"../request.js";import{ModuleError as e}from"./executionError.js";import{parseScript as r}from"./parser.js";import o from"./featureset/support/RecentlyUsedCache.js";import s from"../portal/Portal.js";class i{constructor(t){this.portalUri=t}static{this.mocks={}}static{this.cachedModules=new o(30)}normalizeModuleUri(t){const r=/^[a-z0-9]+(@[0-9]+\.[0-9]+\.[0-9]+)?([?|/].*)?$/gi,o=/(?<portalurl>.+)\/home\/item\.html\?id=(?<itemid>.+)$/gi,c=/(?<portalurl>.+)\/sharing\/rest\/content\/users\/[a-z0-9]+\/items\/(?<itemid>.+)$/gi,l=/(?<portalurl>.+)\/sharing\/rest\/content\/items\/(?<itemid>.+)$/gi,a=/(?<itemid>.*)@(?<versionstring>[0-9]+\.[0-9]+\.[0-9]+)([?|/].*)?$/gi;if(t.startsWith("portal+")){let i=t.slice(7),u="",n=i,m=!1;for(const t of[o,l,c]){const e=t.exec(i);if(null!==e){const t=e.groups;n=t.itemid,u=t.portalurl,m=!0;break}}if(!1===m){if(!r.test(i))throw new e("UnsupportedUriProtocol",{uri:t});n=i,u=this.portalUri}n.includes("/")&&(n=n.split("/")[0]),n.includes("?")&&(n=n.split("?")[0]);let d="current";const h=a.exec(n);if(null!==h){const t=h.groups;n=t.itemid,d=t.versionstring}return i=new s({url:u}).restUrl+"/content/items/"+n+"/resources/"+d+".arc",{url:i,scheme:"portal",uri:"PO:"+i}}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!==i.mocks[e])return{url:"",scheme:"mock",data:i.mocks[e],uri:t}}throw new e("UnrecognizedUri",{uri:t})}async fetchModule(t){const e=i.cachedModules.getFromCache(t.uri);if(e)return e;const r=this.fetchSource(t);i.cachedModules.addToCache(t.uri,r);let o=null;try{o=await r}catch(s){throw i.cachedModules.removeFromCache(t.uri),s}return o}async fetchSource(o){if("portal"===o.scheme){const e=await t(o.url,{responseType:"text",query:{}});if(e.data)return r(e.data,[])}if("mock"===o.scheme)return r(o.data??"",[]);throw new e("UnsupportedUriProtocol")}static create(t){return new i(t)}static{this._default=null}static getDefault(){return this._default??(i._default=i._moduleResolverFactory())}static set moduleResolverClass(t){this._moduleResolverFactory=t,this._default=null}static{this._moduleResolverFactory=()=>{const t=s.getDefault();return new i(t.url)}}}export{i as ArcadeModuleResolver};