12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import e from"../../Basemap.js";import t from"../../Ground.js";import n from"../../WebScene.js";import"../../core/has.js";import{isLongFormType as r,Integer as a}from"../../core/accessorSupport/ensureType.js";import{isCollection as p}from"../../core/accessorSupport/extensions/serializableProperty/type.js";import o from"../../layers/GroupLayer.js";import s from"../../layers/KMLLayer.js";import{typeModuleMap as y}from"../../layers/mixins/operationalLayerModuleMap.js";import{supportedTypes as u}from"../../layers/mixins/operationalLayers.js";import l from"../../layers/support/Sublayer.js";import{JoinTableDataSource as i,DataLayerSource as c}from"../../layers/support/source/DataLayerSource.js";import{MapLayerSource as m}from"../../layers/support/source/MapLayerSource.js";import{ScanContext as f}from"./utils.js";async function d(e){return S(null,{typeName:"json",type:e},new f)}async function b(e,t,n){switch(t.typeName){case"array":await v(e,t,n);break;case"union":await k(e,t,n);break;case"json":await S(e,t,n);break;case"native":await w(e,t,n);break;case"enum":await j(e,t,n)}}async function w(e,t,n){n.addProperty({name:e,type:_(t),default:t.default})}function N(e){const t=e.slice();return t.sort(),t}async function j(e,t,n){const r=t.values.slice();t.nullable&&r.push(null),n.currentClass&&n.currentClass.typeValue&&"type"===e?n.addProperty({name:e,type:"string",enum:`"${n.currentClass.typeValue}"`}):n.addProperty({name:e,type:_(t),enum:N(r).map((e=>"string"==typeof e?`"${e}"`:`${e}`)).join("|"),default:t.default})}async function v(e,t,n){await b(`${e}[]`,t.elementType,n)}function g(e,t){if("json"===e.typeName){const t=e.type.__accessorMetadata__,n=t&&t.properties&&t.properties&&t.properties.type,r=n&&E(n),a=r&&r.type,p=a||n&&n.type;if(p&&Array.isArray(p)&&1===p.length&&"string"==typeof p[0])return a?p[0]:I(n,p[0])}return t}async function k(e,t,n){const r=[];for(const a of t.types)if("native"!==a.type.typeName&&t.key){const t=`${e}<${g(a.type,a.value)}>`;await b(t,a.type,n)}else r.push(a.type);if(r.length){const a=r.map(_);t.nullable&&a.push("null"),a.sort(),n.addProperty({type:a.join("|"),name:e,default:t.default})}}async function h(r,a){return r.type===n&&"layers"===a?P("web-scene/operational-layers"):r.type!==e||"baseLayers"!==a&&"baseMapLayers"!==a?r.type===e&&"elevationLayers"===a||r.type===t&&"layers"===a?P("web-scene/ground"):r.type===o&&"layers"===a?P("web-scene/operational-layers",(e=>e!==o)):r.type!==i||"leftTableSource"!==a&&"rightTableSource"!==a?null:B({key:"type",base:null,typeMap:{"data-layer":c,"map-layer":m}}):P("web-scene/basemap")}async function T(e,t,n){const r=await h(e,t);return r||C(n)}function M(e){return e.prototype.declaredClass.replace(/\./g,"/")}async function S(e,t,n){const r=t.type.__accessorMetadata__,a=M(t.type),p=r&&r.properties;if(!p)return e&&n.addProperty({name:e,type:"unknown"}),null;let o=a,s=null;const y=e&&e.match(/<([^>]+)>$/);y&&(o+=`--${y[1]}`,s=y[1]),t.type===l&&(o+=`--${n.currentClass.name}`,s=n.currentClass.name);const u=n.seen.get(o);if(u&&e)return n.addProperty({name:e,type:u}),u;const i={type:t.type,name:a,id:o,properties:[]};e&&(n.addProperty({name:e,type:i}),i.typeValue=s),n.push(e,i);for(const c in p){const e=p[c],r=K(e);if(!r||!r.enabled)continue;if(t.type===l){const e="esri/layers/TileLayer"===n.stack[n.stack.length-2].klass.name;if(e&&l.test.isMapImageLayerOverridePolicy(r.overridePolicy)||!e&&l.test.isTileImageLayerOverridePolicy(r.overridePolicy))continue}const a=r.target;if("string"==typeof a||null==a){const r=await T(t,c,e);if(!r)continue;await b("string"==typeof a?a:c,r,n)}else await L(t,a,n)}return n.pop()}async function L(e,t,n){for(const r in t){let a=await h(e,r);if(!a){const e=t[r];a=e.types?B(e.types):V(e.type),a.default=e.default,a=A(a)}await b(r,a,n)}}async function P(e,t){const n={typeName:"union",key:"layerType",types:[]};for(const r in u[e]){if("web-scene/operational-layers"===e&&"ArcGISTiledElevationServiceLayer"===r)continue;const a=await y[r]();a&&(t&&!t(a)||a!==s&&n.types.push({type:{typeName:"json",type:a},value:r}))}if(0===n.types.length)return null;return{typeName:"array",elementType:1===n.types.length?n.types[0].type:n}}function _(e){switch(e.typeName){case"array":return`${_(e.elementType)}[]`;case"union":{const t=e.types.map((e=>_(e.type)));return e.nullable&&t.push("null"),t.sort(),`${t.join(" | ")}`}case"native":switch(e.type){case Number:return"number";case a:return"integer";case String:return"string";case Boolean:return"boolean";case Object:return"object";default:return"unknown"}case"json":return e.type.prototype.declaredClass;case"enum":return"string";default:return}}function $(e){const t=e.prototype.itemType&&e.prototype.itemType.Type;if(!t)return{typeName:"array",elementType:{typeName:"native",type:null}};if("function"==typeof t)return{typeName:"array",elementType:V(t)};if(t.typeMap){const e=[];for(const n in t.typeMap){const r=t.typeMap[n];e.push({type:V(r),value:D(r)?null:n})}return{typeName:"array",elementType:{typeName:"union",key:"string"==typeof t.key?t.key:"type",types:e}}}}function O(e){if("json"!==e.typeName)return null;const t=e.type.__accessorMetadata__,n=t&&t.properties&&t.properties.type,r=n&&E(n),a=r&&r.type,p=a||n&&n.type;return p&&Array.isArray(p)&&"string"==typeof p[0]?a||n.type.map((e=>I(n,e))):null}function A(e){if("array"===e.typeName)return e.elementType=A(e.elementType),e;const t=O(e);return t?{typeName:"union",key:"type",nullable:e.nullable,types:t.map((t=>({value:t,type:e})))}:e}function C(e){const t=E(e);return t.types?B(t.types):!t.type&&e.types?B(e.types):x(A(J(e)))}function x(e){return e.nullable&&"native"===e.typeName?{typeName:"union",key:null,types:[{value:null,type:e}],nullable:!0}:e}function B(e){if(Array.isArray(e))return{typeName:"array",elementType:B(e[0])};const t=[];for(const n in e.typeMap){const r=e.typeMap[n];t.push({type:V(r),value:D(r)?null:n})}return{typeName:"union",key:"string"==typeof e.key?e.key:"type",types:t}}function G(e){return null!=e&&e.isJSONMapWriter}function I(e,t){const n=K(e);if(G(n.writer)){const e={value:""};return n.writer(t,e,"value"),e.value}return t}function J(e){const t=E(e),n=K(e),r=V(t&&t.type||e.type);return t&&void 0!==t.default&&"function"!=typeof t.default&&(r.default=I(e,t.default)),n.allowNull&&(r.nullable=!0),r}function V(e){return e?r(e)?W(e):Array.isArray(e)?"string"==typeof e[0]||"number"==typeof e[0]?{typeName:"enum",values:e}:e.length>1?{typeName:"union",key:null,types:e.map((e=>({type:V(e),value:null})))}:{typeName:"array",elementType:V(e[0])}:p(e)?$(e):D(e)?{typeName:"native",type:e}:z(e)?{typeName:"json",type:e}:{typeName:"native",type:null}:{typeName:"native",type:null}}function W(e){switch(e.type){case"native":return{typeName:"native",type:e.value};case"array":return{typeName:"array",elementType:V(e.value)};case"one-of":return{typeName:"union",key:null,types:e.values.map((e=>({type:W(e),value:null})))};default:return}}function z(e){let t=e;for(;t;){if(t.prototype&&("esri.core.JSONSupport"===t.prototype.declaredClass||"esri.core.MultiOriginJSONSupport"===t.prototype.declaredClass))return!0;t=Object.getPrototypeOf(t)}return!1}function D(e){return e===String||e===Boolean||e===Number||e===a||e===Object}function E(e){if(!e.json)return null;const t=e.json.origins,n=e.json,r=t&&t["web-scene"],a=t&&t["web-document"];return r||a||n||null}function K(e){if(!e.json)return null;const t=e.json.origins,n=e.json.write,r=t&&t["web-scene"]&&t["web-scene"].write,a=t&&t["web-document"]&&t["web-document"].write;return r||a||n||null}export{d as scan};
|