@vertigis/arcgis-extensions 51.12.0 → 51.13.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.
Files changed (68) hide show
  1. package/data/convert.d.ts +24 -0
  2. package/data/convert.js +1 -1
  3. package/data/support/_dxfConverters.d.ts +538 -0
  4. package/data/support/_dxfConverters.js +1 -0
  5. package/data/support/_dxfFunctions.d.ts +82 -0
  6. package/data/support/_dxfFunctions.js +1 -0
  7. package/data/support/_dxfInterfaces.d.ts +913 -0
  8. package/data/support/_dxfInterfaces.js +1 -0
  9. package/docs/html/assets/navigation.js +1 -1
  10. package/docs/html/assets/search.js +1 -1
  11. package/docs/html/classes/data_support__dxfConverters.DxfEntityProcessor.html +31 -0
  12. package/docs/html/classes/data_support__dxfConverters.DxfToGeoJsonInsertBlockMapper.html +29 -0
  13. package/docs/html/classes/data_support__dxfConverters.DxfToGeoJsonLineMapper.html +12 -0
  14. package/docs/html/classes/data_support__dxfConverters.DxfToGeoJsonPolygonMapper.html +21 -0
  15. package/docs/html/classes/data_support__dxfConverters.DxfToGeoJsonTextMapper.html +28 -0
  16. package/docs/html/functions/data_convert.dxfToLayerExtensions.html +7 -0
  17. package/docs/html/functions/data_support__dxfConverters.mapDXFLineTypeToEsri.html +13 -0
  18. package/docs/html/functions/data_support__dxfFunctions.deriveAnnotationMinScale.html +7 -0
  19. package/docs/html/functions/data_support__dxfFunctions.intToRGB.html +4 -0
  20. package/docs/html/functions/data_support__dxfFunctions.mapBasicLineType.html +5 -0
  21. package/docs/html/functions/data_support__dxfFunctions.mapDXFLineTypeToEsri.html +6 -0
  22. package/docs/html/functions/data_support__dxfFunctions.mapIsoPatterns.html +4 -0
  23. package/docs/html/functions/data_support__dxfFunctions.mapLineTypePattern.html +5 -0
  24. package/docs/html/functions/data_support__dxfFunctions.normalizeFillStyle.html +4 -0
  25. package/docs/html/functions/data_support__dxfFunctions.normalizeLineOutline.html +8 -0
  26. package/docs/html/hierarchy.html +1 -1
  27. package/docs/html/interfaces/data_convert.DxfToLayerExtensionsOptions.html +6 -0
  28. package/docs/html/interfaces/data_support__dxfInterfaces.DxfBlock.html +15 -0
  29. package/docs/html/interfaces/data_support__dxfInterfaces.DxfEntity.html +42 -0
  30. package/docs/html/interfaces/data_support__dxfInterfaces.DxfJsonComponentProperties.html +18 -0
  31. package/docs/html/interfaces/data_support__dxfInterfaces.DxfPoint.html +8 -0
  32. package/docs/html/interfaces/data_support__dxfInterfaces.DxfScale.html +9 -0
  33. package/docs/html/interfaces/data_support__dxfInterfaces.IAttDefEntity.html +22 -0
  34. package/docs/html/interfaces/data_support__dxfInterfaces.IBaseTable.html +6 -0
  35. package/docs/html/interfaces/data_support__dxfInterfaces.IDxfData.html +10 -0
  36. package/docs/html/interfaces/data_support__dxfInterfaces.IDxfJsonComponentContext.html +62 -0
  37. package/docs/html/interfaces/data_support__dxfInterfaces.ILayer.html +12 -0
  38. package/docs/html/interfaces/data_support__dxfInterfaces.ILayerTypesTable.html +8 -0
  39. package/docs/html/interfaces/data_support__dxfInterfaces.ILayersTable.html +8 -0
  40. package/docs/html/interfaces/data_support__dxfInterfaces.ILineEntityExtended.html +4 -0
  41. package/docs/html/interfaces/data_support__dxfInterfaces.ILineType.html +10 -0
  42. package/docs/html/interfaces/data_support__dxfInterfaces.ILwpolylineEntityExtended.html +4 -0
  43. package/docs/html/interfaces/data_support__dxfInterfaces.IMTextEntity.html +18 -0
  44. package/docs/html/interfaces/data_support__dxfInterfaces.IPolylineEntityExtended.html +6 -0
  45. package/docs/html/interfaces/data_support__dxfInterfaces.ITables.html +8 -0
  46. package/docs/html/interfaces/data_support__dxfInterfaces.ITextEntityExtended.html +18 -0
  47. package/docs/html/interfaces/data_support__dxfInterfaces.IViewPort.html +50 -0
  48. package/docs/html/interfaces/data_support__dxfInterfaces.IViewPortTable.html +8 -0
  49. package/docs/html/interfaces/data_support__dxfInterfaces.LineStyle.html +4 -0
  50. package/docs/html/interfaces/data_support__dxfInterfaces.RendererPolygonEntry.html +12 -0
  51. package/docs/html/interfaces/data_support__dxfInterfaces.SimpleFillSymbolJSON.html +12 -0
  52. package/docs/html/interfaces/data_support__dxfInterfaces.SimpleMarkerSymbolDXF.html +10 -0
  53. package/docs/html/interfaces/data_support__dxfInterfaces.TextGraphicAttr.html +15 -0
  54. package/docs/html/modules/data_convert.html +2 -0
  55. package/docs/html/modules/data_support__dxfConverters.html +7 -0
  56. package/docs/html/modules/data_support__dxfFunctions.html +11 -0
  57. package/docs/html/modules/data_support__dxfInterfaces.html +30 -0
  58. package/docs/html/modules.html +3 -0
  59. package/docs/html/types/data_support__dxfFunctions.SimpleFillStyle.html +2 -0
  60. package/docs/html/types/data_support__dxfInterfaces.RendererObjectLine.html +9 -0
  61. package/docs/html/types/data_support__dxfInterfaces.RendererObjectPoint.html +5 -0
  62. package/docs/html/types/data_support__dxfInterfaces.RendererObjectPolygon.html +11 -0
  63. package/docs/html/variables/data_support__dxfFunctions.VALID_FILL_STYLES.html +1 -0
  64. package/docs/html/variables/version.version.html +1 -1
  65. package/package.json +3 -1
  66. package/utilities/_project.js +1 -1
  67. package/version.d.ts +1 -1
  68. package/version.js +1 -1
package/data/convert.d.ts CHANGED
@@ -9,6 +9,7 @@ import type { LayerExtension } from "../mapping/_LayerExtension.js";
9
9
  import type { GeometryType } from "../support/esri.js";
10
10
  import { DateFormat, NumberFormat, TimeFormat } from "../utilities/format/formats.js";
11
11
  import { FeatureSet } from "./FeatureSet.js";
12
+ import type { IDxfJsonComponentContext } from "./support/_dxfInterfaces.js";
12
13
  export declare const FIELD_NAME_REGEX: RegExp;
13
14
  /**
14
15
  * Data for a cell in a table.
@@ -298,6 +299,19 @@ export declare enum GeometryFormat {
298
299
  */
299
300
  ARCGIS_JSON = "ARCGIS_JSON"
300
301
  }
302
+ /**
303
+ * Options for converting a DXF file to layer extensions.
304
+ */
305
+ export interface DxfToLayerExtensionsOptions {
306
+ /**
307
+ * The spatial reference of the input DXF data.
308
+ */
309
+ inputSpatialReference: SpatialReference;
310
+ /**
311
+ * The spatial reference for the output layers.
312
+ */
313
+ outputSpatialReference: SpatialReference;
314
+ }
301
315
  /**
302
316
  * A collection of well known field names associated with different geometry
303
317
  * formats.
@@ -393,6 +407,16 @@ export declare function toShapefile(featureSet: FeatureSet, options?: ToShapefil
393
407
  * extensions.
394
408
  */
395
409
  export declare function kmlToLayerExtensions(kmlBlob: Blob): Promise<LayerExtension[]>;
410
+ /**
411
+ * Converts a Blob that represents DXF data to an array of layer extensions.
412
+ *
413
+ * @param dxfBlob The Blob containing DXF data to convert.
414
+ * @param options The options for converting the DXF file.
415
+ * @param contextOverrides Optional overrides for the DXF JSON component
416
+ * context.
417
+ * @returns A promise that resolves to an array of `LayerExtension` objects.
418
+ */
419
+ export declare function dxfToLayerExtensions(dxfBlob: Blob, options: DxfToLayerExtensionsOptions, contextOverrides?: Partial<IDxfJsonComponentContext>): Promise<LayerExtension[]>;
396
420
  /**
397
421
  * Converts a Blob that represents zipped Shapefile data to a data table.
398
422
  *
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/symbols/MeshSymbol3D.js";import u from"@arcgis/core/symbols/PictureMarkerSymbol.js";import f from"@arcgis/core/symbols/SimpleFillSymbol.js";import y from"@arcgis/core/symbols/SimpleLineSymbol.js";import d from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import{geometryTypeToJson as p}from"../json/GeometryJson.js";import{translate as g}from"../locale/language.js";import{INVARIANT as w}from"../locale.js";import{FeatureCollectionLayerExtension as h}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as F}from"../mapping/GroupLayerExtension.js";import{CaseInsensitiveObservableMap as S}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as T}from"../utilities/Time.js";import{checkArg as O,assertNever as N}from"../utilities/checkArg.js";import{isPoint as D,isMultipoint as M,isPolyline as x,isPolygon as E,isExtent as R}from"../utilities/esri.js";import{parse as b,format as A,DEFAULT_PARSING_FORMATS as G,INVALID_DATE as _}from"../utilities/format/date.js";import{DateFormat as I,NumberFormat as C,TimeFormat as L}from"../utilities/format/formats.js";import{parse as v,format as P}from"../utilities/format/number.js";import{parse as j,format as U,DEFAULT_PARSING_FORMATS as $}from"../utilities/format/time.js";import{project as H,esriToWKT as B,wktToEsri as k,esriWkidToWkt as z,esriWktToWkid as J,esriToGeoJSON as W,geoJSONToEsri as X}from"../utilities/geometry.js";import{getLogger as Y}from"../utilities/log.js";import{isNumeric as q}from"../utilities/number.js";import{caseInsensitiveEquals as K}from"../utilities/string.js";import{Feature as Z}from"./Feature.js";import{FeatureSet as V}from"./FeatureSet.js";const Q=["=","-","+","@"],ee='"',te="\r\n",re="\n",oe=[...G.map(ve),"M/d/yy"],ne=[...$.map(je).map((e=>e.replace("AM/PM","tt")))],ae=/(\w+)_(point|multipoint|polyline|polygon)z?/;var ie;function se(){return Y("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(ie||(ie={}));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 ce=[[GeometryFormat.ARCGIS_JSON,xe],[GeometryFormat.GEO_JSON,Ee],[GeometryFormat.WKT,Re]],le=new Map(ce);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=>Ge(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)})))}),y=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],xe);case GeometryFormat.GEO_JSON:return f(e[0],Ee);case GeometryFormat.WKT:return f(e[0],Re);default:return N(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=be(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 y(e??[0],n)}const[d,p]=await _e(t,c,o);if(d===GeometryFormat.NONE)return{columnIndices:[]};return p.length>1?u(p,d):f(p[0],le.get(d))}(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=Ce(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=g("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))?p(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=>!K(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!K(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=[],y=n?o.slice(1):o,d=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(y.map((async(e,o)=>{const n=new Z;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(d);if(a.includes("*")||a.filter((e=>K(e,u.name))).length>0){let e=await Le(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 he(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new V({features:n,schema:o})}export async function toCsv(e,t){O("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:I.ROUND_TRIP,timeFormat:L.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:ge(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?te:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=de(r,o),f=pe(r,c,e.schema,!0),y=pe(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(Fe(t,o));for(const t of f)e.push(Fe(t,o));for(const t of y)e.push(Fe(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=Te(e,t,r),n=e.schema.findFieldByName(t)?.type;return Fe(Se(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await we(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":Se(e,t))));return r.map((e=>""===e?"":Fe(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...y.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===te?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(O("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=ue(t),n=o.rowDelimiter||function(e){let t=re;return Me(e,te,((r,o)=>(0===r&&o===e.length||(t=te),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(Me(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;Me(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!==w){const e=a[0];if(null!=e&&","===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,t.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return Me(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:De(a,t,o.length)}),!0})),o};if(Me(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}=t;if(!s){const[e,t]=await _e(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??g("gcx.api.data.convert.import-field-alias",(e+1).toString()):g("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=ue(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,t){O("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:ge(e.source),outSpatialReference:a.WGS84,dateFormat:I.DEFAULT,timeFormat:L.DEFAULT,numberFormat:C.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=de(r,o),u=pe(r,n,e.schema,!0),f=pe(r,n,e.schema,!1),y=await import("xlsx"),d=y.utils.sheet_new();let p=!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=>K(t.name,e)))?.alias??e))}(f,e.source));p=!0,y.utils.sheet_add_aoa(d,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await we(e.geometry,o));for(const r of u){const n=$e(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=Te(e,a,o);if(i instanceof T){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=$e(i,o);t.push(s)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void se().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);y.utils.sheet_add_aoa(d,[t],{cellDates:!0,origin:p?-1:void 0}),p=!0;const a=y.utils.decode_range(d["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=d[y.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=je(c??L.ROUND_TRIP):n.has(e)?t.z=Pe(s??I.ROUND_TRIP):t.z=ve(s??I.ROUND_TRIP):"n"===t.t&&(t.z=Ue(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=d;const w=y.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){O("xlsxData",e).isNotMissing();const r=fe(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})}`];a&&"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:a}=t;if(!n){const[e,t]=await _e(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??g("gcx.api.data.convert.import-field-alias",(e+1).toString()):g("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){O("xlsxData",e).isNotMissing();const r=fe(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}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 u({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 f({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 y({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){O("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:ge(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=>D(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const y=n.filter((e=>M(e.geometry)));u.set("MULTIPOINTZ",y.filter(m)),u.set("MULTIPOINT",y.filter((e=>!m(e))));const d=n.filter((e=>x(e.geometry)));u.set("POLYLINEZ",d.filter(m)),u.set("POLYLINE",d.filter((e=>!m(e))));const p=n.filter((e=>E(e.geometry)||R(e.geometry)));u.set("POLYGONZ",p.filter(m)),u.set("POLYGON",p.filter((e=>!m(e))));const g=pe(n,s,e.schema,!0);let w=pe(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=>he(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??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:ie.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>Oe(e,a)))){n[a]=ie.STRING;continue}const t=r?r.fields.find((e=>K(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]=ie.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?ie.NUMBER:ie.DATE;break;default:n[a]=ie.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?ie.NUMBER:ie.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=ie.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=ie.BOOLEAN:n[a]=ie.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(D(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),He(a,e)}if(M(e))return Be(e.points,e);if(x(e))return ke(e.paths,e);if(E(e))return ke(e.rings,e);if(R(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),y=function(e,t,r,o){const n=[];for(const a of e){const e={};for(const n of t){let t=Te(a,n,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=ze(t,r[n],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(n)?.type})}e[n]=t}n.push(e)}return n}(r,w,m,i);o.write(y,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){O("blob",e).isNotMissing();const a=await e.text(),m=(new DOMParser).parseFromString(a,"application/xml"),u=function(e,a){const f={};m.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const y=e.querySelector(":scope > name")?.textContent??"Unnamed Container",d=new F({layer:new s({title:y})});e.querySelectorAll(":scope > Placemark").forEach(((e,s)=>{const m=e.querySelector("name")?.textContent??"",u=e.querySelector("description")?.textContent??"",p=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(p){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),p.type,a),n=new i({displayField:"name",title:m,source:[new t({geometry:p,attributes:{name:m,description:u,OBJECTID:y+s}})],renderer:new l({symbol:o}),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"name",type:"string",alias:"name"})]});u&&n.fields.push(new c({name:"description",type:"string",alias:"description",defaultValue:""}));const g=new h({layer:n});d.layerExtensions.add(g)}}));return e.querySelectorAll(":scope > Folder, :scope > Document").forEach(((e,t)=>{const r=u(e,t);d.layerExtensions.add(r)})),d},f=[];return m.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=u(e,t);r.layerExtensions.length&&f.push(r)})),f}export async function shapefileToUploadData(e,t){O("shapefileData",e).isNotMissing();const o=ye(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 S;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,y=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(y=function(e){if(!e.length)return[];let t=e[0];const r=t.match(ae);return r?(t=r[1],e.filter((e=>{const r=e.match(ae);return r&&r[1]===t}))):[t]}(y),u.some((e=>e.endsWith(".prj")))&&!y.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 d=[],p=[];for(const e of y){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.");d=d.concat(r),p=p.concat(t)}const g=await Promise.all(p.map((e=>async function(e,t){const o=D(e)?function(e){O("geometry.coordinates",e.type).matches("Point"),O("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 X(e);if(t){let e;try{const r=await J(t);e=new a({wkid:v(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];d.forEach(((e,t)=>e[w]=JSON.stringify(g[t].toJSON())));return{data: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]})))))]}(d),...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){O("shapefileData",e).isNotMissing();const r=ye(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}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 d({color:o,outline:{color:n}});case"polyline":return new y({color:o,width:"2"});case"polygon":return new f({color:o,outline:{color:n}});case"mesh":return new m({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function me(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:w,detectOid:!e?.primaryKeyField}}function ue(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...me(e)},...e}}function fe(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...me(e)},...e}}function ye(e){return{...{...me(e)},...e}}function de(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 pe(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 ge(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;return(Array.isArray(t)?t.find((e=>"fields"===e.type))?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName)):void 0)??e.featureSettings.popupTemplate?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName))??["*"]}async function we(e,t){const r=await he(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!D(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(!D(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(!D(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 B(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await W(r))]:[""]:[]}async function he(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await H([e],t))[0]:e}function Fe(e,t){const r=[t.delimiter,ee,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(ee,"g"),`${ee}${ee}`);return`${ee}${t}${ee}`}return e}function Se(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||C.ROUND_TRIP;return P(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():A({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof T)return U({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=Ne(r)),r}function Te(e,t,r){if(r.useFormattedValues||Oe(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=b(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=j(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function Oe(e,t){return!!K(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function Ne(e){for(const t of Q)if(e.startsWith(t))return`\t${e}`;return e}function De(e,t,r){const o=e.startsWith(ee),n=e.endsWith(ee);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 Me(a,ee,((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(`${ee}${ee}`,"g"),ee)}function Me(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(ee)?(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 xe(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 Ee(e,t){const r=await X(JSON.parse(e));return r.spatialReference=t,r}async function Re(e,t){const r=await k(e);return r.spatialReference=t,r}function be(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 Ae(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 Ge(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:v({locale:t,format:r},e)}async function _e(e,t,r){const o=r?e.slice(1):e;if(r){const r=be(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of ce){try{await Ie(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=be(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of ce){const n=await Ae(o[0],r);if(void 0!==n){try{await Ie(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function Ie(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 Ce(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:y,primaryKeyField:d,locale:p}=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,p)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||b(f||G,r.raw)!==_),s&&(s=b(f||oe,r.formatted)!==_),i&&(i=r.raw instanceof T||j(y||$,r.raw).isValid),c&&(c=j({format:y||ne,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return d&&g[t]?.raw===d||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function Le(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?Ge(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:b({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof T)return e.toString();if(e instanceof Date)return new T(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new T(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:j({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of Q)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function ve(e){switch(e){case I.DATE_SHORT:return"dd/MM/yyyy";case I.DATE_LONG:return"MMMM d, yyyy";case I.TIME_SHORT:return"h:mm AM/PM";case I.TIME_LONG:return"h:mm:ss AM/PM";case I.DATE_TIME_SHORT:case I.DEFAULT:return"MMM d yyyy h:mm AM/PM";case I.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case I.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case I.ISO_8601:case I.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&se().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&se().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Pe(e){switch(e){case I.DATE_SHORT:return"dd/MM/yyyy";case I.DATE_LONG:return"MMMM d, yyyy";case I.DATE_TIME_SHORT:case I.DEFAULT:return"MMM d yyyy";case I.DATE_TIME_LONG:return"MMMM d yyyy";case I.FULL:return"dddd, MMMM d yyyy";case I.ISO_8601:case I.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function je(e){switch(e){case L.TIME_SHORT:return"h:mm AM/PM";case L.TIME_LONG:return"h:mm:ss AM/PM";case L.ISO_8601:case L.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&se().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Ue(e){switch(e){case C.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case C.CURRENCY:return'"$"#,##0.00';case C.FIXED_POINT:case C.DEFAULT:return"0.0000";case C.NUMBER:return"#,##0.0000";case C.PERCENT:return"0%";case C.ROUND_TRIP:return"0.00000";default:return e}}function $e(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 T)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=Ne(r)),r}function He(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function Be(e,t){return e.map((e=>He(e,t)))}function ke(e,t){return e.map((e=>Be(e,t)))}function ze(e,t,r){switch(t){case ie.NUMBER:return e instanceof Date?e.getTime():v(e);case ie.STRING:return e instanceof Date?A({format:r.dateFormat??I.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof T?U({format:r.timeFormat??L.ROUND_TRIP},e):"number"==typeof e?P(r.numberFormat??C.DEFAULT,e):e.toString();case ie.BOOLEAN:return!!e;case ie.DATE:return b(e);default:return e.toString()}}
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/symbols/MeshSymbol3D.js";import u from"@arcgis/core/symbols/PictureMarkerSymbol.js";import f from"@arcgis/core/symbols/SimpleFillSymbol.js";import y from"@arcgis/core/symbols/SimpleLineSymbol.js";import p from"@arcgis/core/symbols/SimpleMarkerSymbol.js";import d from"dxf-parser";import{geometryTypeToJson as g}from"../json/GeometryJson.js";import{translate as w}from"../locale/language.js";import{INVARIANT as h}from"../locale.js";import{FeatureCollectionLayerExtension as F}from"../mapping/FeatureCollectionLayerExtension.js";import{GroupLayerExtension as S}from"../mapping/GroupLayerExtension.js";import{CaseInsensitiveObservableMap as T}from"../utilities/CaseInsensitiveObservableMap.js";import{Time as N}from"../utilities/Time.js";import{checkArg as O,assertNever as x}from"../utilities/checkArg.js";import{isPoint as M,isMultipoint as D,isPolyline as E,isPolygon as R,isExtent as b}from"../utilities/esri.js";import{parse as A,format as G,DEFAULT_PARSING_FORMATS as _,INVALID_DATE as I}from"../utilities/format/date.js";import{DateFormat as L,NumberFormat as C,TimeFormat as v}from"../utilities/format/formats.js";import{parse as P,format as j}from"../utilities/format/number.js";import{parse as U,format as $,DEFAULT_PARSING_FORMATS as H}from"../utilities/format/time.js";import{project as B,esriToWKT as k,wktToEsri as z,esriWkidToWkt as J,esriWktToWkid as W,esriToGeoJSON as X,geoJSONToEsri as Y}from"../utilities/geometry.js";import{getLogger as q}from"../utilities/log.js";import{isNumeric as Z}from"../utilities/number.js";import{delay as K}from"../utilities/promise.js";import{caseInsensitiveEquals as V}from"../utilities/string.js";import{Feature as Q}from"./Feature.js";import{FeatureSet as ee}from"./FeatureSet.js";import{DxfEntityProcessor as te}from"./support/_dxfConverters.js";const re=["=","-","+","@"],oe='"',ne="\r\n",ae="\n",ie=[..._.map(Ue),"M/d/yy"],se=[...H.map(He).map((e=>e.replace("AM/PM","tt")))],ce=/(\w+)_(point|multipoint|polyline|polygon)z?/;var le;function me(){return q("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(le||(le={}));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 ue=[[GeometryFormat.ARCGIS_JSON,be],[GeometryFormat.GEO_JSON,Ae],[GeometryFormat.WKT,Ge]],fe=new Map(ue);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=>Le(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)&&Z(t[e[0]]?.raw,i)&&Z(t[e[1]]?.raw,i)&&(!o||Z(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)})))}),y=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],be);case GeometryFormat.GEO_JSON:return f(e[0],Ae);case GeometryFormat.WKT:return f(e[0],Ge);default:return x(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=_e(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 y(e??[0],n)}const[p,d]=await Ce(t,c,o);if(p===GeometryFormat.NONE)return{columnIndices:[]};return d.length>1?u(d,p):f(d[0],fe.get(p))}(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=Pe(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=w("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))?g(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=>!V(e.name,m)&&"esriFieldTypeString"===e.type))?.name??c.fields.find((e=>!V(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=[],y=n?o.slice(1):o,p=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(y.map((async(e,o)=>{const n=new Q;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(p);if(a.includes("*")||a.filter((e=>V(e,u.name))).length>0){let e=await je(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 Te(t.geometries[o],u)),f.push(n)}))),f}(e,t,o);return new ee({features:n,schema:o})}export async function toCsv(e,t){O("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:L.ROUND_TRIP,timeFormat:v.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:Fe(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?ne:"\n"},...t},{includeByteOrderMark:n,includeHeaderRow:i,delimiter:s,outFields:c,rowDelimiter:l}=o,m=[];n&&m.push("\ufeff");const u=we(r,o),f=he(r,c,e.schema,!0),y=he(r,c,e.schema,!1);if(i){const e=[];for(const t of u)e.push(Ne(t,o));for(const t of f)e.push(Ne(t,o));for(const t of y)e.push(Ne(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=xe(e,t,r),n=e.schema.findFieldByName(t)?.type;return Ne(Oe(o,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await Se(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":Oe(e,t))));return r.map((e=>""===e?"":Ne(e,t)))}(e.geometry,o)),t.push(...f.map((e=>r(e,o)))),t.push(...y.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===ne?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(O("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=pe(t),n=o.rowDelimiter||function(e){let t=ae;return Re(e,ne,((r,o)=>(0===r&&o===e.length||(t=ne),!1))),t}(r),a=o.delimiter??function(e,t,r){const o=",";if(0===e.length)return o;const n=[];if(Re(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;Re(e,t.delimiter,((a,i)=>{if(i!==e.length&&o++,","===t.delimiter){const t=e.charAt(i-1),o=e.charAt(i+1);Z(t,r)&&Z(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!==h){const e=a[0];if(null!=e&&","===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,t.locale),i=function(e,t,r){const o=[],n=(e,t)=>{const o=[];return Re(e,r,((r,n)=>{const a=e.substring(r,n);return o.push({raw:Ee(a,t,o.length)}),!0})),o};if(Re(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}=t;if(!s){const[e,t]=await Ce(i,o.inSpatialReference,o.includeHeaderRow);s=e,c=t.map((e=>o.includeHeaderRow?i[0][e]?.raw??w("gcx.api.data.convert.import-field-alias",(e+1).toString()):w("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=pe(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,t){O("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:Fe(e.source),outSpatialReference:a.WGS84,dateFormat:L.DEFAULT,timeFormat:v.DEFAULT,numberFormat:C.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,dateFormat:s,timeFormat:c,numberFormat:l}=o,m=we(r,o),u=he(r,n,e.schema,!0),f=he(r,n,e.schema,!1),y=await import("xlsx"),p=y.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=>V(t.name,e)))?.alias??e))}(f,e.source));d=!0,y.utils.sheet_add_aoa(p,[t],{cellDates:!0})}await Promise.all(r.map((async e=>{const t=[],r=new Set,n=new Set;t.push(...await Se(e.geometry,o));for(const r of u){const n=ke(e.attributes.get(r),o);t.push(n)}for(const a of f){const i=xe(e,a,o);if(i instanceof N){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=ke(i,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.`);y.utils.sheet_add_aoa(p,[t],{cellDates:!0,origin:d?-1:void 0}),d=!0;const a=y.utils.decode_range(p["!ref"]);for(let e=a.s.c;e<=a.e.c;e++){const t=p[y.utils.encode_cell({r:a.e.r,c:e})];"d"===t.t?r.has(e)?t.z=He(c??v.ROUND_TRIP):n.has(e)?t.z=$e(s??L.ROUND_TRIP):t.z=Ue(s??L.ROUND_TRIP):"n"===t.t&&(t.z=Be(l))}})));const g={SheetNames:[],Sheets:{}};g.SheetNames.push(o.sheetName),g.Sheets[o.sheetName]=p;const w=y.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){O("xlsxData",e).isNotMissing();const r=de(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})}`];a&&"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:a}=t;if(!n){const[e,t]=await Ce(o,r.inSpatialReference,r.includeHeaderRow);n=e,a=t.map((e=>r.includeHeaderRow?o[0][e]?.raw.toString()??w("gcx.api.data.convert.import-field-alias",(e+1).toString()):w("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:o,...r,geometryFormat:n,geometryFields:a}}export async function xlsxToFeatureSet(e,t){O("xlsxData",e).isNotMissing();const r=de(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}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 u({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 f({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 y({color:r,width:o})}}return getDefaultSymbol(o,"polygon"===r?"polygon":"point"===r?"point":"polyline")}export async function toShapefile(e,t){O("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:Fe(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=>M(e.geometry)));u.set("POINTZ",f.filter(m)),u.set("POINT",f.filter((e=>!m(e))));const y=n.filter((e=>D(e.geometry)));u.set("MULTIPOINTZ",y.filter(m)),u.set("MULTIPOINT",y.filter((e=>!m(e))));const p=n.filter((e=>E(e.geometry)));u.set("POLYLINEZ",p.filter(m)),u.set("POLYLINE",p.filter((e=>!m(e))));const d=n.filter((e=>R(e.geometry)||b(e.geometry)));u.set("POLYGONZ",d.filter(m)),u.set("POLYGON",d.filter((e=>!m(e))));const g=he(n,s,e.schema,!0);let w=he(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=>Te(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 J(t??a.WGS84.wkid)}(n),m=i.useFormattedValues?Object.assign({},...w.map((e=>({[e]:le.STRING})))):function(e,t,r,o){const n={};for(const a of t){if(e.some((e=>Me(e,a)))){n[a]=le.STRING;continue}const t=r?r.fields.find((e=>V(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]=le.NUMBER;break;case"date":case"timestamp-offset":n[a]=o?le.NUMBER:le.DATE;break;default:n[a]=le.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?le.NUMBER:le.DATE:e.every((e=>"number"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"number"==typeof i(e,a)))?n[a]=le.NUMBER:e.every((e=>"boolean"==typeof i(e,a)||void 0===i(e,a)))&&e.some((e=>"boolean"==typeof i(e,a)))?n[a]=le.BOOLEAN:n[a]=le.STRING}return n}(r,w,e.schema,"timestamp"===i.dateFormat),f=function(e){return e.map((e=>{if(M(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),ze(a,e)}if(D(e))return Je(e.points,e);if(E(e))return We(e.paths,e);if(R(e))return We(e.rings,e);if(b(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),y=function(e,t,r,o){const n=[];for(const a of e){const e={};for(const n of t){let t=xe(a,n,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=Xe(t,r[n],{...o,isDateOnly:"date-only"===a.schema.findFieldByName(n)?.type})}e[n.replaceAll(".","_")]=t}n.push(e)}return n}(r,w,m,i);o.write(y,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){O("blob",e).isNotMissing();const a=await e.text(),m=(new DOMParser).parseFromString(a,"application/xml"),u=function(e,a){const f={};m.querySelectorAll("Style").forEach((e=>{f[`#${e.id}`]=e}));const y=e.querySelector(":scope > name")?.textContent??"Unnamed Container",p=new S({layer:new s({title:y})});e.querySelectorAll(":scope > Placemark").forEach(((e,s)=>{const m=e.querySelector("name")?.textContent??"",u=e.querySelector("description")?.textContent??"",d=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(d){const r=e.querySelector("styleUrl")?.textContent,o=parseKMLSymbol(r?f[r]:e.querySelector("Style"),d.type,a),n=new i({displayField:"name",title:m,source:[new t({geometry:d,attributes:{name:m,description:u,OBJECTID:y+s}})],renderer:new l({symbol:o}),fields:[new c({name:"OBJECTID",type:"oid",alias:"OBJECTID"}),new c({name:"name",type:"string",alias:"name"})]});u&&n.fields.push(new c({name:"description",type:"string",alias:"description",defaultValue:""}));const g=new F({layer:n});p.layerExtensions.add(g)}}));return e.querySelectorAll(":scope > Folder, :scope > Document").forEach(((e,t)=>{const r=u(e,t);p.layerExtensions.add(r)})),p},f=[];return m.querySelectorAll("kml > Document, kml > Folder").forEach(((e,t)=>{const r=u(e,t);r.layerExtensions.length&&f.push(r)})),f}export async function dxfToLayerExtensions(e,t,r){const{inputSpatialReference:o,outputSpatialReference:n}=t;O("options.dxfBlob",e).isNotMissing(),O("options.inputSpatialReference",o).isNotMissing(),O("options.outputSpatialReference",n).isNotMissing();const a=new te(o,n,r),i=a.getContext(),c=await e.text(),l=new d;await K();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}),y={layer:f,visibilityMode:"independent"};return f.layers.addMany(i.subLayers),[new S(y)]}export async function shapefileToUploadData(e,t){O("shapefileData",e).isNotMissing();const o=ge(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 T;l.forEach(((e,t)=>{t&&m.set(t.name,t)}));const u=l.filter((()=>!0)).map((e=>e.name));let f,y=u.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(y=function(e){if(!e.length)return[];let t=e[0];const r=t.match(ce);return r?(t=r[1],e.filter((e=>{const r=e.match(ce);return r&&r[1]===t}))):[t]}(y),u.some((e=>e.endsWith(".prj")))&&!y.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 p=[],d=[];for(const e of y){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.");p=p.concat(r),d=d.concat(t)}const g=await Promise.all(d.map((e=>async function(e,t){const o=M(e)?function(e){O("geometry.coordinates",e.type).matches("Point"),O("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 Y(e);if(t){let e;try{const r=await W(t);e=new a({wkid:P(r)})}catch{}e||(e=new a({wkt:t})),o.spatialReference=e}return o}(e,f)))),w=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];p.forEach(((e,t)=>e[w]=JSON.stringify(g[t].toJSON())));return{data: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]})))))]}(p),...o,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[w],inSpatialReference:g[0]?.spatialReference??a.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){O("shapefileData",e).isNotMissing();const r=ge(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}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 p({color:o,outline:{color:n}});case"polyline":return new y({color:o,width:"2"});case"polygon":return new f({color:o,outline:{color:n}});case"mesh":return new m({symbolLayers:[{type:"fill",material:{color:o},outline:{color:n}}]})}}function ye(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:h,detectOid:!e?.primaryKeyField}}function pe(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...ye(e)},...e}}function de(e){return{...{includeHeaderRow:!0,inSpatialReference:a.WGS84,...ye(e)},...e}}function ge(e){return{...{...ye(e)},...e}}function we(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 he(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 Fe(e){if(!e)return["*"];const t=e.featureSettings.popupTemplate?.content;return(Array.isArray(t)?t.find((e=>"fields"===e.type))?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName)):void 0)??e.featureSettings.popupTemplate?.fieldInfos?.filter((e=>e.visible))?.map((e=>e.fieldName))??["*"]}async function Se(e,t){const r=await Te(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!M(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(!M(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(!M(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 k(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await X(r))]:[""]:[]}async function Te(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await B([e],t))[0]:e}function Ne(e,t){const r=[t.delimiter,oe,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(oe,"g"),`${oe}${oe}`);return`${oe}${t}${oe}`}return e}function Oe(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||C.ROUND_TRIP;return j(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():G({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof N)return $({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=De(r)),r}function xe(e,t,r){if(r.useFormattedValues||Me(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=A(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=U(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function Me(e,t){return!!V(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function De(e){for(const t of re)if(e.startsWith(t))return`\t${e}`;return e}function Ee(e,t,r){const o=e.startsWith(oe),n=e.endsWith(oe);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 Re(a,oe,((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(`${oe}${oe}`,"g"),oe)}function Re(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(oe)?(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 be(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 Ae(e,t){const r=await Y(JSON.parse(e));return r.spatialReference=t,r}async function Ge(e,t){const r=await z(e);return r.spatialReference=t,r}function _e(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 Ie(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 Le(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:P({locale:t,format:r},e)}async function Ce(e,t,r){const o=r?e.slice(1):e;if(r){const r=_e(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of ue){try{await ve(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=_e(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of ue){const n=await Ie(o[0],r);if(void 0!==n){try{await ve(n,r,t,o)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function ve(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 Pe(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:y,primaryKeyField:p,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=Z(r.raw,d)||Number.isNaN(r.raw)),a&&(a=r.raw instanceof Date||A(f||_,r.raw)!==I),s&&(s=A(f||ie,r.formatted)!==I),i&&(i=r.raw instanceof N||U(y||H,r.raw).isValid),c&&(c=U({format:y||se,locale:"en"},r.formatted).isValid))}const h=l.size===w.length;return p&&g[t]?.raw===p||r&&o&&h&&n?"esriFieldTypeOID":o&&c?"esriFieldTypeTimeOnly":o&&s?"esriFieldTypeDate":o&&n?"esriFieldTypeDouble":o&&i?"esriFieldTypeTimeOnly":o&&a?"esriFieldTypeDate":"esriFieldTypeString"}async function je(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?Le(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:A({locale:n,format:i},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof N)return e.toString();if(e instanceof Date)return new N(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new N(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:U({locale:n,format:s},e).toString()}const c=e?.toString()??"";if(o&&c.startsWith("\t"))for(const e of re)if(c.length>1&&c.charAt(1)===e)return c.substring(1);return c}function Ue(e){switch(e){case L.DATE_SHORT:return"dd/MM/yyyy";case L.DATE_LONG:return"MMMM d, yyyy";case L.TIME_SHORT:return"h:mm AM/PM";case L.TIME_LONG:return"h:mm:ss AM/PM";case L.DATE_TIME_SHORT:case L.DEFAULT:return"MMM d yyyy h:mm AM/PM";case L.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case L.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case L.ISO_8601:case L.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 $e(e){switch(e){case L.DATE_SHORT:return"dd/MM/yyyy";case L.DATE_LONG:return"MMMM d, yyyy";case L.DATE_TIME_SHORT:case L.DEFAULT:return"MMM d yyyy";case L.DATE_TIME_LONG:return"MMMM d yyyy";case L.FULL:return"dddd, MMMM d yyyy";case L.ISO_8601:case L.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function He(e){switch(e){case v.TIME_SHORT:return"h:mm AM/PM";case v.TIME_LONG:return"h:mm:ss AM/PM";case v.ISO_8601:case v.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 Be(e){switch(e){case C.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case C.CURRENCY:return'"$"#,##0.00';case C.FIXED_POINT:case C.DEFAULT:return"0.0000";case C.NUMBER:return"#,##0.0000";case C.PERCENT:return"0%";case C.ROUND_TRIP:return"0.00000";default:return e}}function ke(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 N)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=De(r)),r}function ze(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function Je(e,t){return e.map((e=>ze(e,t)))}function We(e,t){return e.map((e=>Je(e,t)))}function Xe(e,t,r){switch(t){case le.NUMBER:return e instanceof Date?e.getTime():P(e);case le.STRING:return e instanceof Date?G({format:r.dateFormat??L.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof N?$({format:r.timeFormat??v.ROUND_TRIP},e):"number"==typeof e?j(r.numberFormat??C.DEFAULT,e):e.toString();case le.BOOLEAN:return!!e;case le.DATE:return A(e);default:return e.toString()}}