@vertigis/arcgis-extensions 54.10.2 → 54.11.0

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/data/convert.js CHANGED
@@ -1 +1 @@
1
- import e from"@arcgis/core/Color.js";import t from"@arcgis/core/Graphic.js";import r from"@arcgis/core/geometry/Point";import o from"@arcgis/core/geometry/Polygon.js";import n from"@arcgis/core/geometry/Polyline.js";import a from"@arcgis/core/geometry/SpatialReference";import i from"@arcgis/core/layers/FeatureLayer.js";import s from"@arcgis/core/layers/GroupLayer.js";import c from"@arcgis/core/layers/support/Field.js";import l from"@arcgis/core/renderers/SimpleRenderer.js";import m from"@arcgis/core/renderers/UniqueValueRenderer.js";import u from"@arcgis/core/renderers/support/UniqueValueInfo.js";import f from"@arcgis/core/symbols/MeshSymbol3D.js";import p from"@arcgis/core/symbols/PictureMarkerSymbol.js";import y from"@arcgis/core/symbols/SimpleFillSymbol.js";import d from"@arcgis/core/symbols/SimpleLineSymbol.js";import g from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import w from"dxf-parser";import{geometryTypeToJson as h}from"../json/GeometryJson.js";import{translate as F}from"../locale/language.js";import{INVARIANT as S}from"../locale.js";import{FeatureCollectionLayerExtension as T}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as N}from"../mapping/GroupLayerExtension.js";import{MapImageLayerExtension as O}from"../mapping/MapImageLayerExtension.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as b}from"../utilities/Time.js";import{checkArg as D,assertNever as M}from"../utilities/checkArg.js";import{isPoint as E,isMultipoint as R,isPolyline as A,isPolygon as I,isExtent as _}from"../utilities/esri.js";import{parse as G,format as L,DEFAULT_PARSING_FORMATS as C,INVALID_DATE as v}from"../utilities/format/date.js";import{DateFormat as P,NumberFormat as j,TimeFormat as U}from"../utilities/format/formats.js";import{parse as $,format as B}from"../utilities/format/number.js";import{parse as H,format as k,DEFAULT_PARSING_FORMATS as z}from"../utilities/format/time.js";import{project as J,esriToWKT as X,wktToEsri as W,esriWkidToWkt as q,esriWktToWkid as Y,esriToGeoJSON as Z,geoJSONToEsri as K}from"../utilities/geometry.js";import{getLogger as V}from"../utilities/log.js";import{isNumeric as Q}from"../utilities/number.js";import{delay as ee}from"../utilities/promise.js";import{caseInsensitiveEquals as te}from"../utilities/string.js";import{Feature as re}from"./Feature.js";import{FeatureSet as oe}from"./FeatureSet.js";import{DxfEntityProcessor as ne}from"./support/_dxfConverters.js";import{createGpxDocument as ae,serializeGpxDocument as ie,buildGpxTrack as se,buildGpxTrackPoint as ce,buildGpxWaypoint as le,getGpxExtensions as me,getGpxTrackDescription as ue,getGpxTrackName as fe,getGpxTrackTime as pe,getGpxTrackId as ye}from"./support/_gpxExport.js";import{addAndPopulateFidField as de}from"./support/_shapefileConverter.js";const ge=["=","-","+","@"],we='"',he="\r\n",Fe="\n",Se=[...C.map(Ve),"M/d/yy"],Te=[...z.map(et).map((e=>e.replace("AM/PM","tt")))],Ne=10,Oe=/(\w+)_(point|multipoint|polyline|polygon)z?/;var xe;function be(){return V("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(xe||(xe={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const De=[[GeometryFormat.ARCGIS_JSON,He],[GeometryFormat.GEO_JSON,ke],[GeometryFormat.WKT,ze]],Me=new Map(De);export async function uploadDataToFeatureSet(e){const t=await async function(e){const{data:t,includeHeaderRow:o,geometryFormat:n,geometryFields:a,locale:i,numberFormat:s,inSpatialReference:c}=e,l=o?t.slice(1):t;if(n===GeometryFormat.NONE)return{columnIndices:[]};const m=e=>We(e,i,s),u=(e,t)=>{const o=t===GeometryFormat.XYZ,n=t===GeometryFormat.LAT_LON;return{columnIndices:e,geometries:l.map((t=>{if(t.length>=Math.max(...e)&&Q(t[e[0]]?.raw,i)&&Q(t[e[1]]?.raw,i)&&(!o||Q(t[e[2]]?.raw,i)))return new r({x:m(n?t[e[1]].raw:t[e[0]].raw),y:m(n?t[e[0]].raw:t[e[1]].raw),z:o?m(t[e[2]].raw):0,spatialReference:c})}))}},f=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),c)})))}),p=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return u(e,t);case GeometryFormat.ARCGIS_JSON:return f(e[0],He);case GeometryFormat.GEO_JSON:return f(e[0],ke);case GeometryFormat.WKT:return f(e[0],ze);default:return M(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=Je(o?t[0]:t[0].map(((e,t)=>({raw:t.toString()}))),n,o?a:a.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(o&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return p(e??[0],n)}const[y,d]=await qe(t,c,o);if(y===GeometryFormat.NONE)return{columnIndices:[]};return d.length>1?u(d,y):f(d[0],Me.get(y))}(e),o=function(e,t){const{data:r,displayField:o,includeHeaderRow:n,inSpatialReference:a,outSpatialReference:i,generatePrimaryKey:s}=e,c={fields:[]},l=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:m}=e,u=0;for(let t=0;t<r[0].length;t++){if(l(t))continue;const o=Ze(e,t,!s&&!m&&!c.fields.find((e=>"esriFieldTypeOID"===e.type)));let a=r[0][t]?.raw?.toString(),i=a?.replace(FIELD_NAME_REGEX,"_");n&&i||(i="field"+ ++u,a=F("gcx.api.data.convert.import-field-alias",u)),c.fields.push({alias:a,name:i,type:o}),"esriFieldTypeOID"===o&&(m=i)}if(c.spatialReference=i??t.geometries?.[0]?.spatialReference??a,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];c.geometryType=e.every((e=>e===r))?h(r):void 0}if(!c.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=c.fields.length+1,t=!!c.fields.find((e=>"objectid"===e.name.toLowerCase()));m=t?`OBJECTID_${e}`:"OBJECTID",c.fields.push({name:m,alias:m,type:"esriFieldTypeOID"})}return c.displayField=o??c.fields.find((e=>!te(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!te(e.name,m)))?.name??m,c.primaryKeyField=m,c}(e,t),n=await async function(e,t,r){const{data:o,includeHeaderRow:n,outFields:a,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:l,timeFormat:m}=e,{spatialReference:u}=r,f=[],p=n?o.slice(1):o,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(p.map((async(e,o)=>{const n=new re;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(a.includes("*")||a.filter((e=>te(e,u.name))).length>0){let e=await Ke(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:l,numberFormat:c,timeFormat:m,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=o),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await Le(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new oe({features:n,schema:o})}export async function toCsv(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:P.ROUND_TRIP,timeFormat:U.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:a.WGS84,includeHeaderRow:!0,outFields:_e(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?he:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=Ae(r,o),f=Ie(r,c,e.schema,!0),p=Ie(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(Ce(t,o));for(const t of f)e.push(Ce(t,o));for(const t of p)e.push(Ce(t,o));const t=e.join(s)+l;m.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>{const o=Pe(e,t,r),n=e.schema.findFieldByName(t)?.type;return Ce(ve(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await Ge(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":ve(e,t))));return r.map((e=>""===e?"":Ce(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...p.map((e=>r(e,o))));const n=`${t.join(s)}${l}`;m.push(n)})));return new Blob(m,{type:"text/plain",endings:"\n"===l||l===he?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(D("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsText(e)}));r=await t}else r=e;const o=Re(t),n=o.rowDelimiter||function(e){let t=Fe;return Be(e,he,((r,o)=>(0===r&&o===e.length||(t=he),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(Be(e,t,((t,r)=>(r!==e.length||t!==r)&&(n.push(e.substring(t,r)),n.length<3))),0===n.length)return o;let a=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>n[0].includes(e.delimiter)));if(0===a.length)return o;for(const e of n)for(const t of a){let o=0,n=0;Be(e,t.delimiter,((a,i)=>{if(i!==e.length&&o++,","===t.delimiter){const t=e.charAt(i-1),o=e.charAt(i+1);Q(t,r)&&Q(o,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(o),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(a=a.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),a.length>1&&","===a[0].delimiter&&null!=r&&r!==S){const e=a[0];if(","===e?.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){a=a.filter((e=>","!==e.delimiter));break}}if(0===a.length)return o;return a[0].delimiter}(r,n,o.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return Be(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:$e(a,t,o.length)}),!0})),o};if(Be(e,t,((t,r)=>{const a=e.substring(t,r);return a.length>0&&o.push(n(a,o.length)),!0})),o.length){const e=o[0].length;o.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return o}(r,n,a);let{geometryFormat:s,geometryFields:c}=o;if(!s){const[e,t]=await qe(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:i,...o,geometryFormat:s,geometryFields:c}}export async function csvToFeatureSet(e,t){const r=Re(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toGpx(e){D("featureSet",e).isNotMissing();const t=Array.from(e),r=ae(),o=r.documentElement,n=new Set;for(const e of t){if(!e.geometry)continue;const t=await Le(e.geometry,a.WGS84),i={name:fe(e),desc:ue(e),time:pe(e),extensions:me(r,e),id:ye(e)};if(E(t))o.appendChild(le(r,t.y,t.x,t.hasZ?t.z:void 0,i));else if(A(t))for(const e of t.paths){if(e.length<2)continue;const n=e.map((([e,o,n])=>ce(r,o,e,t.hasZ?n:void 0)));o.appendChild(se(r,n,i))}else n.add(t.type)}if(n.size>0){const e=Array.from(n).join(", ");be().warn(`One or more features with unsupported geometry types (${e}) were ignored during GPX conversion. GPX format only supports points and polylines.`)}const i=ie(r);return new Blob([i],{type:"application/gpx+xml"})}export async function toXLSX(e,t){D("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:_e(e.source),outSpatialReference:a.WGS84,dateFormat:P.DEFAULT,timeFormat:U.DEFAULT,numberFormat:j.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=Ae(r,o),u=Ie(r,n,e.schema,!0),f=Ie(r,n,e.schema,!1),p=await import("xlsx"),y=p.utils.sheet_new();let d=!1;if(i){const t=m.concat(u).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>te(t.name,e)))?.alias??e))}(f,e.source));d=!0,p.utils.sheet_add_aoa(y,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await Ge(e.geometry,o));for(const r of u){const n=rt(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=Pe(e,a,o);if(i instanceof b){const o=e.schema.findFieldByName(a);"time-only"===o?.type&&r.add(t.length)}else if(i instanceof Date){const r=e.schema.findFieldByName(a);"date-only"===r?.type&&n.add(t.length)}const s=rt(i,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void be().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(y,[t],{cellDates:!0,origin:d?-1:void 0}),d=!0;const a=p.utils.decode_range(y["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=y[p.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=et(c??U.ROUND_TRIP):n.has(e)?t.z=Qe(s??P.ROUND_TRIP):t.z=Ve(s??P.ROUND_TRIP):"n"===t.t&&(t.z=tt(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=y;const w=p.write(g,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),h=new Uint8Array(w.length);for(let e=0;e<w.length;e++)h[e]=w.charCodeAt(e);return new Blob([h.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){D("xlsxData",e).isNotMissing();const r=function(e){const t={includeHeaderRow:!0,inSpatialReference:a.WGS84,...Ee(e)};return{...t,...e}}(t),o=await async function(e,t){const r=await import("xlsx"),o=new Promise(((o,n)=>{const a=new FileReader;a.onload=()=>{const e=new Uint8Array(a.result);let n="";for(const t of e)n+=String.fromCharCode(t);const i=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],c=i.Sheets[s];o(c)},a.onerror=()=>{n(a.error)},a.readAsArrayBuffer(e)})),n=await o,a=r.utils.decode_range(n["!ref"]),i=[];for(let e=a.s.r;e<=a.e.r;e++){const t=[];for(let o=a.s.c;o<=a.e.c;o++){const a=n[`${r.utils.encode_cell({r:e,c:o})}`];"d"===a?.t&&a.v instanceof Date&&(a.v=new Date(a.v.getTime()+6e4*a.v.getTimezoneOffset())),t.push(a?{raw:a.v,formatted:"s"===a.t?void 0:a.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:n,geometryFields:i}=r;if(!n){const[e,t]=await qe(o,r.inSpatialReference,r.includeHeaderRow);n=e,i=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??F("gcx.api.data.convert.import-field-alias",(e+1).toString()):F("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:i}}export async function xlsxToFeatureSet(e,t){D("xlsxData",e).isNotMissing();return uploadDataToFeatureSet(await xlsxToUploadData(e,t))}export function kmlHexToEsriColor(t){return e.fromHex(`#${t.match(/.{2}/g).reverse().join("")}`)}export function parseKMLCoordinates(e){return e.trim().split(/\s+/).map((e=>{const[t,r,o]=e.split(",").map(Number);return{x:t,y:r,z:o}}))}export function parseKMLSymbol(t,r,o){if(t){const r=t.querySelector("IconStyle > Icon > href")?.textContent;if(r)return new p({url:r,width:32,height:32});const o=t.querySelector("PolyStyle");if(o){const t=o.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]);return new y({color:r,outline:{color:[0,0,0,.5],width:1}})}const n=t.querySelector("LineStyle");if(n){const t=n.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]),o=parseFloat(n.querySelector("width")?.textContent||"1");return new d({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){D("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),n=Array.from(e),i={...{useFormattedValues:!1,outFields:_e(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:c,fileName:l}=i,m=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,f=n.filter((e=>E(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const p=n.filter((e=>R(e.geometry)));u.set("MULTIPOINTZ",p.filter(m)),u.set("MULTIPOINT",p.filter((e=>!m(e))));const y=n.filter((e=>A(e.geometry)));u.set("POLYLINEZ",y.filter(m)),u.set("POLYLINE",y.filter((e=>!m(e))));const d=n.filter((e=>I(e.geometry)||_(e.geometry)));u.set("POLYGONZ",d.filter(m)),u.set("POLYGON",d.filter((e=>!m(e))));const g=Ie(n,s,e.schema,!0);let w=Ie(n,s,e.schema,!1);w=g.concat(w);const h=new r,F=Array.from(u.keys()).filter((e=>u.get(e).length>0));await Promise.all(F.map((async t=>{const r=u.get(t),n=await Promise.all(r.map((e=>Le(e.geometry,c)))),s=await async function(e){const{wkid:t,wkt:r}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===t&&e.spatialReference.wkt===r)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return r??await q(t??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:xe.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>je(e,a)))){n[a]=xe.STRING;continue}const t=r?r.fields.find((e=>te(e.name,a))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[a]=xe.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?xe.NUMBER:xe.DATE;break;default:n[a]=xe.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,a)instanceof Date||void 0===i(e,a)))&&e.some((e=>i(e,a)instanceof Date))?n[a]=o?xe.NUMBER:xe.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=xe.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=xe.BOOLEAN:n[a]=xe.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(E(e)){const{x:t,y:r,z:o,m:n}=e,a=[t,r];return e.hasZ&&a.push(o),e.hasM&&a.push(n),ot(a,e)}if(R(e))return nt(e.points,e);if(A(e))return at(e.paths,e);if(I(e))return at(e.rings,e);if(_(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(n),p=function(e,t,r,o){const n=function(e){const t=new Set,r=new Map;for(const o of e){let e=o.replaceAll(".","_");e.length>Ne&&(e=e.substring(0,Ne));let n=1;for(;t.has(e);){const t=`_${n}`,r=Ne-t.length;e=`${e.substring(0,r)}${t}`,n++}t.add(e),r.set(o,e)}return r}(t),a=[];for(const i of e){const e={};for(const a of t){let t=Pe(i,a,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=it(t,r[a],{...o,isDateOnly:"date-only"===i.schema.findFieldByName(a)?.type})}e[n.get(a)]=t}a.push(e)}return a}(r,w,m,i);o.write(p,t,f,((e,r)=>{const o=F.length>1?`${l}_${t.toLowerCase()}`:l;h.file(`${o}.shp`,r.shp.buffer,{binary:!0}),h.file(`${o}.shx`,r.shx.buffer,{binary:!0}),h.file(`${o}.dbf`,r.dbf.buffer,{binary:!0}),h.file(`${o}.prj`,s)}))})));const S=await h.generateAsync({type:"uint8array"});return new Blob([S.buffer],{type:"text/plain"})}export async function kmlToLayerExtensions(e){D("blob",e).isNotMissing();const a=await e.text(),l=(new DOMParser).parseFromString(a,"application/xml"),m=function(e,a,u=!1){const f={};l.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const p=e.querySelector(":scope > name")?.textContent??"Unnamed Container",y=new Map;e.querySelectorAll(":scope > Placemark").forEach(((e,i)=>{const s=e.querySelector("name")?.textContent??"",c=e.querySelector("description")?.textContent??"",l=function(e){const t=e.querySelector("Point > coordinates"),a=e.querySelector("LineString > coordinates"),i=e.querySelector("Polygon");if(t?.textContent){const[e]=parseKMLCoordinates(t.textContent.replace(/ /g,""));return new r(e)}if(a?.textContent)return new n({paths:[parseKMLCoordinates(a.textContent).map((({x:e,y:t})=>[e,t]))]});if(i?.textContent){const e=i.querySelector("outerBoundaryIs > LinearRing > coordinates");if(e?.textContent){const t=[parseKMLCoordinates(e.textContent).map((({x:e,y:t})=>[e,t]))];return new o({rings:t})}}return}(e);if(l?.type){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),l.type,a);y.has(l.type)||y.set(l.type,{graphics:[],symbols:[]});let n=function(e,t){for(let r=0;r<e.length;r++)if(st(e[r],t))return r;return-1}(y.get(l.type).symbols,o);-1===n&&(y.get(l.type).symbols.push(o),n=y.get(l.type).symbols.length-1),y.get(l.type).graphics.push(new t({geometry:l,attributes:{name:s,description:c,SymbolID:n,OBJECTID:p+i}}))}}));const d=e.querySelectorAll(":scope > Folder, :scope > Document");if(u||1!==y.size||0!==d.length){const e=new N({layer:new s({title:p})});return y.forEach(((t,r)=>{const o=new i({displayField:"name",title:`${r.slice(0,1).toUpperCase()+r.slice(1)}s`,source:t.graphics,renderer:ct(t.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]}),n=new T({layer:o});e.layerExtensions.add(n)})),d.forEach(((t,r)=>{const o=m(t,r);e.layerExtensions.add(o)})),e}{const e=[...y.values()][0],t=new i({displayField:"name",title:p,source:e.graphics,renderer:ct(e.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]});return new T({layer:t})}},u=[];return l.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=m(e,t,!0);r.layerExtensions.length&&u.push(r)})),u}export async function lpkxToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedLpkxData:o}=t;D("options.lpkxBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing();const{createLpkxLayer:n}=await import("./support/_lpkxConverter.js"),a=await n(o,e,r);return[new O({layer:a})]}export async function dxfToLayerExtensions(e,t,r){const{inputSpatialReference:o,outputSpatialReference:n}=t;D("options.dxfBlob",e).isNotMissing(),D("options.inputSpatialReference",o).isNotMissing(),D("options.outputSpatialReference",n).isNotMissing();const a=new ne(o,n,r),i=a.getContext(),c=await e.text(),l=new w;await ee();try{const e=l.parseSync(c);if(!e)throw new Error("DXF parsing failed: parser returned null");i.dxf=e}catch(e){throw e instanceof Error?e:new Error(String(e))}const m=e instanceof File?e.name:"dxf-layer",u=m.replace(/[^a-zA-Z0-9_.-]/g,"_");if(i.fileName=m,i.sanitizedFileName=u,i.subLayers=await a.processAll(),!i.subLayers||0===i.subLayers.length)return[];const f=new s({id:`dxf-group-${u}-${(new Date).getTime()}`,title:m,visible:!0}),p={layer:f,visibilityMode:"independent"};return f.layers.addMany(i.subLayers),[new N(p)]}export async function fgdbToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedFgdbData:o}=t;D("options.fgdbBlob",e).isNotMissing(),D("options.displayServiceUrl",r).isNotMissing(),D("options.geoProcessedFgdbData",o).isNotMissing();const{createFgdbLayer:n}=await import("./support/_fgdbConverter.js"),a=await n(o,e,r);return[new O({layer:a})]}export async function shapefileToUploadData(e,t){D("shapefileData",e).isNotMissing();const o=function(e){const t={...Ee(e)};return{...t,...e}}(t),n=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:i},{default:s}]=await Promise.all([import("jszip"),import("shpjs")]),c=await n,l=await i.loadAsync(new Uint8Array(c)),m=new x;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,p=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(p=function(e){if(!e.length)return[];let t=e[0];const r=t.match(Oe);return r?(t=r[1],e.filter((e=>{const r=e.match(Oe);return r?.[1]===t}))):[t]}(p),u.some((e=>e.endsWith(".prj")))&&!p.every((e=>m.has(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(u.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await l.file(e).async("string");if(f){if(t!==f)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else f=t})));let y=[],d=[];for(const e of p){if(!m.has(`${e}.shp`)||!m.has(`${e}.shx`)||!m.has(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=s.parseShp(await m.get(`${e}.shp`).async("uint8array")),r=s.parseDbf(await m.get(`${e}.dbf`).async("uint8array"));if(r.length!==t.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");y=y.concat(r),d=d.concat(t)}const g=await Promise.all(d.map((e=>async function(e,t){const o=E(e)?function(e){D("geometry.coordinates",e.type).matches("Point"),D("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,o,n]=e.coordinates,i=new r({x:t,y:o,spatialReference:a.WGS84});if(Array.isArray(n)){const[e,t]=n;!e&&!t||e?i.z=e:i.m=t}return i}(e):await K(e);if(t){let e;try{const r=await Y(t);e=new a({wkid:$(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];y.forEach(((e,t)=>e[w]=JSON.stringify(g[t].toJSON())));const h=function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(y);return o.primaryKeyField||(o.primaryKeyField=de(h)),{data:h,...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){return uploadDataToFeatureSet(await shapefileToUploadData(e,t))}export function getDefaultSymbol(e,t){const r=e%8;let o=["#FFDBFF","#88D6FF","#7F9FC3","#FF8200","#F34A53","#76E3B9","#E7BFFF","#FFC467"][r],n=["#EF3786","#005A99","#2D5070","#790C00","#4C0000","#006543","#6244A9","#904200"][r];if(Math.floor(e/8)%2!=0){const e=o;o=n,n=e}switch(t){case"point":case"multipoint":return new g({color:o,outline:{color:n}});case"polyline":return new d({color:o,width:"2"});case"polygon":return new y({color:o,outline:{color:n}});case"mesh":return new f({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function Ee(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:S,detectOid:!e?.primaryKeyField}}function Re(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...Ee(e)},...e}}function Ae(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function Ie(e,t,r,o){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let o=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function _e(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;if(Array.isArray(t)){const e=new Set;for(const r of t)if("fields"===r.type&&Array.isArray(r.fieldInfos))for(const t of r.fieldInfos)t.visible&&e.add(t.fieldName);if(e.size>0)return Array.from(e)}const r=e.featureSettings.popupTemplate?.fieldInfos;if(Array.isArray(r)){const e=[];for(const t of r)t.visible&&e.push(t.fieldName);if(e.length>0)return e}return["*"]}async function Ge(e,t){const r=await Le(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!E(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!E(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await X(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await Z(r))]:[""]:[]}async function Le(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await J([e],t))[0]:e}function Ce(e,t){const r=[t.delimiter,we,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(we,"g"),`${we}${we}`);return`${we}${t}${we}`}return e}function ve(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||j.ROUND_TRIP;return B(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():L({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof b)return k({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Ue(r)),r}function Pe(e,t,r){if(r.useFormattedValues||je(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const o=e.schema.findFieldByName(t)?.type;if(null!=o)switch(o){case"date":case"date-only":case"timestamp-offset":{const r=G(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=H(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function je(e,t){return!!te(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Ue(e){for(const t of ge)if(e.startsWith(t))return`\t${e}`;return e}function $e(e,t,r){const o=e.startsWith(we),n=e.endsWith(we);if(o&&!n||!o&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const a=o?e.substring(1,e.length-1):e;let i=-1;return Be(a,we,((e,o)=>{if(o===a.length)return!0;if(i<0){if(o!==a.length)return i=o,!0}else if(o===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),a.replace(new RegExp(`${we}${we}`,"g"),we)}function Be(e,t,r){let o,n=!1,a=0,i=0;for(;o=e.indexOf(t,a),!(o<0);){for(let t=a;t<o;)e.substring(t).startsWith(we)?(n=!n,t+=1):t++;const s=o+t.length;if(!n){const e=r(i,o);if(i=s,!e)return}a=s}r(i,e.length)}async function He(e,t){const r=JSON.parse(e),o=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(o.spatialReference=t),o}async function ke(e,t){const r=await K(JSON.parse(e));return r.spatialReference=t,r}async function ze(e,t){const r=await W(e);return r.spatialReference=t,r}function Je(e,t,r){const o=r?[r]:geometryTypeHeaders[t];for(const t of o){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function Xe(e,t){return(await Promise.all(e.map((async(e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return await t(o,void 0),r}catch{return}})))).find((e=>void 0!==e))}function We(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:$({locale:t,format:r},e)}async function qe(e,t,r){const o=r?e.slice(1):e;if(r){const r=Je(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of De){try{await Ye(r[0],n,t,o)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=Je(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of De){const n=await Xe(o[0],r);if(void 0!==n){try{await Ye(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function Ye(e,t,r,o){return{columnIndices:[e],geometries:await Promise.all(o.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function Ze(e,t,r){let o=!1,n=!0,a=!0,i=!0,s=!0,c=!0;const l=new Set,{data:m,includeHeaderRow:u,dateFormat:f,timeFormat:p,primaryKeyField:y,locale:d}=e,g=u?m[0]:[],w=u?m.slice(1):m;for(const e of w){const r=e[t];r?.raw&&(l.add(r.raw),o=!0,n&&(n=Q(r.raw,d)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||G(f||C,r.raw)!==v),s&&(s=G(f||Se,r.formatted)!==v),i&&(i=r.raw instanceof b||H(p||z,r.raw).isValid),c&&(c=H({format:p||Te,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return y&&g[t]?.raw===y||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function Ke(e,t,r){const{escapeFormulaChars:o,locale:n,numberFormat:a,dateFormat:i,timeFormat:s}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?We(e,n,a):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:G({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof b)return e.toString();if(e instanceof Date)return new b(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new b(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:H({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of ge)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function Ve(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.TIME_SHORT:return"h:mm AM/PM";case P.TIME_LONG:return"h:mm:ss AM/PM";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy h:mm AM/PM";case P.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case P.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case P.ISO_8601:case P.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&be().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&be().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Qe(e){switch(e){case P.DATE_SHORT:return"dd/MM/yyyy";case P.DATE_LONG:return"MMMM d, yyyy";case P.DATE_TIME_SHORT:case P.DEFAULT:return"MMM d yyyy";case P.DATE_TIME_LONG:return"MMMM d yyyy";case P.FULL:return"dddd, MMMM d yyyy";case P.ISO_8601:case P.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function et(e){switch(e){case U.TIME_SHORT:return"h:mm AM/PM";case U.TIME_LONG:return"h:mm:ss AM/PM";case U.ISO_8601:case U.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&be().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function tt(e){switch(e){case j.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case j.CURRENCY:return'"$"#,##0.00';case j.FIXED_POINT:case j.DEFAULT:return"0.0000";case j.NUMBER:return"#,##0.0000";case j.PERCENT:return"0%";case j.ROUND_TRIP:return"0.00000";default:return e}}function rt(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof b)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Ue(r)),r}function ot(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function nt(e,t){return e.map((e=>ot(e,t)))}function at(e,t){return e.map((e=>nt(e,t)))}function it(e,t,r){switch(t){case xe.NUMBER:return e instanceof Date?e.getTime():$(e);case xe.STRING:return e instanceof Date?L({format:r.dateFormat??P.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof b?k({format:r.timeFormat??U.ROUND_TRIP},e):"number"==typeof e?B(r.numberFormat??j.DEFAULT,e):e.toString();case xe.BOOLEAN:return!!e;case xe.DATE:return G(e);default:return e.toString()}}function st(e,t){return JSON.stringify(e.toJSON())===JSON.stringify(t.toJSON())}function ct(e){return 1===e.length?new l({symbol:e[0]}):new m({field:"SymbolID",uniqueValueInfos:[...e.map(((e,t)=>new u({label:t.toString(),symbol:e,value:t})))]})}
1
+ import e from"@arcgis/core/Color.js";import t from"@arcgis/core/Graphic.js";import r from"@arcgis/core/geometry/Point";import o from"@arcgis/core/geometry/Polygon.js";import n from"@arcgis/core/geometry/Polyline.js";import i from"@arcgis/core/geometry/SpatialReference";import a from"@arcgis/core/layers/FeatureLayer.js";import s from"@arcgis/core/layers/GroupLayer.js";import c from"@arcgis/core/layers/support/Field.js";import l from"@arcgis/core/renderers/SimpleRenderer.js";import m from"@arcgis/core/renderers/UniqueValueRenderer.js";import u from"@arcgis/core/renderers/support/UniqueValueInfo.js";import f from"@arcgis/core/symbols/MeshSymbol3D.js";import p from"@arcgis/core/symbols/PictureMarkerSymbol.js";import y from"@arcgis/core/symbols/SimpleFillSymbol.js";import d from"@arcgis/core/symbols/SimpleLineSymbol.js";import g from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import w from"dxf-parser";import{ArgumentError as h}from"../ArgumentError.js";import{NotFoundError as F}from"../NotFoundError.js";import{geometryTypeToJson as S}from"../json/GeometryJson.js";import{translate as N}from"../locale/language.js";import{INVARIANT as T}from"../locale.js";import{FeatureCollectionLayerExtension as O}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as x}from"../mapping/GroupLayerExtension.js";import{MapImageLayerExtension as b}from"../mapping/MapImageLayerExtension.js";import{CaseInsensitiveObservableMap as D}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as M}from"../utilities/Time.js";import{checkArg as E,assertNever as R}from"../utilities/checkArg.js";import{isPoint as A,isMultipoint as I,isPolyline as _,isPolygon as G,isExtent as L}from"../utilities/esri.js";import{parse as C,format as v,DEFAULT_PARSING_FORMATS as P,INVALID_DATE as j}from"../utilities/format/date.js";import{DateFormat as U,NumberFormat as $,TimeFormat as B}from"../utilities/format/formats.js";import{parse as H,format as k}from"../utilities/format/number.js";import{parse as z,format as J,DEFAULT_PARSING_FORMATS as X}from"../utilities/format/time.js";import{project as W,esriToWKT as q,wktToEsri as Y,esriWkidToWkt as Z,esriWktToWkid as K,esriToGeoJSON as V,geoJSONToEsri as Q}from"../utilities/geometry.js";import{getLogger as ee}from"../utilities/log.js";import{isNumeric as te}from"../utilities/number.js";import{delay as re}from"../utilities/promise.js";import{caseInsensitiveEquals as oe}from"../utilities/string.js";import{Feature as ne}from"./Feature.js";import{FeatureSet as ie}from"./FeatureSet.js";import{DxfEntityProcessor as ae}from"./support/_dxfConverters.js";import{createGpxDocument as se,serializeGpxDocument as ce,buildGpxTrack as le,buildGpxTrackPoint as me,buildGpxWaypoint as ue,getGpxExtensions as fe,getGpxTrackDescription as pe,getGpxTrackName as ye,getGpxTrackTime as de,getGpxTrackId as ge}from"./support/_gpxExport.js";import{addAndPopulateFidField as we}from"./support/_shapefileConverter.js";const he=["=","-","+","@"],Fe='"',Se="\r\n",Ne="\n",Te=[...P.map(et),"M/d/yy"],Oe=[...X.map(rt).map((e=>e.replace("AM/PM","tt")))],xe=10,be=/(\w+)_(point|multipoint|polyline|polygon)z?/;var De;function Me(){return ee("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(De||(De={}));export const FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g;export var GeometryFormat;!function(e){e.NONE="NONE",e.WKT="WKT",e.XY="XY",e.XYZ="XYZ",e.LAT_LON="LAT_LONG",e.GEO_JSON="GEO_JSON",e.ARCGIS_JSON="ARCGIS_JSON"}(GeometryFormat||(GeometryFormat={}));export const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["latitude","longitude"],["lat","lon"],["lat","long"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};const Ee=[[GeometryFormat.ARCGIS_JSON,ze],[GeometryFormat.GEO_JSON,Je],[GeometryFormat.WKT,Xe]],Re=new Map(Ee);export async function uploadDataToFeatureSet(e){const t=await async function(e){const{data:t,includeHeaderRow:o,geometryFormat:n,geometryFields:i,locale:a,numberFormat:s,inSpatialReference:c}=e,l=o?t.slice(1):t;if(n===GeometryFormat.NONE)return{columnIndices:[]};const m=e=>Ye(e,a,s),u=(e,t)=>{const o=t===GeometryFormat.XYZ,n=t===GeometryFormat.LAT_LON;return{columnIndices:e,geometries:l.map((t=>{if(t.length>=Math.max(...e)&&te(t[e[0]]?.raw,a)&&te(t[e[1]]?.raw,a)&&(!o||te(t[e[2]]?.raw,a)))return new r({x:m(n?t[e[1]].raw:t[e[0]].raw),y:m(n?t[e[0]].raw:t[e[1]].raw),z:o?m(t[e[2]].raw):0,spatialReference:c})}))}},f=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),c)})))}),p=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return u(e,t);case GeometryFormat.ARCGIS_JSON:return f(e[0],ze);case GeometryFormat.GEO_JSON:return f(e[0],Je);case GeometryFormat.WKT:return f(e[0],Xe);default:return R(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=We(o?t[0]:t[0].map(((e,t)=>({raw:t.toString()}))),n,o?i:i.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(o&&void 0===e)throw new Error(`Error parsing file data: Expected geometry columns ${geometryTypeHeaders[n][0].join(",")} are missing for GeometryType.${n}`);return p(e??[0],n)}const[y,d]=await Ze(t,c,o);if(y===GeometryFormat.NONE)return{columnIndices:[]};return d.length>1?u(d,y):f(d[0],Re.get(y))}(e),o=function(e,t){const{data:r,displayField:o,includeHeaderRow:n,inSpatialReference:i,outSpatialReference:a,generatePrimaryKey:s}=e,c={fields:[]},l=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:m}=e,u=0;for(let t=0;t<r[0].length;t++){if(l(t))continue;const o=Ve(e,t,!s&&!m&&!c.fields.find((e=>"esriFieldTypeOID"===e.type)));let i=r[0][t]?.raw?.toString(),a=i?.replace(FIELD_NAME_REGEX,"_");n&&a||(a="field"+ ++u,i=N("gcx.api.data.convert.import-field-alias",u)),c.fields.push({alias:i,name:a,type:o}),"esriFieldTypeOID"===o&&(m=a)}if(c.spatialReference=a??t.geometries?.[0]?.spatialReference??i,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];c.geometryType=e.every((e=>e===r))?S(r):void 0}if(!c.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=c.fields.length+1,t=!!c.fields.find((e=>"objectid"===e.name.toLowerCase()));m=t?`OBJECTID_${e}`:"OBJECTID",c.fields.push({name:m,alias:m,type:"esriFieldTypeOID"})}return c.displayField=o??c.fields.find((e=>!oe(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!oe(e.name,m)))?.name??m,c.primaryKeyField=m,c}(e,t),n=await async function(e,t,r){const{data:o,includeHeaderRow:n,outFields:i,escapeFormulaChars:a,locale:s,numberFormat:c,dateFormat:l,timeFormat:m}=e,{spatialReference:u}=r,f=[],p=n?o.slice(1):o,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(p.map((async(e,o)=>{const n=new ne;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(i.includes("*")||i.filter((e=>oe(e,u.name))).length>0){let e=await Qe(f[t]?.raw,u,{escapeFormulaChars:a,dateFormat:l,numberFormat:c,timeFormat:m,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=o),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await ve(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new ie({features:n,schema:o})}export async function toCsv(e,t){E("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:U.ROUND_TRIP,timeFormat:B.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:i.WGS84,includeHeaderRow:!0,outFields:Le(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?Se:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:a,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=_e(r,o),f=Ge(r,c,e.schema,!0),p=Ge(r,c,e.schema,!1);if(a){const e=[];for(const t of u)e.push(Pe(t,o));for(const t of f)e.push(Pe(t,o));for(const t of p)e.push(Pe(t,o));const t=e.join(s)+l;m.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>{const o=Ue(e,t,r),n=e.schema.findFieldByName(t)?.type;return Pe(je(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await Ce(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":je(e,t))));return r.map((e=>""===e?"":Pe(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...p.map((e=>r(e,o))));const n=`${t.join(s)}${l}`;m.push(n)})));return new Blob(m,{type:"text/plain",endings:"\n"===l||l===Se?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(E("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsText(e)}));r=await t}else r=e;const o=Ie(t),n=o.rowDelimiter||function(e){let t=Ne;return ke(e,Se,((r,o)=>(0===r&&o===e.length||(t=Se),!1))),t}(r),i=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(ke(e,t,((t,r)=>(r!==e.length||t!==r)&&(n.push(e.substring(t,r)),n.length<3))),0===n.length)return o;let i=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>n[0].includes(e.delimiter)));if(0===i.length)return o;for(const e of n)for(const t of i){let o=0,n=0;ke(e,t.delimiter,((i,a)=>{if(a!==e.length&&o++,","===t.delimiter){const t=e.charAt(a-1),o=e.charAt(a+1);te(t,r)&&te(o,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(o),","===t.delimiter&&t.rowsNumberAdjacentOccurrences.push(n)}if(i=i.filter((e=>e.rowsDelimiterOccurrences.every((t=>e.rowsDelimiterOccurrences[0]===t)))).sort(((e,t)=>t.rowsDelimiterOccurrences[0]-e.rowsDelimiterOccurrences[0])),i.length>1&&","===i[0].delimiter&&null!=r&&r!==T){const e=i[0];if(","===e?.delimiter&&","===Intl.NumberFormat(r).formatToParts(1.1).find((e=>"decimal"===e.type))?.value)for(let t=0;t<e.rowsDelimiterOccurrences.length;t++)if(e.rowsDelimiterOccurrences[t]<=e.rowsNumberAdjacentOccurrences[t]){i=i.filter((e=>","!==e.delimiter));break}}if(0===i.length)return o;return i[0].delimiter}(r,n,o.locale),a=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return ke(e,r,((r,n)=>{const i=e.substring(r,n);return o.push({raw:He(i,t,o.length)}),!0})),o};if(ke(e,t,((t,r)=>{const i=e.substring(t,r);return i.length>0&&o.push(n(i,o.length)),!0})),o.length){const e=o[0].length;o.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return o}(r,n,i);let{geometryFormat:s,geometryFields:c}=o;if(!s){const[e,t]=await Ze(a,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?a[0][e]?.raw??N("gcx.api.data.convert.import-field-alias",(e+1).toString()):N("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:a,...o,geometryFormat:s,geometryFields:c}}export async function csvToFeatureSet(e,t){const r=Ie(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toGpx(e){E("featureSet",e).isNotMissing();const t=Array.from(e),r=se(),o=r.documentElement,n=new Set;for(const e of t){if(!e.geometry)continue;const t=await ve(e.geometry,i.WGS84),a={name:ye(e),desc:pe(e),time:de(e),extensions:fe(r,e),id:ge(e)};if(A(t))o.appendChild(ue(r,t.y,t.x,t.hasZ?t.z:void 0,a));else if(_(t))for(const e of t.paths){if(e.length<2)continue;const n=e.map((([e,o,n])=>me(r,o,e,t.hasZ?n:void 0)));o.appendChild(le(r,n,a))}else n.add(t.type)}if(n.size>0){const e=Array.from(n).join(", ");Me().warn(`One or more features with unsupported geometry types (${e}) were ignored during GPX conversion. GPX format only supports points and polylines.`)}const a=ce(r);return new Blob([a],{type:"application/gpx+xml"})}export async function toXLSX(e,t){E("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:Le(e.source),outSpatialReference:i.WGS84,dateFormat:U.DEFAULT,timeFormat:B.DEFAULT,numberFormat:$.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:a,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=_e(r,o),u=Ge(r,n,e.schema,!0),f=Ge(r,n,e.schema,!1),p=await import("xlsx"),y=p.utils.sheet_new();let d=!1;if(a){const t=m.concat(u).concat(function(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>oe(t.name,e)))?.alias??e))}(f,e.source));d=!0,p.utils.sheet_add_aoa(y,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await Ce(e.geometry,o));for(const r of u){const n=nt(e.attributes.get(r),o);t.push(n)}for(const i of f){const a=Ue(e,i,o);if(a instanceof M){const o=e.schema.findFieldByName(i);"time-only"===o?.type&&r.add(t.length)}else if(a instanceof Date){const r=e.schema.findFieldByName(i);"date-only"===r?.type&&n.add(t.length)}const s=nt(a,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void Me().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(y,[t],{cellDates:!0,origin:d?-1:void 0}),d=!0;const i=p.utils.decode_range(y["!ref"]);for(let e=i.s.c;e<=i.e.c;e++){const t=y[p.utils.encode_cell({r:i.e.r,c:e})];"d"===t.t?r.has(e)?t.z=rt(c??B.ROUND_TRIP):n.has(e)?t.z=tt(s??U.ROUND_TRIP):t.z=et(s??U.ROUND_TRIP):"n"===t.t&&(t.z=ot(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=y;const w=p.write(g,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),h=new Uint8Array(w.length);for(let e=0;e<w.length;e++)h[e]=w.charCodeAt(e);return new Blob([h.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){E("xlsxData",e).isNotMissing();const r=function(e){const t={includeHeaderRow:!0,inSpatialReference:i.WGS84,...Ae(e)};return{...t,...e}}(t),o=await async function(e,t){const r=await import("xlsx"),o=new Promise(((o,n)=>{const i=new FileReader;i.onload=()=>{const e=new Uint8Array(i.result);let n="";for(const t of e)n+=String.fromCharCode(t);const a=r.read(n,{type:"binary",cellDates:!0}),s=t.sheetName||a.SheetNames[0],c=a.Sheets[s];o(c)},i.onerror=()=>{n(i.error)},i.readAsArrayBuffer(e)})),n=await o,i=r.utils.decode_range(n["!ref"]),a=[];for(let e=i.s.r;e<=i.e.r;e++){const t=[];for(let o=i.s.c;o<=i.e.c;o++){const i=n[`${r.utils.encode_cell({r:e,c:o})}`];"d"===i?.t&&i.v instanceof Date&&(i.v=new Date(i.v.getTime()+6e4*i.v.getTimezoneOffset())),t.push(i?{raw:i.v,formatted:"s"===i.t?void 0:i.w}:{raw:""})}a.push(t)}return a}(e,r);let{geometryFormat:n,geometryFields:a}=r;if(!n){const[e,t]=await Ze(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??N("gcx.api.data.convert.import-field-alias",(e+1).toString()):N("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){E("xlsxData",e).isNotMissing();return uploadDataToFeatureSet(await xlsxToUploadData(e,t))}export function kmlHexToEsriColor(t){return e.fromHex(`#${t.match(/.{2}/g).reverse().join("")}`)}export function parseKMLCoordinates(e){return e.trim().split(/\s+/).map((e=>{const[t,r,o]=e.split(",").map(Number);return{x:t,y:r,z:o}}))}export function parseKMLSymbol(t,r,o){if(t){const r=t.querySelector("IconStyle > Icon > href")?.textContent;if(r)return new p({url:r,width:32,height:32});const o=t.querySelector("PolyStyle");if(o){const t=o.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]);return new y({color:r,outline:{color:[0,0,0,.5],width:1}})}const n=t.querySelector("LineStyle");if(n){const t=n.querySelector("color")?.textContent,r=t?kmlHexToEsriColor(t):new e([0,0,0,1]),o=parseFloat(n.querySelector("width")?.textContent||"1");return new d({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){E("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),n=Array.from(e),a={...{useFormattedValues:!1,outFields:Le(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:c,fileName:l}=a,m=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,f=n.filter((e=>A(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const p=n.filter((e=>I(e.geometry)));u.set("MULTIPOINTZ",p.filter(m)),u.set("MULTIPOINT",p.filter((e=>!m(e))));const y=n.filter((e=>_(e.geometry)));u.set("POLYLINEZ",y.filter(m)),u.set("POLYLINE",y.filter((e=>!m(e))));const d=n.filter((e=>G(e.geometry)||L(e.geometry)));u.set("POLYGONZ",d.filter(m)),u.set("POLYGON",d.filter((e=>!m(e))));const g=Ge(n,s,e.schema,!0);let w=Ge(n,s,e.schema,!1);w=g.concat(w);const h=new r,F=Array.from(u.keys()).filter((e=>u.get(e).length>0));await Promise.all(F.map((async t=>{const r=u.get(t),n=await Promise.all(r.map((e=>ve(e.geometry,c)))),s=await async function(e){const{wkid:t,wkt:r}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===t&&e.spatialReference.wkt===r)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return r??await Z(t??i.WGS84.wkid)}(n),m=a.useFormattedValues?Object.assign({},...w.map((e=>({[e]:De.STRING})))):function(e,t,r,o){const n={};for(const i of t){if(e.some((e=>$e(e,i)))){n[i]=De.STRING;continue}const t=r?r.fields.find((e=>oe(e.name,i))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[i]=De.NUMBER;break;case"date":case"timestamp-offset":n[i]=o?De.NUMBER:De.DATE;break;default:n[i]=De.STRING}continue}const a=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>a(e,i)instanceof Date||void 0===a(e,i)))&&e.some((e=>a(e,i)instanceof Date))?n[i]=o?De.NUMBER:De.DATE:e.every((e=>"number"==typeof a(e,i)||void 0===a(e,i)))&&e.some((e=>"number"==typeof a(e,i)))?n[i]=De.NUMBER:e.every((e=>"boolean"==typeof a(e,i)||void 0===a(e,i)))&&e.some((e=>"boolean"==typeof a(e,i)))?n[i]=De.BOOLEAN:n[i]=De.STRING}return n}(r,w,e.schema,"timestamp"===a.dateFormat),f=function(e){return e.map((e=>{if(A(e)){const{x:t,y:r,z:o,m:n}=e,i=[t,r];return e.hasZ&&i.push(o),e.hasM&&i.push(n),it(i,e)}if(I(e))return at(e.points,e);if(_(e))return st(e.paths,e);if(G(e))return st(e.rings,e);if(L(e)){const t=[e.xmin,e.ymax];return[[t,[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin],t]]}throw new Error("Unsupported geometry type.")}))}(n),p=function(e,t,r,o){const n=function(e){const t=new Set,r=new Map;for(const o of e){let e=o.replaceAll(".","_");e.length>xe&&(e=e.substring(0,xe));let n=1;for(;t.has(e);){const t=`_${n}`,r=xe-t.length;e=`${e.substring(0,r)}${t}`,n++}t.add(e),r.set(o,e)}return r}(t),i=[];for(const a of e){const e={};for(const i of t){let t=Ue(a,i,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=ct(t,r[i],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(i)?.type})}e[n.get(i)]=t}i.push(e)}return i}(r,w,m,a);o.write(p,t,f,((e,r)=>{const o=F.length>1?`${l}_${t.toLowerCase()}`:l;h.file(`${o}.shp`,r.shp.buffer,{binary:!0}),h.file(`${o}.shx`,r.shx.buffer,{binary:!0}),h.file(`${o}.dbf`,r.dbf.buffer,{binary:!0}),h.file(`${o}.prj`,s)}))})));const S=await h.generateAsync({type:"uint8array"});return new Blob([S.buffer],{type:"text/plain"})}export async function kmlToLayerExtensions(e){E("blob",e).isNotMissing();const i=await e.text(),l=(new DOMParser).parseFromString(i,"application/xml"),m=function(e,i,u=!1){const f={};l.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const p=e.querySelector(":scope > name")?.textContent??"Unnamed Container",y=new Map;e.querySelectorAll(":scope > Placemark").forEach(((e,a)=>{const s=e.querySelector("name")?.textContent??"",c=e.querySelector("description")?.textContent??"",l=function(e){const t=e.querySelector("Point > coordinates"),i=e.querySelector("LineString > coordinates"),a=e.querySelector("Polygon");if(t?.textContent){const[e]=parseKMLCoordinates(t.textContent.replace(/ /g,""));return new r(e)}if(i?.textContent)return new n({paths:[parseKMLCoordinates(i.textContent).map((({x:e,y:t})=>[e,t]))]});if(a?.textContent){const e=a.querySelector("outerBoundaryIs > LinearRing > coordinates");if(e?.textContent){const t=[parseKMLCoordinates(e.textContent).map((({x:e,y:t})=>[e,t]))];return new o({rings:t})}}return}(e);if(l?.type){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),l.type,i);y.has(l.type)||y.set(l.type,{graphics:[],symbols:[]});let n=function(e,t){for(let r=0;r<e.length;r++)if(lt(e[r],t))return r;return-1}(y.get(l.type).symbols,o);-1===n&&(y.get(l.type).symbols.push(o),n=y.get(l.type).symbols.length-1),y.get(l.type).graphics.push(new t({geometry:l,attributes:{name:s,description:c,SymbolID:n,OBJECTID:p+a}}))}}));const d=e.querySelectorAll(":scope > Folder, :scope > Document");if(u||1!==y.size||0!==d.length){const e=new x({layer:new s({title:p})});return y.forEach(((t,r)=>{const o=new a({displayField:"name",title:`${r.slice(0,1).toUpperCase()+r.slice(1)}s`,source:t.graphics,renderer:mt(t.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]}),n=new O({layer:o});e.layerExtensions.add(n)})),d.forEach(((t,r)=>{const o=m(t,r);e.layerExtensions.add(o)})),e}{const e=[...y.values()][0],t=new a({displayField:"name",title:p,source:e.graphics,renderer:mt(e.symbols),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"SymbolID",type:"integer",alias:"SymbolID",editable:!1}),new c({name:"name",type:"string",alias:"name"}),new c({name:"description",type:"string",alias:"description",defaultValue:""})]});return new O({layer:t})}},u=[];return l.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=m(e,t,!0);r.layerExtensions.length&&u.push(r)})),u}export async function lpkxToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedLpkxData:o}=t;E("options.lpkxBlob",e).isNotMissing(),E("options.displayServiceUrl",r).isNotMissing();const{createLpkxLayer:n}=await import("./support/_lpkxConverter.js"),i=await n(o,e,r);return[new b({layer:i})]}export async function dxfToLayerExtensions(e,t,r){const{inputSpatialReference:o,outputSpatialReference:n}=t;E("options.dxfBlob",e).isNotMissing(),E("options.inputSpatialReference",o).isNotMissing(),E("options.outputSpatialReference",n).isNotMissing();const i=new ae(o,n,r),a=i.getContext(),c=await e.text(),l=new w;await re();try{const e=l.parseSync(c);if(!e)throw new Error("DXF parsing failed: parser returned null");a.dxf=e}catch(e){throw e instanceof Error?e:new Error(String(e))}const m=e instanceof File?e.name:"dxf-layer",u=m.replace(/[^a-zA-Z0-9_.-]/g,"_");if(a.fileName=m,a.sanitizedFileName=u,a.subLayers=await i.processAll(),!a.subLayers||0===a.subLayers.length)return[];const f=new s({id:`dxf-group-${u}-${(new Date).getTime()}`,title:m,visible:!0}),p={layer:f,visibilityMode:"independent"};return f.layers.addMany(a.subLayers),[new x(p)]}export async function fgdbToLayerExtensions(e,t){const{displayServiceUrl:r,geoProcessedFgdbData:o}=t;E("options.fgdbBlob",e).isNotMissing(),E("options.displayServiceUrl",r).isNotMissing(),E("options.geoProcessedFgdbData",o).isNotMissing();const{createFgdbLayer:n}=await import("./support/_fgdbConverter.js"),i=await n(o,e,r);return[new b({layer:i})]}export async function shapefileToUploadData(e,t){E("shapefileData",e).isNotMissing();const o=function(e){const t={...Ae(e)};return{...t,...e}}(t),n=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:a},{default:s}]=await Promise.all([import("jszip"),import("shpjs")]),c=await n,l=await a.loadAsync(new Uint8Array(c)),m=new D;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,p=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(p=function(e){if(!e.length)return[];let t=e[0];const r=t.match(be);return r?(t=r[1],e.filter((e=>{const r=e.match(be);return r?.[1]===t}))):[t]}(p),u.some((e=>e.endsWith(".prj")))&&!p.every((e=>m.has(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");if(0===p.length)throw new h("shapefileData",`No shapefile found in the provided ${u.map((e=>e.substring(0,e.length-4)))} zip file(s).`);await Promise.all(u.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await l.file(e).async("string");if(f){if(t!==f)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else f=t})));let y=[],d=[];for(const e of p){if(!m.has(`${e}.shp`)||!m.has(`${e}.shx`)||!m.has(`${e}.dbf`))throw new F("Shapefile must contain shp, shx, and dbf files.");const t=s.parseShp(await m.get(`${e}.shp`).async("uint8array")),r=s.parseDbf(await m.get(`${e}.dbf`).async("uint8array"));if(r.length!==t.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");y=y.concat(r),d=d.concat(t)}const g=await Promise.all(d.map((e=>async function(e,t){if(!e)return;const o=A(e)?function(e){E("geometry.coordinates",e.type).matches("Point"),E("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,o,n]=e.coordinates,a=new r({x:t,y:o,spatialReference:i.WGS84});if(Array.isArray(n)){const[e,t]=n;!e&&!t||e?a.z=e:a.m=t}return a}(e):await Q(e);if(t){let e;try{const r=await K(t);e=new i({wkid:H(r)})}catch{}e||(e=new i({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];y.forEach(((e,t)=>e[w]=JSON.stringify(g[t]?g[t].toJSON():void 0)));const S=function(e){const t=e.map((e=>Object.keys(e))).reduce(((e,t)=>e.concat(t.filter((t=>!e.includes(t))))),[]);return[t.map((e=>({raw:e}))),...e.map((e=>t.map((t=>({raw:e[t]})))))]}(y);return o.primaryKeyField||(o.primaryKeyField=we(S)),{data:S,...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??i.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){return uploadDataToFeatureSet(await shapefileToUploadData(e,t))}export function getDefaultSymbol(e,t){const r=e%8;let o=["#FFDBFF","#88D6FF","#7F9FC3","#FF8200","#F34A53","#76E3B9","#E7BFFF","#FFC467"][r],n=["#EF3786","#005A99","#2D5070","#790C00","#4C0000","#006543","#6244A9","#904200"][r];if(Math.floor(e/8)%2!=0){const e=o;o=n,n=e}switch(t){case"point":case"multipoint":return new g({color:o,outline:{color:n}});case"polyline":return new d({color:o,width:"2"});case"polygon":return new y({color:o,outline:{color:n}});case"mesh":return new f({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function Ae(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:T,detectOid:!e?.primaryKeyField}}function Ie(e){return{...{includeHeaderRow:!0,inSpatialReference:i.WGS84,...Ae(e)},...e}}function _e(e,t){return t.geometryFormat===GeometryFormat.XYZ?["x","y","z"]:t.geometryFormat===GeometryFormat.XY?["x","y"]:t.geometryFormat===GeometryFormat.LAT_LON?["latitude","longitude"]:t.geometryFormat===GeometryFormat.NONE?[]:["geometry"]}function Ge(e,t,r,o){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return n;if(t&&!t.includes("*"))return t.filter((e=>!n.includes(e)));{const t=r.fields.filter((e=>"oid"!==e.type)).map((e=>e.name)).toArray();let o=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function Le(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;if(Array.isArray(t)){const e=new Set;for(const r of t)if("fields"===r.type&&Array.isArray(r.fieldInfos))for(const t of r.fieldInfos)t.visible&&e.add(t.fieldName);if(e.size>0)return Array.from(e)}const r=e.featureSettings.popupTemplate?.fieldInfos;if(Array.isArray(r)){const e=[];for(const t of r)t.visible&&e.push(t.fieldName);if(e.length>0)return e}return["*"]}async function Ce(e,t){const r=await ve(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!A(r))throw new Error("Cannot use geometry format XYZ with non-point geometry");return[r.x,r.y,r.z]}if(t.geometryFormat===GeometryFormat.XY){if(!r)return["",""];if(!A(r))throw new Error("Cannot use geometry format XY with non-point geometry");return[r.x,r.y]}if(t.geometryFormat===GeometryFormat.LAT_LON){if(!r)return["",""];if(!A(r))throw new Error("Cannot use geometry format LAT_LONG with non-point geometry");return[r.y,r.x]}return t.geometryFormat===GeometryFormat.ARCGIS_JSON?r?[JSON.stringify(r.toJSON())]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[await q(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await V(r))]:[""]:[]}async function ve(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await W([e],t))[0]:e}function Pe(e,t){const r=[t.delimiter,Fe,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(Fe,"g"),`${Fe}${Fe}`);return`${Fe}${t}${Fe}`}return e}function je(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||$.ROUND_TRIP;return k(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():v({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof M)return J({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Be(r)),r}function Ue(e,t,r){if(r.useFormattedValues||$e(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const o=e.schema.findFieldByName(t)?.type;if(null!=o)switch(o){case"date":case"date-only":case"timestamp-offset":{const r=C(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=z(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function $e(e,t){return!!oe(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Be(e){for(const t of he)if(e.startsWith(t))return`\t${e}`;return e}function He(e,t,r){const o=e.startsWith(Fe),n=e.endsWith(Fe);if(o&&!n||!o&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const i=o?e.substring(1,e.length-1):e;let a=-1;return ke(i,Fe,((e,o)=>{if(o===i.length)return!0;if(a<0){if(o!==i.length)return a=o,!0}else if(o===a+1)return a=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),i.replace(new RegExp(`${Fe}${Fe}`,"g"),Fe)}function ke(e,t,r){let o,n=!1,i=0,a=0;for(;o=e.indexOf(t,i),!(o<0);){for(let t=i;t<o;)e.substring(t).startsWith(Fe)?(n=!n,t+=1):t++;const s=o+t.length;if(!n){const e=r(a,o);if(a=s,!e)return}i=s}r(a,e.length)}async function ze(e,t){const r=JSON.parse(e),o=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(o.spatialReference=t),o}async function Je(e,t){const r=await Q(JSON.parse(e));return r.spatialReference=t,r}async function Xe(e,t){const r=await Y(e);return r.spatialReference=t,r}function We(e,t,r){const o=r?[r]:geometryTypeHeaders[t];for(const t of o){const r=t.map((t=>e.map((e=>e?.raw?.toString().trim().toLowerCase())).indexOf(t.trim().toLowerCase())));if(r.every((e=>e>=0)))return r}}async function qe(e,t){return(await Promise.all(e.map((async(e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return await t(o,void 0),r}catch{return}})))).find((e=>void 0!==e))}function Ye(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:H({locale:t,format:r},e)}async function Ze(e,t,r){const o=r?e.slice(1):e;if(r){const r=We(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of Ee){try{await Ke(r[0],n,t,o)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=We(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of Ee){const n=await qe(o[0],r);if(void 0!==n){try{await Ke(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function Ke(e,t,r,o){return{columnIndices:[e],geometries:await Promise.all(o.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function Ve(e,t,r){let o=!1,n=!0,i=!0,a=!0,s=!0,c=!0;const l=new Set,{data:m,includeHeaderRow:u,dateFormat:f,timeFormat:p,primaryKeyField:y,locale:d}=e,g=u?m[0]:[],w=u?m.slice(1):m;for(const e of w){const r=e[t];r?.raw&&(l.add(r.raw),o=!0,n&&(n=te(r.raw,d)||Number.isNaN(r.raw)),i&&(i=r.raw instanceof Date||C(f||P,r.raw)!==j),s&&(s=C(f||Te,r.formatted)!==j),a&&(a=r.raw instanceof M||z(p||X,r.raw).isValid),c&&(c=z({format:p||Oe,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return y&&g[t]?.raw===y||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&a?"esriFieldTypeTimeOnly":o&&i?"esriFieldTypeDate":"esriFieldTypeString"}async function Qe(e,t,r){const{escapeFormulaChars:o,locale:n,numberFormat:i,dateFormat:a,timeFormat:s}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?Ye(e,n,i):null;if("esriFieldTypeDate"===t.type){if(e instanceof Date)return e.getTime();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new Date(t.y,t.m-1,t.d,t.H,t.M,t.S).getTime():void 0}return""===e?null:C({locale:n,format:a},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof M)return e.toString();if(e instanceof Date)return new M(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new M(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:z({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of he)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function et(e){switch(e){case U.DATE_SHORT:return"dd/MM/yyyy";case U.DATE_LONG:return"MMMM d, yyyy";case U.TIME_SHORT:return"h:mm AM/PM";case U.TIME_LONG:return"h:mm:ss AM/PM";case U.DATE_TIME_SHORT:case U.DEFAULT:return"MMM d yyyy h:mm AM/PM";case U.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case U.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case U.ISO_8601:case U.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&Me().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&Me().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function tt(e){switch(e){case U.DATE_SHORT:return"dd/MM/yyyy";case U.DATE_LONG:return"MMMM d, yyyy";case U.DATE_TIME_SHORT:case U.DEFAULT:return"MMM d yyyy";case U.DATE_TIME_LONG:return"MMMM d yyyy";case U.FULL:return"dddd, MMMM d yyyy";case U.ISO_8601:case U.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function rt(e){switch(e){case B.TIME_SHORT:return"h:mm AM/PM";case B.TIME_LONG:return"h:mm:ss AM/PM";case B.ISO_8601:case B.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&Me().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function ot(e){switch(e){case $.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case $.CURRENCY:return'"$"#,##0.00';case $.FIXED_POINT:case $.DEFAULT:return"0.0000";case $.NUMBER:return"#,##0.0000";case $.PERCENT:return"0%";case $.ROUND_TRIP:return"0.00000";default:return e}}function nt(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e)return e;if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime():e;if(e instanceof M)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Be(r)),r}function it(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function at(e,t){return e.map((e=>it(e,t)))}function st(e,t){return e.map((e=>at(e,t)))}function ct(e,t,r){switch(t){case De.NUMBER:return e instanceof Date?e.getTime():H(e);case De.STRING:return e instanceof Date?v({format:r.dateFormat??U.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof M?J({format:r.timeFormat??B.ROUND_TRIP},e):"number"==typeof e?k(r.numberFormat??$.DEFAULT,e):e.toString();case De.BOOLEAN:return!!e;case De.DATE:return C(e);default:return e.toString()}}function lt(e,t){return JSON.stringify(e.toJSON())===JSON.stringify(t.toJSON())}function mt(e){return 1===e.length?new l({symbol:e[0]}):new m({field:"SymbolID",uniqueValueInfos:[...e.map(((e,t)=>new u({label:t.toString(),symbol:e,value:t})))]})}
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>version | @vertigis/arcgis-extensions</title><meta name="description" content="Documentation for @vertigis/arcgis-extensions"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@vertigis/arcgis-extensions</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/version.html">version</a></li><li><a href="" aria-current="page">version</a></li></ul><h1>Variable version<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">version</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;54.10.2&quot;</span></div><div class="tsd-comment tsd-typography"><p>The current version of the Geocortex ArcGIS Extensions API.</p>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>version | @vertigis/arcgis-extensions</title><meta name="description" content="Documentation for @vertigis/arcgis-extensions"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@vertigis/arcgis-extensions</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/version.html">version</a></li><li><a href="" aria-current="page">version</a></li></ul><h1>Variable version<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">version</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;54.11.0&quot;</span></div><div class="tsd-comment tsd-typography"><p>The current version of the Geocortex ArcGIS Extensions API.</p>
2
2
  </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@vertigis/arcgis-extensions</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vertigis/arcgis-extensions",
3
3
  "license": "SEE LICENSE IN LICENSE",
4
- "version": "54.10.2",
4
+ "version": "54.11.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://dev.azure.com/vertigis/Studio/_git/arcgis-extensions-ts"
package/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * The current version of the Geocortex ArcGIS Extensions API.
3
3
  */
4
- export declare const version = "54.10.2";
4
+ export declare const version = "54.11.0";
package/version.js CHANGED
@@ -1 +1 @@
1
- export const version="54.10.2";
1
+ export const version="54.11.0";