@arcgis/core 6.0.0-next.32 → 6.0.0-next.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/applications/Urban/meshUtils.d.ts +1 -0
- package/applications/Urban/meshUtils.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{f3dc0bc0e00635855a7a.js → 03daf6f235c6edef6268.js} +1 -1
- package/assets/esri/core/workers/chunks/04a1d08c3b5b1dc7628f.js +1 -0
- package/assets/esri/core/workers/chunks/{1eaf8bfdd3765a90ccc2.js → 0523f893870a1546d7d9.js} +1 -1
- package/assets/esri/core/workers/chunks/{72d20d3957d612f86431.js → 0a508e25ec05363e1f04.js} +1 -1
- package/assets/esri/core/workers/chunks/{84038dd85005fea413eb.js → 139e753d95cfc9470e74.js} +1 -1
- package/assets/esri/core/workers/chunks/15950c2fb173b62ee0ec.js +1 -0
- package/assets/esri/core/workers/chunks/{418addce122dbb8897b4.js → 1a614bac5db42c6263f8.js} +1 -1
- package/assets/esri/core/workers/chunks/{58c3ae6030def2ed5f31.js → 1b17f5f720f6cf3f6d73.js} +1 -1
- package/assets/esri/core/workers/chunks/{f9dc38761b314d33890f.js → 1f51567f47c2e2fc8a23.js} +1 -1
- package/assets/esri/core/workers/chunks/2211ff0a1f1ae8100231.js +1 -0
- package/assets/esri/core/workers/chunks/24ada9511b074dc5ae27.js +1 -0
- package/assets/esri/core/workers/chunks/29c610ce1c81ebb84a6b.js +1 -0
- package/assets/esri/core/workers/chunks/2b4dd42920d37b1ff0a9.js +2 -0
- package/assets/esri/core/workers/chunks/2c8ca43563c4f3e94535.js +1 -0
- package/assets/esri/core/workers/chunks/{55a9eaeb152a3abada67.js → 311e4969f19df63451dd.js} +1 -1
- package/assets/esri/core/workers/chunks/{8da2a10318f49d0dc73a.js → 31ef7b7074b3e3829763.js} +1 -1
- package/assets/esri/core/workers/chunks/{360c944c610efa2051fc.js → 379db67f78161ebd5468.js} +2 -2
- package/assets/esri/core/workers/chunks/{b8fd7c3b36981261378b.js → 38df7b1d58c4bcf693d0.js} +1 -1
- package/assets/esri/core/workers/chunks/{be55771758e4bcef0976.js → 3e406043a374ee17475b.js} +1 -1
- package/assets/esri/core/workers/chunks/46c290108a90518ef695.js +1 -0
- package/assets/esri/core/workers/chunks/{a596779eaeec7310671d.js → 478a89317a12e9b4d146.js} +1 -1
- package/assets/esri/core/workers/chunks/{fcc3902d6d9eda6f09f5.js → 48b8b57f559a53c6c513.js} +1 -1
- package/assets/esri/core/workers/chunks/4f3e0d583cfa9d1d6727.js +2 -0
- package/assets/esri/core/workers/chunks/507ecc3692e6d0700958.js +1 -0
- package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js → 5864bce1498a13ee5b7e.js} +2 -2
- package/assets/esri/core/workers/chunks/{f4d91d470ca5fea0bd26.js → 5bd1414220e42cb8ebcf.js} +1 -1
- package/assets/esri/core/workers/chunks/5c3aa8386705c5e40358.js +1 -0
- package/assets/esri/core/workers/chunks/{176d75e76318bfc25a53.js → 60c8eedd06080edab3e3.js} +1 -1
- package/assets/esri/core/workers/chunks/661847f1b7044f21600f.js +1 -0
- package/assets/esri/core/workers/chunks/{1a8d8274df292d65f82e.js → 676c8c0329d68f9f3ac4.js} +1 -1
- package/assets/esri/core/workers/chunks/{29cc6b1705418b1be5d7.js → 687deb918eb48a963c8f.js} +1 -1
- package/assets/esri/core/workers/chunks/{0694c7bcfe71692e2ccf.js → 723df53cfa0189837d01.js} +1 -1
- package/assets/esri/core/workers/chunks/7582654a0fc70910731c.js +1 -0
- package/assets/esri/core/workers/chunks/{1ee4df0fd61440cb5f02.js → 7810586c35dfe1437516.js} +1 -1
- package/assets/esri/core/workers/chunks/8517d96fc8ba7b21d845.js +2 -0
- package/assets/esri/core/workers/chunks/90360c0bd053d3e3fd77.js +1 -0
- package/assets/esri/core/workers/chunks/9c3de54513bf8619271c.js +1 -0
- package/assets/esri/core/workers/chunks/{0e445ec3523de9f2dfa2.js → a107f16cd004626b5018.js} +1 -1
- package/assets/esri/core/workers/chunks/{e3b212f8af448ec29eef.js → a1e8209d00809c9520a0.js} +1 -1
- package/assets/esri/core/workers/chunks/{46453ebfee17b5421d9d.js → bf62be00f3040f91aaee.js} +1 -1
- package/assets/esri/core/workers/chunks/{89dc49e784f7ba3b93ea.js → c034c30e577d620b8e28.js} +1 -1
- package/assets/esri/core/workers/chunks/c5bf19da62a3d31009fe.js +2 -0
- package/assets/esri/core/workers/chunks/{2226c20c38e20713bcb5.js.LICENSE.txt → c5bf19da62a3d31009fe.js.LICENSE.txt} +1 -1
- package/assets/esri/core/workers/chunks/{6bb191b19ce43a27f205.js → caad4f475d6eb01c2850.js} +1 -1
- package/assets/esri/core/workers/chunks/cd55cad81accf51d2989.js +1 -0
- package/assets/esri/core/workers/chunks/db1f7b2562de495b3401.js +2 -0
- package/assets/esri/core/workers/chunks/e0a37d3bcb9a944e53dd.js +1 -0
- package/assets/esri/core/workers/chunks/{fe6dcb21570395e46ce8.js → e0a7a75709121a26f255.js} +1 -1
- package/assets/esri/core/workers/chunks/{096b2bf1c0d69d27f20c.js → e8e54faf947a582b4cf7.js} +1 -1
- package/assets/esri/core/workers/chunks/{636e9c4ac1f9ae98f9d1.js → ea81f9d71b0842a4be26.js} +1 -1
- package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js → eaa0e906b46ae4c84d72.js} +2 -2
- package/assets/esri/core/workers/chunks/{a504a5e06cb89a620799.js → ec8b7476eac4718eb0ac.js} +1 -1
- package/chunks/GlobalIllumination.glsl.js +55 -46
- package/chunks/GlobalIlluminationBlur.glsl.js +13 -9
- package/chunks/RibbonLine.glsl.js +90 -88
- package/config.js +1 -1
- package/core/has.js +1 -1
- package/core/workers.d.ts +1 -0
- package/geometry/support/MeshLocalVertexSpace.d.ts +3 -3
- package/geometry/support/aaBoundingRect.js +1 -1
- package/geometry/support/meshUtils/convertMeshVertexSpace.js +1 -1
- package/geometry/support/meshUtils/vertexSpaceConversion.js +1 -1
- package/identity/IdentityManagerBase.js +1 -1
- package/kernel.d.ts +3 -3
- package/kernel.js +1 -1
- package/layers/VoxelWasmPerSceneView.js +1 -1
- package/layers/WFSLayer.d.ts +8 -4
- package/layers/graphics/sources/WFSSource.js +1 -1
- package/layers/graphics/sources/geojson/geojson.js +1 -1
- package/layers/mixins/ArcGISMapService.d.ts +17 -0
- package/layers/mixins/ArcGISMapService.js +1 -1
- package/layers/ogc/wfsUtils.d.ts +7 -2
- package/layers/ogc/wfsUtils.js +1 -1
- package/layers/ogc/xmlUtils.js +1 -1
- package/package.json +4 -4
- package/rest/route.d.ts +1 -1
- package/rest/support/AreasAndLengthsParameters.d.ts +1 -1
- package/rest/support/LengthsParameters.d.ts +1 -1
- package/symbols/TextSymbol.d.ts +0 -1
- package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
- package/views/3d/FocusAreasView.js +1 -1
- package/views/3d/analysis/AreaMeasurement/support/AreaMeasurementVisualization.js +1 -1
- package/views/3d/analysis/DirectLineMeasurement/DirectLineMeasurementVisualization.js +1 -1
- package/views/3d/analysis/ElevationProfile/ElevationProfileLineSceneComputation.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/layers/graphics/ElevationAligners.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshObject3DGraphicLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DSymbol.js +1 -1
- package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DWebStyleSymbol.js +1 -1
- package/views/3d/layers/graphics/MeshFastUpdateProcessor.js +1 -1
- package/views/3d/layers/graphics/polygonUtils.js +1 -1
- package/views/3d/state/ScreenSizePerspective.js +1 -1
- package/views/3d/state/ViewStateManager.js +1 -1
- package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
- package/views/3d/support/RenderCoordsHelper.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/TileRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/ManagedTexture.js +1 -1
- package/views/3d/webgl-engine/lib/NavigationDepthCache.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/RibbonLineVertexInfo.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/webgl/BufferObject.js +1 -1
- package/views/webgl/FramebufferObject.js +1 -1
- package/widgets/ElevationProfile/ElevationProfileLineView.js +1 -1
- package/widgets/HistogramRangeSlider.d.ts +1 -1
- package/assets/esri/core/workers/chunks/0cc7fba402a93e6d2455.js +0 -2
- package/assets/esri/core/workers/chunks/131185d26343a997495e.js +0 -1
- package/assets/esri/core/workers/chunks/1a3f71c4d97c36050030.js +0 -1
- package/assets/esri/core/workers/chunks/2226c20c38e20713bcb5.js +0 -2
- package/assets/esri/core/workers/chunks/2981e904ab62f3ed80d0.js +0 -2
- package/assets/esri/core/workers/chunks/32cc59e126df8c96a0cf.js +0 -2
- package/assets/esri/core/workers/chunks/5bb6c255bdc8aa9ba23e.js +0 -1
- package/assets/esri/core/workers/chunks/654f5441227579d2b6b4.js +0 -1
- package/assets/esri/core/workers/chunks/7084dd6e10c6c1393e92.js +0 -1
- package/assets/esri/core/workers/chunks/7566321c6a2913f2852b.js +0 -1
- package/assets/esri/core/workers/chunks/7b5cd150a4d0139850be.js +0 -1
- package/assets/esri/core/workers/chunks/7cc9d7a88b64e25fce14.js +0 -1
- package/assets/esri/core/workers/chunks/844eedda8f749972f707.js +0 -2
- package/assets/esri/core/workers/chunks/87177e0f82e8a6ae3189.js +0 -1
- package/assets/esri/core/workers/chunks/9976eaa81085c0d17e14.js +0 -1
- package/assets/esri/core/workers/chunks/a2196a49f89d57a0a1c7.js +0 -1
- package/assets/esri/core/workers/chunks/aba259a70bee68d2edb7.js +0 -1
- package/assets/esri/core/workers/chunks/b9cb92858a576eb6aa06.js +0 -1
- package/assets/esri/core/workers/chunks/c33a9635c294c8774977.js +0 -1
- package/assets/esri/core/workers/chunks/f39c700f3db7db52b522.js +0 -1
- /package/assets/esri/core/workers/chunks/{844eedda8f749972f707.js.LICENSE.txt → 2b4dd42920d37b1ff0a9.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{32cc59e126df8c96a0cf.js.LICENSE.txt → 4f3e0d583cfa9d1d6727.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js.LICENSE.txt → 5864bce1498a13ee5b7e.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{0cc7fba402a93e6d2455.js.LICENSE.txt → 8517d96fc8ba7b21d845.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{2981e904ab62f3ed80d0.js.LICENSE.txt → db1f7b2562de495b3401.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js.LICENSE.txt → eaa0e906b46ae4c84d72.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import e from"../config.js";import t from"../request.js";import n from"../core/Error.js";import{Evented as r}from"../core/Evented.js";import{on as i}from"../core/events.js";import{fixJson as a}from"../core/lang.js";import{getDeepValue as o}from"../core/object.js";import{onAbort as s,isAborted as c}from"../core/promiseUtils.js";import{urlToObject as l,hasSameOrigin as u,Url as d,queryToObject as f,base64UrlEncode as p,objectToQuery as m,normalize as h,getProxyRule as g,makeAbsolute as _,addQueryParameters as v}from"../core/urlUtils.js";import y from"./Credential.js";import b from"./IdentityModal.js";import x from"./OAuthCredential.js";import S from"./OAuthInfo.js";import C from"./ServerInfo.js";import{isSecureProxyService as w,normalizeArcGISOnlineOrgDomain as T,parseKnownArcGISOnlineDomain as E}from"../portal/support/urlUtils.js";const D={},O=e=>{let t=new d(e.owningSystemUrl).host,n=new d(e.server).host,r=/.+\.arcgis\.com$/i;return r.test(t)&&r.test(n)},k=(e,t)=>!!(O(e)&&t&&t.some(t=>t.test(e.server)));let A=null,j=null;try{A=window.localStorage,j=window.sessionStorage}catch{}class M extends r{constructor(){super(),this._portalConfig=globalThis.esriGeowConfig,this.serverInfos=[],this.oAuthInfos=[],this.credentials=[],this._soReqs=[],this._xoReqs=[],this._portals=[],this._defaultOAuthInfo=null,this._defaultTokenValidity=60,this.dialog=null,this.tokenValidity=null,this.normalizeWebTierAuth=!1,this._appOrigin=window.origin===`null`?window.location.origin:window.origin,this._appUrlObj=l(window.location.href),this._busy=null,this._rejectOnPersistedPageShow=!1,this._oAuthLocationParams=null,this._gwTokenUrl=`/sharing/rest/generateToken`,this._agsRest=`/rest/services`,this._agsPortal=/\/sharing(\/|$)/i,this._agsAdmin=/(https?:\/\/[^/]+\/[^/]+)\/admin\/?(\/.*)?$/i,this._adminSvcs=/\/rest\/admin\/services(\/|$)/i,this._gwDomains=[{regex:/^https?:\/\/www\.arcgis\.com/i,customBaseUrl:`maps.arcgis.com`,tokenServiceUrl:`https://www.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:dev|[a-z\d-]+\.mapsdev)\.arcgis\.com/i,customBaseUrl:`mapsdev.arcgis.com`,tokenServiceUrl:`https://dev.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:devext|[a-z\d-]+\.mapsdevext)\.arcgis\.com/i,customBaseUrl:`mapsdevext.arcgis.com`,tokenServiceUrl:`https://devext.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:qaext|[a-z\d-]+\.mapsqa)\.arcgis\.com/i,customBaseUrl:`mapsqa.arcgis.com`,tokenServiceUrl:`https://qaext.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/[a-z\d-]+\.maps\.arcgis\.com/i,customBaseUrl:`maps.arcgis.com`,tokenServiceUrl:`https://www.arcgis.com/sharing/rest/generateToken`}],this._legacyFed=[],this._regexSDirUrl=/http.+\/rest\/services\/?/gi,this._regexServerType=/(\/(FeatureServer|GPServer|GeoDataServer|GeocodeServer|GeoenrichmentServer|GeometryServer|GlobeServer|ImageServer|KnowledgeGraphServer|MapServer|MissionServer|MobileServer|NAServer|NetworkDiagramServer|OGCFeatureServer|ParcelFabricServer|RelationalCatalogServer|SceneServer|StreamServer|UtilityNetworkServer|ValidationServer|VectorTileServer|VersionManagementServer|VideoServer|3DTilesServer)).*/gi,this._gwUser=/http.+\/users\/([^/]+).*/i,this._gwItem=/http.+\/items\/([^/]+).*/i,this._gwGroup=/http.+\/groups\/([^/]+).*/i,this._rePortalTokenSvc=/\/sharing(\/rest)?\/generatetoken/i,this._createDefaultOAuthInfo=!0,this._hasTestedIfAppIsOnPortal=!1,this._getPlatformSelfError=null,this._getOAuthLocationParams(),window.addEventListener(`pageshow`,e=>{this._pageShowHandler(e)})}registerServers(e){let t=this.serverInfos;t?(e=e.filter(e=>!this.findServerInfo(e.server)),this.serverInfos=t.concat(e)):this.serverInfos=e,e.forEach(e=>{e.owningSystemUrl&&this._portals.push(e.owningSystemUrl),e.hasPortal&&this._portals.push(e.server)})}registerOAuthInfos(e){let t=this.oAuthInfos;if(t){for(let n of e){let e=this.findOAuthInfo(n.portalUrl);e&&t.splice(t.indexOf(e),1)}this.oAuthInfos=t.concat(e)}else this.oAuthInfos=e}registerToken(e){e={...e};let t=this._sanitizeUrl(e.server),n=this._isServerRsrc(t),r=this.findServerInfo(t),i=!0,a;r||(r=new C,r.server=this._getServerInstanceRoot(t),n?r.hasServer=!0:(r.tokenServiceUrl=this._getTokenSvcUrl(t),r.hasPortal=!0),this.registerServers([r])),a=this._findCredential(t),a?(delete e.server,Object.assign(a,e),i=!1):(a=new y({userId:e.userId,server:r.server??void 0,token:e.token,expires:e.expires,ssl:e.ssl,scope:n?`server`:`portal`}),a.resources=[t],this.credentials.push(a)),a.emitTokenChange(!1),i||a.refreshServerTokens()}toJSON(){return a({serverInfos:this.serverInfos.map(e=>e.toJSON()),oAuthInfos:this.oAuthInfos.map(e=>e.toJSON()),credentials:this.credentials.map(e=>e.toJSON())})}initialize(e){if(!e)return;typeof e==`string`&&(e=JSON.parse(e));let t=e.serverInfos,n=e.oAuthInfos,r=e.credentials;if(t){let e=[];t.forEach(t=>{t.server&&t.tokenServiceUrl&&e.push(t.declaredClass?t:new C(t))}),e.length&&this.registerServers(e)}if(n){let e=[];n.forEach(t=>{t.appId&&e.push(t.declaredClass?t:new S(t))}),e.length&&this.registerOAuthInfos(e)}r&&r.forEach(e=>{e.server&&e.token&&e.expires&&e.expires>Date.now()&&(e=e.declaredClass?e:new y(e),e.emitTokenChange(),this.credentials.push(e))})}findServerInfo(e){let t;e=this._sanitizeUrl(e);for(let n of this.serverInfos)if(this._hasSameServerInstance(n.server,e)){t=n;break}return t}findOAuthInfo(e){let t;e=this._sanitizeUrl(e);for(let n of this.oAuthInfos)if(this._hasSameServerInstance(n.portalUrl,e)){t=n;break}return t}findCredential(e,t){if(!e)return;let n;e=this._sanitizeUrl(e);let r=this._isServerRsrc(e)?`server`:`portal`;if(t){for(let i of this.credentials)if(this._hasSameServerInstance(i.server,e)&&t===i.userId&&i.scope===r){n=i;break}}else for(let t of this.credentials)if(this._hasSameServerInstance(t.server,e)&&this._getIdenticalSvcIdx(e,t)!==-1&&t.scope===r){n=t;break}return n}getCredential(e,t){let r=!1,i,a=!0;t&&(r=!!(t.token||t.credential),i=t.error,a=t.prompt!==!1),t={...t},e=this._sanitizeUrl(e);let o=new AbortController,l=Promise.withResolvers();if(t.signal&&s(t.signal,()=>{o.abort()}),s(o,()=>{l.reject(new n(`identity-manager:user-aborted`,`ABORTED`))}),c(o))return l.promise;t.signal=o.signal;let d=this._isAdminResource(e),f=r?this.findCredential(e):null,p;if(f&&i?.details?.httpStatus===498)f.destroy();else if(f)return p=new n(`identity-manager:not-authorized`,`You are currently signed in as: '`+f.userId+`'. You do not have access to this resource: `+e,{error:i}),l.reject(p),l.promise;let m=this._findCredential(e,t);if(m)return l.resolve(m),l.promise;let h=this.findServerInfo(e);if(h)!h.hasPortal&&h.server&&h.owningSystemUrl&&this._hasSameServerInstance(h.server,h.owningSystemUrl)&&(h.hasPortal=!0),!h.hasServer&&this._isServerRsrc(e)&&(h._restInfoPms=this._getTokenSvcUrl(e),h.hasServer=!0);else{let t=this._getTokenSvcUrl(e);if(!t)return p=new n(`identity-manager:unknown-resource`,`Unknown resource - could not find token service endpoint.`),l.reject(p),l.promise;h=new C,h.server=this._getServerInstanceRoot(e),typeof t==`string`?(h.tokenServiceUrl=t,h.hasPortal=!0):(h._restInfoPms=t,h.hasServer=!0),this.registerServers([h])}return h.hasPortal&&h._selfReq===void 0&&(a||u(h.tokenServiceUrl,this._appOrigin)||this._gwDomains.some(e=>e.tokenServiceUrl===h.tokenServiceUrl))&&(h._selfReq={owningTenant:t?.owningTenant,selfDfd:this._getPortalSelf(h.tokenServiceUrl.replace(this._rePortalTokenSvc,`/sharing/rest/portals/self`),e)}),this._enqueue(e,h,t,l,d)}getResourceName(e){return this._isRESTService(e)?e.replace(this._regexSDirUrl,``).replace(this._regexServerType,``)||``:this._gwUser.test(e)&&e.replace(this._gwUser,`$1`)||this._gwItem.test(e)&&e.replace(this._gwItem,`$1`)||this._gwGroup.test(e)&&e.replace(this._gwGroup,`$1`)||``}generateToken(e,r,i){let a=this._rePortalTokenSvc.test(e.tokenServiceUrl),o=new d(this._appOrigin),s=e.shortLivedTokenValidity,c,l,f,p,m,h,g,_;r&&(_=this.tokenValidity||s||this._defaultTokenValidity,_>s&&s>0&&(_=s)),i&&(c=i.isAdmin,l=i.serverUrl,f=i.token,h=i.signal,g=i.ssl,e.customParameters=i.customParameters),c?p=e.adminTokenServiceUrl:(p=e.tokenServiceUrl,m=new d(p.toLowerCase()),e.webTierAuth&&i?.serverUrl&&!g&&o.scheme===`http`&&(u(o.uri,p,!0)||m.scheme===`https`&&o.host===m.host&&o.port===`7080`&&m.port===`7443`)&&(p=p.replace(/^https:/i,`http:`).replace(/:7443/i,`:7080`)));let v={query:{request:`getToken`,username:r?.username,password:r?.password,serverUrl:l,token:f,expiration:_,referer:c||a?this._appOrigin:null,client:c?`referer`:null,f:`json`,...e.customParameters},method:`post`,authMode:`anonymous`,useProxy:this._useProxy(e,i),signal:h};return a||(v.withCredentials=!1),t(p,v).then(t=>{let i=t.data;if(!i?.token)return new n(`identity-manager:authentication-failed`,`Unable to generate token`);let a=e.server;return D[a]||(D[a]={}),r&&(D[a][r.username]=r.password),i.validity=_,i})}isBusy(){return!!this._busy}async checkSignInStatus(e){return(await this.checkAppAccess(e,``)).credential}checkAppAccess(e,r,i){let a=!1;return this.getCredential(e,{prompt:!1}).then(o=>{let s,c={f:`json`};if(o.scope===`portal`){if(r&&(this._doPortalSignIn(e)||i?.force))s=o.server+`/sharing/rest/oauth2/validateAppAccess`,c.client_id=r;else if(o.token)s=o.server+`/sharing/rest`;else return{credential:o}}else if(o.token)s=o.server+`/rest/services`;else return{credential:o};return o.token&&(c.token=o.token),t(s,{query:c,authMode:`anonymous`}).then(e=>{if(e.data.valid===!1)throw new n(`identity-manager:not-authorized`,`You are currently signed in as: '${o.userId}'.`,e.data);return a=!!e.data.viewOnlyUserTypeApp,{credential:o}}).catch(e=>{if(e.name===`identity-manager:not-authorized`)throw e;let t=e.details?.httpStatus;if(t===498)throw o.destroy(),new n(`identity-manager:not-authenticated`,`User is not signed in.`);if(t===400)throw new n(`identity-manager:invalid-request`,`Bad request`);return{credential:o}})}).then(e=>({credential:e.credential,viewOnly:a}))}setOAuthResponseHash(e){e&&(e.startsWith(`#`)&&(e=e.slice(1)),this._processOAuthPopupParams(f(e)))}setOAuthRedirectionHandler(e){this._oAuthRedirectFunc=e}setProtocolErrorHandler(e){this._protocolFunc=e}signIn(e,t,r={}){let i=Promise.withResolvers(),a=()=>{l?.remove(),u?.remove(),this.dialog?.destroy(),this.dialog=l=u=null},o=()=>{a(),this._oAuthDfd=null,i.reject(new n(`identity-manager:user-aborted`,`ABORTED`))};r.signal&&s(r.signal,()=>{o()});let c=new b({open:!0,resource:this.getResourceName(e),server:t.server});this.dialog=c,this.emit(`dialog-create`);let l=c.on(`cancel`,o),u=c.on(`submit`,e=>{this.generateToken(t,e,{isAdmin:r.isAdmin,signal:r.signal}).then(n=>{a();let o=new y({userId:e.username,server:t.server??void 0,token:n.token,expires:n.expires==null?null:Number(n.expires),ssl:!!n.ssl,isAdmin:r.isAdmin,validity:n.validity});i.resolve(o)}).catch(e=>{c.error=e,c.signingIn=!1})});return i.promise}oAuthSignIn(e,t,r,i){this._oAuthDfd=Promise.withResolvers();let a=this._oAuthDfd;i?.signal&&s(i.signal,()=>{let e=this._oAuthDfd&&this._oAuthDfd.oAuthWin_;e&&!e.closed?e.close():this.dialog&&d()}),a.resUrl_=e,a.sinfo_=t,a.oinfo_=r;let o,c=r._oAuthCred;if(c.storage&&(r.flowType===`authorization-code`||r.flowType===`auto`&&t.currentVersion>=8.4)){let e=crypto.getRandomValues(new Uint8Array(32));o=p(e),c.codeVerifier=o,e=crypto.getRandomValues(new Uint8Array(32)),c.stateUID=p(e),c.save()||(c.codeVerifier=o=null)}else c.codeVerifier=null;this._getCodeChallenge(o).then(n=>{let a=!i||i.oAuthPopupConfirmation!==!1;if(!r.popup||!a){this._doOAuthSignIn(e,t,r,n);return}let o=new b({oAuthPrompt:!0,server:t.server,open:!0});this.dialog=o,this.emit(`dialog-create`),l=o.on(`cancel`,d),u=o.on(`submit`,()=>{f(),this._doOAuthSignIn(e,t,r,n)})});let l,u,d=()=>{f(),this._oAuthDfd=null,a.reject(new n(`identity-manager:user-aborted`,`ABORTED`))},f=()=>{l?.remove(),u?.remove(),this.dialog?.destroy(),this.dialog=null};return a.promise}async refreshToken(e){let t=this.findServerInfo(e.server),n=t?.owningSystemUrl,r=!!n&&e.scope===`server`,i=r&&k(t,this._legacyFed),a=t.webTierAuth,o=a&&this.normalizeWebTierAuth,s=D[e.server]?.[e.userId],c=e.resources&&e.resources[0],l=r?this.findServerInfo(n):null,u={username:e.userId,password:s},d;if(a&&!o)return;r&&!l&&this.serverInfos.some(e=>(this._isIdProvider(n,e.server)&&(l=e),!!l));let f=l?this.findCredential(l.server,e.userId):null;if(!r||f){if(i)f?.refreshToken();else{if(r)d={serverUrl:c,token:f?.token,ssl:f?.ssl};else if(o)u=null,d={ssl:e.ssl};else if(s)e.isAdmin&&(d={isAdmin:!0});else{let n;return c&&(c=this._sanitizeUrl(c),e._enqueued=1,n=this._enqueue(c,t,null,null,e.isAdmin,e),n.then(()=>{e._enqueued=0,e.refreshServerTokens()}).catch(()=>{e._enqueued=0})),n}return this.generateToken(r?l:t,r?null:u,d).then(t=>{e.token=t.token,e.expires=t.expires==null?null:Number(t.expires),e.creationTime=Date.now(),e.validity=t.validity,e.emitTokenChange(),e.refreshServerTokens()}).catch(()=>{})}}}refreshServerTokens(e){e.scope===`portal`&&this.credentials.forEach(t=>{let n=this.findServerInfo(t.server),r=n?.owningSystemUrl;t!==e&&t.userId===e.userId&&r&&t.scope===`server`&&(this._hasSameServerInstance(e.server,r)||this._isIdProvider(r,e.server))&&(k(n,this._legacyFed)?(t.token=e.token,t.expires=e.expires,t.creationTime=e.creationTime,t.validity=e.validity,t.emitTokenChange()):t.refreshToken())})}destroyCredentials(){this.credentials&&this.credentials.slice().forEach(e=>{e.destroy()}),this.emit(`credentials-destroy`)}enablePostMessageAuth(e=`https://www.arcgis.com/sharing/rest`){this._postMessageAuthHandle&&this._postMessageAuthHandle.remove(),this._postMessageAuthHandle=i(window,`message`,t=>{if((t.origin===this._appOrigin||t.origin.endsWith(`.arcgis.com`))&&t.data?.type===`arcgis:auth:requestCredential`){let n=t.source;this.getCredential(e).then(e=>{n.postMessage({type:`arcgis:auth:credential`,credential:{expires:e.expires,server:e.server,ssl:e.ssl,token:e.token,userId:e.userId}},t.origin)}).catch(e=>{n.postMessage({type:`arcgis:auth:error`,error:{name:e.name,message:e.message}},t.origin)})}})}disablePostMessageAuth(){this._postMessageAuthHandle&&=(this._postMessageAuthHandle.remove(),null)}_getOAuthLocationParams(){let e=window.location.hash;if(e){e.startsWith(`#`)&&(e=e.slice(1));let t=f(e),n=!1;if(t.access_token&&t.expires_in&&t.state&&t.hasOwnProperty(`username`))try{t.state=JSON.parse(t.state),t.state.portalUrl&&(this._oAuthLocationParams=t,n=!0)}catch{}else if(t.error&&t.error_description&&(console.log(`IdentityManager OAuth Error: `,t.error,` - `,t.error_description),t.error===`access_denied`&&(n=!0,t.state)))try{t.state=JSON.parse(t.state)}catch{}n&&(window.location.hash=t.state?.hash||``)}let t=window.location.search;if(t){t.startsWith(`?`)&&(t=t.slice(1));let e=f(t),n=!1;if(e.code&&e.state)try{e.state=JSON.parse(e.state),e.state.portalUrl&&e.state.uid&&(this._oAuthLocationParams=e,n=!0)}catch{}else if(e.error&&e.error_description&&(console.log(`IdentityManager OAuth Error: `,e.error,` - `,e.error_description),e.error===`access_denied`&&(n=!0,e.state)))try{e.state=JSON.parse(e.state)}catch{}if(n){let t={...e};[`code`,`error`,`error_description`,`message_code`,`persist`,`state`].forEach(e=>{delete t[e]});let n=m(t),r=window.location.pathname+(n?`?${n}`:``)+(e.state?.hash||``);window.history.replaceState(window.history.state,``,r)}}}_getOAuthToken(e,n,r,i,a){return e=e.replace(/^http:/i,`https:`),t(`${e}/sharing/rest/oauth2/token`,{authMode:`anonymous`,method:`post`,query:i&&a?{grant_type:`authorization_code`,code:n,redirect_uri:i,client_id:r,code_verifier:a}:{grant_type:`refresh_token`,refresh_token:n,client_id:r}}).then(e=>e.data)}async _getCodeChallenge(e){if(e&&globalThis.isSecureContext){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t);return p(new Uint8Array(n))}return null}_pageShowHandler(e){if(e.persisted&&this.isBusy()&&this._rejectOnPersistedPageShow){let e=new n(`identity-manager:user-aborted`,`ABORTED`);this._errbackFunc(e)}}_findCredential(e,t){let n=-1,r,i,a,o,s=t?.token,c=t?.resource,l=this._isServerRsrc(e)?`server`:`portal`,u=this.credentials.filter(t=>this._hasSameServerInstance(t.server,e)&&t.scope===l);if(e=c||e,u.length){if(u.length===1){if(r=u[0],a=this.findServerInfo(r.server),i=a?.owningSystemUrl,o=i?this.findCredential(i,r.userId):void 0,n=this._getIdenticalSvcIdx(e,r),s)n!==-1&&(r.resources.splice(n,1),this._removeResource(e,o));else return n===-1&&r.resources.push(e),this._addResource(e,o),r}else{let t,r;if(u.some(s=>(r=this._getIdenticalSvcIdx(e,s),r!==-1&&(t=s,a=this.findServerInfo(t.server),i=a?.owningSystemUrl,o=i?this.findCredential(i,t.userId):void 0,n=r,!0))),s)t&&(t.resources.splice(n,1),this._removeResource(e,o));else if(t)return this._addResource(e,o),t}}}_findOAuthInfo(e){let t=this.findOAuthInfo(e);if(!t){for(let n of this.oAuthInfos)if(this._isIdProvider(n.portalUrl,e)){t=n;break}}return t}_addResource(e,t){t&&this._getIdenticalSvcIdx(e,t)===-1&&t.resources.push(e)}_removeResource(e,t){let n=-1;t&&(n=this._getIdenticalSvcIdx(e,t),n>-1&&t.resources.splice(n,1))}_useProxy(e,t){return t?.isAdmin&&!u(e.adminTokenServiceUrl,this._appOrigin)||!this._isPortalDomain(e.tokenServiceUrl)&&String(e.currentVersion)===`10.1`&&!u(e.tokenServiceUrl,this._appOrigin)}_getOrigin(e){let t=new d(e);return t.scheme+`://`+t.host+(t.port==null?``:`:`+t.port)}_getServerInstanceRoot(e){let t=e.toLowerCase(),n=t.indexOf(this._agsRest);return n===-1&&this._isAdminResource(e)&&(n=this._agsAdmin.test(e)?e.replace(this._agsAdmin,`$1`).length:e.search(this._adminSvcs)),n===-1&&!w(t)&&(n=t.indexOf(`/sharing`)),n===-1&&t.endsWith(`/`)&&(n=t.length-1),n>-1?e.slice(0,n):e}_hasSameServerInstance(e,t){return e.endsWith(`/`)&&(e=e.slice(0,-1)),e=e.toLowerCase(),t=this._getServerInstanceRoot(t).toLowerCase(),e=T(e),t=T(t),e=e.slice(Math.max(0,e.indexOf(`:`))),t=t.slice(Math.max(0,t.indexOf(`:`))),e===t}_sanitizeUrl(t){let n=(e.request.proxyUrl||``).toLowerCase(),r=n?t.toLowerCase().indexOf(n+`?`):-1;return r!==-1&&(t=t.slice(r+n.length+1)),t=h(t),l(t).path}_isRESTService(e){return e.includes(this._agsRest)}_isAdminResource(e){return this._agsAdmin.test(e)||this._adminSvcs.test(e)}_isServerRsrc(e){return this._isRESTService(e)||this._isAdminResource(e)}_isIdenticalService(e,t){let n=!1;if(this._isRESTService(e)&&this._isRESTService(t)){let r=this._getSuffix(e).toLowerCase(),i=this._getSuffix(t).toLowerCase();if(n=r===i,!n){let e=/(.*)\/(MapServer|FeatureServer|UtilityNetworkServer).*/gi;n=r.replaceAll(e,`$1`)===i.replaceAll(e,`$1`)}}else(this._isAdminResource(e)&&this._isAdminResource(t)||!this._isServerRsrc(e)&&!this._isServerRsrc(t)&&this._isPortalDomain(e))&&(n=!0);return n}_isPortalDomain(t){let n=new d(t.toLowerCase()),r=this._portalConfig,i=this._gwDomains.some(e=>e.regex.test(n.uri));return!i&&r&&(i=this._hasSameServerInstance(this._getServerInstanceRoot(r.restBaseUrl),n.uri)),i||e.portalUrl&&(i=u(n,e.portalUrl,!0)),i||=this._portals.some(e=>this._hasSameServerInstance(e,n.uri)),i||=this._agsPortal.test(n.path),i}_isIdProvider(e,t){let n=-1,r=-1;this._gwDomains.forEach((i,a)=>{n===-1&&i.regex.test(e)&&(n=a),r===-1&&i.regex.test(t)&&(r=a)});let i=!1;if(n>-1&&r>-1&&(n===0||n===4?(r===0||r===4)&&(i=!0):n===1?(r===1||r===2)&&(i=!0):n===2?r===2&&(i=!0):n===3&&r===3&&(i=!0)),!i){let n=this.findServerInfo(t),r=n?.owningSystemUrl;r&&O(n)&&this._isPortalDomain(r)&&this._isIdProvider(e,r)&&(i=!0)}return i}_getIdenticalSvcIdx(e,t){let n=-1;for(let r=0;r<t.resources.length;r++){let i=t.resources[r];if(this._isIdenticalService(e,i)){n=r;break}}return n}_getSuffix(e){return e.replace(this._regexSDirUrl,``).replace(this._regexServerType,`$1`)}_getTokenSvcUrl(e){let n,r,i;if(this._isRESTService(e)||this._isAdminResource(e)){let i=this._getServerInstanceRoot(e);return n=i+`/admin/generateToken`,e=i+`/rest/info`,r=t(e,{query:{f:`json`}}).then(e=>e.data),{adminUrl:n,promise:r}}if(this._isPortalDomain(e)){let t=``;if(this._gwDomains.some(n=>(n.regex.test(e)&&(t=n.tokenServiceUrl),!!t)),t||this._portals.some(n=>(this._hasSameServerInstance(n,e)&&(t=n+this._gwTokenUrl),!!t)),t||(i=e.toLowerCase().indexOf(`/sharing`),i!==-1&&(t=e.slice(0,i)+this._gwTokenUrl)),t||=this._getOrigin(e)+this._gwTokenUrl,t){let n=new d(e).port;/^http:\/\//i.test(e)&&n===`7080`&&(t=t.replace(/:7080/i,`:7443`)),t=t.replace(/http:/i,`https:`)}return t}}_processOAuthResponseParams(e,t,n){let r=t._oAuthCred;if(e.code){let i=r.codeVerifier;return r.codeVerifier=null,r.stateUID=null,r.save(),this._getOAuthToken(n.server,e.code,t.appId,this._getRedirectURI(t,!0),i).then(i=>{let a=new y({userId:i.username,server:n.server??void 0,token:i.access_token,expires:Date.now()+i.expires_in*1e3,ssl:i.ssl,oAuthState:e.state,_oAuthCred:r});return t.userId=a.userId,r.storage=i.persist?A:j,r.refreshToken=i.refresh_token,r.token=null,r.expires=i.refresh_token_expires_in?Date.now()+i.refresh_token_expires_in*1e3:null,r.userId=a.userId,r.ssl=a.ssl,r.save(),a})}let i=new y({userId:e.username,server:n.server??void 0,token:e.access_token,expires:Date.now()+Number(e.expires_in)*1e3,ssl:e.ssl===`true`,oAuthState:e.state,_oAuthCred:r});return t.userId=i.userId,r.storage=e.persist?A:j,r.refreshToken=null,r.token=i.token,r.expires=i.expires,r.userId=i.userId,r.ssl=i.ssl,r.save(),Promise.resolve(i)}_processOAuthPopupParams(e){let t=this._oAuthDfd;if(this._oAuthDfd=null,t){if(clearInterval(this._oAuthIntervalId),this._oAuthOnPopupHandle?.remove(),e.error){let r=e.error===`access_denied`,i=new n(r?`identity-manager:user-aborted`:`identity-manager:authentication-failed`,r?`ABORTED`:`OAuth: `+e.error+` - `+e.error_description);t.reject(i)}else this._processOAuthResponseParams(e,t.oinfo_,t.sinfo_).then(e=>{t.resolve(e)}).catch(e=>{t.reject(e)})}}_setOAuthResponseQueryString(e){e&&(e.startsWith(`?`)&&(e=e.slice(1)),this._processOAuthPopupParams(f(e)))}async _exchangeToken(e,n,r){return(await t(`${e}/sharing/rest/oauth2/exchangeToken`,{authMode:`anonymous`,method:`post`,query:{f:`json`,client_id:n,token:r}})).data.token}async _getPlatformSelf(e,n){if(this._getPlatformSelfError&&Date.now()-this._getPlatformSelfError[1]<1e3)throw this._getPlatformSelfError[0];e=e.replace(/^http:/i,`https:`);try{let r=await t(`${e}/sharing/rest/oauth2/platformSelf`,{authMode:`anonymous`,headers:{"X-Esri-Auth-Client-Id":n,"X-Esri-Auth-Redirect-Uri":window.location.href.replace(/#.*$/,``)},method:`post`,query:{f:`json`,expiration:30},withCredentials:!0});return this._getPlatformSelfError=null,r.data}catch(e){throw e.details?.messageCode===`OAUTH_0066`&&(this._getPlatformSelfError=[e,Date.now()]),e}}_getPortalSelf(e,n){let r;return this._gwDomains.some(t=>(t.regex.test(e)&&(r=t.customBaseUrl),!!r)),r?Promise.resolve({allSSL:!0,currentVersion:`8.4`,customBaseUrl:r,portalMode:`multitenant`,supportsOAuth:!0}):(this._appOrigin.startsWith(`https:`)?e=e.replace(/^http:/i,`https:`).replace(/:7080/i,`:7443`):/^http:/i.test(n)&&(e=e.replace(/^https:/i,`http:`).replace(/:7443/i,`:7080`)),t(e,{query:{f:`json`},authMode:`anonymous`,withCredentials:!0}).then(e=>e.data))}_doPortalSignIn(e){let t=this._portalConfig,n=window.location.href,r=this.findServerInfo(e);return!!((t||this._isPortalDomain(n))&&(r?r.hasPortal||r.owningSystemUrl&&this._isPortalDomain(r.owningSystemUrl):this._isPortalDomain(e))&&(this._isIdProvider(n,e)||t&&(this._hasSameServerInstance(this._getServerInstanceRoot(t.restBaseUrl),e)||this._isIdProvider(t.restBaseUrl,e))||u(n,e,!0)))}_checkProtocol(e,t,r,i){let a=!0,o=i?t.adminTokenServiceUrl:t.tokenServiceUrl;return o.trim().toLowerCase().startsWith(`https:`)&&!this._appOrigin.startsWith(`https:`)&&g(o)&&(a=this._protocolFunc?!!this._protocolFunc({resourceUrl:e,serverInfo:t}):!1,a||r(new n(`identity-manager:aborted`,`Aborted the Sign-In process to avoid sending password over insecure connection.`))),a}_enqueue(e,t,n,r,i,a){return r||=Promise.withResolvers(),r.resUrl_=e,r.sinfo_=t,r.options_=n,r.admin_=i,r.refresh_=a,this._busy?this._hasSameServerInstance(this._getServerInstanceRoot(e),this._busy.resUrl_)?(this._oAuthDfd&&this._oAuthDfd.oAuthWin_&&this._oAuthDfd.oAuthWin_.focus(),this._soReqs.push(r)):this._xoReqs.push(r):this._doSignIn(r),r.promise}_doSignIn(e){this._busy=e,this._rejectOnPersistedPageShow=!1;let t=(t,n=!1)=>{let r=e.options_?.resource,i=e.resUrl_,a=e.refresh_,o=n;this.credentials.includes(t)||(a&&this.credentials.includes(a)?(a.userId=t.userId,a.token=t.token,a.expires=t.expires,a.validity=t.validity,a.ssl=t.ssl,a.creationTime=t.creationTime,o=!0,t=a):this.credentials.push(t)),t.resources||(t.resources=[]),t.resources.includes(i)||t.resources.push(i),r&&!t.resources.includes(r)&&t.resources.push(r),t.scope=this._isServerRsrc(i)?`server`:`portal`,n||t.emitTokenChange();let s=this._soReqs,c={};this._soReqs=[],s.forEach(e=>{if(!this._isIdenticalService(i,e.resUrl_)){let n=this._getSuffix(e.resUrl_);c[n]||(c[n]=!0,t.resources.push(e.resUrl_))}}),e.resolve(t),s.forEach(e=>{this._hasSameServerInstance(this._getServerInstanceRoot(i),e.resUrl_)?e.resolve(t):this._soReqs.push(e)}),this._busy=e.resUrl_=e.sinfo_=e.refresh_=null,o||this.emit(`credential-create`,{credential:t}),this._soReqs.length?this._doSignIn(this._soReqs.shift()):this._xoReqs.length&&this._doSignIn(this._xoReqs.shift())},r=t=>{e.reject(t),this._busy=e.resUrl_=e.sinfo_=e.refresh_=null,this._soReqs.length?this._doSignIn(this._soReqs.shift()):this._xoReqs.length&&this._doSignIn(this._xoReqs.shift())},a=(o,c,l,d)=>{let f=e.sinfo_,p=!e.options_||e.options_.prompt!==!1,m=f.hasPortal&&this._findOAuthInfo(e.resUrl_),h,g;if(o)t(new y({userId:o,server:f.server??void 0,token:l??void 0,expires:d==null?null:Number(d),ssl:!!c}));else if(window!==window.parent&&this._appUrlObj.query?.[`arcgis-auth-origin`]&&this._appUrlObj.query?.[`arcgis-auth-portal`]&&this._hasSameServerInstance(this._getServerInstanceRoot(this._appUrlObj.query[`arcgis-auth-portal`]),e.resUrl_)){window.parent.postMessage({type:`arcgis:auth:requestCredential`},this._appUrlObj.query[`arcgis-auth-origin`]);let a=i(window,`message`,e=>{e.source===window.parent&&e.data&&(e.data.type===`arcgis:auth:credential`?(a.remove(),e.data.credential.expires<Date.now()?r(new n(`identity-manager:credential-request-failed`,`Parent application's token has expired.`)):t(new y(e.data.credential))):e.data.type===`arcgis:auth:error`&&(a.remove(),e.data.error.name===`tokenExpiredError`?r(new n(`identity-manager:credential-request-failed`,`Parent application's token has expired.`)):r(n.fromJSON(e.data.error))))});s(e.options_?.signal,()=>{a.remove()})}else if(m){let i=m._oAuthCred;if(!i){let e=new x(m,A),t=new x(m,j);e.isValid()&&t.isValid()?e.expires>t.expires?(i=e,t.destroy()):(i=t,e.destroy()):i=e.isValid()?e:t,m._oAuthCred=i}if(i.isValid()){h=new y({userId:i.userId??void 0,server:f.server??void 0,token:i.token??void 0,expires:i.expires,ssl:i.ssl??void 0,_oAuthCred:i});let n=m.appId!==i.appId&&this._doPortalSignIn(e.resUrl_);n||i.refreshToken?(e._pendingDfd=i.refreshToken?this._getOAuthToken(f.server,i.refreshToken,i.appId).then(e=>(h.expires=Date.now()+e.expires_in*1e3,h.token=e.access_token,h)):Promise.resolve(h),e._pendingDfd.then(e=>n?this._exchangeToken(e.server,m.appId,e.token).then(t=>(e.token=t,e)).catch(()=>e):e).then(e=>{t(e)}).catch(e=>{let t=e.details?.httpStatus;t>0&&t!==404?(i.destroy(),a()):r(e)})):t(h)}else if(this._oAuthLocationParams&&this._hasSameServerInstance(m.portalUrl,this._oAuthLocationParams.state.portalUrl)&&(this._oAuthLocationParams.access_token||this._oAuthLocationParams.code&&this._oAuthLocationParams.state.uid===i.stateUID&&i.codeVerifier)){let n=this._oAuthLocationParams;this._oAuthLocationParams=null,e._pendingDfd=this._processOAuthResponseParams(n,m,f).then(e=>{t(e)}).catch(r)}else{let i=()=>{p?e._pendingDfd=this.oAuthSignIn(e.resUrl_,f,m,e.options_).then(t,r):(g=new n(`identity-manager:not-authenticated`,`User is not signed in.`),r(g))};this._doPortalSignIn(e.resUrl_)?e._pendingDfd=this._getPlatformSelf(f.server,m.appId).then(e=>{u(e.portalUrl,this._appOrigin,!0)?(h=new y({userId:e.username,server:f.server??void 0,expires:Date.now()+e.expires_in*1e3,token:e.token}),t(h)):i()}).catch(i):i()}}else if(!p)g=new n(`identity-manager:not-authenticated`,`User is not signed in.`),r(g);else if(this._checkProtocol(e.resUrl_,f,r,e.admin_)){let n=e.options_;e.admin_&&(n||={},n.isAdmin=!0),e._pendingDfd=this.signIn(e.resUrl_,f,n).then(t,r)}},c=()=>{let n=e.sinfo_,i=n.owningSystemUrl,a=e.options_,o,s,c;if(a&&(o=a.token,s=a.prompt),c=this._findCredential(i,{resource:e.resUrl_}),!c){for(let e of this.credentials)if(this._isIdProvider(i,e.server)){c=e;break}}if(c){let i=this.findCredential(e.resUrl_,c.userId);if(i)t(i);else if(k(n,this._legacyFed)){let e=c.toJSON();e.server=n.server,e.resources=null,t(new y(e))}else(e._pendingDfd=this.generateToken(this.findServerInfo(c.server),null,{serverUrl:e.resUrl_,token:c.token,signal:e.options_.signal,ssl:c.ssl})).then(r=>{t(new y({userId:c?.userId,server:n.server??void 0,token:r.token,expires:r.expires==null?null:Number(r.expires),ssl:!!r.ssl,isAdmin:e.admin_,validity:r.validity}))},r)}else this._busy=null,o&&(e.options_.token=null),(e._pendingDfd=this.getCredential(i.replace(/\/?$/,`/sharing`),{resource:e.resUrl_,owningTenant:n.owningTenant,signal:e.options_.signal,prompt:s})).then(()=>{this._enqueue(e.resUrl_,e.sinfo_,e.options_,e,e.admin_)},t=>{e.resUrl_=e.sinfo_=e.refresh_=null,e.reject(t)})};if(this._errbackFunc=r,e.options_?.signal?.aborted){r(new n(`identity-manager:user-aborted`,`ABORTED`));return}if(!e.refresh_&&!e.options_?.token&&!e.options_?.credential){let n=this._findCredential(e.resUrl_,e.options_);if(n){t(n,!0);return}}let l=e.sinfo_.owningSystemUrl,d=this._isServerRsrc(e.resUrl_),f=e.sinfo_._restInfoPms;f?f.promise.then(t=>{let n=e.sinfo_;if(n._restInfoPms){n.adminTokenServiceUrl=n._restInfoPms.adminUrl,n._restInfoPms=null,n.tokenServiceUrl=(o(`authInfo.tokenServicesUrl`,t)||o(`authInfo.tokenServiceUrl`,t)||o(`tokenServiceUrl`,t))??null,n.shortLivedTokenValidity=o(`authInfo.shortLivedTokenValidity`,t)??null,n.currentVersion=t.currentVersion,n.owningTenant=t.owningTenant;let e=n.owningSystemUrl=t.owningSystemUrl;e&&this._portals.push(e)}d&&n.owningSystemUrl?c():a()},()=>{e.sinfo_._restInfoPms=null;let t=new n(`identity-manager:server-identification-failed`,`Unknown resource - could not find token service endpoint.`);r(t)}):d&&l?c():e.sinfo_._selfReq?e.sinfo_._selfReq.selfDfd.then(t=>{let n={},r,i,a,o;return t&&(r=t.user?.username,n.username=r,n.allSSL=t.allSSL,i=t.supportsOAuth,o=parseFloat(t.currentVersion),t.portalMode===`multitenant`&&(a=t.customBaseUrl),e.sinfo_.currentVersion=o),e.sinfo_.webTierAuth=!!r,r&&this.normalizeWebTierAuth?this.generateToken(e.sinfo_,null,{ssl:n.allSSL}).catch(()=>null).then(e=>(n.portalToken=e?.token,n.tokenExpiration=e?.expires,n)):!r&&i&&o>=4.4&&!this._findOAuthInfo(e.resUrl_)?this._generateOAuthInfo({portalUrl:e.sinfo_.server,customBaseUrl:a,owningTenant:e.sinfo_._selfReq.owningTenant}).catch(()=>null).then(()=>n):n}).catch(()=>null).then(t=>{e.sinfo_._selfReq=null,t?a(t.username,t.allSSL,t.portalToken,t.tokenExpiration):a()}):a()}_generateOAuthInfo(e){let n,r=null,i=e.portalUrl,a=e.customBaseUrl,o=e.owningTenant,s=!this._defaultOAuthInfo&&this._createDefaultOAuthInfo&&!this._hasTestedIfAppIsOnPortal;if(s){r=this._appUrlObj.path;let e=r.search(/\/(apps|home)\//);r=e>-1?r.slice(0,e):null}return s&&r?(this._hasTestedIfAppIsOnPortal=!0,n=t(r+`/sharing/rest`,{query:{f:`json`}}).then(()=>{this._defaultOAuthInfo=new S({appId:`arcgisonline`,popupCallbackUrl:r+`/home/oauth-callback.html`})})):n=Promise.resolve(),n.then(()=>{if(this._defaultOAuthInfo)return i=i.replace(/^http:/i,`https:`),t(i+`/sharing/rest/oauth2/validateRedirectUri`,{query:{accountId:o,client_id:this._defaultOAuthInfo.appId,redirect_uri:_(this._defaultOAuthInfo.popupCallbackUrl),f:`json`}}).then(e=>{if(e.data.valid){let t=this._defaultOAuthInfo.clone();t.portalUrl=e.data.urlKey&&a?`https://`+e.data.urlKey.toLowerCase()+`.`+a:i,t.popup=window!==window.top||!(u(i,this._appOrigin)||this._gwDomains.some(e=>e.regex.test(i)&&e.regex.test(this._appOrigin))),this.oAuthInfos.push(t)}})})}_doOAuthSignIn(e,t,r,a){let o=r._oAuthCred,s={portalUrl:r.portalUrl};!r.popup&&r.preserveUrlHash&&window.location.hash&&(s.hash=window.location.hash),o.stateUID&&(s.uid=o.stateUID);let c={client_id:r.appId,response_type:o.codeVerifier?`code`:`token`,state:JSON.stringify(s),expiration:r.expiration,locale:r.locale,redirect_uri:this._getRedirectURI(r,!!o.codeVerifier)};r.forceLogin&&(c.force_login=!0),r.forceUserId&&r.userId&&(c.prepopulatedusername=r.userId),!r.popup&&this._doPortalSignIn(e)&&(c.redirectToUserOrgUrl=!0),o.codeVerifier&&(c.code_challenge=a||o.codeVerifier,c.code_challenge_method=a?`S256`:`plain`);let l=this._getAuthorizeUrl(r.portalUrl),u=l+`?`+m(c);if(r.popup){let e=window.open(u,`esriJSAPIOAuth`,r.popupWindowFeatures);if(e)e.focus(),this._oAuthDfd.oAuthWin_=e,this._oAuthIntervalId=setInterval(()=>{if(e.closed){clearInterval(this._oAuthIntervalId),this._oAuthOnPopupHandle.remove();let e=this._oAuthDfd;if(e){let t=new n(`identity-manager:user-aborted`,`ABORTED`);e.reject(t)}}},500),this._oAuthOnPopupHandle=i(window,[`arcgis:auth:hash`,`arcgis:auth:location:search`],e=>{e.type===`arcgis:auth:hash`?this.setOAuthResponseHash(e.detail):this._setOAuthResponseQueryString(e.detail)});else{let e=new n(`identity-manager:popup-blocked`,`ABORTED`);this._oAuthDfd.reject(e)}}else this._rejectOnPersistedPageShow=!0,this._oAuthRedirectFunc?this._oAuthRedirectFunc({authorizeParams:c,authorizeUrl:l,resourceUrl:e,serverInfo:t,oAuthInfo:r}):window.location.href=u}_getAuthorizeUrl(e){let t=e.replace(/^http:/i,`https:`)+`/sharing/oauth2/authorize`,n=E(t);if(n?.portalHostname){let{customBaseUrl:e,portalHostname:t,urlKey:r}=n}return t}_getRedirectURI(e,t){let n=window.location.href.replace(/#.*$/,``);if(e.popup)return _(e.popupCallbackUrl);if(t){let e=l(n);return e.query&&[`code`,`error`,`error_description`,`message_code`,`persist`,`state`].forEach(t=>{delete e.query[t]}),v(e.path,e.query)}return n}}M.prototype.declaredClass=`esri.identity.IdentityManagerBase`;export{M as IdentityManagerBase};
|
|
2
|
+
import e from"../config.js";import t from"../request.js";import n from"../core/Error.js";import{Evented as r}from"../core/Evented.js";import{on as i}from"../core/events.js";import{fixJson as a}from"../core/lang.js";import{getDeepValue as o}from"../core/object.js";import{onAbort as s,isAborted as c}from"../core/promiseUtils.js";import{urlToObject as l,hasSameOrigin as u,Url as d,queryToObject as f,base64UrlEncode as p,objectToQuery as m,normalize as h,getProxyRule as g,makeAbsolute as _,addQueryParameters as v}from"../core/urlUtils.js";import y from"./Credential.js";import b from"./IdentityModal.js";import x from"./OAuthCredential.js";import S from"./OAuthInfo.js";import C from"./ServerInfo.js";import{isSecureProxyService as w,normalizeArcGISOnlineOrgDomain as T,parseKnownArcGISOnlineDomain as E}from"../portal/support/urlUtils.js";const D={},O=e=>{let t=new d(e.owningSystemUrl).host,n=new d(e.server).host,r=/.+\.arcgis\.com$/i;return r.test(t)&&r.test(n)},k=(e,t)=>!!(O(e)&&t&&t.some(t=>t.test(e.server)));let A=null,j=null;try{A=window.localStorage,j=window.sessionStorage}catch{}class M extends r{constructor(){super(),this._portalConfig=globalThis.esriGeowConfig,this.serverInfos=[],this.oAuthInfos=[],this.credentials=[],this._soReqs=[],this._xoReqs=[],this._portals=[],this._defaultOAuthInfo=null,this._defaultTokenValidity=60,this.dialog=null,this.tokenValidity=null,this.normalizeWebTierAuth=!1,this._appOrigin=window.origin===`null`?window.location.origin:window.origin,this._appUrlObj=l(window.location.href),this._busy=null,this._rejectOnPersistedPageShow=!1,this._oAuthLocationParams=null,this._gwTokenUrl=`/sharing/rest/generateToken`,this._agsRest=`/rest/services`,this._agsPortal=/\/sharing(\/|$)/i,this._agsAdmin=/(https?:\/\/[^/]+\/[^/]+)\/admin\/?(\/.*)?$/i,this._adminSvcs=/\/rest\/admin\/services(\/|$)/i,this._gwDomains=[{regex:/^https?:\/\/www\.arcgis\.com/i,customBaseUrl:`maps.arcgis.com`,tokenServiceUrl:`https://www.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:dev|[a-z\d-]+\.mapsdev)\.arcgis\.com/i,customBaseUrl:`mapsdev.arcgis.com`,tokenServiceUrl:`https://dev.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:devext|[a-z\d-]+\.mapsdevext)\.arcgis\.com/i,customBaseUrl:`mapsdevext.arcgis.com`,tokenServiceUrl:`https://devext.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/(?:qaext|[a-z\d-]+\.mapsqa)\.arcgis\.com/i,customBaseUrl:`mapsqa.arcgis.com`,tokenServiceUrl:`https://qaext.arcgis.com/sharing/rest/generateToken`},{regex:/^https?:\/\/[a-z\d-]+\.maps\.arcgis\.com/i,customBaseUrl:`maps.arcgis.com`,tokenServiceUrl:`https://www.arcgis.com/sharing/rest/generateToken`}],this._legacyFed=[],this._regexSDirUrl=/http.+\/rest\/services\/?/gi,this._regexServerType=/(\/(FeatureServer|GPServer|GeoDataServer|GeocodeServer|GeoenrichmentServer|GeometryServer|GlobeServer|ImageServer|KnowledgeGraphServer|MapServer|MissionServer|MobileServer|NAServer|NetworkDiagramServer|OGCFeatureServer|ParcelFabricServer|RelationalCatalogServer|SceneServer|StreamServer|UtilityNetworkServer|ValidationServer|VectorTileServer|VersionManagementServer|VideoServer|3DTilesServer)).*/gi,this._gwUser=/http.+\/users\/([^/]+).*/i,this._gwItem=/http.+\/items\/([^/]+).*/i,this._gwGroup=/http.+\/groups\/([^/]+).*/i,this._rePortalTokenSvc=/\/sharing(\/rest)?\/generatetoken/i,this._createDefaultOAuthInfo=!0,this._hasTestedIfAppIsOnPortal=!1,this._getPlatformSelfError=null,this._getOAuthLocationParams(),window.addEventListener(`pageshow`,e=>{this._pageShowHandler(e)})}registerServers(e){let t=this.serverInfos;t?(e=e.filter(e=>!this.findServerInfo(e.server)),this.serverInfos=t.concat(e)):this.serverInfos=e,e.forEach(e=>{e.owningSystemUrl&&this._portals.push(e.owningSystemUrl),e.hasPortal&&this._portals.push(e.server)})}registerOAuthInfos(e){let t=this.oAuthInfos;if(t){for(let n of e){let e=this.findOAuthInfo(n.portalUrl);e&&t.splice(t.indexOf(e),1)}this.oAuthInfos=t.concat(e)}else this.oAuthInfos=e}registerToken(e){e={...e};let t=this._sanitizeUrl(e.server),n=this._isServerRsrc(t),r=this.findServerInfo(t),i=!0,a;r||(r=new C,r.server=this._getServerInstanceRoot(t),n?r.hasServer=!0:(r.tokenServiceUrl=this._getTokenSvcUrl(t),r.hasPortal=!0),this.registerServers([r])),a=this._findCredential(t),a?(delete e.server,Object.assign(a,e),i=!1):(a=new y({userId:e.userId,server:r.server??void 0,token:e.token,expires:e.expires,ssl:e.ssl,scope:n?`server`:`portal`}),a.resources=[t],this.credentials.push(a)),a.emitTokenChange(!1),i||a.refreshServerTokens()}toJSON(){return a({serverInfos:this.serverInfos.map(e=>e.toJSON()),oAuthInfos:this.oAuthInfos.map(e=>e.toJSON()),credentials:this.credentials.map(e=>e.toJSON())})}initialize(e){if(!e)return;typeof e==`string`&&(e=JSON.parse(e));let t=e.serverInfos,n=e.oAuthInfos,r=e.credentials;if(t){let e=[];t.forEach(t=>{t.server&&t.tokenServiceUrl&&e.push(t.declaredClass?t:new C(t))}),e.length&&this.registerServers(e)}if(n){let e=[];n.forEach(t=>{t.appId&&e.push(t.declaredClass?t:new S(t))}),e.length&&this.registerOAuthInfos(e)}r&&r.forEach(e=>{e.server&&e.token&&e.expires&&e.expires>Date.now()&&(e=e.declaredClass?e:new y(e),e.emitTokenChange(),this.credentials.push(e))})}findServerInfo(e){let t;e=this._sanitizeUrl(e);for(let n of this.serverInfos)if(this._hasSameServerInstance(n.server,e)){t=n;break}return t}findOAuthInfo(e){let t;e=this._sanitizeUrl(e);for(let n of this.oAuthInfos)if(this._hasSameServerInstance(n.portalUrl,e)){t=n;break}return t}findCredential(e,t){if(!e)return;let n;e=this._sanitizeUrl(e);let r=this._isServerRsrc(e)?`server`:`portal`;if(t){for(let i of this.credentials)if(this._hasSameServerInstance(i.server,e)&&t===i.userId&&i.scope===r){n=i;break}}else for(let t of this.credentials)if(this._hasSameServerInstance(t.server,e)&&this._getIdenticalSvcIdx(e,t)!==-1&&t.scope===r){n=t;break}return n}getCredential(e,t){let r=!1,i,a=!0;t&&(r=!!(t.token||t.credential),i=t.error,a=t.prompt!==!1),t={...t},e=this._sanitizeUrl(e);let o=new AbortController,l=Promise.withResolvers();if(t.signal&&s(t.signal,()=>{o.abort()}),s(o,()=>{l.reject(new n(`identity-manager:user-aborted`,`ABORTED`))}),c(o))return l.promise;t.signal=o.signal;let d=this._isAdminResource(e),f=r?this.findCredential(e):null,p;if(f&&i?.details?.httpStatus===498)f.destroy();else if(f)return p=new n(`identity-manager:not-authorized`,`You are currently signed in as: '`+f.userId+`'. You do not have access to this resource: `+e,{error:i}),l.reject(p),l.promise;let m=this._findCredential(e,t);if(m)return l.resolve(m),l.promise;let h=this.findServerInfo(e);if(h)!h.hasPortal&&h.server&&h.owningSystemUrl&&this._hasSameServerInstance(h.server,h.owningSystemUrl)&&(h.hasPortal=!0),!h.hasServer&&this._isServerRsrc(e)&&(h._restInfoPms=this._getTokenSvcUrl(e),h.hasServer=!0);else{let t=this._getTokenSvcUrl(e);if(!t)return p=new n(`identity-manager:unknown-resource`,`Unknown resource - could not find token service endpoint.`),l.reject(p),l.promise;h=new C,h.server=this._getServerInstanceRoot(e),typeof t==`string`?(h.tokenServiceUrl=t,h.hasPortal=!0):(h._restInfoPms=t,h.hasServer=!0),this.registerServers([h])}return h.hasPortal&&h._selfReq===void 0&&(a||u(h.tokenServiceUrl,this._appOrigin)||this._gwDomains.some(e=>e.tokenServiceUrl===h.tokenServiceUrl))&&(h._selfReq={owningTenant:t?.owningTenant,selfDfd:this._getPortalSelf(h.tokenServiceUrl.replace(this._rePortalTokenSvc,`/sharing/rest/portals/self`),e)}),this._enqueue(e,h,t,l,d)}getResourceName(e){return this._isRESTService(e)?e.replace(this._regexSDirUrl,``).replace(this._regexServerType,``)||``:this._gwUser.test(e)&&e.replace(this._gwUser,`$1`)||this._gwItem.test(e)&&e.replace(this._gwItem,`$1`)||this._gwGroup.test(e)&&e.replace(this._gwGroup,`$1`)||``}generateToken(e,r,i){let a=this._rePortalTokenSvc.test(e.tokenServiceUrl),o=new d(this._appOrigin),s=e.shortLivedTokenValidity,c,l,f,p,m,h,g,_;r&&(_=this.tokenValidity||s||this._defaultTokenValidity,_>s&&s>0&&(_=s)),i&&(c=i.isAdmin,l=i.serverUrl,f=i.token,h=i.signal,g=i.ssl,e.customParameters=i.customParameters),c?p=e.adminTokenServiceUrl:(p=e.tokenServiceUrl,m=new d(p.toLowerCase()),e.webTierAuth&&i?.serverUrl&&!g&&o.scheme===`http`&&(u(o.uri,p,!0)||m.scheme===`https`&&o.host===m.host&&o.port===`7080`&&m.port===`7443`)&&(p=p.replace(/^https:/i,`http:`).replace(/:7443/i,`:7080`)));let v={query:{request:`getToken`,username:r?.username,password:r?.password,serverUrl:l,token:f,expiration:_,referer:c||a?this._appOrigin:null,client:c?`referer`:null,f:`json`,...e.customParameters},method:`post`,authMode:`anonymous`,useProxy:this._useProxy(e,i),signal:h};return a||(v.withCredentials=!1),t(p,v).then(t=>{let i=t.data;if(!i?.token)return new n(`identity-manager:authentication-failed`,`Unable to generate token`);let a=e.server;return D[a]||(D[a]={}),r&&(D[a][r.username]=r.password),i.validity=_,i})}isBusy(){return!!this._busy}async checkSignInStatus(e){return(await this.checkAppAccess(e,``)).credential}checkAppAccess(e,r,i){let a=!1;return this.getCredential(e,{prompt:!1}).then(o=>{let s,c={f:`json`};if(o.scope===`portal`){if(r&&(this._doPortalSignIn(e)||i?.force))s=o.server+`/sharing/rest/oauth2/validateAppAccess`,c.client_id=r;else if(o.token)s=o.server+`/sharing/rest`;else return{credential:o}}else if(o.token)s=o.server+`/rest/services`;else return{credential:o};return o.token&&(c.token=o.token),t(s,{query:c,authMode:`anonymous`}).then(e=>{if(e.data.valid===!1)throw new n(`identity-manager:not-authorized`,`You are currently signed in as: '${o.userId}'.`,e.data);return a=!!e.data.viewOnlyUserTypeApp,{credential:o}}).catch(e=>{if(e.name===`identity-manager:not-authorized`)throw e;let t=e.details?.httpStatus;if(t===498)throw o.destroy(),new n(`identity-manager:not-authenticated`,`User is not signed in.`);if(t===400)throw new n(`identity-manager:invalid-request`,`Bad request`);return{credential:o}})}).then(e=>({credential:e.credential,viewOnly:a}))}setOAuthResponseHash(e){e&&(e.startsWith(`#`)&&(e=e.slice(1)),this._processOAuthPopupParams(f(e)))}setOAuthRedirectionHandler(e){this._oAuthRedirectFunc=e}setProtocolErrorHandler(e){this._protocolFunc=e}signIn(e,t,r={}){let i=Promise.withResolvers(),a=()=>{l?.remove(),u?.remove(),this.dialog?.destroy(),this.dialog=l=u=null},o=()=>{a(),this._oAuthDfd=null,i.reject(new n(`identity-manager:user-aborted`,`ABORTED`))};r.signal&&s(r.signal,()=>{o()});let c=new b({open:!0,resource:this.getResourceName(e),server:t.server});this.dialog=c,this.emit(`dialog-create`);let l=c.on(`cancel`,o),u=c.on(`submit`,e=>{this.generateToken(t,e,{isAdmin:r.isAdmin,signal:r.signal}).then(n=>{a();let o=new y({userId:e.username,server:t.server??void 0,token:n.token,expires:n.expires==null?null:Number(n.expires),ssl:!!n.ssl,isAdmin:r.isAdmin,validity:n.validity});i.resolve(o)}).catch(e=>{c.error=e,c.signingIn=!1})});return i.promise}oAuthSignIn(e,t,r,i){this._oAuthDfd=Promise.withResolvers();let a=this._oAuthDfd;i?.signal&&s(i.signal,()=>{let e=this._oAuthDfd&&this._oAuthDfd.oAuthWin_;e&&!e.closed?e.close():this.dialog&&d()}),a.resUrl_=e,a.sinfo_=t,a.oinfo_=r;let o,c=r._oAuthCred;if(c.storage&&(r.flowType===`authorization-code`||r.flowType===`auto`&&t.currentVersion>=8.4)){let e=crypto.getRandomValues(new Uint8Array(32));o=p(e),c.codeVerifier=o,e=crypto.getRandomValues(new Uint8Array(32)),c.stateUID=p(e),c.save()||(c.codeVerifier=o=null)}else c.codeVerifier=null;this._getCodeChallenge(o).then(n=>{let a=!i||i.oAuthPopupConfirmation!==!1;if(!r.popup||!a){this._doOAuthSignIn(e,t,r,n);return}let o=new b({oAuthPrompt:!0,server:t.server,open:!0});this.dialog=o,this.emit(`dialog-create`),l=o.on(`cancel`,d),u=o.on(`submit`,()=>{f(),this._doOAuthSignIn(e,t,r,n)})});let l,u,d=()=>{f(),this._oAuthDfd=null,a.reject(new n(`identity-manager:user-aborted`,`ABORTED`))},f=()=>{l?.remove(),u?.remove(),this.dialog?.destroy(),this.dialog=null};return a.promise}async refreshToken(e){let t=this.findServerInfo(e.server),n=t?.owningSystemUrl,r=!!n&&e.scope===`server`,i=r&&k(t,this._legacyFed),a=t.webTierAuth,o=a&&this.normalizeWebTierAuth,s=D[e.server]?.[e.userId],c=e.resources&&e.resources[0],l=r?this.findServerInfo(n):null,u={username:e.userId,password:s},d;if(a&&!o)return;r&&!l&&this.serverInfos.some(e=>(this._isIdProvider(n,e.server)&&(l=e),!!l));let f=l?this.findCredential(l.server,e.userId):null;if(!r||f){if(i)f?.refreshToken();else{if(r)d={serverUrl:c,token:f?.token,ssl:f?.ssl};else if(o)u=null,d={ssl:e.ssl};else if(s)e.isAdmin&&(d={isAdmin:!0});else{let n;return c&&(c=this._sanitizeUrl(c),e._enqueued=1,n=this._enqueue(c,t,null,null,e.isAdmin,e),n.then(()=>{e._enqueued=0,e.refreshServerTokens()}).catch(()=>{e._enqueued=0})),n}return this.generateToken(r?l:t,r?null:u,d).then(t=>{e.token=t.token,e.expires=t.expires==null?null:Number(t.expires),e.creationTime=Date.now(),e.validity=t.validity,e.emitTokenChange(),e.refreshServerTokens()}).catch(()=>{})}}}refreshServerTokens(e){e.scope===`portal`&&this.credentials.forEach(t=>{let n=this.findServerInfo(t.server),r=n?.owningSystemUrl;t!==e&&t.userId===e.userId&&r&&t.scope===`server`&&(this._hasSameServerInstance(e.server,r)||this._isIdProvider(r,e.server))&&(k(n,this._legacyFed)?(t.token=e.token,t.expires=e.expires,t.creationTime=e.creationTime,t.validity=e.validity,t.emitTokenChange()):t.refreshToken())})}destroyCredentials(){this.credentials&&this.credentials.slice().forEach(e=>{e.destroy()}),this.emit(`credentials-destroy`)}enablePostMessageAuth(e=`https://www.arcgis.com/sharing/rest`){this._postMessageAuthHandle&&this._postMessageAuthHandle.remove(),this._postMessageAuthHandle=i(window,`message`,t=>{if((t.origin===this._appOrigin||t.origin.endsWith(`.arcgis.com`))&&t.data?.type===`arcgis:auth:requestCredential`){let n=t.source;this.getCredential(e).then(e=>{n.postMessage({type:`arcgis:auth:credential`,credential:{expires:e.expires,server:e.server,ssl:e.ssl,token:e.token,userId:e.userId}},t.origin)}).catch(e=>{n.postMessage({type:`arcgis:auth:error`,error:{name:e.name,message:e.message}},t.origin)})}})}disablePostMessageAuth(){this._postMessageAuthHandle&&=(this._postMessageAuthHandle.remove(),null)}_getOAuthLocationParams(){let e=window.location.hash;if(e){e.startsWith(`#`)&&(e=e.slice(1));let t=f(e),n=!1;if(t.access_token&&t.expires_in&&t.state&&t.hasOwnProperty(`username`))try{t.state=JSON.parse(t.state),t.state.portalUrl&&(this._oAuthLocationParams=t,n=!0)}catch{}else if(t.error&&t.error_description&&(console.log(`IdentityManager OAuth Error: `,t.error,` - `,t.error_description),t.error===`access_denied`&&(n=!0,t.state)))try{t.state=JSON.parse(t.state)}catch{}n&&(window.location.hash=t.state?.hash||``)}let t=window.location.search;if(t){t.startsWith(`?`)&&(t=t.slice(1));let e=f(t),n=!1;if(e.code&&e.state)try{e.state=JSON.parse(e.state),e.state.portalUrl&&e.state.uid&&(this._oAuthLocationParams=e,n=!0)}catch{}else if(e.error&&e.error_description&&(console.log(`IdentityManager OAuth Error: `,e.error,` - `,e.error_description),e.error===`access_denied`&&(n=!0,e.state)))try{e.state=JSON.parse(e.state)}catch{}if(n){let t={...e};[`code`,`error`,`error_description`,`message_code`,`persist`,`state`].forEach(e=>{delete t[e]});let n=m(t),r=window.location.pathname+(n?`?${n}`:``)+(e.state?.hash||``);window.history.replaceState(window.history.state,``,r)}}}_getOAuthToken(e,n,r,i,a){return e=e.replace(/^http:/i,`https:`),t(`${e}/sharing/rest/oauth2/token`,{authMode:`anonymous`,method:`post`,query:i&&a?{grant_type:`authorization_code`,code:n,redirect_uri:i,client_id:r,code_verifier:a}:{grant_type:`refresh_token`,refresh_token:n,client_id:r}}).then(e=>e.data)}async _getCodeChallenge(e){if(e&&globalThis.isSecureContext){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t);return p(new Uint8Array(n))}return null}_pageShowHandler(e){if(e.persisted&&this.isBusy()&&this._rejectOnPersistedPageShow){let e=new n(`identity-manager:user-aborted`,`ABORTED`);this._errbackFunc(e)}}_findCredential(e,t){let n=-1,r,i,a,o,s=t?.token,c=t?.resource,l=this._isServerRsrc(e)?`server`:`portal`,u=this.credentials.filter(t=>this._hasSameServerInstance(t.server,e)&&t.scope===l);if(e=c||e,u.length){if(u.length===1){if(r=u[0],a=this.findServerInfo(r.server),i=a?.owningSystemUrl,o=i?this.findCredential(i,r.userId):void 0,n=this._getIdenticalSvcIdx(e,r),s)n!==-1&&(r.resources.splice(n,1),this._removeResource(e,o));else return n===-1&&r.resources.push(e),this._addResource(e,o),r}else{let t,r;if(u.some(s=>(r=this._getIdenticalSvcIdx(e,s),r!==-1&&(t=s,a=this.findServerInfo(t.server),i=a?.owningSystemUrl,o=i?this.findCredential(i,t.userId):void 0,n=r,!0))),s)t&&(t.resources.splice(n,1),this._removeResource(e,o));else if(t)return this._addResource(e,o),t}}}_findOAuthInfo(e){let t=this.findOAuthInfo(e);if(!t){for(let n of this.oAuthInfos)if(this._isIdProvider(n.portalUrl,e)){t=n;break}}return t}_addResource(e,t){t&&this._getIdenticalSvcIdx(e,t)===-1&&t.resources.push(e)}_removeResource(e,t){let n=-1;t&&(n=this._getIdenticalSvcIdx(e,t),n>-1&&t.resources.splice(n,1))}_useProxy(e,t){return t?.isAdmin&&!u(e.adminTokenServiceUrl,this._appOrigin)||!this._isPortalDomain(e.tokenServiceUrl)&&String(e.currentVersion)===`10.1`&&!u(e.tokenServiceUrl,this._appOrigin)}_getOrigin(e){let t=new d(e);return t.scheme+`://`+t.host+(t.port==null?``:`:`+t.port)}_getServerInstanceRoot(e){let t=e.toLowerCase(),n=t.indexOf(this._agsRest);return n===-1&&this._isAdminResource(e)&&(n=this._agsAdmin.test(e)?e.replace(this._agsAdmin,`$1`).length:e.search(this._adminSvcs)),n===-1&&!w(t)&&(n=t.indexOf(`/sharing`)),n===-1&&t.endsWith(`/`)&&(n=t.length-1),n>-1?e.slice(0,n):e}_hasSameServerInstance(e,t){return e.endsWith(`/`)&&(e=e.slice(0,-1)),e=e.toLowerCase(),t=this._getServerInstanceRoot(t).toLowerCase(),e=T(e),t=T(t),e=e.slice(Math.max(0,e.indexOf(`:`))),t=t.slice(Math.max(0,t.indexOf(`:`))),e===t}_sanitizeUrl(t){let n=(e.request.proxyUrl||``).toLowerCase(),r=n?t.toLowerCase().indexOf(n+`?`):-1;return r!==-1&&(t=t.slice(r+n.length+1)),t=h(t),l(t).path}_isRESTService(e){return e.includes(this._agsRest)}_isAdminResource(e){return this._agsAdmin.test(e)||this._adminSvcs.test(e)}_isServerRsrc(e){return this._isRESTService(e)||this._isAdminResource(e)}_isIdenticalService(e,t){let n=!1;if(this._isRESTService(e)&&this._isRESTService(t)){let r=this._getSuffix(e).toLowerCase(),i=this._getSuffix(t).toLowerCase();if(n=r===i,!n){let e=/(.*)\/(MapServer|FeatureServer|UtilityNetworkServer).*/gi;n=r.replaceAll(e,`$1`)===i.replaceAll(e,`$1`)}}else(this._isAdminResource(e)&&this._isAdminResource(t)||!this._isServerRsrc(e)&&!this._isServerRsrc(t)&&this._isPortalDomain(e))&&(n=!0);return n}_isPortalDomain(t){let n=new d(t.toLowerCase()),r=this._portalConfig,i=this._gwDomains.some(e=>e.regex.test(n.uri));return!i&&r&&(i=this._hasSameServerInstance(this._getServerInstanceRoot(r.restBaseUrl),n.uri)),i||e.portalUrl&&(i=u(n,e.portalUrl,!0)),i||=this._portals.some(e=>this._hasSameServerInstance(e,n.uri)),i||=this._agsPortal.test(n.path),i}_isIdProvider(e,t){let n=-1,r=-1;this._gwDomains.forEach((i,a)=>{n===-1&&i.regex.test(e)&&(n=a),r===-1&&i.regex.test(t)&&(r=a)});let i=!1;if(n>-1&&r>-1&&(n===0||n===4?(r===0||r===4)&&(i=!0):n===1?(r===1||r===2)&&(i=!0):n===2?r===2&&(i=!0):n===3&&r===3&&(i=!0)),!i){let n=this.findServerInfo(t),r=n?.owningSystemUrl;r&&O(n)&&this._isPortalDomain(r)&&this._isIdProvider(e,r)&&(i=!0)}return i}_getIdenticalSvcIdx(e,t){let n=-1;for(let r=0;r<t.resources.length;r++){let i=t.resources[r];if(this._isIdenticalService(e,i)){n=r;break}}return n}_getSuffix(e){return e.replace(this._regexSDirUrl,``).replace(this._regexServerType,`$1`)}_getTokenSvcUrl(e){let n,r,i;if(this._isRESTService(e)||this._isAdminResource(e)){let i=this._getServerInstanceRoot(e);return n=i+`/admin/generateToken`,e=i+`/rest/info`,r=t(e,{query:{f:`json`}}).then(e=>e.data),{adminUrl:n,promise:r}}if(this._isPortalDomain(e)){let t=``;if(this._gwDomains.some(n=>(n.regex.test(e)&&(t=n.tokenServiceUrl),!!t)),t||this._portals.some(n=>(this._hasSameServerInstance(n,e)&&(t=n+this._gwTokenUrl),!!t)),t||(i=e.toLowerCase().indexOf(`/sharing`),i!==-1&&(t=e.slice(0,i)+this._gwTokenUrl)),t||=this._getOrigin(e)+this._gwTokenUrl,t){let n=new d(e).port;/^http:\/\//i.test(e)&&n===`7080`&&(t=t.replace(/:7080/i,`:7443`)),t=t.replace(/http:/i,`https:`)}return t}}_processOAuthResponseParams(e,t,n){let r=t._oAuthCred;if(e.code){let i=r.codeVerifier;return r.codeVerifier=null,r.stateUID=null,r.save(),this._getOAuthToken(n.server,e.code,t.appId,this._getRedirectURI(t,!0),i).then(i=>{let a=new y({userId:i.username,server:n.server??void 0,token:i.access_token,expires:Date.now()+i.expires_in*1e3,ssl:i.ssl,oAuthState:e.state,_oAuthCred:r});return t.userId=a.userId,r.storage=i.persist?A:j,r.refreshToken=i.refresh_token,r.token=null,r.expires=i.refresh_token_expires_in?Date.now()+i.refresh_token_expires_in*1e3:null,r.userId=a.userId,r.ssl=a.ssl,r.save(),a})}let i=new y({userId:e.username,server:n.server??void 0,token:e.access_token,expires:Date.now()+Number(e.expires_in)*1e3,ssl:e.ssl===`true`,oAuthState:e.state,_oAuthCred:r});return t.userId=i.userId,r.storage=e.persist?A:j,r.refreshToken=null,r.token=i.token,r.expires=i.expires,r.userId=i.userId,r.ssl=i.ssl,r.save(),Promise.resolve(i)}_processOAuthPopupParams(e){let t=this._oAuthDfd;if(this._oAuthDfd=null,t){if(clearInterval(this._oAuthIntervalId),this._oAuthOnPopupHandle?.remove(),e.error){let r=e.error===`access_denied`,i=new n(r?`identity-manager:user-aborted`:`identity-manager:authentication-failed`,r?`ABORTED`:`OAuth: `+e.error+` - `+e.error_description);t.reject(i)}else this._processOAuthResponseParams(e,t.oinfo_,t.sinfo_).then(e=>{t.resolve(e)}).catch(e=>{t.reject(e)})}}_setOAuthResponseQueryString(e){e&&(e.startsWith(`?`)&&(e=e.slice(1)),this._processOAuthPopupParams(f(e)))}async _exchangeToken(e,n,r){return(await t(`${e}/sharing/rest/oauth2/exchangeToken`,{authMode:`anonymous`,method:`post`,query:{f:`json`,client_id:n,token:r}})).data.token}async _getPlatformSelf(e,n){if(this._getPlatformSelfError&&Date.now()-this._getPlatformSelfError[1]<1e3)throw this._getPlatformSelfError[0];e=e.replace(/^http:/i,`https:`);try{let r=await t(`${e}/sharing/rest/oauth2/platformSelf`,{authMode:`anonymous`,headers:{"X-Esri-Auth-Client-Id":n,"X-Esri-Auth-Redirect-Uri":window.location.href.replace(/#.*$/,``)},method:`post`,query:{f:`json`,expiration:30},withCredentials:!0});return this._getPlatformSelfError=null,r.data}catch(e){throw e.details?.messageCode===`OAUTH_0066`&&(this._getPlatformSelfError=[e,Date.now()]),e}}_getPortalSelf(e,n){let r;return this._gwDomains.some(t=>(t.regex.test(e)&&(r=t.customBaseUrl),!!r)),r?Promise.resolve({allSSL:!0,currentVersion:`8.4`,customBaseUrl:r,portalMode:`multitenant`,supportsOAuth:!0}):(this._appOrigin.startsWith(`https:`)?e=e.replace(/^http:/i,`https:`).replace(/:7080/i,`:7443`):/^http:/i.test(n)&&(e=e.replace(/^https:/i,`http:`).replace(/:7443/i,`:7080`)),t(e,{query:{f:`json`},authMode:`anonymous`,withCredentials:!0}).then(e=>e.data))}_doPortalSignIn(e){let t=this._portalConfig,n=window.location.href,r=this.findServerInfo(e);return!!((t||this._isPortalDomain(n))&&(r?r.hasPortal||r.owningSystemUrl&&this._isPortalDomain(r.owningSystemUrl):this._isPortalDomain(e))&&(this._isIdProvider(n,e)||t&&(this._hasSameServerInstance(this._getServerInstanceRoot(t.restBaseUrl),e)||this._isIdProvider(t.restBaseUrl,e))||u(n,e,!0)))}_checkProtocol(e,t,r,i){let a=!0,o=i?t.adminTokenServiceUrl:t.tokenServiceUrl;return o.trim().toLowerCase().startsWith(`https:`)&&!this._appOrigin.startsWith(`https:`)&&g(o)&&(a=this._protocolFunc?!!this._protocolFunc({resourceUrl:e,serverInfo:t}):!1,a||r(new n(`identity-manager:aborted`,`Aborted the Sign-In process to avoid sending password over insecure connection.`))),a}_enqueue(e,t,n,r,i,a){return r||=Promise.withResolvers(),r.resUrl_=e,r.sinfo_=t,r.options_=n??{},r.admin_=i,r.refresh_=a,this._busy?this._hasSameServerInstance(this._getServerInstanceRoot(e),this._busy.resUrl_)?(this._oAuthDfd&&this._oAuthDfd.oAuthWin_&&this._oAuthDfd.oAuthWin_.focus(),this._soReqs.push(r)):this._xoReqs.push(r):this._doSignIn(r),r.promise}_doSignIn(e){this._busy=e,this._rejectOnPersistedPageShow=!1;let t=(t,n=!1)=>{let r=e.options_?.resource,i=e.resUrl_,a=e.refresh_,o=n;this.credentials.includes(t)||(a&&this.credentials.includes(a)?(a.userId=t.userId,a.token=t.token,a.expires=t.expires,a.validity=t.validity,a.ssl=t.ssl,a.creationTime=t.creationTime,o=!0,t=a):this.credentials.push(t)),t.resources||(t.resources=[]),t.resources.includes(i)||t.resources.push(i),r&&!t.resources.includes(r)&&t.resources.push(r),t.scope=this._isServerRsrc(i)?`server`:`portal`,n||t.emitTokenChange();let s=this._soReqs,c={};this._soReqs=[],s.forEach(e=>{if(!this._isIdenticalService(i,e.resUrl_)){let n=this._getSuffix(e.resUrl_);c[n]||(c[n]=!0,t.resources.push(e.resUrl_))}}),e.resolve(t),s.forEach(e=>{this._hasSameServerInstance(this._getServerInstanceRoot(i),e.resUrl_)?e.resolve(t):this._soReqs.push(e)}),this._busy=e.resUrl_=e.sinfo_=e.refresh_=null,o||this.emit(`credential-create`,{credential:t}),this._soReqs.length?this._doSignIn(this._soReqs.shift()):this._xoReqs.length&&this._doSignIn(this._xoReqs.shift())},r=t=>{e.reject(t),this._busy=e.resUrl_=e.sinfo_=e.refresh_=null,this._soReqs.length?this._doSignIn(this._soReqs.shift()):this._xoReqs.length&&this._doSignIn(this._xoReqs.shift())},a=(o,c,l,d)=>{let f=e.sinfo_,p=!e.options_||e.options_.prompt!==!1,m=f.hasPortal&&this._findOAuthInfo(e.resUrl_),h,g;if(o)t(new y({userId:o,server:f.server??void 0,token:l??void 0,expires:d==null?null:Number(d),ssl:!!c}));else if(window!==window.parent&&this._appUrlObj.query?.[`arcgis-auth-origin`]&&this._appUrlObj.query?.[`arcgis-auth-portal`]&&this._hasSameServerInstance(this._getServerInstanceRoot(this._appUrlObj.query[`arcgis-auth-portal`]),e.resUrl_)){window.parent.postMessage({type:`arcgis:auth:requestCredential`},this._appUrlObj.query[`arcgis-auth-origin`]);let a=i(window,`message`,e=>{e.source===window.parent&&e.data&&(e.data.type===`arcgis:auth:credential`?(a.remove(),e.data.credential.expires<Date.now()?r(new n(`identity-manager:credential-request-failed`,`Parent application's token has expired.`)):t(new y(e.data.credential))):e.data.type===`arcgis:auth:error`&&(a.remove(),e.data.error.name===`tokenExpiredError`?r(new n(`identity-manager:credential-request-failed`,`Parent application's token has expired.`)):r(n.fromJSON(e.data.error))))});s(e.options_?.signal,()=>{a.remove()})}else if(m){let i=m._oAuthCred;if(!i){let e=new x(m,A),t=new x(m,j);e.isValid()&&t.isValid()?e.expires>t.expires?(i=e,t.destroy()):(i=t,e.destroy()):i=e.isValid()?e:t,m._oAuthCred=i}if(i.isValid()){h=new y({userId:i.userId??void 0,server:f.server??void 0,token:i.token??void 0,expires:i.expires,ssl:i.ssl??void 0,_oAuthCred:i});let n=m.appId!==i.appId&&this._doPortalSignIn(e.resUrl_);n||i.refreshToken?(e._pendingDfd=i.refreshToken?this._getOAuthToken(f.server,i.refreshToken,i.appId).then(e=>(h.expires=Date.now()+e.expires_in*1e3,h.token=e.access_token,h)):Promise.resolve(h),e._pendingDfd.then(e=>n?this._exchangeToken(e.server,m.appId,e.token).then(t=>(e.token=t,e)).catch(()=>e):e).then(e=>{t(e)}).catch(e=>{let t=e.details?.httpStatus;t>0&&t!==404?(i.destroy(),a()):r(e)})):t(h)}else if(this._oAuthLocationParams&&this._hasSameServerInstance(m.portalUrl,this._oAuthLocationParams.state.portalUrl)&&(this._oAuthLocationParams.access_token||this._oAuthLocationParams.code&&this._oAuthLocationParams.state.uid===i.stateUID&&i.codeVerifier)){let n=this._oAuthLocationParams;this._oAuthLocationParams=null,e._pendingDfd=this._processOAuthResponseParams(n,m,f).then(e=>{t(e)}).catch(r)}else{let i=()=>{p?e._pendingDfd=this.oAuthSignIn(e.resUrl_,f,m,e.options_).then(t,r):(g=new n(`identity-manager:not-authenticated`,`User is not signed in.`),r(g))};this._doPortalSignIn(e.resUrl_)?e._pendingDfd=this._getPlatformSelf(f.server,m.appId).then(e=>{u(e.portalUrl,this._appOrigin,!0)?(h=new y({userId:e.username,server:f.server??void 0,expires:Date.now()+e.expires_in*1e3,token:e.token}),t(h)):i()}).catch(i):i()}}else if(!p)g=new n(`identity-manager:not-authenticated`,`User is not signed in.`),r(g);else if(this._checkProtocol(e.resUrl_,f,r,e.admin_)){let n=e.options_;e.admin_&&(n||={},n.isAdmin=!0),e._pendingDfd=this.signIn(e.resUrl_,f,n).then(t,r)}},c=()=>{let n=e.sinfo_,i=n.owningSystemUrl,a=e.options_,o,s,c;if(a&&(o=a.token,s=a.prompt),c=this._findCredential(i,{resource:e.resUrl_}),!c){for(let e of this.credentials)if(this._isIdProvider(i,e.server)){c=e;break}}if(c){let i=this.findCredential(e.resUrl_,c.userId);if(i)t(i);else if(k(n,this._legacyFed)){let e=c.toJSON();e.server=n.server,e.resources=null,t(new y(e))}else(e._pendingDfd=this.generateToken(this.findServerInfo(c.server),null,{serverUrl:e.resUrl_,token:c.token,signal:e.options_.signal,ssl:c.ssl})).then(r=>{t(new y({userId:c?.userId,server:n.server??void 0,token:r.token,expires:r.expires==null?null:Number(r.expires),ssl:!!r.ssl,isAdmin:e.admin_,validity:r.validity}))},r)}else this._busy=null,o&&(e.options_.token=null),(e._pendingDfd=this.getCredential(i.replace(/\/?$/,`/sharing`),{resource:e.resUrl_,owningTenant:n.owningTenant,signal:e.options_.signal,prompt:s})).then(()=>{this._enqueue(e.resUrl_,e.sinfo_,e.options_,e,e.admin_)},t=>{e.resUrl_=e.sinfo_=e.refresh_=null,e.reject(t)})};if(this._errbackFunc=r,e.options_?.signal?.aborted){r(new n(`identity-manager:user-aborted`,`ABORTED`));return}if(!e.refresh_&&!e.options_?.token&&!e.options_?.credential){let n=this._findCredential(e.resUrl_,e.options_);if(n){t(n,!0);return}}let l=e.sinfo_.owningSystemUrl,d=this._isServerRsrc(e.resUrl_),f=e.sinfo_._restInfoPms;f?f.promise.then(t=>{let n=e.sinfo_;if(n._restInfoPms){n.adminTokenServiceUrl=n._restInfoPms.adminUrl,n._restInfoPms=null,n.tokenServiceUrl=(o(`authInfo.tokenServicesUrl`,t)||o(`authInfo.tokenServiceUrl`,t)||o(`tokenServiceUrl`,t))??null,n.shortLivedTokenValidity=o(`authInfo.shortLivedTokenValidity`,t)??null,n.currentVersion=t.currentVersion,n.owningTenant=t.owningTenant;let e=n.owningSystemUrl=t.owningSystemUrl;e&&this._portals.push(e)}d&&n.owningSystemUrl?c():a()},()=>{e.sinfo_._restInfoPms=null;let t=new n(`identity-manager:server-identification-failed`,`Unknown resource - could not find token service endpoint.`);r(t)}):d&&l?c():e.sinfo_._selfReq?e.sinfo_._selfReq.selfDfd.then(t=>{let n={},r,i,a,o;return t&&(r=t.user?.username,n.username=r,n.allSSL=t.allSSL,i=t.supportsOAuth,o=parseFloat(t.currentVersion),t.portalMode===`multitenant`&&(a=t.customBaseUrl),e.sinfo_.currentVersion=o),e.sinfo_.webTierAuth=!!r,r&&this.normalizeWebTierAuth?this.generateToken(e.sinfo_,null,{ssl:n.allSSL}).catch(()=>null).then(e=>(n.portalToken=e?.token,n.tokenExpiration=e?.expires,n)):!r&&i&&o>=4.4&&!this._findOAuthInfo(e.resUrl_)?this._generateOAuthInfo({portalUrl:e.sinfo_.server,customBaseUrl:a,owningTenant:e.sinfo_._selfReq.owningTenant}).catch(()=>null).then(()=>n):n}).catch(()=>null).then(t=>{e.sinfo_._selfReq=null,t?a(t.username,t.allSSL,t.portalToken,t.tokenExpiration):a()}):a()}_generateOAuthInfo(e){let n,r=null,i=e.portalUrl,a=e.customBaseUrl,o=e.owningTenant,s=!this._defaultOAuthInfo&&this._createDefaultOAuthInfo&&!this._hasTestedIfAppIsOnPortal;if(s){r=this._appUrlObj.path;let e=r.search(/\/(apps|home)\//);r=e>-1?r.slice(0,e):null}return s&&r?(this._hasTestedIfAppIsOnPortal=!0,n=t(r+`/sharing/rest`,{query:{f:`json`}}).then(()=>{this._defaultOAuthInfo=new S({appId:`arcgisonline`,popupCallbackUrl:r+`/home/oauth-callback.html`})})):n=Promise.resolve(),n.then(()=>{if(this._defaultOAuthInfo)return i=i.replace(/^http:/i,`https:`),t(i+`/sharing/rest/oauth2/validateRedirectUri`,{query:{accountId:o,client_id:this._defaultOAuthInfo.appId,redirect_uri:_(this._defaultOAuthInfo.popupCallbackUrl),f:`json`}}).then(e=>{if(e.data.valid){let t=this._defaultOAuthInfo.clone();t.portalUrl=e.data.urlKey&&a?`https://`+e.data.urlKey.toLowerCase()+`.`+a:i,t.popup=window!==window.top||!(u(i,this._appOrigin)||this._gwDomains.some(e=>e.regex.test(i)&&e.regex.test(this._appOrigin))),this.oAuthInfos.push(t)}})})}_doOAuthSignIn(e,t,r,a){let o=r._oAuthCred,s={portalUrl:r.portalUrl};!r.popup&&r.preserveUrlHash&&window.location.hash&&(s.hash=window.location.hash),o.stateUID&&(s.uid=o.stateUID);let c={client_id:r.appId,response_type:o.codeVerifier?`code`:`token`,state:JSON.stringify(s),expiration:r.expiration,locale:r.locale,redirect_uri:this._getRedirectURI(r,!!o.codeVerifier)};r.forceLogin&&(c.force_login=!0),r.forceUserId&&r.userId&&(c.prepopulatedusername=r.userId),!r.popup&&this._doPortalSignIn(e)&&(c.redirectToUserOrgUrl=!0),o.codeVerifier&&(c.code_challenge=a||o.codeVerifier,c.code_challenge_method=a?`S256`:`plain`);let l=this._getAuthorizeUrl(r.portalUrl),u=l+`?`+m(c);if(r.popup){let e=window.open(u,`esriJSAPIOAuth`,r.popupWindowFeatures);if(e)e.focus(),this._oAuthDfd.oAuthWin_=e,this._oAuthIntervalId=setInterval(()=>{if(e.closed){clearInterval(this._oAuthIntervalId),this._oAuthOnPopupHandle.remove();let e=this._oAuthDfd;if(e){let t=new n(`identity-manager:user-aborted`,`ABORTED`);e.reject(t)}}},500),this._oAuthOnPopupHandle=i(window,[`arcgis:auth:hash`,`arcgis:auth:location:search`],e=>{e.type===`arcgis:auth:hash`?this.setOAuthResponseHash(e.detail):this._setOAuthResponseQueryString(e.detail)});else{let e=new n(`identity-manager:popup-blocked`,`ABORTED`);this._oAuthDfd.reject(e)}}else this._rejectOnPersistedPageShow=!0,this._oAuthRedirectFunc?this._oAuthRedirectFunc({authorizeParams:c,authorizeUrl:l,resourceUrl:e,serverInfo:t,oAuthInfo:r}):window.location.href=u}_getAuthorizeUrl(e){let t=e.replace(/^http:/i,`https:`)+`/sharing/oauth2/authorize`,n=E(t);if(n?.portalHostname){let{customBaseUrl:e,portalHostname:t,urlKey:r}=n}return t}_getRedirectURI(e,t){let n=window.location.href.replace(/#.*$/,``);if(e.popup)return _(e.popupCallbackUrl);if(t){let e=l(n);return e.query&&[`code`,`error`,`error_description`,`message_code`,`persist`,`state`].forEach(t=>{delete e.query[t]}),v(e.path,e.query)}return n}}M.prototype.declaredClass=`esri.identity.IdentityManagerBase`;export{M as IdentityManagerBase};
|
package/kernel.d.ts
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
*
|
|
10
10
|
* ```js
|
|
11
11
|
* const esriNS = await $arcgis.import("@arcgis/core/kernel.js");
|
|
12
|
-
* console.log(esriNS.version); // e.g. "
|
|
12
|
+
* console.log(esriNS.version); // e.g. "6.0"
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
|
-
* @default "
|
|
15
|
+
* @default "6.0"
|
|
16
16
|
*/
|
|
17
17
|
export const version: string;
|
|
18
18
|
|
|
@@ -21,7 +21,7 @@ export const version: string;
|
|
|
21
21
|
*
|
|
22
22
|
* ```js
|
|
23
23
|
* const esriNS = await $arcgis.import("@arcgis/core/kernel.js");
|
|
24
|
-
* console.log(esriNS.fullVersion); // e.g. "
|
|
24
|
+
* console.log(esriNS.fullVersion); // e.g. "6.0.0" or "6.0.0-next.1"
|
|
25
25
|
* ```
|
|
26
26
|
*
|
|
27
27
|
* @since 4.27
|
package/kernel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import"./core/has.js";import{addQueryParameter as e}from"./core/urlUtils.js";Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`);const t=`
|
|
2
|
+
import"./core/has.js";import{addQueryParameter as e}from"./core/urlUtils.js";Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`);const t=`6.0`;let n=`6.0`;n=`6.0.0-next.34`;let r;function i(e){r=e}function a(t){let n=r?.findCredential(t);return n?.token?e(t,`token`,n.token):t}globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}});export{a as addTokenParameter,n as fullVersion,r as id,i as setId,t as version};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../request.js";import has from"../core/has.js";import n from"../core/Logger.js";import{isAbortError as r}from"../core/promiseUtils.js";import{watch as i,initial as a}from"../core/reactiveUtils.js";import{convertTime as o}from"../core/timeUtils.js";import{property as s,subclass as c}from"../core/accessorSupport/decorators.js";import{distance as l}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as u}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderSRFromViewSR as d}from"../geometry/support/coordinateSystem.js";import{loadVoxelWASM as f}from"../libs/vxl/VxlModule.js";import{InternalRenderCategory as p}from"../views/3d/webgl.js";import{VoxelGraphic as m}from"../views/3d/layers/VoxelGraphic.js";import{VoxelTarget as h}from"../views/3d/layers/i3s/Intersector.js";import{Frustum as g}from"../views/3d/state/Frustum.js";import{RenderCoordsHelper as _}from"../views/3d/support/RenderCoordsHelper.js";import v from"../views/3d/webgl/RenderNode.js";import{IntersectorResultRay as y}from"../views/3d/webgl-engine/lib/IntersectorResult.js";let b=class extends v{constructor(e){super(e),this._havePreparedWithAllLayers=!1,this.consumes={required:[p.VOXEL]},this.produces=`disabled`,this._vxlPromise=null,this._moreToLoad=!1,this._viewportWidth=-1,this._viewportHeight=-1,this._newLayers=[],this._layers=new Map,this._renderTargetToRestore=null,this._lastFrameWasStationary=!1,this._wasmMemBlockSizes=[512,1024,2048,4096,8192,16384,32768,65536],this._wasmMemBlocks=new Map,this._dbgFlags=new Set,this._captureFrustum=!1,this._frustum=null,this._frustumRenderableId=-1,this._renderCoordsHelper=null,this.type=9,this.slicePlaneEnabled=!0,this.isGround=!1,this.layerViewUid=[]}_dbg(e,t){this._dbgFlags.has(e)&&(e===4?n.getLogger(this).error(t):n.getLogger(this).warn(t))}initialize(){this._dbg(1,`--initialize--`);for(let e of this._wasmMemBlockSizes)this._wasmMemBlocks.set(e,0);this.addHandles([i(()=>this.view.viewingMode===`local`,e=>{e?(this._dbg(1,`view switched to local view, enabling rendering`),this.produces=p.VOXEL,this.view.sceneIntersectionHelper.addIntersectionHandler(this)):(this._dbg(1,`view switched to global view, disabling rendering`),this.view.sceneIntersectionHelper.removeIntersectionHandler(this),this.produces=`disabled`)},a),i(()=>this.view?.qualityProfile,e=>{this._dbg(3,`qualityProfile changed to `+e),this._vxl?.set_quality(this._toWasmQuality(e))},a),i(()=>this.view?.timeExtent,()=>{if(this._vxl){let e=this._getTimeArgs(this.view?.timeExtent);this._dbg(3,`sceneView timeExtent changed to useTime=`+e.hasTime+` st=`+e.startTime+` et=`+e.endTime),this._vxl.set_scene_time_extent(e.startTime,e.endTime,e.hasTime),this.requestRender(1)}},a),i(()=>this.view?.stationary,e=>{this._vxl&&e&&!this._lastFrameWasStationary&&this.requestRender(1)})])}get _rctx(){return this.renderContext?.rctx}get _halfIntTexturesAvailable(){return!!this._rctx?.capabilities.textureNorm16}get _textureFloatLinearAvailable(){return!!this._rctx?.capabilities.textureFloatLinear}_restoreFramebuffer(){if(!this._renderTargetToRestore||!this._rctx)return;let e=this._renderTargetToRestore.fbo;if(!this._rctx){this._dbg(4,`no context in restoreFramebuffer!`);return}this._rctx.bindFramebuffer(e,!0);let t=this._renderTargetToRestore.viewport;this._rctx.setViewport(t.x,t.y,t.width,t.height)}_bindPreviousDepthToSlot(e,t){if(!this._rctx||!this._renderTargetToRestore)return 0;let n=this._renderTargetToRestore.fbo?.depthStencilTexture;return n?(t===0?this._rctx.bindTexture(null,e,!0):this._rctx.bindTexture(n,e,!0),1):(this._dbg(4,`no depth/stencil texture exists!`),0)}_modifyResourceCount(e,t,n){if(!this._rctx){this._dbg(4,`modifyAllocation callback has no rendering context!`);return}let r=e;n===1?this._rctx.instanceCounter.increment(r,t):this._rctx.instanceCounter.decrement(r,t)}_setBlendState(e,t,n,r){this._rctx?(this._rctx.setBlendingEnabled(e===1),this._rctx.setBlendFunction(t,n),this._rctx.setBlendEquation(r)):this._dbg(4,`setBlendState callback has no rendering context!`)}_setFrontFace(e){this._rctx?this._rctx.setFrontFace(e):this._dbg(4,`setFrontFace callback has no rendering context!`)}_setDepthStencilStateFunction(e,t,n){this._rctx?(this._rctx.setDepthFunction(n),this._rctx.setDepthTestEnabled(e===1),this._rctx.setDepthWriteEnabled(t===1),this._rctx.setStencilTestEnabled(!1),this._rctx.setStencilFunction(519,0,255),this._rctx.setStencilOpSeparate(1028,7680,7682,7680),this._rctx.setStencilOpSeparate(1029,7680,7683,7680)):this._dbg(4,`setDepthStencilStateFunction callback has no rendering context!`)}_setRasterizerState(e){if(!this._rctx)this._dbg(4,`setRasterizerState callback has no rendering context!`);else switch(e){case 1:this._rctx.setFaceCullingEnabled(!1);break;case 3:this._rctx.setCullFace(1029),this._rctx.setFaceCullingEnabled(!0);break;case 2:this._rctx.setCullFace(1028),this._rctx.setFaceCullingEnabled(!0)}}_setViewport(e,t,n,r){this._rctx?this._rctx.setViewport(e,t,n,r):this._dbg(4,`setViewport callback has no rendering context!`)}_updateMemoryUsage(){this._layers.forEach((e,t)=>{if(e.needMemoryUsageUpdate){let n=this._vxl?.estimate_memory_usage(t)??0;n>=0&&(e.needMemoryUsageUpdate=!1,e.layerView.setUsedMemory(n))}})}_syncRequestsResponses(){this._vxl&&this._layers.forEach((e,n)=>{let i=[];e.responses.forEach((t,r)=>{i.push(r),this._dbg(2,`responding for requestID:`+r+` size:`+t.size),this._vxl?.respond(n,r,t),(t.requestType===0||t.requestType===4)&&(e.needMemoryUsageUpdate=!0)});let a=e.responses;for(let e of i)a.delete(e);let o=this._vxl.get_new_requests(n),s=e.abortController.signal;for(let n in o){e.outstandingRequestCount+=1,e.outstandingRequestCount===1&&e.layerView.updatingFlagChanged();let i=o[n],c={responseType:`array-buffer`,signal:s,query:{...e.layerView.layer.customParameters,token:e.layerView.layer.apiKey}};this._dbg(2,`making requestID:`+n+` url:`+i.url),t(i.url,c).then(t=>{--e.outstandingRequestCount,e.outstandingRequestCount===0&&e.layerView.updatingFlagChanged(),this._dbg(2,`have response for requestID:`+n);let r=0;if(t.data.byteLength>0&&this._vxl){r=this._vxl._malloc(t.data.byteLength);let e=new Uint8Array(this._vxl.HEAPU8.buffer,r,t.data.byteLength),n=new Uint8Array(t.data);for(let r=0;r<t.data.byteLength;++r)e[r]=n[r]}a.set(+n,{responseType:i.responseType,ptr:r,size:t.data.byteLength,success:!0,requestType:i.requestType})}).catch(t=>{--e.outstandingRequestCount,e.outstandingRequestCount===0&&e.layerView.updatingFlagChanged(),r(t)||(this._dbg(4,`requestID:${n} failed, error=${t.toString()}`),a.set(+n,{responseType:i.responseType,ptr:0,size:0,success:!1,requestType:i.requestType}))})}})}updateWasmCamera(e){this._vxl?.set_projection_matrix.apply(this._vxl,e.projectionMatrix),this._vxl?.set_view_matrix.apply(this._vxl,e.viewMatrix),this._vxl?.set_near_far(e.near,e.far)}isUpdating(e){if(!this._vxl&&this._vxlPromise)return!0;let t=this._layers.get(e);return t?t.outstandingRequestCount>0:!1}getLayerTimes(e){let t=[];return this._vxl&&this._layers.forEach((n,r)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){let n=this._vxl.get_layer_epoch_times(r,e.layer.currentVariableId);for(let e=0;e<n.length;++e)t.push(n[e])}}),t}getCurrentLayerTimeIndex(e){let t=0;return this._layers.forEach((n,r)=>{n.layerView.wasmLayerId===e.wasmLayerId&&(t=this._vxl?.get_layer_current_time_id(r)??0)}),t}setEnabled(e,t){this._layers.forEach((n,r)=>{n.layerView.wasmLayerId===e.wasmLayerId&&(this._vxl?.set_enabled(r,t),n.needMemoryUsageUpdate=!0,this.requestRender(1))})}setIsInScaleRange(e,t){let n=this._layers.get(e.wasmLayerId);n&&t!==n.isInScaleRange&&(n.isInScaleRange=t,this._vxl?.set_is_in_scale_range(e.wasmLayerId,t),n.needMemoryUsageUpdate=!t,this.requestRender(1))}setStaticSections(e,t){let n={mask:1,staticSections:t};return this._doMaskedUIUpdate(e,n,!0)}setCurrentVariable(e,t){let n={mask:1024,currentVariable:t};return this._doMaskedUIUpdate(e,n,!0)}setRenderMode(e,t){let n={mask:8192,renderMode:t};return this._doMaskedUIUpdate(e,n,!0)}setVerticalExaggerationAndOffset(e,t,n,r){let i={mask:256,volStyleDesc:{volumeId:t,verticalExaggeration:n,verticalOffset:r}};return this._doMaskedUIUpdate(e,i,!0)}setVariableStyles(e,t){let n={mask:32768,variableStyles:t};return this._doMaskedUIUpdate(e,n,!0)}setVolumeStyles(e,t){let n={mask:65536,volumeStyles:t};return this._doMaskedUIUpdate(e,n,!0)}setEnableDynamicSections(e,t){let n={mask:4096,containerIsVisible:t,container:1};return this._doMaskedUIUpdate(e,n,!0)}setEnableIsosurfaces(e,t){let n={mask:4096,containerIsVisible:t,container:0};return this._doMaskedUIUpdate(e,n,!0)}setEnableSections(e,t){let n={mask:4096,containerIsVisible:t,container:2};return this._doMaskedUIUpdate(e,n,!0)}setAnalysisSlice(e,t,n,r){let i={mask:131072,analysisSlice:{point:n,normal:r,enabled:t}};return this._doMaskedUIUpdate(e,i,!0)}updateLayerTimeProperties(e){if(!this._vxl)return;let t=this._layers.get(e.wasmLayerId);if(t){let n=t.layerView.layer,r=0;n.timeOffset&&(r=o(n.timeOffset.value,n.timeOffset.unit,`seconds`));let i=this._getTimeArgs(n.timeExtent);this._vxl?.set_layer_time_properties(e.wasmLayerId,i.startTime,i.endTime,i.hasTime,n.useViewTime,r),this.requestRender(1)}}_doMaskedUIUpdate(e,t,n){if(!this._vxl)return!1;let r=!1;return this._layers.forEach((n,i)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){let e={str:JSON.stringify(t),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(r=this._vxl?.handle_masked_ui_update(i,e.ptr,e.byteCount)===1,e.isReusable||this._vxl?._free(e.ptr))}}),r&&n&&this.requestRender(1),r}_addTriangleToWasmBuffer(e,t,n,r,i){return e[t*3]=n[0],e[t*3+1]=n[1],e[t*3+2]=n[2],t+=1,e[t*3]=r[0],e[t*3+1]=r[1],e[t*3+2]=r[2],t+=1,e[t*3]=i[0],e[t*3+1]=i[1],e[t*3+2]=i[2],t+=1,t}_addNormalToWasmBuffer(e,t,n){return e[t*3]=n[0],e[t*3+1]=n[1],e[t*3+2]=n[2],t+=1,t}_doCaptureFrustum(){if(!this._vxl)return;let e=this._vxl._malloc(108*Float32Array.BYTES_PER_ELEMENT),t=new Float32Array(this._vxl.HEAPF32.buffer,e,108),n=this._vxl._malloc(36*Float32Array.BYTES_PER_ELEMENT),r=new Float32Array(this._vxl.HEAPF32.buffer,n,36),i=this._frustum.points[0],a=this._frustum.points[1],o=this._frustum.points[2],s=this._frustum.points[3],c=this._frustum.points[4],l=this._frustum.points[5],u=this._frustum.points[6],d=this._frustum.points[7],f=0,p=0,m=this._frustum.planes[4];f=this._addTriangleToWasmBuffer(t,f,o,a,i),p=this._addNormalToWasmBuffer(r,p,m),f=this._addTriangleToWasmBuffer(t,f,i,s,o),p=this._addNormalToWasmBuffer(r,p,m);let h=this._frustum.planes[5];f=this._addTriangleToWasmBuffer(t,f,c,l,u),p=this._addNormalToWasmBuffer(r,p,h),f=this._addTriangleToWasmBuffer(t,f,u,d,c),p=this._addNormalToWasmBuffer(r,p,h);let g=this._frustum.planes[3];f=this._addTriangleToWasmBuffer(t,f,u,o,s),p=this._addNormalToWasmBuffer(r,p,g),f=this._addTriangleToWasmBuffer(t,f,s,d,u),p=this._addNormalToWasmBuffer(r,p,g);let _=this._frustum.planes[2];f=this._addTriangleToWasmBuffer(t,f,i,a,l),p=this._addNormalToWasmBuffer(r,p,_),f=this._addTriangleToWasmBuffer(t,f,l,c,i),p=this._addNormalToWasmBuffer(r,p,_);let v=this._frustum.planes[0];f=this._addTriangleToWasmBuffer(t,f,s,i,c),p=this._addNormalToWasmBuffer(r,p,v),f=this._addTriangleToWasmBuffer(t,f,c,d,s),p=this._addNormalToWasmBuffer(r,p,v);let y=this._frustum.planes[1];f=this._addTriangleToWasmBuffer(t,f,o,u,l),p=this._addNormalToWasmBuffer(r,p,y),this._addTriangleToWasmBuffer(t,f,l,a,o),this._addNormalToWasmBuffer(r,p,y),this._frustumRenderableId!==-1&&this._vxl.remove_generic_mesh(this._frustumRenderableId),this._frustumRenderableId=this._vxl.add_generic_mesh(e,108,n,36,255,0,0,64),this._vxl._free(e),this._vxl._free(n),this._captureFrustum=!1,this.requestRender(1)}captureFrustum(){this._renderCoordsHelper===null&&(this._renderCoordsHelper=_.create(2,d(!1,this.view.spatialReference))),this._frustum===null&&(this._frustum=new g(this._renderCoordsHelper)),this._captureFrustum=!0,this.requestRender(1)}toggleFullVolumeExtentDraw(e){this._vxl&&this._layers.forEach((t,n)=>{t.layerView.wasmLayerId===e.wasmLayerId&&(this._vxl?.toggle_full_volume_extent_draw(n),this.requestRender(1))})}dropQueryRenderTarget(){this._vxl?.drop_query_rt()}addVoxelLayer(e){if(!this._vxl){let t={layerView:e,resolveCallback:null,rejectCallback:null},n=new Promise((e,n)=>{t.resolveCallback=e,t.rejectCallback=n});return this._newLayers.push(t),n}let t=this._addVoxelLayer(e,this._vxl);return t<0?Promise.reject(-1):Promise.resolve(t)}removeVoxelLayer(e){if(!this._vxl){let t=this._newLayers.findIndex(t=>e.uid===t.layerView.uid);t>=0&&(this._newLayers[t].resolveCallback(-1),this._newLayers.splice(t,1));let n=this._newLayers.length;return n===0&&(this._dbg(1,`No voxel layers left after removing a layer, destroying render node`),this.destroy()),n}let t=-1;this._layers.forEach((n,r)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){t=r,n.abortController.abort(),this._vxl?.remove_layer(t);let i=this.layerViewUid.indexOf(e.uid);i!==-1&&this.layerViewUid.splice(i,1)}}),t>=0&&this._layers.delete(t);let n=this._layers.size;return n===0&&(this._dbg(1,`No voxel layers left after removing a layer, destroying render node`),this.destroy()),n}_getBlockSize(e){for(let t of this._wasmMemBlockSizes)if(e<t)return t;return-1}_allocateBlock(e){if(!this._vxl)return!1;e.byteCount=this._vxl.lengthBytesUTF8(e.str)+1;let t=this._getBlockSize(e.byteCount);return t<0?(e.isReusable=!1,e.ptr=this._vxl._malloc(e.byteCount)):(e.isReusable=!0,e.ptr=this._wasmMemBlocks.get(t),e.ptr===0&&(e.ptr=this._vxl._malloc(t),this._wasmMemBlocks.set(t,e.ptr))),e.ptr!==0&&(this._vxl.stringToUTF8(e.str,e.ptr,e.byteCount),!0)}_getTimeArgs(e){let t=-Number.MAX_VALUE,n=Number.MAX_VALUE,r=!1;return e!=null&&(e.isAllTime?r=!0:(e.start!=null&&(r=!0,t=e.start.getTime()/1e3),e.end!=null&&(r=!0,n=e.end.getTime()/1e3))),{startTime:t,endTime:n,hasTime:r}}_addVoxelLayer(e,t){let r=e.layer,i=-1,a=r.getConfiguration();if(a.length<1)return-1;let s={str:a,byteCount:0,ptr:0,isReusable:!1};if(!this._allocateBlock(s))return-1;let c=this._getTimeArgs(r.timeExtent),l=this.view.spatialReference.isWGS84&&r.spatialReference.isWGS84?111319.49079327357:1,u=0;if(r.timeOffset&&(u=o(r.timeOffset.value,r.timeOffset.unit,`seconds`)),i=t.add_layer(r.serviceRoot,s.ptr,s.byteCount,l,l,c.startTime,c.endTime,c.hasTime,r.useViewTime,u,this._toWasmQuality(this.view.qualityProfile)),s.isReusable||t._free(s.ptr),i>=0){r.test?.constantUpscaling&&(this._setUpscalingLimits(0,.25,.25),this._setUpscalingLimits(1,.5,.5),this._setUpscalingLimits(2,.75,.75));let t=new AbortController;if(this._layers.set(i,{layerView:e,responses:new Map,outstandingRequestCount:0,abortController:t,needMemoryUsageUpdate:!1,isInScaleRange:!0}),this.layerViewUid.push(e.uid),!this._halfIntTexturesAvailable||has(`mac`)){let t=[],r=``;for(let n of e.layer.variables)(n.renderingFormat.type===`Int16`||n.renderingFormat.type===`UInt16`)&&(t.push(n.name),n.id===e.layer.currentVariableId&&(r=n.name));r!==``&&n.getLogger(this).error(`#addVoxelLayer_error()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${r}' in this browser`),t.length>0&&n.getLogger(this).warn(`#addVoxelLayer_warning()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}if(!this._textureFloatLinearAvailable){let t=[],r=``;for(let n of e.layer.variables)n.renderingFormat.type===`Float32`&&(t.push(n.name),n.id===e.layer.currentVariableId&&(r=n.name));r!==``&&n.getLogger(this).error(`#addVoxelLayer_error()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${r}' in this browser`),t.length>0&&n.getLogger(this).warn(`#addVoxelLayer_warning()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}return has(`esri-mobile`)&&n.getLogger(this).warnOnce(`Mobile support differs across devices. Voxel layer might not display as expected.`),i}return-1}_prepareRender(){if(!this._vxl){this._initializeWasm();return}let e=this.bindParameters.camera.viewForward,t=this.bindParameters.camera.eye;this._vxl.update_camera_pos_and_direction(t[0],t[1],t[2],e[0],e[1],e[2]);let n=this._vxl.cull();this._dbg(2,`missingResourceCount=`+n),this._moreToLoad=n>0,this._havePreparedWithAllLayers=this._newLayers.length===0,this._updateMemoryUsage()}render(){this._prepareRender();let e=this.bindRenderTarget();if(!this._vxl||!this._rctx)return this.requestRender(1),e;for(let e of this._newLayers){let t=this._addVoxelLayer(e.layerView,this._vxl);t===-1?e.rejectCallback(-1):e.resolveCallback(t)}if(this._newLayers=[],this._layers.size===0)return this._dbg(4,`No voxel layers but RenderNode is being asked to render!`),e;this._lastFrameWasStationary=this.view.stationary,this._syncRequestsResponses(),this._beforeDraw(this._rctx),this._vxl.begin_color_frame(!this.view.stage.renderer.isFeatureEnabled(1),this.bindParameters.lighting.mainLight.direction[0],this.bindParameters.lighting.mainLight.direction[1],this.bindParameters.lighting.mainLight.direction[2]);let t=this._renderTargetToRestore.viewport;return(t.width!==this._viewportWidth||t.height!==this._viewportHeight)&&(this._viewportWidth=t.width,this._viewportHeight=t.height,this._vxl.set_viewport(t.width,t.height),this._layers.forEach(e=>e.needMemoryUsageUpdate=!0)),(t.x!==0||t.y!==0)&&this._dbg(4,`Unsupported viewport parameters detected!`),this.updateWasmCamera(this.bindParameters.camera),this._captureFrustum&&(this._frustum.update(this.bindParameters.camera),this._doCaptureFrustum()),this._vxl.draw(),this._afterDraw(this._rctx,this._vxl),(this._moreToLoad||!this._havePreparedWithAllLayers&&this._layers.size>0)&&this.requestRender(1),e}destroy(){this._dbg(1,`--destroy--`),this._vxl&&=(this._layers.forEach(e=>{e.abortController.abort()}),this._wasmMemBlocks.forEach(e=>{e!==0&&this._vxl?._free(e)}),this._vxl.uninitialize_voxel_wasm(),null)}_initializeWasm(){if(this._vxl||this._vxlPromise||!this._rctx?.gl)return;let e=this._rctx.gl;this._vxlPromise=f(e).then(t=>{let n=t.specialHTMLTargets;if(n.jsAPI3DRenderingContext=e,this._vxl=t,this._vxlPromise=null,this._newLayers.length<=0){this._dbg(1,` no voxel layers left after WASM downloaded, removing RenderNode and destroying`),this.destroy();return}let r=this._getTimeArgs(this.view?.timeExtent),i=this._vxl.addFunction(this._restoreFramebuffer.bind(this),`v`),a=this._vxl.addFunction(this._setBlendState.bind(this),`viiii`),o=this._vxl.addFunction(this._setFrontFace.bind(this),`vi`),s=this._vxl.addFunction(this._setRasterizerState.bind(this),`vi`),c=this._vxl.addFunction(this._setDepthStencilStateFunction.bind(this),`viii`),l=this._vxl.addFunction(this._setViewport.bind(this),`viiii`),u=this._vxl.addFunction(this._bindPreviousDepthToSlot.bind(this),`iii`),d=this._vxl.addFunction(this._modifyResourceCount.bind(this),`viii`),f=this._halfIntTexturesAvailable&&!has(`mac`),p=this._textureFloatLinearAvailable;this._vxl.initialize_voxel_wasm(i,a,o,s,c,l,u,d,r.startTime,r.endTime,r.hasTime,f,p),this.requestRender(1)}).catch(()=>{for(let e of this._newLayers)e.rejectCallback(-2);this._dbg(4,` WASM failed to download, destroying render node`),this.destroy()})}pickDepth(e,t,n){if(!this._vxl||!this._rctx||this._layers.size===0)return null;let r=n.viewport[3]-t;if(e<0||e>n.viewport[2]||t<0||t>n.viewport[3])return this._dbg(4,`[js] pickDepth: outOfRange, screenXY=[${e.toFixed(0)}, ${r.toFixed(0)}]]`),null;this._beforeDraw(this._rctx);let i=n.viewForward,a=n.eye;this._vxl.update_camera_pos_and_direction(a[0],a[1],a[2],i[0],i[1],i[2]),this.updateWasmCamera(n),this._vxl.begin_frame();let o=this._vxl.pick_depth(e,r);return this._afterDraw(this._rctx,this._vxl),o.success?o.distanceToCamera:null}pickObject(e,t,n,r){if(!this._vxl||!this._rctx||this._layers.size===0)return null;let i=Math.round(e),a=Math.round(t);if(i<0||i>n.viewport[2]||a<0||a>n.viewport[3])return this._dbg(4,`[js] pickObject: outOfRange, screenXY=[${i}, ${a}], vp=[${n.viewport.toString()}]`),null;this._beforeDraw(this._rctx);let o=n.viewForward,s=n.eye;this._vxl.update_camera_pos_and_direction(s[0],s[1],s[2],o[0],o[1],o[2]),this.updateWasmCamera(n),this._vxl.begin_frame();let c=null;if(r.length===0)c=this._vxl.pick_object(i,a,0,0);else{let e={str:JSON.stringify({layerIds:r}),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(c=this._vxl.pick_object(i,a,e.ptr,e.byteCount),e.isReusable||this._vxl._free(e.ptr))}return this._afterDraw(this._rctx,this._vxl),c}async getOtherFieldPopupValues(e,n){if(!this._vxl)return[];for(let r of e){let e=r.gpuResult;if(!e)continue;let i=this._layers.get(e.layerId);if(!i||!i.layerView.layer.url)continue;let a=i.layerView.layer,o={responseType:`array-buffer`,signal:i.abortController.signal,query:{...i.layerView.layer.customParameters,token:i.layerView.layer.apiKey}},s=e.voxelSpacePosition,c=[Math.floor(s[0]/32),Math.floor(s[1]/32),Math.floor(s[2]/32)],l=[c[0]&-4,c[1]&-4,c[2]&-4],u=0;if(e.epochTime){let t=this._vxl.get_layer_epoch_times(i.layerView.wasmLayerId,a.currentVariableId);for(let n=0;n<t.length;++n)if(t[n]===e.epochTime/1e3){u=n;break}}let d=[],f={varIds:[],ptrs:[],sizes:[]};for(let e of n){let n=a.variables.findIndex(t=>t.name===e);if(n===-1)continue;let r=a.variables.getItemAt(n)?.id;if(r==null)continue;let i=`${a.url}/variables/${r}/${u}/bundles/0/${l[0]}-${l[1]}-${l[2]}`;d.push(t(i,o).then(e=>e.data)),f.varIds.push(r)}let p=await Promise.allSettled(d),m=p.length;for(let e=0;e<m;++e){let t=p[e];if(t.status===`fulfilled`){let e=t.value,n=this._vxl._malloc(e.byteLength);new Uint8Array(this._vxl.HEAPU8.buffer,n,e.byteLength).set(new Uint8Array(e)),f.ptrs.push(n),f.sizes.push(e.byteLength)}else f.varIds.splice(e,1)}let h=this._vxl.get_other_field_popup_values(e,f);for(let e=0;e<f.ptrs.length;++e)this._vxl._free(f.ptrs[e]);if(h.continuousValues)for(let e in h.continuousValues)r.attributes[e]=h.continuousValues[e];if(h.uniqueValues)for(let e in h.uniqueValues)r.attributes[e]=h.uniqueValues[e]}return e}_beforeDraw(e){this._renderTargetToRestore={fbo:e.boundFramebuffer,viewport:e.getViewport()},e.setPolygonOffsetFillEnabled(!1),e.setScissorTestEnabled(!1),e.setColorMask(!0,!0,!0,!0)}_afterDraw(e,t){this._renderTargetToRestore.fbo=null,e.externalTextureUnitUpdate(t.get_texture_units_bound_in_frame(),t.get_active_texture_unit()),e.externalVertexArrayObjectUpdate(),e.externalVertexBufferUpdate(),e.externalProgramUpdate()}intersectRay(e,t,n,r,i){if(!this._vxl||!this._rctx||this._layers.size===0||!e.options.selectionMode||e.options.isFiltered||!e.camera)return;if(i==null||i[0]<0||i[0]>e.camera.viewport[2]||i[1]<0||i[1]>e.camera.viewport[3])return this._dbg(4,i?`[js] VoxelWasmPerScene.intersect: outOfRange, screenXY=[${i[0].toFixed(0)}, ${i[1].toFixed(0)}]`:`[js] VoxelWasmPerScene.intersect: outOfRange, screenXY=null`),null;let a=[];this._layers.forEach(t=>{e.options.filteredLayerViewUids.includes(t.layerView.uid)&&a.push(t.layerView.wasmLayerId)});let o=this.pickObject(i[0],i[1],e.camera,a);if(o==null||o.layerId===-1)return;let s=this._layers.get(o.layerId);if(s){let t=s.layerView.layer.uid,i=o.distanceToCamera/l(n,r),a=u();a[0]=o.worldX,a[1]=o.worldY,a[2]=o.worldZ;let c={},d=s.layerView.layer,f=d.variables.findIndex(e=>e.id===d.currentVariableId);if(f>=0){let e=d.variables.getItemAt(f);e!=null&&(o.continuousValue==null?o.uniqueValueLabel!=null&&o.uniqueValue!=null?c[e.name]=`${o.uniqueValueLabel} (${o.uniqueValue})`:o.uniqueValue!=null&&(c[e.name]=`${o.uniqueValue}`):c[e.name]=o.continuousValue,e.description.length>0?c[`Voxel.CurrentVariable`]=e.description:e.name?.length>0&&(c[`Voxel.CurrentVariable`]=e.name))}c[`Voxel.Position`]=`[${o.voxelSpacePosition.toString()}]`,o.epochTime!=null&&o.nativeTime!=null&&o.nativeTimeUnits!=null&&(c[`Voxel.LocalTime`]=new Date(o.epochTime),c[`Voxel.SourceTime`]=`${o.nativeTime.toLocaleString()} ${o.nativeTimeUnits}`),o.depth!=null&&(c[`Voxel.Depth`]=o.depth);let p=o.faceNormal;c[`Voxel.WorldPosition`]=`[${a[0]}, ${a[1]}, ${a[2]}]`;let m=e=>{let n=new h(a,t,()=>this._createVoxelGraphic(s.layerView.layer,c,o));e.set(this.type,n,i,i,p)},g=e.results,_=e.options.store===2;if((g.min.renderDistance==null||i<g.min.renderDistance)&&m(g.min),(g.max.renderDistance==null||i>g.max.renderDistance)&&m(g.max),_){let t=new y(e.ray);m(t),e.results.all.push(t)}}}_createVoxelGraphic(e,t,n){return new m({layer:e,sourceLayer:e,origin:e.graphicOrigin,attributes:t,gpuResult:n})}_toWasmQuality(e){switch(e){case`low`:return 0;case`medium`:return 1;case`high`:return 2}}_setUpscalingLimits(e,t,n){this._vxl&&this._vxl.set_upscaling_limits(e,t,n)}};e([s()],b.prototype,`consumes`,void 0),e([s()],b.prototype,`produces`,void 0),b=e([c(`esri.layers.VoxelWasmPerSceneView`)],b);const x=b;export{x as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../request.js";import has from"../core/has.js";import n from"../core/Logger.js";import{isAbortError as r}from"../core/promiseUtils.js";import{watch as i,initial as a}from"../core/reactiveUtils.js";import{convertTime as o}from"../core/timeUtils.js";import{property as s,subclass as c}from"../core/accessorSupport/decorators.js";import{distance as l}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as u}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderSRFromViewSR as d}from"../geometry/support/coordinateSystem.js";import{loadVoxelWASM as f}from"../libs/vxl/VxlModule.js";import{InternalRenderCategory as p}from"../views/3d/webgl.js";import{VoxelGraphic as m}from"../views/3d/layers/VoxelGraphic.js";import{VoxelTarget as h}from"../views/3d/layers/i3s/Intersector.js";import{Frustum as g}from"../views/3d/state/Frustum.js";import{RenderCoordsHelper as _}from"../views/3d/support/RenderCoordsHelper.js";import v from"../views/3d/webgl/RenderNode.js";import{IntersectorResultRay as y}from"../views/3d/webgl-engine/lib/IntersectorResult.js";let b=class extends v{constructor(e){super(e),this._havePreparedWithAllLayers=!1,this.consumes={required:[p.VOXEL]},this.produces=`disabled`,this._vxlPromise=null,this._moreToLoad=!1,this._viewportWidth=-1,this._viewportHeight=-1,this._newLayers=[],this._layers=new Map,this._renderTargetToRestore=null,this._lastFrameWasStationary=!1,this._wasmMemBlockSizes=[512,1024,2048,4096,8192,16384,32768,65536],this._wasmMemBlocks=new Map,this._dbgFlags=new Set,this._captureFrustum=!1,this._frustumRenderableId=-1,this.type=9,this.slicePlaneEnabled=!0,this.isGround=!1,this.layerViewUid=[]}_dbg(e,t){this._dbgFlags.has(e)&&(e===4?n.getLogger(this).error(t):n.getLogger(this).warn(t))}initialize(){this._dbg(1,`--initialize--`);for(let e of this._wasmMemBlockSizes)this._wasmMemBlocks.set(e,0);this.addHandles([i(()=>this.view.viewingMode===`local`,e=>{e?(this._dbg(1,`view switched to local view, enabling rendering`),this.produces=p.VOXEL,this.view.sceneIntersectionHelper.addIntersectionHandler(this)):(this._dbg(1,`view switched to global view, disabling rendering`),this.view.sceneIntersectionHelper.removeIntersectionHandler(this),this.produces=`disabled`)},a),i(()=>this.view?.qualityProfile,e=>{this._dbg(3,`qualityProfile changed to `+e),this._vxl?.set_quality(this._toWasmQuality(e))},a),i(()=>this.view?.timeExtent,()=>{if(this._vxl){let e=this._getTimeArgs(this.view?.timeExtent);this._dbg(3,`sceneView timeExtent changed to useTime=`+e.hasTime+` st=`+e.startTime+` et=`+e.endTime),this._vxl.set_scene_time_extent(e.startTime,e.endTime,e.hasTime),this.requestRender(1)}},a),i(()=>this.view?.stationary,e=>{this._vxl&&e&&!this._lastFrameWasStationary&&this.requestRender(1)})])}get _rctx(){return this.renderContext?.rctx}get _halfIntTexturesAvailable(){return!!this._rctx?.capabilities.textureNorm16}get _textureFloatLinearAvailable(){return!!this._rctx?.capabilities.textureFloatLinear}_restoreFramebuffer(){if(!this._renderTargetToRestore||!this._rctx)return;let e=this._renderTargetToRestore.fbo;if(!this._rctx){this._dbg(4,`no context in restoreFramebuffer!`);return}this._rctx.bindFramebuffer(e,!0);let t=this._renderTargetToRestore.viewport;this._rctx.setViewport(t.x,t.y,t.width,t.height)}_bindPreviousDepthToSlot(e,t){if(!this._rctx||!this._renderTargetToRestore)return 0;let n=this._renderTargetToRestore.fbo?.depthStencilTexture;return n?(t===0?this._rctx.bindTexture(null,e,!0):this._rctx.bindTexture(n,e,!0),1):(this._dbg(4,`no depth/stencil texture exists!`),0)}_modifyResourceCount(e,t,n){if(!this._rctx){this._dbg(4,`modifyAllocation callback has no rendering context!`);return}let r=e;n===1?this._rctx.instanceCounter.increment(r,t):this._rctx.instanceCounter.decrement(r,t)}_setBlendState(e,t,n,r){this._rctx?(this._rctx.setBlendingEnabled(e===1),this._rctx.setBlendFunction(t,n),this._rctx.setBlendEquation(r)):this._dbg(4,`setBlendState callback has no rendering context!`)}_setFrontFace(e){this._rctx?this._rctx.setFrontFace(e):this._dbg(4,`setFrontFace callback has no rendering context!`)}_setDepthStencilStateFunction(e,t,n){this._rctx?(this._rctx.setDepthFunction(n),this._rctx.setDepthTestEnabled(e===1),this._rctx.setDepthWriteEnabled(t===1),this._rctx.setStencilTestEnabled(!1),this._rctx.setStencilFunction(519,0,255),this._rctx.setStencilOpSeparate(1028,7680,7682,7680),this._rctx.setStencilOpSeparate(1029,7680,7683,7680)):this._dbg(4,`setDepthStencilStateFunction callback has no rendering context!`)}_setRasterizerState(e){if(!this._rctx)this._dbg(4,`setRasterizerState callback has no rendering context!`);else switch(e){case 1:this._rctx.setFaceCullingEnabled(!1);break;case 3:this._rctx.setCullFace(1029),this._rctx.setFaceCullingEnabled(!0);break;case 2:this._rctx.setCullFace(1028),this._rctx.setFaceCullingEnabled(!0)}}_setViewport(e,t,n,r){this._rctx?this._rctx.setViewport(e,t,n,r):this._dbg(4,`setViewport callback has no rendering context!`)}_updateMemoryUsage(){this._layers.forEach((e,t)=>{if(e.needMemoryUsageUpdate){let n=this._vxl?.estimate_memory_usage(t)??0;n>=0&&(e.needMemoryUsageUpdate=!1,e.layerView.setUsedMemory(n))}})}_syncRequestsResponses(){this._vxl&&this._layers.forEach((e,n)=>{let i=[];e.responses.forEach((t,r)=>{i.push(r),this._dbg(2,`responding for requestID:`+r+` size:`+t.size),this._vxl?.respond(n,r,t),(t.requestType===0||t.requestType===4)&&(e.needMemoryUsageUpdate=!0)});let a=e.responses;for(let e of i)a.delete(e);let o=this._vxl.get_new_requests(n),s=e.abortController.signal;for(let n in o){e.outstandingRequestCount+=1,e.outstandingRequestCount===1&&e.layerView.updatingFlagChanged();let i=o[n],c={responseType:`array-buffer`,signal:s,query:{...e.layerView.layer.customParameters,token:e.layerView.layer.apiKey}};this._dbg(2,`making requestID:`+n+` url:`+i.url),t(i.url,c).then(t=>{--e.outstandingRequestCount,e.outstandingRequestCount===0&&e.layerView.updatingFlagChanged(),this._dbg(2,`have response for requestID:`+n);let r=0;if(t.data.byteLength>0&&this._vxl){r=this._vxl._malloc(t.data.byteLength);let e=new Uint8Array(this._vxl.HEAPU8.buffer,r,t.data.byteLength),n=new Uint8Array(t.data);for(let r=0;r<t.data.byteLength;++r)e[r]=n[r]}a.set(+n,{responseType:i.responseType,ptr:r,size:t.data.byteLength,success:!0,requestType:i.requestType})}).catch(t=>{--e.outstandingRequestCount,e.outstandingRequestCount===0&&e.layerView.updatingFlagChanged(),r(t)||(this._dbg(4,`requestID:${n} failed, error=${t.toString()}`),a.set(+n,{responseType:i.responseType,ptr:0,size:0,success:!1,requestType:i.requestType}))})}})}updateWasmCamera(e){this._vxl?.set_projection_matrix.apply(this._vxl,e.projectionMatrix),this._vxl?.set_view_matrix.apply(this._vxl,e.viewMatrix),this._vxl?.set_near_far(e.near,e.far)}isUpdating(e){if(!this._vxl&&this._vxlPromise)return!0;let t=this._layers.get(e);return t?t.outstandingRequestCount>0:!1}getLayerTimes(e){let t=[];return this._vxl&&this._layers.forEach((n,r)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){let n=this._vxl.get_layer_epoch_times(r,e.layer.currentVariableId);for(let e=0;e<n.length;++e)t.push(n[e])}}),t}getCurrentLayerTimeIndex(e){let t=0;return this._layers.forEach((n,r)=>{n.layerView.wasmLayerId===e.wasmLayerId&&(t=this._vxl?.get_layer_current_time_id(r)??0)}),t}setEnabled(e,t){this._layers.forEach((n,r)=>{n.layerView.wasmLayerId===e.wasmLayerId&&(this._vxl?.set_enabled(r,t),n.needMemoryUsageUpdate=!0,this.requestRender(1))})}setIsInScaleRange(e,t){let n=this._layers.get(e.wasmLayerId);n&&t!==n.isInScaleRange&&(n.isInScaleRange=t,this._vxl?.set_is_in_scale_range(e.wasmLayerId,t),n.needMemoryUsageUpdate=!t,this.requestRender(1))}setStaticSections(e,t){let n={mask:1,staticSections:t};return this._doMaskedUIUpdate(e,n,!0)}setCurrentVariable(e,t){let n={mask:1024,currentVariable:t};return this._doMaskedUIUpdate(e,n,!0)}setRenderMode(e,t){let n={mask:8192,renderMode:t};return this._doMaskedUIUpdate(e,n,!0)}setVerticalExaggerationAndOffset(e,t,n,r){let i={mask:256,volStyleDesc:{volumeId:t,verticalExaggeration:n,verticalOffset:r}};return this._doMaskedUIUpdate(e,i,!0)}setVariableStyles(e,t){let n={mask:32768,variableStyles:t};return this._doMaskedUIUpdate(e,n,!0)}setVolumeStyles(e,t){let n={mask:65536,volumeStyles:t};return this._doMaskedUIUpdate(e,n,!0)}setEnableDynamicSections(e,t){let n={mask:4096,containerIsVisible:t,container:1};return this._doMaskedUIUpdate(e,n,!0)}setEnableIsosurfaces(e,t){let n={mask:4096,containerIsVisible:t,container:0};return this._doMaskedUIUpdate(e,n,!0)}setEnableSections(e,t){let n={mask:4096,containerIsVisible:t,container:2};return this._doMaskedUIUpdate(e,n,!0)}setAnalysisSlice(e,t,n,r){let i={mask:131072,analysisSlice:{point:n,normal:r,enabled:t}};return this._doMaskedUIUpdate(e,i,!0)}updateLayerTimeProperties(e){if(!this._vxl)return;let t=this._layers.get(e.wasmLayerId);if(t){let n=t.layerView.layer,r=0;n.timeOffset&&(r=o(n.timeOffset.value,n.timeOffset.unit,`seconds`));let i=this._getTimeArgs(n.timeExtent);this._vxl?.set_layer_time_properties(e.wasmLayerId,i.startTime,i.endTime,i.hasTime,n.useViewTime,r),this.requestRender(1)}}_doMaskedUIUpdate(e,t,n){if(!this._vxl)return!1;let r=!1;return this._layers.forEach((n,i)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){let e={str:JSON.stringify(t),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(r=this._vxl?.handle_masked_ui_update(i,e.ptr,e.byteCount)===1,e.isReusable||this._vxl?._free(e.ptr))}}),r&&n&&this.requestRender(1),r}_addTriangleToWasmBuffer(e,t,n,r,i){return e[t*3]=n[0],e[t*3+1]=n[1],e[t*3+2]=n[2],t+=1,e[t*3]=r[0],e[t*3+1]=r[1],e[t*3+2]=r[2],t+=1,e[t*3]=i[0],e[t*3+1]=i[1],e[t*3+2]=i[2],t+=1,t}_addNormalToWasmBuffer(e,t,n){return e[t*3]=n[0],e[t*3+1]=n[1],e[t*3+2]=n[2],t+=1,t}_doCaptureFrustum(e){if(!this._vxl)return;let t=this._vxl._malloc(108*Float32Array.BYTES_PER_ELEMENT),n=new Float32Array(this._vxl.HEAPF32.buffer,t,108),r=this._vxl._malloc(36*Float32Array.BYTES_PER_ELEMENT),i=new Float32Array(this._vxl.HEAPF32.buffer,r,36),a=e.points[0],o=e.points[1],s=e.points[2],c=e.points[3],l=e.points[4],u=e.points[5],d=e.points[6],f=e.points[7],p=0,m=0,h=e.planes[4];p=this._addTriangleToWasmBuffer(n,p,s,o,a),m=this._addNormalToWasmBuffer(i,m,h),p=this._addTriangleToWasmBuffer(n,p,a,c,s),m=this._addNormalToWasmBuffer(i,m,h);let g=e.planes[5];p=this._addTriangleToWasmBuffer(n,p,l,u,d),m=this._addNormalToWasmBuffer(i,m,g),p=this._addTriangleToWasmBuffer(n,p,d,f,l),m=this._addNormalToWasmBuffer(i,m,g);let _=e.planes[3];p=this._addTriangleToWasmBuffer(n,p,d,s,c),m=this._addNormalToWasmBuffer(i,m,_),p=this._addTriangleToWasmBuffer(n,p,c,f,d),m=this._addNormalToWasmBuffer(i,m,_);let v=e.planes[2];p=this._addTriangleToWasmBuffer(n,p,a,o,u),m=this._addNormalToWasmBuffer(i,m,v),p=this._addTriangleToWasmBuffer(n,p,u,l,a),m=this._addNormalToWasmBuffer(i,m,v);let y=e.planes[0];p=this._addTriangleToWasmBuffer(n,p,c,a,l),m=this._addNormalToWasmBuffer(i,m,y),p=this._addTriangleToWasmBuffer(n,p,l,f,c),m=this._addNormalToWasmBuffer(i,m,y);let b=e.planes[1];p=this._addTriangleToWasmBuffer(n,p,s,d,u),m=this._addNormalToWasmBuffer(i,m,b),this._addTriangleToWasmBuffer(n,p,u,o,s),this._addNormalToWasmBuffer(i,m,b),this._frustumRenderableId!==-1&&this._vxl.remove_generic_mesh(this._frustumRenderableId),this._frustumRenderableId=this._vxl.add_generic_mesh(t,108,r,36,255,0,0,64),this._vxl._free(t),this._vxl._free(r),this._captureFrustum=!1,this.requestRender(1)}captureFrustum(){this._renderCoordsHelper??=new _({viewingMode:2,spatialReference:d(!1,this.view.spatialReference)}),this._frustum??=new g(this._renderCoordsHelper),this._captureFrustum=!0,this.requestRender(1)}toggleFullVolumeExtentDraw(e){this._vxl&&this._layers.forEach((t,n)=>{t.layerView.wasmLayerId===e.wasmLayerId&&(this._vxl?.toggle_full_volume_extent_draw(n),this.requestRender(1))})}dropQueryRenderTarget(){this._vxl?.drop_query_rt()}addVoxelLayer(e){if(!this._vxl){let t={layerView:e,resolveCallback:null,rejectCallback:null},n=new Promise((e,n)=>{t.resolveCallback=e,t.rejectCallback=n});return this._newLayers.push(t),n}let t=this._addVoxelLayer(e,this._vxl);return t<0?Promise.reject(-1):Promise.resolve(t)}removeVoxelLayer(e){if(!this._vxl){let t=this._newLayers.findIndex(t=>e.uid===t.layerView.uid);t>=0&&(this._newLayers[t].resolveCallback(-1),this._newLayers.splice(t,1));let n=this._newLayers.length;return n===0&&(this._dbg(1,`No voxel layers left after removing a layer, destroying render node`),this.destroy()),n}let t=-1;this._layers.forEach((n,r)=>{if(n.layerView.wasmLayerId===e.wasmLayerId){t=r,n.abortController.abort(),this._vxl?.remove_layer(t);let i=this.layerViewUid.indexOf(e.uid);i!==-1&&this.layerViewUid.splice(i,1)}}),t>=0&&this._layers.delete(t);let n=this._layers.size;return n===0&&(this._dbg(1,`No voxel layers left after removing a layer, destroying render node`),this.destroy()),n}_getBlockSize(e){for(let t of this._wasmMemBlockSizes)if(e<t)return t;return-1}_allocateBlock(e){if(!this._vxl)return!1;e.byteCount=this._vxl.lengthBytesUTF8(e.str)+1;let t=this._getBlockSize(e.byteCount);return t<0?(e.isReusable=!1,e.ptr=this._vxl._malloc(e.byteCount)):(e.isReusable=!0,e.ptr=this._wasmMemBlocks.get(t),e.ptr===0&&(e.ptr=this._vxl._malloc(t),this._wasmMemBlocks.set(t,e.ptr))),e.ptr!==0&&(this._vxl.stringToUTF8(e.str,e.ptr,e.byteCount),!0)}_getTimeArgs(e){let t=-Number.MAX_VALUE,n=Number.MAX_VALUE,r=!1;return e!=null&&(e.isAllTime?r=!0:(e.start!=null&&(r=!0,t=e.start.getTime()/1e3),e.end!=null&&(r=!0,n=e.end.getTime()/1e3))),{startTime:t,endTime:n,hasTime:r}}_addVoxelLayer(e,t){let r=e.layer,i=-1,a=r.getConfiguration();if(a.length<1)return-1;let s={str:a,byteCount:0,ptr:0,isReusable:!1};if(!this._allocateBlock(s))return-1;let c=this._getTimeArgs(r.timeExtent),l=this.view.spatialReference.isWGS84&&r.spatialReference.isWGS84?111319.49079327357:1,u=0;if(r.timeOffset&&(u=o(r.timeOffset.value,r.timeOffset.unit,`seconds`)),i=t.add_layer(r.serviceRoot,s.ptr,s.byteCount,l,l,c.startTime,c.endTime,c.hasTime,r.useViewTime,u,this._toWasmQuality(this.view.qualityProfile)),s.isReusable||t._free(s.ptr),i>=0){r.test?.constantUpscaling&&(this._setUpscalingLimits(0,.25,.25),this._setUpscalingLimits(1,.5,.5),this._setUpscalingLimits(2,.75,.75));let t=new AbortController;if(this._layers.set(i,{layerView:e,responses:new Map,outstandingRequestCount:0,abortController:t,needMemoryUsageUpdate:!1,isInScaleRange:!0}),this.layerViewUid.push(e.uid),!this._halfIntTexturesAvailable||has(`mac`)){let t=[],r=``;for(let n of e.layer.variables)(n.renderingFormat.type===`Int16`||n.renderingFormat.type===`UInt16`)&&(t.push(n.name),n.id===e.layer.currentVariableId&&(r=n.name));r!==``&&n.getLogger(this).error(`#addVoxelLayer_error()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${r}' in this browser`),t.length>0&&n.getLogger(this).warn(`#addVoxelLayer_warning()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}if(!this._textureFloatLinearAvailable){let t=[],r=``;for(let n of e.layer.variables)n.renderingFormat.type===`Float32`&&(t.push(n.name),n.id===e.layer.currentVariableId&&(r=n.name));r!==``&&n.getLogger(this).error(`#addVoxelLayer_error()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${r}' in this browser`),t.length>0&&n.getLogger(this).warn(`#addVoxelLayer_warning()`,e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}return has(`esri-mobile`)&&n.getLogger(this).warnOnce(`Mobile support differs across devices. Voxel layer might not display as expected.`),i}return-1}_prepareRender(){if(!this._vxl){this._initializeWasm();return}let e=this.bindParameters.camera.viewForward,t=this.bindParameters.camera.eye;this._vxl.update_camera_pos_and_direction(t[0],t[1],t[2],e[0],e[1],e[2]);let n=this._vxl.cull();this._dbg(2,`missingResourceCount=`+n),this._moreToLoad=n>0,this._havePreparedWithAllLayers=this._newLayers.length===0,this._updateMemoryUsage()}render(){this._prepareRender();let e=this.bindRenderTarget();if(!this._vxl||!this._rctx)return this.requestRender(1),e;for(let e of this._newLayers){let t=this._addVoxelLayer(e.layerView,this._vxl);t===-1?e.rejectCallback(-1):e.resolveCallback(t)}if(this._newLayers=[],this._layers.size===0)return this._dbg(4,`No voxel layers but RenderNode is being asked to render!`),e;this._lastFrameWasStationary=this.view.stationary,this._syncRequestsResponses(),this._beforeDraw(this._rctx),this._vxl.begin_color_frame(!this.view.stage.renderer.isFeatureEnabled(1),this.bindParameters.lighting.mainLight.direction[0],this.bindParameters.lighting.mainLight.direction[1],this.bindParameters.lighting.mainLight.direction[2]);let t=this._renderTargetToRestore.viewport;return(t.width!==this._viewportWidth||t.height!==this._viewportHeight)&&(this._viewportWidth=t.width,this._viewportHeight=t.height,this._vxl.set_viewport(t.width,t.height),this._layers.forEach(e=>e.needMemoryUsageUpdate=!0)),(t.x!==0||t.y!==0)&&this._dbg(4,`Unsupported viewport parameters detected!`),this.updateWasmCamera(this.bindParameters.camera),this._captureFrustum&&this._frustum&&(this._frustum.update(this.bindParameters.camera),this._doCaptureFrustum(this._frustum)),this._vxl.draw(),this._afterDraw(this._rctx,this._vxl),(this._moreToLoad||!this._havePreparedWithAllLayers&&this._layers.size>0)&&this.requestRender(1),e}destroy(){this._dbg(1,`--destroy--`),this._vxl&&=(this._layers.forEach(e=>{e.abortController.abort()}),this._wasmMemBlocks.forEach(e=>{e!==0&&this._vxl?._free(e)}),this._vxl.uninitialize_voxel_wasm(),null)}_initializeWasm(){if(this._vxl||this._vxlPromise||!this._rctx?.gl)return;let e=this._rctx.gl;this._vxlPromise=f(e).then(t=>{let n=t.specialHTMLTargets;if(n.jsAPI3DRenderingContext=e,this._vxl=t,this._vxlPromise=null,this._newLayers.length<=0){this._dbg(1,` no voxel layers left after WASM downloaded, removing RenderNode and destroying`),this.destroy();return}let r=this._getTimeArgs(this.view?.timeExtent),i=this._vxl.addFunction(this._restoreFramebuffer.bind(this),`v`),a=this._vxl.addFunction(this._setBlendState.bind(this),`viiii`),o=this._vxl.addFunction(this._setFrontFace.bind(this),`vi`),s=this._vxl.addFunction(this._setRasterizerState.bind(this),`vi`),c=this._vxl.addFunction(this._setDepthStencilStateFunction.bind(this),`viii`),l=this._vxl.addFunction(this._setViewport.bind(this),`viiii`),u=this._vxl.addFunction(this._bindPreviousDepthToSlot.bind(this),`iii`),d=this._vxl.addFunction(this._modifyResourceCount.bind(this),`viii`),f=this._halfIntTexturesAvailable&&!has(`mac`),p=this._textureFloatLinearAvailable;this._vxl.initialize_voxel_wasm(i,a,o,s,c,l,u,d,r.startTime,r.endTime,r.hasTime,f,p),this.requestRender(1)}).catch(()=>{for(let e of this._newLayers)e.rejectCallback(-2);this._dbg(4,` WASM failed to download, destroying render node`),this.destroy()})}pickDepth(e,t,n){if(!this._vxl||!this._rctx||this._layers.size===0)return null;let r=n.viewport[3]-t;if(e<0||e>n.viewport[2]||t<0||t>n.viewport[3])return this._dbg(4,`[js] pickDepth: outOfRange, screenXY=[${e.toFixed(0)}, ${r.toFixed(0)}]]`),null;this._beforeDraw(this._rctx);let i=n.viewForward,a=n.eye;this._vxl.update_camera_pos_and_direction(a[0],a[1],a[2],i[0],i[1],i[2]),this.updateWasmCamera(n),this._vxl.begin_frame();let o=this._vxl.pick_depth(e,r);return this._afterDraw(this._rctx,this._vxl),o.success?o.distanceToCamera:null}pickObject(e,t,n,r){if(!this._vxl||!this._rctx||this._layers.size===0)return null;let i=Math.round(e),a=Math.round(t);if(i<0||i>n.viewport[2]||a<0||a>n.viewport[3])return this._dbg(4,`[js] pickObject: outOfRange, screenXY=[${i}, ${a}], vp=[${n.viewport.toString()}]`),null;this._beforeDraw(this._rctx);let o=n.viewForward,s=n.eye;this._vxl.update_camera_pos_and_direction(s[0],s[1],s[2],o[0],o[1],o[2]),this.updateWasmCamera(n),this._vxl.begin_frame();let c=null;if(r.length===0)c=this._vxl.pick_object(i,a,0,0);else{let e={str:JSON.stringify({layerIds:r}),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(c=this._vxl.pick_object(i,a,e.ptr,e.byteCount),e.isReusable||this._vxl._free(e.ptr))}return this._afterDraw(this._rctx,this._vxl),c}async getOtherFieldPopupValues(e,n){if(!this._vxl)return[];for(let r of e){let e=r.gpuResult;if(!e)continue;let i=this._layers.get(e.layerId);if(!i||!i.layerView.layer.url)continue;let a=i.layerView.layer,o={responseType:`array-buffer`,signal:i.abortController.signal,query:{...i.layerView.layer.customParameters,token:i.layerView.layer.apiKey}},s=e.voxelSpacePosition,c=[Math.floor(s[0]/32),Math.floor(s[1]/32),Math.floor(s[2]/32)],l=[c[0]&-4,c[1]&-4,c[2]&-4],u=0;if(e.epochTime){let t=this._vxl.get_layer_epoch_times(i.layerView.wasmLayerId,a.currentVariableId);for(let n=0;n<t.length;++n)if(t[n]===e.epochTime/1e3){u=n;break}}let d=[],f={varIds:[],ptrs:[],sizes:[]};for(let e of n){let n=a.variables.findIndex(t=>t.name===e);if(n===-1)continue;let r=a.variables.getItemAt(n)?.id;if(r==null)continue;let i=`${a.url}/variables/${r}/${u}/bundles/0/${l[0]}-${l[1]}-${l[2]}`;d.push(t(i,o).then(e=>e.data)),f.varIds.push(r)}let p=await Promise.allSettled(d),m=p.length;for(let e=0;e<m;++e){let t=p[e];if(t.status===`fulfilled`){let e=t.value,n=this._vxl._malloc(e.byteLength);new Uint8Array(this._vxl.HEAPU8.buffer,n,e.byteLength).set(new Uint8Array(e)),f.ptrs.push(n),f.sizes.push(e.byteLength)}else f.varIds.splice(e,1)}let h=this._vxl.get_other_field_popup_values(e,f);for(let e=0;e<f.ptrs.length;++e)this._vxl._free(f.ptrs[e]);if(h.continuousValues)for(let e in h.continuousValues)r.attributes[e]=h.continuousValues[e];if(h.uniqueValues)for(let e in h.uniqueValues)r.attributes[e]=h.uniqueValues[e]}return e}_beforeDraw(e){this._renderTargetToRestore={fbo:e.boundFramebuffer,viewport:e.getViewport()},e.setPolygonOffsetFillEnabled(!1),e.setScissorTestEnabled(!1),e.setColorMask(!0,!0,!0,!0)}_afterDraw(e,t){this._renderTargetToRestore.fbo=null,e.externalTextureUnitUpdate(t.get_texture_units_bound_in_frame(),t.get_active_texture_unit()),e.externalVertexArrayObjectUpdate(),e.externalVertexBufferUpdate(),e.externalProgramUpdate()}intersectRay(e,t,n,r,i){if(!this._vxl||!this._rctx||this._layers.size===0||!e.options.selectionMode||e.options.isFiltered||!e.camera)return;if(i==null||i[0]<0||i[0]>e.camera.viewport[2]||i[1]<0||i[1]>e.camera.viewport[3])return this._dbg(4,i?`[js] VoxelWasmPerScene.intersect: outOfRange, screenXY=[${i[0].toFixed(0)}, ${i[1].toFixed(0)}]`:`[js] VoxelWasmPerScene.intersect: outOfRange, screenXY=null`),null;let a=[];this._layers.forEach(t=>{e.options.filteredLayerViewUids.includes(t.layerView.uid)&&a.push(t.layerView.wasmLayerId)});let o=this.pickObject(i[0],i[1],e.camera,a);if(o==null||o.layerId===-1)return;let s=this._layers.get(o.layerId);if(s){let t=s.layerView.layer.uid,i=o.distanceToCamera/l(n,r),a=u();a[0]=o.worldX,a[1]=o.worldY,a[2]=o.worldZ;let c={},d=s.layerView.layer,f=d.variables.findIndex(e=>e.id===d.currentVariableId);if(f>=0){let e=d.variables.getItemAt(f);e!=null&&(o.continuousValue==null?o.uniqueValueLabel!=null&&o.uniqueValue!=null?c[e.name]=`${o.uniqueValueLabel} (${o.uniqueValue})`:o.uniqueValue!=null&&(c[e.name]=`${o.uniqueValue}`):c[e.name]=o.continuousValue,e.description.length>0?c[`Voxel.CurrentVariable`]=e.description:e.name?.length>0&&(c[`Voxel.CurrentVariable`]=e.name))}c[`Voxel.Position`]=`[${o.voxelSpacePosition.toString()}]`,o.epochTime!=null&&o.nativeTime!=null&&o.nativeTimeUnits!=null&&(c[`Voxel.LocalTime`]=new Date(o.epochTime),c[`Voxel.SourceTime`]=`${o.nativeTime.toLocaleString()} ${o.nativeTimeUnits}`),o.depth!=null&&(c[`Voxel.Depth`]=o.depth);let p=o.faceNormal;c[`Voxel.WorldPosition`]=`[${a[0]}, ${a[1]}, ${a[2]}]`;let m=e=>{let n=new h(a,t,()=>this._createVoxelGraphic(s.layerView.layer,c,o));e.set(this.type,n,i,i,p)},g=e.results,_=e.options.store===2;if((g.min.renderDistance==null||i<g.min.renderDistance)&&m(g.min),(g.max.renderDistance==null||i>g.max.renderDistance)&&m(g.max),_){let t=new y(e.ray);m(t),e.results.all.push(t)}}}_createVoxelGraphic(e,t,n){return new m({layer:e,sourceLayer:e,origin:e.graphicOrigin,attributes:t,gpuResult:n})}_toWasmQuality(e){switch(e){case`low`:return 0;case`medium`:return 1;case`high`:return 2}}_setUpscalingLimits(e,t,n){this._vxl&&this._vxl.set_upscaling_limits(e,t,n)}};e([s()],b.prototype,`consumes`,void 0),e([s()],b.prototype,`produces`,void 0),b=e([c(`esri.layers.VoxelWasmPerSceneView`)],b);const x=b;export{x as default};
|
package/layers/WFSLayer.d.ts
CHANGED
|
@@ -436,10 +436,14 @@ export default class WFSLayer extends WFSLayerSuperclass {
|
|
|
436
436
|
*/
|
|
437
437
|
accessor maxPageCount: number;
|
|
438
438
|
/**
|
|
439
|
-
* The maximum number of features
|
|
440
|
-
* When
|
|
441
|
-
*
|
|
442
|
-
*
|
|
439
|
+
* The maximum number of features to request in a single request.
|
|
440
|
+
* When the service advertises a valid
|
|
441
|
+
* [CountDefault](https://developers.arcgis.com/javascript/latest/references/core/layers/ogc/wfsUtils/#WFSOperationsGetFeature-countDefault),
|
|
442
|
+
* the layer uses the smaller of that value and `maxRecordCount` as the request size.
|
|
443
|
+
* The service may return fewer features than requested.
|
|
444
|
+
*
|
|
445
|
+
* When pagination is supported, the layer makes multiple requests, up to
|
|
446
|
+
* [maxPageCount](https://developers.arcgis.com/javascript/latest/references/core/layers/WFSLayer/#maxPageCount), to retrieve the features.
|
|
443
447
|
*
|
|
444
448
|
* @default 3000
|
|
445
449
|
* @since 4.29
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import has from"../../../core/has.js";import{Loadable as n}from"../../../core/Loadable.js";import r from"../../../core/Logger.js";import{debounce as i,eachAlways as a}from"../../../core/promiseUtils.js";import{open as o}from"../../../core/workers.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import l from"../../../geometry/Extent.js";import{featureGeometryTypeKebabDictionary as u}from"../../../geometry/support/typeUtils.js";import{createCapabilities as d,createDrawingInfo as f}from"./support/clientSideDefaults.js";import{getCapabilities as p,getWFSLayerInfo as m,prepareWFSLayerFields as h,findFeatureType as g}from"../../ogc/wfsUtils.js";import _ from"../../../rest/support/AttributeBinsFeatureSet.js";import v from"../../../rest/support/FeatureSet.js";import{utc as y}from"../../../time/constants.js";let b=class extends n{constructor(){super(...arguments),this._connection=null,this._workerHandler=null,this.capabilities=d(!1,!1),this.type=`wfs`,this.refresh=i(async()=>{await this.load();let e={customParameters:this.layer.customParameters,maxRecordCount:this.
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import has from"../../../core/has.js";import{Loadable as n}from"../../../core/Loadable.js";import r from"../../../core/Logger.js";import{debounce as i,eachAlways as a}from"../../../core/promiseUtils.js";import{open as o}from"../../../core/workers.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import l from"../../../geometry/Extent.js";import{featureGeometryTypeKebabDictionary as u}from"../../../geometry/support/typeUtils.js";import{createCapabilities as d,createDrawingInfo as f}from"./support/clientSideDefaults.js";import{getCapabilities as p,getWFSLayerInfo as m,prepareWFSLayerFields as h,findFeatureType as g}from"../../ogc/wfsUtils.js";import _ from"../../../rest/support/AttributeBinsFeatureSet.js";import v from"../../../rest/support/FeatureSet.js";import{utc as y}from"../../../time/constants.js";let b=class extends n{constructor(){super(...arguments),this._connection=null,this._workerHandler=null,this.capabilities=d(!1,!1),this.type=`wfs`,this.refresh=i(async()=>{await this.load();let e=this.layer.maxRecordCount,t={customParameters:this.layer.customParameters,maxRecordCount:Math.min(e,this.wfsCapabilities.operations.GetFeature.countDefault??e),maxTotalRecordCount:this.layer.maxTotalRecordCount,maxPageCount:this.layer.maxPageCount},{extent:n}=await this._workerHandler.refresh(t);return n&&(this.sourceJSON.extent=n),{dataChanged:!0,updates:{extent:this.sourceJSON.extent}}})}load(e){let t=e==null?null:e.signal;return this.addResolvingPromise(this._startWorker({signal:t})),Promise.resolve(this)}destroy(){this._connection?.close(),this._connection=null,this._workerHandler=null}async openPorts(){return await this.load(),this._connection.openPorts()}async queryFeatures(e,t={}){let n=await this.queryFeaturesJSON(e,t);return v.fromJSON(n)}async queryFeaturesJSON(e,t={}){return await this.load(t),this._workerHandler.queryFeatures(e?e.toJSON():void 0,t)}async queryFeatureCount(e,t={}){return await this.load(t),this._workerHandler.queryFeatureCount(e?e.toJSON():void 0,t)}async queryObjectIds(e,t={}){return await this.load(t),this._workerHandler.queryObjectIds(e?e.toJSON():void 0,t)}async queryExtent(e,t={}){await this.load(t);let n=await this._workerHandler.queryExtent(e?e.toJSON():void 0,t);return{count:n.count,extent:l.fromJSON(n.extent)}}async querySnapping(e,t={}){return await this.load(t),this._workerHandler.querySnapping(e,t)}async queryAttributeBins(e,t={}){await this.load(t);let n=await this._workerHandler.queryAttributeBins(e?.toJSON(),t);return _.fromJSON(n)}async _createLoadOptions(e){let{url:n,customParameters:r,name:i,namespaceUri:a,fields:o,geometryType:s,maxRecordCount:c,maxPageCount:l,maxTotalRecordCount:d,swapXY:f}=this.layer,_=this.layer.originOf(`spatialReference`)===`defaults`?void 0:this.layer.spatialReference;if(!n)throw new t(`wfs-layer:missing-url`,`WFSLayer must be created with a url`);this.wfsCapabilities||=await p(n,{customParameters:r,...e});let v=[`fields`,`geometryType`,`name`,`namespaceUri`,`swapXY`].some(e=>this.layer[e]==null)?await m(this.wfsCapabilities,i,a,{spatialReference:_,customParameters:r,signal:e?.signal}):{...h(o??[]),geometryType:s,name:i,namespaceUri:a,spatialReference:_,swapXY:f},y=g(this.wfsCapabilities.readFeatureTypes(),v.name,v.namespaceUri),b=u.toJSON(v.geometryType),{operations:x}=this.wfsCapabilities,S=x.GetFeature.url,C=x.GetFeature.outputFormat;return{customParameters:r,featureType:y,fields:v.fields?.map(e=>e.toJSON())??[],geometryField:v.geometryField,geometryType:b,getFeatureUrl:S,getFeatureOutputFormat:C,maxRecordCount:Math.min(c,x.GetFeature.countDefault??c),maxPageCount:l,maxTotalRecordCount:d,objectIdField:v.objectIdField,spatialReference:v.spatialReference?.toJSON(),swapXY:!!v.swapXY}}async _startWorker(e){let[t,n]=await a([this._createLoadOptions(e),o(`WFSSourceWorker`,{...e,strategy:has(`feature-layers-workers`)?`dedicated`:`local`,registryTarget:this})]),i=t.error||n.error||null,s=n.value||null;if(i)throw s&&s.close(),i;let c=t.value;this._connection=n.value,this._workerHandler=this._connection.createInvokeProxy();let l=await this._workerHandler.load(c,e);for(let e of l.warnings)r.getLogger(this.layer).warn(`#load()`,`${e.message} (title: '${this.layer.title||`no title`}', id: '${this.layer.id??`no id`}')`,{warning:e});this.sourceJSON={dateFieldsTimeReference:{timeZoneIANA:y},extent:l.extent,fields:c.fields,geometryType:c.geometryType,objectIdField:c.objectIdField,geometryField:c.geometryField,drawingInfo:f(c.geometryType),name:c.featureType.title,wfsInfo:{name:c.featureType.name,featureUrl:c.getFeatureUrl,maxFeatures:this.wfsCapabilities.operations.GetFeature.countDefault??c.maxRecordCount,swapXY:c.swapXY,supportedSpatialReferences:c.featureType.supportedSpatialReferences,version:`2.0.0`,wfsNamespace:c.featureType.namespaceUri}}}};e([s()],b.prototype,`capabilities`,void 0),e([s({constructOnly:!0})],b.prototype,`layer`,void 0),e([s()],b.prototype,`sourceJSON`,void 0),e([s()],b.prototype,`type`,void 0),e([s()],b.prototype,`wfsCapabilities`,void 0),b=e([c(`esri.layers.graphics.sources.WFSSource`)],b);export{b as WFSSource};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import{isDateString as e}from"../../../../core/date.js";import t from"../../../../core/Error.js";import{isWGS84 as n}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromMultipoint as r,convertFromPolyline as i}from"../../featureConversionUtils.js";import{OptimizedFeature as a}from"../../OptimizedFeature.js";import o from"../../OptimizedGeometry.js";import{normalizeFieldName as s,isNumericField as c}from"../../../support/fieldUtils.js";const l={LineString:`esriGeometryPolyline`,MultiLineString:`esriGeometryPolyline`,MultiPoint:`esriGeometryMultipoint`,Point:`esriGeometryPoint`,Polygon:`esriGeometryPolygon`,MultiPolygon:`esriGeometryPolygon`};function u(e){return l[e]}function*d(e){switch(e.type){case`Feature`:yield e;break;case`FeatureCollection`:for(let t of e.features)t&&(yield t)}}function*f(e){if(e)switch(e.type){case`Point`:yield e.coordinates;break;case`LineString`:case`MultiPoint`:yield*e.coordinates;break;case`MultiLineString`:case`Polygon`:for(let t of e.coordinates)yield*t;break;case`MultiPolygon`:for(let t of e.coordinates)for(let e of t)yield*e}}function*p(e,t={}){let{geometryType:n,objectIdField:r}=t;for(let i of e){let{geometry:e,properties:o,id:s}=i;if(e&&u(e.type)!==n)continue;let c=o||{},l;r&&(l=c[r],s!=null&&!l&&(c[r]=l=s)),yield new a(e&&y(e,t),c,null,l)}}function m(e){for(let t of e)if(t.length>2)return!0;return!1}function h(e){return!_(e)}function g(e){return _(e)}function _(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n],i=e[(n+1)%e.length];t+=r[0]*i[1]-i[0]*r[1]}return t<=0}function v(e){let t=e[0],n=e[e.length-1];(t[0]!==n[0]||t[1]!==n[1]||t[2]!==n[2])&&e.push(t)}function y(e,t){let{coordinates:n,type:a}=e,s=t.hasZ??!1;switch(a){case`Point`:return new o([],
|
|
2
|
+
import{isDateString as e}from"../../../../core/date.js";import t from"../../../../core/Error.js";import{isWGS84 as n}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromMultipoint as r,convertFromPolyline as i}from"../../featureConversionUtils.js";import{OptimizedFeature as a}from"../../OptimizedFeature.js";import o from"../../OptimizedGeometry.js";import{normalizeFieldName as s,isNumericField as c}from"../../../support/fieldUtils.js";const l={LineString:`esriGeometryPolyline`,MultiLineString:`esriGeometryPolyline`,MultiPoint:`esriGeometryMultipoint`,Point:`esriGeometryPoint`,Polygon:`esriGeometryPolygon`,MultiPolygon:`esriGeometryPolygon`};function u(e){return l[e]}function*d(e){switch(e.type){case`Feature`:yield e;break;case`FeatureCollection`:for(let t of e.features)t&&(yield t)}}function*f(e){if(e)switch(e.type){case`Point`:yield e.coordinates;break;case`LineString`:case`MultiPoint`:yield*e.coordinates;break;case`MultiLineString`:case`Polygon`:for(let t of e.coordinates)yield*t;break;case`MultiPolygon`:for(let t of e.coordinates)for(let e of t)yield*e}}function*p(e,t={}){let{geometryType:n,objectIdField:r}=t;for(let i of e){let{geometry:e,properties:o,id:s}=i;if(e&&u(e.type)!==n)continue;let c=o||{},l;r&&(l=c[r],s!=null&&!l&&(c[r]=l=s)),yield new a(e&&y(e,t),c,null,l)}}function m(e){for(let t of e)if(t.length>2)return!0;return!1}function h(e){return!_(e)}function g(e){return _(e)}function _(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n],i=e[(n+1)%e.length];t+=r[0]*i[1]-i[0]*r[1]}return t<=0}function v(e){let t=e[0],n=e[e.length-1];(t[0]!==n[0]||t[1]!==n[1]||t[2]!==n[2])&&e.push(t)}function y(e,t){let{coordinates:n,type:a}=e,s=t.hasZ??!1;switch(a){case`Point`:{let e=!s&&n.length===3?n.slice(0,2):s&&n.length===2?[...n,0]:[...n];return new o([],e,s,!1)}case`LineString`:return i({paths:[n],hasZ:!0},s,!1);case`MultiLineString`:return i({paths:n,hasZ:!0},s,!1);case`MultiPoint`:return r({points:n,hasZ:!0},s,!1);case`Polygon`:case`MultiPolygon`:{let e=new o([],[],s,!1);for(let t of a===`Polygon`?[n]:n){b(e,t[0],s);for(let n=1;n<t.length;n++)x(e,t[n],s)}return e}}}function b(e,t,n){v(t),h(t)?C(e,t,n):S(e,t,n)}function x(e,t,n){v(t),g(t)?C(e,t,n):S(e,t,n)}function S(e,t,n){for(let r of t)w(e,r,n);e.lengths.push(t.length)}function C(e,t,n){for(let r=t.length-1;r>=0;r--)w(e,t[r],n);e.lengths.push(t.length)}function w(e,[t,n,r],i){e.coords.push(t,n),i&&e.coords.push(r||0)}function T(t){switch(typeof t){case`string`:return e(t)?`esriFieldTypeDate`:`esriFieldTypeString`;case`number`:return`esriFieldTypeDouble`;default:return`unknown`}}function E(e,r=4326){if(!e)throw new t(`geojson-layer:empty`,`GeoJSON data is empty`);if(e.type!==`Feature`&&e.type!==`FeatureCollection`)throw new t(`geojson-layer:unsupported-geojson-object`,`missing or not supported GeoJSON object type`,{data:e});let{crs:i}=e;if(!i)return;let a=typeof i==`string`?i:i.type===`name`?i.properties.name:i.type===`EPSG`?i.properties.code:null,o=n({wkid:r})?RegExp(`.*(CRS84H?|4326)$`,`i`):RegExp(`.*(${r})$`,`i`);if(!a||!o.test(a))throw new t(`geojson:unsupported-crs`,`unsupported GeoJSON 'crs' member`,{crs:i})}function D(e,t={}){let n=[],r=new Set,i=new Set,a=!1,o=null,l=!1,p,{geometryType:h=null}=t;for(let t of d(e)){let{geometry:e,properties:c,id:d}=t;if(!(e&&(h||=u(e.type),u(e.type)!==h))&&(a||=m(f(e)),l||(l=d!=null,l&&(p=typeof d,c&&(o=Object.keys(c).filter(e=>c[e]===d)))),c&&o&&l&&d!=null&&(o.length>1?o=o.filter(e=>c[e]===d):o.length===1&&(o=c[o[0]]===d?o:[])),c))for(let e in c){if(r.has(e))continue;let t=c[e],a=T(t);if(a===`unknown`){i.add(e);continue}i.delete(e),r.add(e);let o=s(e);o&&n.push({name:o,alias:e,type:a})}}let g=s(o?.length===1&&o[0]||null)??void 0;if(g){for(let e of n)if(e.name===g&&c(e)){e.type=`esriFieldTypeOID`;break}}return{fields:n,geometryType:h,hasZ:a,objectIdFieldName:g,objectIdFieldType:p,unknownFields:Array.from(i)}}function O(e,t){return Array.from(p(d(e),t))}export{O as createOptimizedFeatures,u as getGeometryType,D as inferLayerProperties,E as validateGeoJSON};
|
|
@@ -13,6 +13,14 @@ export interface ArcGISMapServiceProperties extends Partial<Pick<ArcGISMapServic
|
|
|
13
13
|
* });
|
|
14
14
|
*/
|
|
15
15
|
fullExtent?: ExtentProperties | null;
|
|
16
|
+
/**
|
|
17
|
+
* The initial extent defined by the map service. This is the service's default map extent
|
|
18
|
+
* and may differ from its [fullExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/ArcGISMapService/#fullExtent).
|
|
19
|
+
* The service value is available after the layer has loaded.
|
|
20
|
+
*
|
|
21
|
+
* @since 6.0
|
|
22
|
+
*/
|
|
23
|
+
initialExtent?: ExtentProperties | null;
|
|
16
24
|
}
|
|
17
25
|
|
|
18
26
|
/**
|
|
@@ -40,6 +48,15 @@ export abstract class ArcGISMapService {
|
|
|
40
48
|
*/
|
|
41
49
|
get fullExtent(): Extent | null | undefined;
|
|
42
50
|
set fullExtent(value: ExtentProperties | null | undefined);
|
|
51
|
+
/**
|
|
52
|
+
* The initial extent defined by the map service. This is the service's default map extent
|
|
53
|
+
* and may differ from its [fullExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/ArcGISMapService/#fullExtent).
|
|
54
|
+
* The service value is available after the layer has loaded.
|
|
55
|
+
*
|
|
56
|
+
* @since 6.0
|
|
57
|
+
*/
|
|
58
|
+
get initialExtent(): Extent | null | undefined;
|
|
59
|
+
set initialExtent(value: ExtentProperties | null | undefined);
|
|
43
60
|
/**
|
|
44
61
|
* Indicates whether the layer will be included in the legend.
|
|
45
62
|
*
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../request.js";import{some as n}from"../../core/iteratorUtils.js";import{getOrCreateMapValue as r}from"../../core/MapUtils.js";import{throwIfAborted as i}from"../../core/promiseUtils.js";import{join as a}from"../../core/urlUtils.js";import o from"../../core/Version.js";import{property as s,subclass as c}from"../../core/accessorSupport/decorators.js";import l from"../../geometry/Extent.js";import u from"../../geometry/SpatialReference.js";import{parse as d}from"../support/arcgisLayerUrl.js";import{id as f,popupEnabled as p}from"../support/commonProperties.js";import{isHostedLayer as m}from"../../portal/support/portalItemUtils.js";import{reader as h}from"../../core/accessorSupport/decorators/reader.js";const g=g=>{let _=g,v=class extends _{constructor(){super(...arguments),this.capabilities=void 0,this.copyright=null,this.fullExtent=null,this.legendEnabled=!0,this.spatialReference=null,this.version=void 0,this._allLayersAndTablesMap=null}readCapabilities(e,t){let n=t.capabilities&&t.capabilities.split(`,`).map(e=>e.toLowerCase().trim());if(!n)return{operations:{supportsExportMap:!1,supportsExportTiles:!1,supportsIdentify:!1,supportsQuery:!1,supportsTileMap:!1},exportMap:null,exportTiles:null};let r=this.type,i=r!==`tile`&&!!t.supportsDynamicLayers,a=n.includes(`query`),s=n.includes(`map`),c=!!t.exportTilesAllowed,l=n.includes(`tilemap`),u=n.includes(`data`),d=r!==`tile`&&(!t.tileInfo||i),f=r!==`tile`&&(!t.tileInfo||i),p=r!==`tile`,m=r!==`tile`&&i&&t.currentVersion>=11.1,h=t.cimVersion?o.parse(t.cimVersion):null,g=h?.greaterEqual(1,4)??!1,_=h?.greaterEqual(2,0)??!1;return{operations:{supportsExportMap:s,supportsExportTiles:c,supportsIdentify:a,supportsQuery:u,supportsTileMap:l},exportMap:s?{supportsArcadeExpressionForLabeling:g,supportsCIMSymbols:_,supportsDynamicLayers:i,supportsSublayerOrderBy:m,supportsSublayerDefinitionExpression:f,supportsSublayerVisibility:d,supportsSublayersChanges:p}:null,exportTiles:c?{maxExportTilesCount:+t.maxExportTilesCount}:null}}readVersion(e,t){let n=t.currentVersion;return n||=t.hasOwnProperty(`capabilities`)||t.hasOwnProperty(`tables`)?10:t.hasOwnProperty(`supportedImageFormatTypes`)?9.31:9.3,n}async fetchRelatedService(e){let t=this.portalItem;if(!t||!m(t))return null;this._relatedFeatureServicePromise||=t.fetchRelatedItems({relationshipType:`Service2Service`,direction:`reverse`},e).then(e=>e.find(e=>e.type===`Feature Service`)??null,()=>null);let n=await this._relatedFeatureServicePromise;return i(e),n?{itemId:n.id,url:n.url}:null}async fetchSublayerInfo(e,n){let{source:r}=e;if(this?.portalItem&&this.type===`tile`&&r?.type===`map-layer`&&m(this.portalItem)&&e.originIdOf(`url`)<2){let t=await this.fetchRelatedService(n);t&&(e.url=a(t.url,r.mapLayerId.toString()),e.layerItemId=t.itemId)}let{url:i}=e,o;if(r.type===`data-layer`||r.type===`workspace-layer`)o=(await t(i,{responseType:`json`,query:{f:`json`,...this.customParameters,token:this.apiKey},...n})).data;else{let t=e.id;r?.type===`map-layer`&&(t=r.mapLayerId);try{o=(await this.fetchAllLayersAndTables(n)).get(t)}catch{}if(i&&e.originIdOf(`url`)>2)try{let e=await this._fetchAllLayersAndTablesFromService(i),t=d(i)?.sublayer??r.mapLayerId,n=structuredClone(e.get(t));if(n!=null){for(let e of[`drawingInfo`,`maxScale`,`minScale`,`name`])delete n[e];o={...o,...n}}}catch{}}return o}async fetchAllLayersAndTables(e){return this._fetchAllLayersAndTablesFromService(this.parsedUrl?.path,e)}async _fetchAllLayersAndTablesFromService(e,o){await this.load(o),this._allLayersAndTablesMap||=new Map;let s=d(e),c=await r(this._allLayersAndTablesMap,s?.url.path,()=>t(a(s?.url.path,`/layers`),{query:{f:`json`,...this.customParameters,token:this.apiKey}}).then(async e=>{let r=new Map,{layers:i,tables:a}=e.data,o=[...i??[],...a??[]];for(let e of o)r.set(e.id,e);if(n(r.values(),e=>e.capabilities==null||e.extent==null)){let{data:e}=await t(s?.url.path,{query:{f:`json`,...this.customParameters,token:this.apiKey}}).catch(()=>({data:{capabilities:``,fullExtent:void 0}}));for(let t of r.values())t.capabilities??=e.capabilities??``,t.extent??=e.fullExtent}return{result:r}},e=>({error:e})));if(i(o),`result`in c)return c.result;throw c.error}};return e([s({readOnly:!0})],v.prototype,`capabilities`,void 0),e([h(`service`,`capabilities`,[`capabilities`,`cimVersion`,`currentVersion`,`exportTilesAllowed`,`maxExportTilesCount`,`supportsDynamicLayers`,`tileInfo`])],v.prototype,`readCapabilities`,null),e([s({json:{read:{source:`copyrightText`}}})],v.prototype,`copyright`,void 0),e([s({type:l})],v.prototype,`fullExtent`,void 0),e([s(f)],v.prototype,`id`,void 0),e([s({type:Boolean,json:{origins:{service:{read:{enabled:!1}}},read:{source:`showLegend`},write:{target:`showLegend`}}})],v.prototype,`legendEnabled`,void 0),e([s(p)],v.prototype,`popupEnabled`,void 0),e([s({type:u})],v.prototype,`spatialReference`,void 0),e([s({readOnly:!0})],v.prototype,`version`,void 0),e([h(`service`,`version`,[`currentVersion`,`capabilities`,`tables`,`supportedImageFormatTypes`])],v.prototype,`readVersion`,null),v=e([c(`esri.layers.mixins.ArcGISMapService`)],v),v};export{g as ArcGISMapService};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../request.js";import{some as n}from"../../core/iteratorUtils.js";import{getOrCreateMapValue as r}from"../../core/MapUtils.js";import{throwIfAborted as i}from"../../core/promiseUtils.js";import{join as a}from"../../core/urlUtils.js";import o from"../../core/Version.js";import{property as s,subclass as c}from"../../core/accessorSupport/decorators.js";import l from"../../geometry/Extent.js";import u from"../../geometry/SpatialReference.js";import{parse as d}from"../support/arcgisLayerUrl.js";import{id as f,popupEnabled as p}from"../support/commonProperties.js";import{isHostedLayer as m}from"../../portal/support/portalItemUtils.js";import{reader as h}from"../../core/accessorSupport/decorators/reader.js";const g=g=>{let _=g,v=class extends _{constructor(){super(...arguments),this.capabilities=void 0,this.copyright=null,this.fullExtent=null,this.initialExtent=null,this.legendEnabled=!0,this.spatialReference=null,this.version=void 0,this._allLayersAndTablesMap=null}readCapabilities(e,t){let n=t.capabilities&&t.capabilities.split(`,`).map(e=>e.toLowerCase().trim());if(!n)return{operations:{supportsExportMap:!1,supportsExportTiles:!1,supportsIdentify:!1,supportsQuery:!1,supportsTileMap:!1},exportMap:null,exportTiles:null};let r=this.type,i=r!==`tile`&&!!t.supportsDynamicLayers,a=n.includes(`query`),s=n.includes(`map`),c=!!t.exportTilesAllowed,l=n.includes(`tilemap`),u=n.includes(`data`),d=r!==`tile`&&(!t.tileInfo||i),f=r!==`tile`&&(!t.tileInfo||i),p=r!==`tile`,m=r!==`tile`&&i&&t.currentVersion>=11.1,h=t.cimVersion?o.parse(t.cimVersion):null,g=h?.greaterEqual(1,4)??!1,_=h?.greaterEqual(2,0)??!1;return{operations:{supportsExportMap:s,supportsExportTiles:c,supportsIdentify:a,supportsQuery:u,supportsTileMap:l},exportMap:s?{supportsArcadeExpressionForLabeling:g,supportsCIMSymbols:_,supportsDynamicLayers:i,supportsSublayerOrderBy:m,supportsSublayerDefinitionExpression:f,supportsSublayerVisibility:d,supportsSublayersChanges:p}:null,exportTiles:c?{maxExportTilesCount:+t.maxExportTilesCount}:null}}readVersion(e,t){let n=t.currentVersion;return n||=t.hasOwnProperty(`capabilities`)||t.hasOwnProperty(`tables`)?10:t.hasOwnProperty(`supportedImageFormatTypes`)?9.31:9.3,n}async fetchRelatedService(e){let t=this.portalItem;if(!t||!m(t))return null;this._relatedFeatureServicePromise||=t.fetchRelatedItems({relationshipType:`Service2Service`,direction:`reverse`},e).then(e=>e.find(e=>e.type===`Feature Service`)??null,()=>null);let n=await this._relatedFeatureServicePromise;return i(e),n?{itemId:n.id,url:n.url}:null}async fetchSublayerInfo(e,n){let{source:r}=e;if(this?.portalItem&&this.type===`tile`&&r?.type===`map-layer`&&m(this.portalItem)&&e.originIdOf(`url`)<2){let t=await this.fetchRelatedService(n);t&&(e.url=a(t.url,r.mapLayerId.toString()),e.layerItemId=t.itemId)}let{url:i}=e,o;if(r.type===`data-layer`||r.type===`workspace-layer`)o=(await t(i,{responseType:`json`,query:{f:`json`,...this.customParameters,token:this.apiKey},...n})).data;else{let t=e.id;r?.type===`map-layer`&&(t=r.mapLayerId);try{o=(await this.fetchAllLayersAndTables(n)).get(t)}catch{}if(i&&e.originIdOf(`url`)>2)try{let e=await this._fetchAllLayersAndTablesFromService(i),t=d(i)?.sublayer??r.mapLayerId,n=structuredClone(e.get(t));if(n!=null){for(let e of[`drawingInfo`,`maxScale`,`minScale`,`name`])delete n[e];o={...o,...n}}}catch{}}return o}async fetchAllLayersAndTables(e){return this._fetchAllLayersAndTablesFromService(this.parsedUrl?.path,e)}async _fetchAllLayersAndTablesFromService(e,o){await this.load(o),this._allLayersAndTablesMap||=new Map;let s=d(e),c=await r(this._allLayersAndTablesMap,s?.url.path,()=>t(a(s?.url.path,`/layers`),{query:{f:`json`,...this.customParameters,token:this.apiKey}}).then(async e=>{let r=new Map,{layers:i,tables:a}=e.data,o=[...i??[],...a??[]];for(let e of o)r.set(e.id,e);if(n(r.values(),e=>e.capabilities==null||e.extent==null)){let{data:e}=await t(s?.url.path,{query:{f:`json`,...this.customParameters,token:this.apiKey}}).catch(()=>({data:{capabilities:``,fullExtent:void 0}}));for(let t of r.values())t.capabilities??=e.capabilities??``,t.extent??=e.fullExtent}return{result:r}},e=>({error:e})));if(i(o),`result`in c)return c.result;throw c.error}};return e([s({readOnly:!0})],v.prototype,`capabilities`,void 0),e([h(`service`,`capabilities`,[`capabilities`,`cimVersion`,`currentVersion`,`exportTilesAllowed`,`maxExportTilesCount`,`supportsDynamicLayers`,`tileInfo`])],v.prototype,`readCapabilities`,null),e([s({json:{read:{source:`copyrightText`}}})],v.prototype,`copyright`,void 0),e([s({type:l})],v.prototype,`fullExtent`,void 0),e([s(f)],v.prototype,`id`,void 0),e([s({type:l})],v.prototype,`initialExtent`,void 0),e([s({type:Boolean,json:{origins:{service:{read:{enabled:!1}}},read:{source:`showLegend`},write:{target:`showLegend`}}})],v.prototype,`legendEnabled`,void 0),e([s(p)],v.prototype,`popupEnabled`,void 0),e([s({type:u})],v.prototype,`spatialReference`,void 0),e([s({readOnly:!0})],v.prototype,`version`,void 0),e([h(`service`,`version`,[`currentVersion`,`capabilities`,`tables`,`supportedImageFormatTypes`])],v.prototype,`readVersion`,null),v=e([c(`esri.layers.mixins.ArcGISMapService`)],v),v};export{g as ArcGISMapService};
|
package/layers/ogc/wfsUtils.d.ts
CHANGED
|
@@ -72,8 +72,13 @@ export interface WFSOperationsDescribeFeatureType {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
export interface WFSOperationsGetFeature {
|
|
75
|
-
/**
|
|
76
|
-
|
|
75
|
+
/**
|
|
76
|
+
* The number of features to return by default.
|
|
77
|
+
* For many WFS servers, it also corresponds to the maximum number of features the service will return in a single request.
|
|
78
|
+
*
|
|
79
|
+
* @since 6.0
|
|
80
|
+
*/
|
|
81
|
+
countDefault?: number;
|
|
77
82
|
/** Value of the geojson-like output format parameter (if any) to send with the GetFeature call. */
|
|
78
83
|
outputFormat: string | null;
|
|
79
84
|
/** Indicates if the GetFeature request supports pagination. */
|
package/layers/ogc/wfsUtils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
import e from"../../request.js";import t from"../../core/Error.js";import{find as n,cache as r}from"../../core/iteratorUtils.js";import{isHTTPSProtocol as i,hasSameOrigin as a,toHTTPS as o}from"../../core/urlUtils.js";import s from"../../geometry/Extent.js";import{initializeProjection as c,project as l}from"../../geometry/projectionUtils.js";import u from"../../geometry/SpatialReference.js";import{equals as d,wgs84 as f}from"../../geometry/support/spatialReferenceUtils.js";import{featureGeometryTypeKebabDictionary as p}from"../../geometry/support/typeUtils.js";import{getGeometryType as m}from"../graphics/sources/geojson/geojson.js";import{visitXML as h,iterateXML as g}from"./xmlUtils.js";import{isArcGISUrl as _}from"../support/arcgisLayerUrl.js";import v from"../support/Field.js";import{getFieldDefaultLength as y}from"../support/fieldUtils.js";const b=`xlink:href`,x=`2.0.0`,S=`__esri_wfs_id__`,C=`wfs-layer:feature-type-not-found`,w=`wfs-layer:unknown-geometry-type`;async function T(t,n){let r=E((await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`GetCapabilities`,VERSION:x,...n?.customParameters},signal:n?.signal})).data);return A(t,r),r}function E(e){let t=q(e);Y(t),X(t);let n=t.firstElementChild,i=r(M(n));return{operations:k(n),get featureTypes(){return Array.from(i())},readFeatureTypes:i}}const D=[`json`,`application/json; subtype=geojson; charset=utf-8`,`application/json; subtype=geojson`,`application/json`,`geojson`,`application/geo+json`];function O(e){for(let t of D){let n=e.findIndex(e=>e.toLowerCase()===t);if(n>=0)return e[n]}return null}function k(e){let n=!0,r={GetCapabilities:{url:``},DescribeFeatureType:{url:``},GetFeature:{url:``,outputFormat:null,supportsPagination:!1}},i=[],a=[];if(h(e,{OperationsMetadata:{Parameter:e=>{if(e.getAttribute(`name`)?.toLowerCase()===`outputformat`)return{AllowedValues:{Value:({textContent:e})=>{e&&i.push(e)}}}},Operation:e=>{switch(e.getAttribute(`name`)){case`GetCapabilities`:return{DCP:{HTTP:{Get:e=>{r.GetCapabilities.url=e.getAttribute(b)}}}};case`DescribeFeatureType`:return{DCP:{HTTP:{Get:e=>{r.DescribeFeatureType.url=e.getAttribute(b)}}}};case`GetFeature`:return{DCP:{HTTP:{Get:e=>{r.GetFeature.url=e.getAttribute(b)}}},Parameter:e=>{if(e.getAttribute(`name`)?.toLowerCase()===`outputformat`)return{AllowedValues:{Value:({textContent:e})=>{e&&a.push(e)}}}}}}},Constraint:e=>{switch(e.getAttribute(`name`)){case`KVPEncoding`:return{DefaultValue:e=>{n=e.textContent.toLowerCase()===`true`}};case`ImplementsResultPaging`:return{DefaultValue:e=>{r.GetFeature.supportsPagination=e.textContent.toLowerCase()===`true`}}}}}}),r.GetFeature.outputFormat=O(a)??O(i),!n)throw new t(`wfs-layer:kvp-encoding-not-supported`,`WFS service doesn't support key/value pair (KVP) encoding`);if(r.GetFeature.outputFormat==null)throw new t(`wfs-layer:geojson-not-supported`,`WFS service doesn't support GeoJSON output format`);return r}function A(e,t){i(e)&&(a(e,t.operations.DescribeFeatureType.url,!0)&&(t.operations.DescribeFeatureType.url=o(t.operations.DescribeFeatureType.url)),a(e,t.operations.GetFeature.url,!0)&&(t.operations.GetFeature.url=o(t.operations.GetFeature.url)))}function j(e){let t=parseInt(e.textContent?.match(/(?<wkid>\d+$)/i)?.groups?.wkid??``,10);if(!Number.isNaN(t))return t}function M(e){return g(e,{FeatureTypeList:{FeatureType:e=>{let t={typeName:`undefined:undefined`,name:``,title:``,description:``,extent:null,namespacePrefix:``,namespaceUri:``,defaultSpatialReference:4326,supportedSpatialReferences:[]},n=new Set;return h(e,{Name:e=>{let{name:n,prefix:r}=J(e.textContent);t.typeName=`${r}:${n}`,t.name=n,t.namespacePrefix=r,t.namespaceUri=e.lookupNamespaceURI(r)},Abstract:e=>{t.description=e.textContent},Title:e=>{t.title=e.textContent},WGS84BoundingBox:e=>{t.extent=s.fromJSON(N(e))},DefaultCRS:e=>{let r=j(e);r&&(t.defaultSpatialReference=r,n.add(r))},OtherCRS:e=>{let t=j(e);t&&n.add(t)}}),t.title||=t.name,n.add(4326),t.supportedSpatialReferences.push(...n),t}}})}function N(e){let t,n,r,i;for(let a of e.children)switch(a.localName){case`LowerCorner`:[t,n]=a.textContent.split(` `).map(e=>Number.parseFloat(e));break;case`UpperCorner`:[r,i]=a.textContent.split(` `).map(e=>Number.parseFloat(e))}return{xmin:t,ymin:n,xmax:r,ymax:i,spatialReference:f}}function P(e,t,r){return n(e,e=>r?e.name===t&&e.namespaceUri===r:e.typeName===t||e.name===t)}async function F(e,t,n,r={}){let{featureType:i,extent:a}=await I(e,t,n,r),{spatialReference:o}=Z(e.operations.GetFeature.url,i,r.spatialReference),{fields:s,geometryType:c,swapXY:l,objectIdField:d,geometryField:f}=await L(e,i,o,r);return{url:e.operations.GetCapabilities.url,name:i.name,namespaceUri:i.namespaceUri,fields:s,geometryField:f,geometryType:c,objectIdField:d,spatialReference:r.spatialReference??new u({wkid:i.defaultSpatialReference}),extent:a,swapXY:l,wfsCapabilities:e,customParameters:r.customParameters}}async function I(e,n,r,i={}){let a=e.readFeatureTypes(),o=n?P(a,n,r):a.next().value,{spatialReference:s=new u({wkid:o?.defaultSpatialReference})}=i;if(o==null)throw n?new t(C,`The type '${n}' could not be found in the service`):new t(`wfs-layer:empty-service`,`The service is empty`);let f=o.extent;if(f&&!d(f.spatialReference,s))try{await c(f.spatialReference,s,void 0,i),f=l(f,s)}catch{throw new t(`wfs-layer:unsupported-spatial-reference`,`Projection not supported`)}return{extent:f,spatialReference:s,featureType:o}}async function L(e,n,r,i={}){let{typeName:a}=n,[o,s]=await Promise.allSettled([B(e.operations.DescribeFeatureType.url,a,i),z(e,a,r,i)]),c=e=>{let n=`An error occurred while getting info about the feature type '${a}'`;return new t(`wfs-layer:getWFSLayerTypeInfo-error`,n,{error:e})};if(o.status===`rejected`)throw c(o.reason);if(s.status===`rejected`)throw c(s.reason);let{fields:l,errors:u}=o.value??{},d=o.value?.geometryType||s.value?.geometryType,f=s.value?.swapXY??!1;if(d==null)throw new t(w,`The geometry type could not be determined for type '${a}`,{typeName:a,geometryType:d,fields:l,errors:u});return{...R(l??[]),geometryType:d,swapXY:f}}function R(e){let t=e.find(e=>e.type===`geometry`),n=e.find(e=>e.type===`oid`);return e=e.filter(e=>e.type!==`geometry`),n||(n=new v({name:S,type:`oid`,alias:S}),e.unshift(n)),{geometryField:t?.name??null,objectIdField:n.name,fields:e}}async function z(t,n,r,i={}){let a,o=!1,[s,c]=await Promise.all([W(t.operations.GetFeature.url,n,r,t.operations.GetFeature.outputFormat,{...i,count:1}),e(t.operations.GetFeature.url,{responseType:`text`,query:G(n,r,void 0,{...i,count:1}),signal:i?.signal})]),l=s.type===`FeatureCollection`&&s.features[0]?.geometry;if(l){a=p.fromJSON(m(l.type));let e;switch(l.type){case`Point`:e=l.coordinates;break;case`LineString`:case`MultiPoint`:e=l.coordinates[0];break;case`MultiLineString`:case`Polygon`:e=l.coordinates[0][0];break;case`MultiPolygon`:e=l.coordinates[0][0][0]}let t=/<[^>]*pos[^>]*> *(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/.exec(c.data);if(t){let n=e[0].toFixed(3),r=e[1].toFixed(3),i=parseFloat(t[1]).toFixed(3);n===parseFloat(t[2]).toFixed(3)&&r===i&&(o=!0)}}return{geometryType:a,swapXY:o}}async function B(t,n,r){return V(n,(await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`DescribeFeatureType`,VERSION:x,TYPENAME:n,TYPENAMES:n,...r?.customParameters},signal:r?.signal})).data)}function V(e,r){let{name:i}=J(e),a=q(r);X(a);let o=n(g(a.firstElementChild,{element:e=>e}),e=>e.getAttribute(`name`)===i);if(o!=null){let e=o.getAttribute(`type`),t=e?n(g(a.firstElementChild,{complexType:e=>e}),t=>t.getAttribute(`name`)===J(e).name):n(g(o,{complexType:e=>e}),()=>!0);if(t)return U(t)}throw new t(C,`Type '${e}' not found in document`,{document:new XMLSerializer().serializeToString(a)})}const H=new Set([`objectid`,`fid`]);function U(e){let n=[],r=[],i,a=g(e,{complexContent:{extension:{sequence:{element:e=>e}}}});for(let o of a){let a=o.getAttribute(`name`);if(!a)continue;let s,c;if(o.hasAttribute(`type`)?s=J(o.getAttribute(`type`)).name:h(o,{simpleType:{restriction:e=>(s=J(e.getAttribute(`base`)).name,{maxLength:e=>{c=+e.getAttribute(`value`)}})}}),!s)continue;let l=o.getAttribute(`nillable`)===`true`,u=!1;switch(s.toLowerCase()){case`integer`:case`nonpositiveinteger`:case`negativeinteger`:case`long`:case`int`:case`short`:case`byte`:case`nonnegativeinteger`:case`unsignedlong`:case`unsignedint`:case`unsignedshort`:case`unsignedbyte`:case`positiveinteger`:r.push(new v({name:a,alias:a,type:`integer`,nullable:l,length:y(`integer`)}));break;case`float`:case`double`:case`decimal`:r.push(new v({name:a,alias:a,type:`double`,nullable:l,length:y(`double`)}));break;case`boolean`:case`string`:case`gyearmonth`:case`gyear`:case`gmonthday`:case`gday`:case`gmonth`:case`anyuri`:case`qname`:case`notation`:case`normalizedstring`:case`token`:case`language`:case`idrefs`:case`entities`:case`nmtoken`:case`nmtokens`:case`name`:case`ncname`:case`id`:case`idref`:case`entity`:case`duration`:case`time`:r.push(new v({name:a,alias:a,type:`string`,nullable:l,length:c??y(`string`)}));break;case`datetime`:case`date`:r.push(new v({name:a,alias:a,type:`date`,nullable:l,length:c??y(`date`)}));break;case`pointpropertytype`:i=`point`,u=!0;break;case`multipointpropertytype`:i=`multipoint`,u=!0;break;case`curvepropertytype`:case`multicurvepropertytype`:case`multilinestringpropertytype`:i=`polyline`,u=!0;break;case`surfacepropertytype`:case`multisurfacepropertytype`:case`multipolygonpropertytype`:i=`polygon`,u=!0;break;case`geometrypropertytype`:case`multigeometrypropertytype`:u=!0,n.push(new t(w,`geometry type '${s}' is not supported`,{type:new XMLSerializer().serializeToString(e)}));break;default:n.push(new t(`wfs-layer:unknown-field-type`,`Unknown field type '${s}'`,{type:new XMLSerializer().serializeToString(e)}))}u&&r.push(new v({name:a,alias:a,type:`geometry`,nullable:l}))}for(let e of r)if(e.type===`integer`&&!e.nullable&&H.has(e.name.toLowerCase())){e.type=`oid`;break}return{geometryType:i,fields:r,errors:n}}async function W(n,r,i,a,o){let{data:s}=await e(n,{responseType:`text`,query:G(r,i,a,o),signal:o?.signal});s=s.replaceAll(/": +(-?\d+),(\d+)(,)?/g,`": $1.$2$3`);try{return JSON.parse(s)}catch(e){throw new t(`wfs-layer:malformed-json`,`Error while parsing the\xA0response`,{response:s,error:e})}}function G(e,t,n,r){let i=typeof t==`number`?t:t.wkid;return{SERVICE:`WFS`,REQUEST:`GetFeature`,VERSION:x,TYPENAMES:e,OUTPUTFORMAT:n,SRSNAME:`EPSG:`+i,STARTINDEX:r?.startIndex,COUNT:r?.count,...r?.customParameters}}async function K(t,n,r){let i=await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`GetFeature`,VERSION:x,TYPENAMES:n,RESULTTYPE:`hits`,...r?.customParameters},signal:r?.signal}),a=/numberMatched=["'](?<numberMatched>\d+)["']/gi.exec(i.data);if(a?.groups)return+a.groups.numberMatched}function q(e){return new DOMParser().parseFromString(e.trim(),`text/xml`)}function J(e){let[t,n]=e.split(`:`);return{prefix:n?t:``,name:n??t}}function Y(e){let n=e.firstElementChild?.getAttribute(`version`);if(n&&n!==x)throw new t(`wfs-layer:unsupported-wfs-version`,`Unsupported WFS version ${n}. Supported version: ${x}`)}function X(e){let n=``,r=``;if(h(e.firstElementChild,{Exception:e=>(n=e.getAttribute(`exceptionCode`),{ExceptionText:e=>{r=e.textContent}})}),n)throw new t(`wfs-layer:${n}`,r)}function Z(e,t,n){let r={wkid:t.defaultSpatialReference},i=n?.wkid==null?r:{wkid:n.wkid};return{spatialReference:i,getFeatureSpatialReference:_(e)||i.wkid&&t.supportedSpatialReferences.includes(i.wkid)?{wkid:i.wkid}:{wkid:t.defaultSpatialReference}}}export{B as describeFeatureType,P as findFeatureType,T as getCapabilities,W as getFeature,K as getFeatureCount,I as getFeatureTypeInfo,Z as getGetFeatureSpatialReference,F as getWFSLayerInfo,V as parseDescribeFeatureTypeResponse,E as parseGetCapabilitiesResponse,R as prepareWFSLayerFields,S as wfsOidFieldName};
|
|
2
|
+
import e from"../../request.js";import t from"../../core/Error.js";import{find as n,cache as r}from"../../core/iteratorUtils.js";import{isHTTPSProtocol as i,hasSameOrigin as a,toHTTPS as o}from"../../core/urlUtils.js";import s from"../../geometry/Extent.js";import{initializeProjection as c,project as l}from"../../geometry/projectionUtils.js";import u from"../../geometry/SpatialReference.js";import{equals as d,wgs84 as f}from"../../geometry/support/spatialReferenceUtils.js";import{featureGeometryTypeKebabDictionary as p}from"../../geometry/support/typeUtils.js";import{getGeometryType as m}from"../graphics/sources/geojson/geojson.js";import{visitXML as h,iterateXML as g,readInteger as _}from"./xmlUtils.js";import{isArcGISUrl as v}from"../support/arcgisLayerUrl.js";import y from"../support/Field.js";import{getFieldDefaultLength as b}from"../support/fieldUtils.js";const x=`xlink:href`,S=`2.0.0`,C=`__esri_wfs_id__`,w=`wfs-layer:feature-type-not-found`,T=`wfs-layer:unknown-geometry-type`;async function E(t,n){let r=D((await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`GetCapabilities`,VERSION:S,...n?.customParameters},signal:n?.signal})).data);return j(t,r),r}function D(e){let t=J(e);X(t),Z(t);let n=t.firstElementChild,i=r(N(n));return{operations:A(n),get featureTypes(){return Array.from(i())},readFeatureTypes:i}}const O=[`json`,`application/json; subtype=geojson; charset=utf-8`,`application/json; subtype=geojson`,`application/json`,`geojson`,`application/geo+json`];function k(e){for(let t of O){let n=e.findIndex(e=>e.toLowerCase()===t);if(n>=0)return e[n]}return null}function A(e){let n=!0,r={GetCapabilities:{url:``},DescribeFeatureType:{url:``},GetFeature:{url:``,outputFormat:null,supportsPagination:!1,countDefault:void 0}},i=[],a=[],o,s;if(h(e,{OperationsMetadata:{Parameter:e=>{if(e.getAttribute(`name`)?.toLowerCase()===`outputformat`)return{AllowedValues:{Value:({textContent:e})=>{e&&i.push(e)}}}},Operation:e=>{switch(e.getAttribute(`name`)){case`GetCapabilities`:return{DCP:{HTTP:{Get:e=>{r.GetCapabilities.url=e.getAttribute(x)}}}};case`DescribeFeatureType`:return{DCP:{HTTP:{Get:e=>{r.DescribeFeatureType.url=e.getAttribute(x)}}}};case`GetFeature`:return{Constraint:e=>{if(e.getAttribute(`name`)===`CountDefault`)return{DefaultValue:e=>{let t=_(e);s=t!=null&&t>0?t:void 0}}},DCP:{HTTP:{Get:e=>{r.GetFeature.url=e.getAttribute(x)}}},Parameter:e=>{if(e.getAttribute(`name`)?.toLowerCase()===`outputformat`)return{AllowedValues:{Value:({textContent:e})=>{e&&a.push(e)}}}}}}},Constraint:e=>{switch(e.getAttribute(`name`)){case`CountDefault`:return{DefaultValue:e=>{let t=_(e);o=t!=null&&t>0?t:void 0}};case`KVPEncoding`:return{DefaultValue:e=>{n=e.textContent.toLowerCase()===`true`}};case`ImplementsResultPaging`:return{DefaultValue:e=>{r.GetFeature.supportsPagination=e.textContent.toLowerCase()===`true`}}}}}}),r.GetFeature.outputFormat=k(a)??k(i),r.GetFeature.countDefault=s??o,!n)throw new t(`wfs-layer:kvp-encoding-not-supported`,`WFS service doesn't support key/value pair (KVP) encoding`);if(r.GetFeature.outputFormat==null)throw new t(`wfs-layer:geojson-not-supported`,`WFS service doesn't support GeoJSON output format`);return r}function j(e,t){i(e)&&(a(e,t.operations.DescribeFeatureType.url,!0)&&(t.operations.DescribeFeatureType.url=o(t.operations.DescribeFeatureType.url)),a(e,t.operations.GetFeature.url,!0)&&(t.operations.GetFeature.url=o(t.operations.GetFeature.url)))}function M(e){let t=parseInt(e.textContent?.match(/(?<wkid>\d+$)/i)?.groups?.wkid??``,10);if(!Number.isNaN(t))return t}function N(e){return g(e,{FeatureTypeList:{FeatureType:e=>{let t={typeName:`undefined:undefined`,name:``,title:``,description:``,extent:null,namespacePrefix:``,namespaceUri:``,defaultSpatialReference:4326,supportedSpatialReferences:[]},n=new Set;return h(e,{Name:e=>{let{name:n,prefix:r}=Y(e.textContent);t.typeName=`${r}:${n}`,t.name=n,t.namespacePrefix=r,t.namespaceUri=e.lookupNamespaceURI(r)},Abstract:e=>{t.description=e.textContent},Title:e=>{t.title=e.textContent},WGS84BoundingBox:e=>{t.extent=s.fromJSON(P(e))},DefaultCRS:e=>{let r=M(e);r&&(t.defaultSpatialReference=r,n.add(r))},OtherCRS:e=>{let t=M(e);t&&n.add(t)}}),t.title||=t.name,n.add(4326),t.supportedSpatialReferences.push(...n),t}}})}function P(e){let t,n,r,i;for(let a of e.children)switch(a.localName){case`LowerCorner`:[t,n]=a.textContent.split(` `).map(e=>Number.parseFloat(e));break;case`UpperCorner`:[r,i]=a.textContent.split(` `).map(e=>Number.parseFloat(e))}return{xmin:t,ymin:n,xmax:r,ymax:i,spatialReference:f}}function F(e,t,r){return n(e,e=>r?e.name===t&&e.namespaceUri===r:e.typeName===t||e.name===t)}async function I(e,t,n,r={}){let{featureType:i,extent:a}=await L(e,t,n,r),{spatialReference:o}=Q(e.operations.GetFeature.url,i,r.spatialReference),{fields:s,geometryType:c,swapXY:l,objectIdField:d,geometryField:f}=await R(e,i,o,r);return{url:e.operations.GetCapabilities.url,name:i.name,namespaceUri:i.namespaceUri,fields:s,geometryField:f,geometryType:c,objectIdField:d,spatialReference:r.spatialReference??new u({wkid:i.defaultSpatialReference}),extent:a,swapXY:l,wfsCapabilities:e,customParameters:r.customParameters}}async function L(e,n,r,i={}){let a=e.readFeatureTypes(),o=n?F(a,n,r):a.next().value,{spatialReference:s=new u({wkid:o?.defaultSpatialReference})}=i;if(o==null)throw n?new t(w,`The type '${n}' could not be found in the service`):new t(`wfs-layer:empty-service`,`The service is empty`);let f=o.extent;if(f&&!d(f.spatialReference,s))try{await c(f.spatialReference,s,void 0,i),f=l(f,s)}catch{throw new t(`wfs-layer:unsupported-spatial-reference`,`Projection not supported`)}return{extent:f,spatialReference:s,featureType:o}}async function R(e,n,r,i={}){let{typeName:a}=n,[o,s]=await Promise.allSettled([V(e.operations.DescribeFeatureType.url,a,i),B(e,a,r,i)]),c=e=>{let n=`An error occurred while getting info about the feature type '${a}'`;return new t(`wfs-layer:getWFSLayerTypeInfo-error`,n,{error:e})};if(o.status===`rejected`)throw c(o.reason);if(s.status===`rejected`)throw c(s.reason);let{fields:l,errors:u}=o.value??{},d=o.value?.geometryType||s.value?.geometryType,f=s.value?.swapXY??!1;if(d==null)throw new t(T,`The geometry type could not be determined for type '${a}`,{typeName:a,geometryType:d,fields:l,errors:u});return{...z(l??[]),geometryType:d,swapXY:f}}function z(e){let t=e.find(e=>e.type===`geometry`),n=e.find(e=>e.type===`oid`);return e=e.filter(e=>e.type!==`geometry`),n||(n=new y({name:C,type:`oid`,alias:C}),e.unshift(n)),{geometryField:t?.name??null,objectIdField:n.name,fields:e}}async function B(t,n,r,i={}){let a,o=!1,[s,c]=await Promise.all([G(t.operations.GetFeature.url,n,r,t.operations.GetFeature.outputFormat,{...i,count:1}),e(t.operations.GetFeature.url,{responseType:`text`,query:K(n,r,void 0,{...i,count:1}),signal:i?.signal})]),l=s.type===`FeatureCollection`&&s.features[0]?.geometry;if(l){a=p.fromJSON(m(l.type));let e;switch(l.type){case`Point`:e=l.coordinates;break;case`LineString`:case`MultiPoint`:e=l.coordinates[0];break;case`MultiLineString`:case`Polygon`:e=l.coordinates[0][0];break;case`MultiPolygon`:e=l.coordinates[0][0][0]}let t=/<[^>]*pos[^>]*> *(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/.exec(c.data);if(t){let n=e[0].toFixed(3),r=e[1].toFixed(3),i=parseFloat(t[1]).toFixed(3);n===parseFloat(t[2]).toFixed(3)&&r===i&&(o=!0)}}return{geometryType:a,swapXY:o}}async function V(t,n,r){return H(n,(await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`DescribeFeatureType`,VERSION:S,TYPENAME:n,TYPENAMES:n,...r?.customParameters},signal:r?.signal})).data)}function H(e,r){let{name:i}=Y(e),a=J(r);Z(a);let o=n(g(a.firstElementChild,{element:e=>e}),e=>e.getAttribute(`name`)===i);if(o!=null){let e=o.getAttribute(`type`),t=e?n(g(a.firstElementChild,{complexType:e=>e}),t=>t.getAttribute(`name`)===Y(e).name):n(g(o,{complexType:e=>e}),()=>!0);if(t)return W(t)}throw new t(w,`Type '${e}' not found in document`,{document:new XMLSerializer().serializeToString(a)})}const U=new Set([`objectid`,`fid`]);function W(e){let n=[],r=[],i,a=g(e,{complexContent:{extension:{sequence:{element:e=>e}}}});for(let o of a){let a=o.getAttribute(`name`);if(!a)continue;let s,c;if(o.hasAttribute(`type`)?s=Y(o.getAttribute(`type`)).name:h(o,{simpleType:{restriction:e=>(s=Y(e.getAttribute(`base`)).name,{maxLength:e=>{c=+e.getAttribute(`value`)}})}}),!s)continue;let l=o.getAttribute(`nillable`)===`true`,u=!1;switch(s.toLowerCase()){case`integer`:case`nonpositiveinteger`:case`negativeinteger`:case`long`:case`int`:case`short`:case`byte`:case`nonnegativeinteger`:case`unsignedlong`:case`unsignedint`:case`unsignedshort`:case`unsignedbyte`:case`positiveinteger`:r.push(new y({name:a,alias:a,type:`integer`,nullable:l,length:b(`integer`)}));break;case`float`:case`double`:case`decimal`:r.push(new y({name:a,alias:a,type:`double`,nullable:l,length:b(`double`)}));break;case`boolean`:case`string`:case`gyearmonth`:case`gyear`:case`gmonthday`:case`gday`:case`gmonth`:case`anyuri`:case`qname`:case`notation`:case`normalizedstring`:case`token`:case`language`:case`idrefs`:case`entities`:case`nmtoken`:case`nmtokens`:case`name`:case`ncname`:case`id`:case`idref`:case`entity`:case`duration`:case`time`:r.push(new y({name:a,alias:a,type:`string`,nullable:l,length:c??b(`string`)}));break;case`datetime`:case`date`:r.push(new y({name:a,alias:a,type:`date`,nullable:l,length:c??b(`date`)}));break;case`pointpropertytype`:i=`point`,u=!0;break;case`multipointpropertytype`:i=`multipoint`,u=!0;break;case`curvepropertytype`:case`multicurvepropertytype`:case`multilinestringpropertytype`:i=`polyline`,u=!0;break;case`surfacepropertytype`:case`multisurfacepropertytype`:case`multipolygonpropertytype`:i=`polygon`,u=!0;break;case`geometrypropertytype`:case`multigeometrypropertytype`:u=!0,n.push(new t(T,`geometry type '${s}' is not supported`,{type:new XMLSerializer().serializeToString(e)}));break;default:n.push(new t(`wfs-layer:unknown-field-type`,`Unknown field type '${s}'`,{type:new XMLSerializer().serializeToString(e)}))}u&&r.push(new y({name:a,alias:a,type:`geometry`,nullable:l}))}for(let e of r)if(e.type===`integer`&&!e.nullable&&U.has(e.name.toLowerCase())){e.type=`oid`;break}return{geometryType:i,fields:r,errors:n}}async function G(n,r,i,a,o){let{data:s}=await e(n,{responseType:`text`,query:K(r,i,a,o),signal:o?.signal});s=s.replaceAll(/": +(-?\d+),(\d+)(,)?/g,`": $1.$2$3`);try{return JSON.parse(s)}catch(e){throw new t(`wfs-layer:malformed-json`,`Error while parsing the\xA0response`,{response:s,error:e})}}function K(e,t,n,r){let i=typeof t==`number`?t:t.wkid;return{SERVICE:`WFS`,REQUEST:`GetFeature`,VERSION:S,TYPENAMES:e,OUTPUTFORMAT:n,SRSNAME:`EPSG:`+i,STARTINDEX:r?.startIndex,COUNT:r?.count,...r?.customParameters}}async function q(t,n,r){let i=await e(t,{responseType:`text`,query:{SERVICE:`WFS`,REQUEST:`GetFeature`,VERSION:S,TYPENAMES:n,RESULTTYPE:`hits`,...r?.customParameters},signal:r?.signal}),a=/numberMatched=["'](?<numberMatched>\d+)["']/gi.exec(i.data);if(a?.groups)return+a.groups.numberMatched}function J(e){return new DOMParser().parseFromString(e.trim(),`text/xml`)}function Y(e){let[t,n]=e.split(`:`);return{prefix:n?t:``,name:n??t}}function X(e){let n=e.firstElementChild?.getAttribute(`version`);if(n&&n!==S)throw new t(`wfs-layer:unsupported-wfs-version`,`Unsupported WFS version ${n}. Supported version: ${S}`)}function Z(e){let n=``,r=``;if(h(e.firstElementChild,{Exception:e=>(n=e.getAttribute(`exceptionCode`),{ExceptionText:e=>{r=e.textContent}})}),n)throw new t(`wfs-layer:${n}`,r)}function Q(e,t,n){let r={wkid:t.defaultSpatialReference},i=n?.wkid==null?r:{wkid:n.wkid};return{spatialReference:i,getFeatureSpatialReference:v(e)||i.wkid&&t.supportedSpatialReferences.includes(i.wkid)?{wkid:i.wkid}:{wkid:t.defaultSpatialReference}}}export{V as describeFeatureType,F as findFeatureType,E as getCapabilities,G as getFeature,q as getFeatureCount,L as getFeatureTypeInfo,Q as getGetFeatureSpatialReference,I as getWFSLayerInfo,H as parseDescribeFeatureTypeResponse,D as parseGetCapabilitiesResponse,z as prepareWFSLayerFields,C as wfsOidFieldName};
|
package/layers/ogc/xmlUtils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
|
|
2
|
-
function e(t,n){if(t&&n){for(let r of t.children)if(r.localName in n){let t=n[r.localName];if(typeof t==`function`){let n=t(r);n&&e(r,n)}else e(r,t)}}}function*t(e,n){for(let r of e.children)if(r.localName in n){let e=n[r.localName];typeof e==`function`?yield e(r):yield*t(r,e)}}export{t as iterateXML,e as visitXML};
|
|
2
|
+
function e(t,n){if(t&&n){for(let r of t.children)if(r.localName in n){let t=n[r.localName];if(typeof t==`function`){let n=t(r);n&&e(r,n)}else e(r,t)}}}function*t(e,n){for(let r of e.children)if(r.localName in n){let e=n[r.localName];typeof e==`function`?yield e(r):yield*t(r,e)}}function n(e){let t=e.textContent?.trim()??``,n=/^[+-]?\d+$/.test(t)?Number(t):NaN;return Number.isSafeInteger(n)?n:void 0}export{t as iterateXML,n as readInteger,e as visitXML};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcgis/core",
|
|
3
|
-
"version": "6.0.0-next.
|
|
3
|
+
"version": "6.0.0-next.34",
|
|
4
4
|
"description": "ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ArcGIS",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@amcharts/amcharts5": "~5.21.5",
|
|
23
|
-
"@arcgis/toolkit": "6.0.0-next.
|
|
24
|
-
"@esri/arcgis-html-sanitizer": "~4.2.0
|
|
25
|
-
"@esri/calcite-components": "^5.2.
|
|
23
|
+
"@arcgis/toolkit": "6.0.0-next.34",
|
|
24
|
+
"@esri/arcgis-html-sanitizer": "~4.2.0",
|
|
25
|
+
"@esri/calcite-components": "^5.2.1",
|
|
26
26
|
"@vaadin/grid": "~25.3.5",
|
|
27
27
|
"@zip.js/zip.js": "~2.24.0",
|
|
28
28
|
"luxon": "~3.7.2",
|
package/rest/route.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* @see [RouteResult](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RouteResult/)
|
|
14
14
|
* @see [RouteSolveResult](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RouteSolveResult/)
|
|
15
15
|
* @see [RouteParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RouteParameters/)
|
|
16
|
-
* @see [
|
|
16
|
+
* @see [Routing and Directions](https://developers.arcgis.com/documentation/mapping-and-location-services/routing-and-directions/)
|
|
17
17
|
* @see [Sample - Route](https://developers.arcgis.com/javascript/latest/sample-code/route/)
|
|
18
18
|
*/
|
|
19
19
|
import type RouteParameters from "./support/RouteParameters.js";
|
|
@@ -41,7 +41,7 @@ export default class AreasAndLengthsParameters extends JSONSupport {
|
|
|
41
41
|
/**
|
|
42
42
|
* The length unit in which perimeters of polygons will be calculated.
|
|
43
43
|
* Use one of the possible values listed below or any of the
|
|
44
|
-
* [numeric codes for linear units](https://developers.arcgis.com/
|
|
44
|
+
* [numeric codes for linear units](https://developers.arcgis.com/java/v200/api-reference/reference/com.esri.arcgisruntime/com/esri/arcgisruntime/geometry/LinearUnitId.html).
|
|
45
45
|
*/
|
|
46
46
|
accessor lengthUnit: LengthUnit | null | undefined;
|
|
47
47
|
/** Polygon geometries for which to compute areas and lengths. */
|