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