UNPKG

@arcgis/core

Version:

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

1 lines • 12.1 kB
"use strict";(self.webpackChunkRemoteClient=self.webpackChunkRemoteClient||[]).push([[1384],{31384(e,s,t){t.d(s,{uploadAssets:()=>S});var o=t(11254),r=t(44208),n=t(53966),a=t(74887),i=t(78659),c=t(84952),l=t(13069),u=t(91218),p=t(16930),f=t(63579),d=t(55726);const m={prepareAssetItems:.9,uploadAssetItems:.1},g={uploadEditSource:.5,serviceAssetsToGlb:.5},h={meshToAssetBlob:.5,uploadAssetBlobs:.5};var w=t(60694),y=t(36563),A=t(91869);function T(e,s=e=>{},t){return new P(e,s,t)}class P{constructor(e,s=e=>{},t){if(this.onProgress=s,this.taskName=t,this._progressMap=new Map,this._startTime=void 0,this._timingsMap=new Map,"number"==typeof e){this._weights={};for(let s=0;s<e;s++){const t=s,o=1/e;this._weights[t]=o,this._progressMap.set(t,0)}}else this._weights=e;this.emitProgress()}emitProgress(){let e=0;for(const[s,t]of this._progressMap.entries())e+=t*this._weights[s];if(1===e&&(0,r.A)("enable-feature:esri-3dofl-upload-timings")){const e=Math.round(performance.now()-(this._startTime??0))/1e3;console.log(`${this.taskName} done in ${e} sec`);for(const[s,t]of this._timingsMap){const o=Math.round(t.end-t.start)/1e3,r=Math.round(o/e*100);console.log(this.taskName??"Task",{stepKey:s,stepTime:o,relativeTime:r})}}this.onProgress(e)}setProgress(e,s){if(this._progressMap.set(e,s),(0,r.A)("enable-feature:esri-3dofl-upload-timings")){const t=performance.now();this._startTime??=t;const o=(0,A.tE)(this._timingsMap,e,()=>({start:t,end:0}));1===s&&(o.end=t)}this.emitProgress()}simulate(e,s){return v(s=>this.setProgress(e,s),s)}makeOnProgress(e){return s=>this.setProgress(e,s)}}function v(e=e=>{},s=D){const t=performance.now();e(0);const o=setInterval(()=>{const o=performance.now()-t,r=1-Math.exp(-o/s);e(r)},$);return(0,y.hA)(()=>{clearInterval(o),e(1)})}function b(e,s=x){return(0,i.gr)((0,i.Kp)(e*j/s))}const x=10,j=8e-6,$=(0,i.l5)(50),D=(0,i.l5)(1e3),F=2e7;async function N({data:e,name:s,description:t},r,n){let i=null;try{const u=(0,c.fj)(r,"uploads"),p=(0,c.fj)(u,"info"),{data:f}=await(0,o.A)(p,{query:{f:"json"},responseType:"json"});(0,a.Te)(n);const d=(0,w.Wo)(r),m=1e6*f.maxUploadFileSize,g=d?2e9:m,h=d?Math.min(F,m):F;if(e.size>g)throw new Error("Data too large");const y=(0,c.fj)(u,"register"),{data:A}=await(0,o.A)(y,{query:{f:"json",itemName:(l=s,l.replaceAll("/","_").replaceAll("\\","_")),description:t},responseType:"json",method:"post"});if((0,a.Te)(n),!A.success)throw new Error("Registration failed");const{itemID:P}=A.item;i=(0,c.fj)(u,P);const v=(0,c.fj)(i,"uploadPart"),x=Math.ceil(e.size/h),j=new Array;for(let s=0;s<x;++s)j.push(e.slice(s*h,Math.min((s+1)*h,e.size)));const $=j.slice().reverse(),D=new Array,N=T(x,n?.onProgress,"uploadItem"),E=async()=>{for(;0!==$.length;){const e=j.length-$.length,s=$.pop(),t=new FormData,r=N.simulate(e,b(s.size));try{t.append("f","json"),t.append("file",s),t.append("partId",`${e}`);const{data:r}=await(0,o.A)(v,{timeout:0,body:t,responseType:"json",method:"post"});if((0,a.Te)(n),!r.success)throw new Error("Part upload failed")}finally{r.remove()}}};for(let e=0;e<3&&0!==$.length;++e)D.push(E());await Promise.all(D);const k=(0,c.fj)(i,"commit"),{data:M}=await(0,o.A)(k,{query:{f:"json",parts:j.map((e,s)=>s).join(",")},responseType:"json",method:"post"});if((0,a.Te)(n),!M.success)throw new Error("Commit failed");return M.item}catch(e){if(null!=i){const e=(0,c.fj)(i,"delete");await(0,o.A)(e,{query:{f:"json"},responseType:"json",method:"post"})}throw e}var l}var E=t(20557),k=t(86390),M=t(77793);async function S(e,s,t){const o=e.length;if(!o)return t?.onProgress?.(1),[];const r=T(o,t?.onProgress,"uploadAssets");return Promise.all(e.map((e,o)=>async function(e,{layer:s,ongoingUploads:t},o){const r=t.get(e);if(r)return r;if(!function(e){return!!e.infoFor3D&&!!e.url}(s))throw new d.Wt;if(function(e,s){const{parsedUrl:t}=s;return null!=t&&e.metadata.externalSources.some(e=>(0,f.eN)(e,t))}(e,s))return o?.onProgress?.(1),{mesh:e};const n=async function(e,s,t){const{metadata:o}=e,{displaySource:r}=o,n=R(r?.source,s,{checkForConversionRequired:!0}),m=null!=n?async function(e,s,t,o){return{external:{source:{type:"service",assets:await _(s,t,o)},original:!0,unitConversionDisabled:!0},info:{mesh:e}}}(e,n,s,t):o.externalSources.length>0?async function(e,s,t){const o=q(s),{externalSources:r}=e.metadata,n=function(e,s){for(const t of e){const e=R(t.source,s);if(e)return e}return null}(r,s);if(!n)throw new d.xY;const a=T(g,t?.onProgress,"uploadConvertibleSource"),l={type:"service",assets:await _(n,s,{onProgress:a.makeOnProgress("uploadEditSource")})};e.addExternalSources([{source:l,original:!0}]);const m=n.reduce((e,{asset:s})=>s instanceof File?e+s.size:e,0),h=a.simulate("serviceAssetsToGlb",function(e,s=10){return(0,i.gr)((0,i.Kp)(e*j/s))}(m));try{const{source:r,transform:n,origin:a}=await async function({assets:e},s,t){const o=e.map(({assetName:e,parts:s})=>({assetName:e,assetHash:s[0].partHash}));let r;try{const e=(0,c.fj)(s.parsedUrl.path,"convert3D"),n=s.capabilities?.operations.supportsAsyncConvert3D;r=(await(n?Z:Y)(e,{query:{f:"json",assets:JSON.stringify(o),transportType:"esriTransportTypeUrl",targetFormat:t,async:n},responseType:"json",timeout:0})).data}catch(e){throw new d.MT}return function(e,s){const t={source:{type:"service",assets:s.assets.map(s=>{const t=(0,E.R_)(s.contentType,e.infoFor3D.supportedFormats);if(!t)throw new d.H2(t);return new f.Qp(s.assetName,s.contentType,[new f.Bq(s.assetURL,s.assetHash)])})},origin:void 0,transform:void 0};if(s.transform){if(t.transform=(0,M.f)(s.transform),s.spatialReference){const e=p.A.fromJSON(s.spatialReference);t.origin=(0,M.V)(s.transform,e)}}else t.transform=(0,k.Z)(e.spatialReference);return t}(s,r)}(l,s,o);if(e.transform=n,a&&t?.useAssetOrigin){const s=await(0,u.projectAsync)(a,e.spatialReference,t);e.vertexSpace.origin=[s.x,s.y,s.z??0]}return{external:{source:r,unitConversionDisabled:!0},info:{mesh:e,georeferenceInfo:a?{origin:a}:void 0}}}finally{h.remove()}}(e,s,t):async function(e,s,t){const o=T(h,t?.onProgress,"uploadLocalMesh"),r=async function(e,s,t){const o=q(s),r=await e.load(t),n=await r.toBinaryGLTF({origin:r.origin,signal:t?.signal,ignoreLocalTransform:!0,unitConversionDisabled:!0});return(0,a.Te)(t),{blob:new Blob([n],{type:"model/gltf-binary"}),assetName:`${(0,l.yS)()}.glb`,assetType:o}}(e,s,{...t,onProgress:o.makeOnProgress("meshToAssetBlob")});return{external:{source:{type:"service",assets:await C([r],s,{...t,onProgress:o.makeOnProgress("uploadAssetBlobs")})},extent:e.extent.clone(),original:!0},info:{mesh:e}}}(e,s,t),{external:w,info:y}=await m;return(0,a.Te)(t),e.addExternalSources([w]),y}(e,s,o);t.set(e,n);try{return await n}finally{t.delete(e)}}(e,s,{...t,onProgress:r.makeOnProgress(o)})))}function R(e,{infoFor3D:s},t={}){if(!e)return null;const o=(0,f.WN)(e);if(!o)return null;const{supportedFormats:r,editFormats:n}=s,a=new Array,i=(0,E.ND)(s),c=(0,E.nr)(s);let l=!1;for(const e of o){const s=I(e,r);if(!s)return null;const{assetType:o}=s;if(t.checkForConversionRequired&&(o===i||o===c))return null;n.includes(o)&&(l=!0),a.push(s)}return l?a:null}function I(e,s){const t=(0,f.fH)(e,s);return t?{asset:e,assetType:t}:null}async function _(e,s,t){return C(e.map(e=>async function(e,s){const{asset:t,assetType:o}=e;if(t instanceof File)return{blob:t,assetName:t.name,assetType:o};const r=await t.toBlob(s);return(0,a.Te)(s),{blob:r,assetName:t.assetName,assetType:o}}(e,t)),s,t)}async function C(e,s,t){const o=T(m,t?.onProgress,"uploadAssetBlobs"),r=await function(e,s,t){const o=T(e.length,t?.onProgress,"prepareAssetItems");return Promise.all(e.map(async(e,r)=>{const i=async function(e,s,t){const{blob:o,assetType:r,assetName:i}=e;let l=null;try{const e=await N({data:o,name:i},s.url,t);(0,a.Te)(t),l={assetType:r,assetUploadId:e.itemID}}catch(e){(0,a.QP)(e),n.A.getLogger("esri.layers.graphics.sources.support.uploadAssets").warnOnce(`Service ${s.url} does not support the REST Uploads API.`)}if(!l){const e=await(0,c._0)(o);if((0,a.Te)(t),!e.isBase64)throw new d.$1;l={assetType:r,assetData:e.data}}if(!l)throw new d.WF;return{item:l,assetName:i}}(await e,s,{...t,onProgress:o.makeOnProgress(r)});return(0,a.Te)(t),i}))}(e,s,{...t,onProgress:o.makeOnProgress("prepareAssetItems")});(0,a.Te)(t);const i=r.map(({item:e})=>e),{uploadResults:l}=await U(i,s,{...t,onProgress:o.makeOnProgress("uploadAssetItems")});return(0,a.Te)(t),e.map((e,t)=>function(e,s,t){const{success:o}=s;if(!o){const{error:t}=s;throw new d.hK(e.assetName,t)}const{assetHash:r}=s,{assetName:n,item:{assetType:a}}=e,{infoFor3D:{supportedFormats:i}}=t,c=(0,E.Fm)(a,i);if(!c)throw new d.H2(a);return new f.Qp(n,c,[new f.Bq(`${t.parsedUrl.path}/assets/${r}`,r)])}(r[t],l[t],s))}async function U(e,s,t){const r=v(t?.onProgress);try{const r=await(0,o.A)((0,c.fj)(s.parsedUrl.path,"uploadAssets"),{timeout:0,query:{f:"json",assets:JSON.stringify(e)},method:"post",responseType:"json"});if((0,a.Te)(t),r.data.uploadResults.length!==e.length)throw new d.nS(e.length,r.data.uploadResults.length);return r.data}finally{r.remove()}}function Y(e,s){return(0,o.A)(e,s)}async function Z(e,s){const t=(await(0,o.A)(e,s)).data.statusUrl;for(;;){const e=(await(0,o.A)(t,{query:{f:"json"},responseType:"json"})).data;switch(e.status){case"Completed":return(0,o.A)(e.resultUrl,{query:{f:"json"},responseType:"json"});case"CompletedWithErrors":throw new Error(e.status);case"Failed ImportChanges":case"InProgress":case"Pending":case"ExportAttachments":case"ExportChanges":case"ExportingData":case"ExportingSnapshot":case"ImportAttachments":case"ProvisioningReplica":case"UnRegisteringReplica":break;default:throw new Error}await(0,a.Pl)(O)}}function q({infoFor3D:e}){const s=(0,E.U9)(e);if(!s)throw new d.uh;return s}const O=(0,i.l5)(1e3)},55726(e,s,t){t.d(s,{$1:()=>l,H2:()=>d,MT:()=>m,VP:()=>g,WF:()=>u,Wt:()=>a,XQ:()=>h,hK:()=>f,nS:()=>p,uh:()=>i,xY:()=>c});var o=t(49186);const r="upload-assets",n=()=>new Error;class a extends o.A{constructor(){super(`${r}:unsupported`,"Layer does not support asset uploads.",n())}}class i extends o.A{constructor(){super(`${r}:no-glb-support`,"Layer does not support glb.",n())}}class c extends o.A{constructor(){super(`${r}:no-supported-source`,"No supported external source found",n())}}class l extends o.A{constructor(){super(`${r}:not-base-64`,"Expected gltf data in base64 format after conversion.",n())}}class u extends o.A{constructor(){super(`${r}:unable-to-prepare-options`,"Unable to prepare uploadAsset request options.",n())}}class p extends o.A{constructor(e,s){super(`${r}:bad-response`,`Bad response. Uploaded ${e} items and received ${s} results.`,n())}}class f extends o.A{constructor(e,s){super(`${r}-layer:upload-failed`,`Failed to upload mesh file ${e}. Error code: ${s?.code??"-1"}. Error message: ${s?.messages??"unknown"}`,n())}}class d extends o.A{constructor(e){super(`${r}-layer:unsupported-format`,`The service allowed us to upload an asset of FormatID ${e}, but it does not list it in its supported formats.`,n())}}class m extends o.A{constructor(){super(`${r}:convert3D-failed`,"convert3D failed.")}}class g extends o.A{constructor(){super("invalid-input:no-model","No supported model found")}}class h extends o.A{constructor(){super("invalid-input:multiple-models","Multiple supported models found")}}},77793(e,s,t){t.d(s,{V:()=>n,f:()=>a});var o=t(86738),r=t(73836);function n(e,s,t=i){return new o.A({x:e[t.originX],y:e[t.originY],z:e[t.originZ],spatialReference:s})}function a(e,s=i){return new r.A({translation:[e[s.translationX],-e[s.translationZ],e[s.translationY]],rotationAxis:[e[s.rotationX],-e[s.rotationZ],e[s.rotationY]],rotationAngle:e[s.rotationDeg],scale:[e[s.scaleX],e[s.scaleZ],e[s.scaleY]]})}const i={originX:"originX",originY:"originY",originZ:"originZ",translationX:"translationX",translationY:"translationY",translationZ:"translationZ",scaleX:"scaleX",scaleY:"scaleY",scaleZ:"scaleZ",rotationX:"rotationX",rotationY:"rotationY",rotationZ:"rotationZ",rotationDeg:"rotationDeg"}},86390(e,s,t){t.d(s,{Z:()=>n});var o=t(86211),r=t(73836);function n(e){const s=1/(0,o.GA)(e,1);return 1!==s?new r.A({scale:[s,s,s]}):void 0}}}]);