@vertigis/arcgis-extensions 54.16.0 → 54.17.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.d.ts CHANGED
@@ -13,6 +13,7 @@ import type { IDxfJsonComponentContext } from "./support/_dxfInterfaces.js";
13
13
  import type { GeoProcessedFgdbData } from "./support/_fgdbConverter.js";
14
14
  import type { GeoProcessedLpkxData } from "./support/lpkxInterfaces.js";
15
15
  export type { GeoProcessedFgdbData } from "./support/_fgdbConverter.js";
16
+ export { getGdbVersion } from "../utilities/_version.js";
16
17
  /**
17
18
  * A union of simple fill, line, and marker symbols.
18
19
  */
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 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=ne.create();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},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
+ 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 _,isPolyline as G,isPolygon as I,isExtent as L}from"../utilities/esri.js";import{parse as v,format as C,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";export{getGdbVersion}from"../utilities/_version.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=ne.create();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 Ce(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=Ge(r,o),f=Ie(r,c,e.schema,!0),p=Ie(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 ve(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=_e(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=_e(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 Ce(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(G(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=Ge(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(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 ve(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=>_(e.geometry));u.set("MULTIPOINTZ",p.filter(m)),u.set("MULTIPOINT",p.filter(e=>!m(e)));const y=n.filter(e=>G(e.geometry));u.set("POLYLINEZ",y.filter(m)),u.set("POLYLINE",y.filter(e=>!m(e)));const d=n.filter(e=>I(e.geometry)||L(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=>Ce(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(_(e))return at(e.points,e);if(G(e))return st(e.paths,e);if(I(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},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 _e(e){return{...{includeHeaderRow:!0,inSpatialReference:i.WGS84,...Ae(e)},...e}}function Ge(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 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 ve(e,t){const r=await Ce(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 Ce(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():C({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=v(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||v(f||P,r.raw)!==j),s&&(s=v(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:v({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?C({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 v(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 +1 @@
1
- window.navigationData = "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"
1
+ window.navigationData = "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"