@vertigis/arcgis-extensions 50.0.2 → 51.0.1

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 (79) hide show
  1. package/AppConfig.schema.json +1 -0
  2. package/config.d.ts +0 -5
  3. package/data/_TableExtension.d.ts +1 -1
  4. package/data/convert.js +1 -1
  5. package/docs/html/assets/navigation.js +1 -1
  6. package/docs/html/assets/search.js +1 -1
  7. package/docs/html/classes/data__TableExtension.TableSchema.html +2 -2
  8. package/docs/html/functions/utilities__project.project.html +1 -1
  9. package/docs/html/functions/utilities_format_time.format.html +3 -1
  10. package/docs/html/functions/utilities_format_time.parse.html +5 -1
  11. package/docs/html/functions/utilities_geometry.project.html +1 -1
  12. package/docs/html/interfaces/config.Config.html +3 -6
  13. package/docs/html/interfaces/json_AnnotationLayerJson.AnnotationLayerJson.html +2 -2
  14. package/docs/html/interfaces/json_BasemapLayerJson.BasemapLayerJsonBase.html +2 -2
  15. package/docs/html/interfaces/json_BingLayerJson.BingLayerJson.html +2 -2
  16. package/docs/html/interfaces/json_BuildingSceneLayerJson.BuildingSceneLayerJson.html +2 -2
  17. package/docs/html/interfaces/json_CSVLayerJson.CSVLayerJson.html +2 -2
  18. package/docs/html/interfaces/json_FeatureLayerJson.FeatureLayerJson.html +2 -2
  19. package/docs/html/interfaces/json_GeoJSONLayerJson.GeoJSONLayerJson.html +2 -2
  20. package/docs/html/interfaces/json_GeoRSSLayerJson.GeoRSSLayerJson.html +2 -2
  21. package/docs/html/interfaces/json_GroupLayerJson.GroupLayerJson.html +2 -2
  22. package/docs/html/interfaces/json_ImageServiceLayerJson.ImageServiceLayerJson.html +2 -2
  23. package/docs/html/interfaces/json_ImageServiceVectorLayerJson.ImageServiceVectorLayerJson.html +2 -2
  24. package/docs/html/interfaces/json_IntegratedMeshLayerJson.IntegratedMeshLayerJson.html +2 -2
  25. package/docs/html/interfaces/json_KMLLayerJson.KMLLayerJson.html +2 -2
  26. package/docs/html/interfaces/json_LayerJson.LayerJsonBase.html +2 -2
  27. package/docs/html/interfaces/json_MapServiceLayerJson.MapServiceLayerJson.html +2 -2
  28. package/docs/html/interfaces/json_MediaLayerJson.MediaLayerJson.html +2 -2
  29. package/docs/html/interfaces/json_OpenStreetMapLayerJson.OpenStreetMapLayerJson.html +2 -2
  30. package/docs/html/interfaces/json_OperationalLayerJson.OperationalLayerJsonBase.html +2 -2
  31. package/docs/html/interfaces/json_PointCloudLayerJson.PointCloudLayerJson.html +2 -2
  32. package/docs/html/interfaces/json_RasterDataElevationLayerJson.RasterDataElevationLayerJson.html +2 -2
  33. package/docs/html/interfaces/json_RendererJson.SizeInfoJson.html +2 -2
  34. package/docs/html/interfaces/json_SceneLayerJson.SceneLayerJson.html +2 -2
  35. package/docs/html/interfaces/json_StreamLayerJson.StreamLayerJson.html +2 -2
  36. package/docs/html/interfaces/json_SubtypeGroupLayerJson.SubtypeGroupLayerJson.html +2 -2
  37. package/docs/html/interfaces/json_SubtypeGroupLayerJson.SubtypeSubtypeGroupLayerJson.html +2 -2
  38. package/docs/html/interfaces/json_SubtypeSublayerJson.SubtypeSublayerJson.html +2 -2
  39. package/docs/html/interfaces/json_SymbolJson.ObjectSymbol3DLayerJson.html +2 -2
  40. package/docs/html/interfaces/json_SymbolJson.TextSymbolJson.html +2 -2
  41. package/docs/html/interfaces/json_TiledElevationServiceLayerJson.TiledElevationServiceLayerJson.html +2 -2
  42. package/docs/html/interfaces/json_TiledImageServiceLayerJson.TiledImageServiceLayerJson.html +2 -2
  43. package/docs/html/interfaces/json_TiledMapServiceLayerJson.TiledMapServiceLayerJson.html +2 -2
  44. package/docs/html/interfaces/json_VectorTileLayerJson.VectorTileLayerJson.html +2 -2
  45. package/docs/html/interfaces/json_WFSLayerJson.WFSLayerJson.html +2 -2
  46. package/docs/html/interfaces/json_WMSLayerJson.WMSLayerJson.html +2 -2
  47. package/docs/html/interfaces/json_WebTileLayerJson.WebTileLayerJson.html +2 -2
  48. package/docs/html/interfaces/mapping_BuildingSceneLayerExtension.BuildingSceneLayerProperties.html +2 -2
  49. package/docs/html/interfaces/mapping_FeatureLayerExtension.FeatureLayerProperties.html +2 -2
  50. package/docs/html/interfaces/mapping_FeatureLayerExtensionBase.FeatureLayerBaseProperties.html +2 -2
  51. package/docs/html/interfaces/mapping_MapImageLayerExtension.MapImageLayerExtensionProperties.html +3 -3
  52. package/docs/html/interfaces/mapping_PointCloudLayerExtension.PointCloudLayerProperties.html +2 -2
  53. package/docs/html/interfaces/tasks_search_SearchSuggestion.SearchSuggestion.html +3 -2
  54. package/docs/html/interfaces/utilities_transformation.Transformation.html +2 -2
  55. package/docs/html/modules/support_esri.html +0 -1
  56. package/docs/html/variables/version.version.html +1 -1
  57. package/locale.js +1 -1
  58. package/mapping/FeatureLayerExtension.js +1 -1
  59. package/mapping/VectorTileLayerExtension.js +1 -1
  60. package/package.json +10 -10
  61. package/portal/LayerDefinition.d.ts +2 -2
  62. package/portal/_layerHelper.js +1 -1
  63. package/support/esri.d.ts +0 -1
  64. package/tasks/query/QueryOptions.js +1 -1
  65. package/tasks/search/SearchService.js +1 -1
  66. package/tasks/search/SearchSuggestion.d.ts +3 -2
  67. package/tasks/search/support/_querySearchProviderUtils.d.ts +1 -1
  68. package/tasks/search/support/_querySearchProviderUtils.js +1 -1
  69. package/utilities/_project.d.ts +1 -1
  70. package/utilities/_project.js +1 -1
  71. package/utilities/basemaps.js +1 -1
  72. package/utilities/geometry.d.ts +1 -1
  73. package/utilities/geometry.js +1 -1
  74. package/utilities/log.js +1 -1
  75. package/utilities/query.js +1 -1
  76. package/utilities/transformation.d.ts +1 -1
  77. package/version.d.ts +1 -1
  78. package/version.js +1 -1
  79. package/docs/html/types/support_esri.CSVLayerCapabilities.html +0 -1
@@ -3230,6 +3230,7 @@
3230
3230
  },
3231
3231
  "__type": {},
3232
3232
  "esri.Basemap": {},
3233
+ "esri.Collection": {},
3233
3234
  "esri.Content": {},
3234
3235
  "esri.Environment": {},
3235
3236
  "esri.Error": {},
package/config.d.ts CHANGED
@@ -19,10 +19,5 @@ export interface Config {
19
19
  * ArcGIS portals that portal items can be loaded from.
20
20
  */
21
21
  readonly portals: Map<string, Portal>;
22
- /**
23
- * @deprecated Deprecated. Heatmaps are always enabled. This setting will be
24
- * ignored.
25
- */
26
- heatmapsEnabled: boolean;
27
22
  }
28
23
  export declare const config: Config;
@@ -125,7 +125,7 @@ export declare class TableSchema extends Schema {
125
125
  /**
126
126
  * Maps schema properties to equivalent properties on the table.
127
127
  */
128
- protected readonly _tableBindings: Map<keyof this, "listMode" | "title" | "url" | "id" | "gdbVersion" | "watch" | "destroyed" | "initialized" | "declaredClass" | "destroy" | "set" | "addHandles" | "removeHandles" | "hasHandles" | "get" | "on" | "emit" | "hasEventListener" | "clone" | "fields" | "hasM" | "hasZ" | "labelingInfo" | "renderer" | "opacity" | "persistenceEnabled" | "refresh" | "spatialReference" | "mode" | "elevationInfo" | "cancelLoad" | "isFulfilled" | "isRejected" | "isResolved" | "load" | "when" | "floorInfo" | "visible" | "definitionExpression" | "outFields" | "popupEnabled" | "popupTemplate" | "createPopupTemplate" | "createQuery" | "getField" | "getFieldDomain" | "queryExtent" | "queryFeatureCount" | "queryFeatures" | "queryObjectIds" | "objectIdField" | "geometryType" | "labelsVisible" | "customParameters" | "apiKey" | "copyright" | "layerId" | "legendEnabled" | "maxScale" | "minScale" | "portalItem" | "save" | "saveAs" | "parent" | "fullExtent" | "visibilityTimeExtent" | "createLayerView" | "fetchAttributionData" | "sourceJSON" | "blendMode" | "effect" | "dateFieldsTimeZone" | "displayField" | "displayFilterEnabled" | "displayFilterInfo" | "refreshInterval" | "returnM" | "returnZ" | "useViewTime" | "historicMoment" | "orderBy" | "timeExtent" | "timeInfo" | "timeOffset" | "formTemplate" | "editingEnabled" | "addAttachment" | "applyEdits" | "deleteAttachments" | "queryAttachments" | "queryRelatedFeatures" | "queryRelatedFeaturesCount" | "updateAttachment" | "queryAttributeBins" | "queryTopFeatures" | "source" | "typeIdField" | "types" | "screenSizePerspectiveEnabled" | "attributeTableTemplate" | "featureEffect" | "featureReduction" | "trackInfo" | "charts" | "dynamicDataSource" | "templates" | "getFeatureType" | "queryTopFeatureCount" | "queryTopFeaturesExtent" | "queryTopObjectIds">;
128
+ protected readonly _tableBindings: Map<keyof this, "listMode" | "title" | "url" | "id" | "gdbVersion" | "watch" | "destroyed" | "initialized" | "declaredClass" | "destroy" | "set" | "addHandles" | "removeHandles" | "hasHandles" | "get" | "on" | "emit" | "hasEventListener" | "clone" | "fields" | "hasM" | "hasZ" | "popupTemplate" | "labelingInfo" | "renderer" | "opacity" | "persistenceEnabled" | "refresh" | "spatialReference" | "mode" | "elevationInfo" | "cancelLoad" | "isFulfilled" | "isRejected" | "isResolved" | "load" | "when" | "floorInfo" | "visible" | "definitionExpression" | "globalIdField" | "objectIdField" | "outFields" | "popupEnabled" | "createPopupTemplate" | "createQuery" | "getField" | "getFieldDomain" | "queryExtent" | "queryFeatureCount" | "queryFeatures" | "queryObjectIds" | "geometryType" | "labelsVisible" | "customParameters" | "apiKey" | "copyright" | "layerId" | "legendEnabled" | "maxScale" | "minScale" | "portalItem" | "save" | "saveAs" | "parent" | "fullExtent" | "visibilityTimeExtent" | "createLayerView" | "fetchAttributionData" | "sourceJSON" | "blendMode" | "effect" | "dateFieldsTimeZone" | "displayField" | "displayFilterEnabled" | "displayFilterInfo" | "refreshInterval" | "returnM" | "returnZ" | "useViewTime" | "historicMoment" | "orderBy" | "timeExtent" | "timeInfo" | "timeOffset" | "queryAttributeBins" | "formTemplate" | "editingEnabled" | "addAttachment" | "applyEdits" | "deleteAttachments" | "queryAttachments" | "queryRelatedFeatures" | "queryRelatedFeaturesCount" | "updateAttachment" | "queryTopFeatures" | "source" | "typeIdField" | "types" | "screenSizePerspectiveEnabled" | "attributeTableTemplate" | "featureEffect" | "featureReduction" | "trackInfo" | "charts" | "dynamicDataSource" | "templates" | "getFeatureType" | "queryTopFeatureCount" | "queryTopFeaturesExtent" | "queryTopObjectIds">;
129
129
  /**
130
130
  * The collection of fields.
131
131
  */
package/data/convert.js CHANGED
@@ -1 +1 @@
1
- import e from"@arcgis/core/geometry/Point";import t from"@arcgis/core/geometry/SpatialReference";import{geometryTypeToJson as r}from"../json/GeometryJson.js";import{translate as a}from"../locale/language.js";import{INVARIANT as n}from"../locale.js";import{Time as o}from"../utilities/Time.js";import{checkArg as i,assertNever as s}from"../utilities/checkArg.js";import{isPoint as c,isMultipoint as m,isPolyline as l,isPolygon as u,isExtent as f}from"../utilities/esri.js";import{parse as d,format as y,DEFAULT_PARSING_FORMATS as p,INVALID_DATE as g}from"../utilities/format/date.js";import{DateFormat as w,NumberFormat as h,TimeFormat as F}from"../utilities/format/formats.js";import{parse as S,format as T}from"../utilities/format/number.js";import{parse as N,format as O,DEFAULT_PARSING_FORMATS as R}from"../utilities/format/time.js";import{project as D,esriToWKT as M,wktToEsri as A,esriWkidToWkt as E,esriWktToWkid as G,esriToGeoJSON as _,geoJSONToEsri as b}from"../utilities/geometry.js";import{getLogger as x}from"../utilities/log.js";import{isNumeric as I}from"../utilities/number.js";import{caseInsensitiveEquals as v}from"../utilities/string.js";import{Feature as L}from"./Feature.js";import{FeatureSet as P}from"./FeatureSet.js";const U=["=","-","+","@"],C='"',$="\r\n",j="\n",H=[...p.map(Se),"M/d/yy"],z=[...R.map(Ne).map((e=>e.replace("AM/PM","tt")))],J=/(\w+)_(point|multipoint|polyline|polygon)z?/;var W;function B(){return x("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(W||(W={}));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 X=[[GeometryFormat.ARCGIS_JSON,le],[GeometryFormat.GEO_JSON,ue],[GeometryFormat.WKT,fe]],Y=new Map(X);export async function uploadDataToFeatureSet(t){const n=await async function(t){const{data:r,includeHeaderRow:a,geometryFormat:n,geometryFields:o,locale:i,numberFormat:c,inSpatialReference:m}=t,l=a?r.slice(1):r;if(n===GeometryFormat.NONE)return{columnIndices:[]};const u=e=>pe(e,i,c),f=(t,r)=>{const a=r===GeometryFormat.XYZ,n=r===GeometryFormat.LAT_LON;return{columnIndices:t,geometries:l.map((r=>{if(r.length>=Math.max(...t)&&I(r[t[0]]?.raw,i)&&I(r[t[1]]?.raw,i)&&(!a||I(r[t[2]]?.raw,i)))return new e({x:u(n?r[t[1]].raw:r[t[0]].raw),y:u(n?r[t[0]].raw:r[t[1]].raw),z:a?u(r[t[2]].raw):0,spatialReference:m})}))}},d=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),m)})))}),y=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return f(e,t);case GeometryFormat.ARCGIS_JSON:return d(e[0],le);case GeometryFormat.GEO_JSON:return d(e[0],ue);case GeometryFormat.WKT:return d(e[0],fe);default:return s(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=de(a?r[0]:r[0].map(((e,t)=>({raw:t.toString()}))),n,a?o:o.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(a&&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,g]=await ge(r,m,a);if(p===GeometryFormat.NONE)return{columnIndices:[]};return g.length>1?f(g,p):d(g[0],Y.get(p))}(t),o=function(e,t){const{data:n,displayField:o,includeHeaderRow:i,inSpatialReference:s,outSpatialReference:c,generatePrimaryKey:m}=e,l={fields:[]},u=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:f}=e,d=0;for(let t=0;t<n[0].length;t++){if(u(t))continue;const r=he(e,t,!m&&!f&&!l.fields.find((e=>"esriFieldTypeOID"===e.type)));let o=n[0][t]?.raw?.toString(),s=o?.replace(FIELD_NAME_REGEX,"_");i&&s||(s="field"+ ++d,o=a("gcx.api.data.convert.import-field-alias",d)),l.fields.push({alias:o,name:s,type:r}),"esriFieldTypeOID"===r&&(f=s)}if(l.spatialReference=c??t.geometries?.[0]?.spatialReference??s,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),a=e[0];l.geometryType=e.every((e=>e===a))?r(a):void 0}if(!l.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=l.fields.length+1,t=!!l.fields.find((e=>"objectid"===e.name.toLowerCase()));f=t?`OBJECTID_${e}`:"OBJECTID",l.fields.push({name:f,alias:f,type:"esriFieldTypeOID"})}return l.displayField=o??l.fields.find((e=>!v(e.name,f)&&"esriFieldTypeString"===e.type))?.name??l.fields.find((e=>!v(e.name,f)))?.name??f,l.primaryKeyField=f,l}(t,n),i=await async function(e,t,r){const{data:a,includeHeaderRow:n,outFields:o,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:m,timeFormat:l}=e,{spatialReference:u}=r,f=[],d=n?a.slice(1):a,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(d.map((async(e,a)=>{const n=new L;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(o.includes("*")||o.filter((e=>v(e,u.name))).length>0){let e=await Fe(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:m,numberFormat:c,timeFormat:l,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=a),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await re(t.geometries[a],u)),f.push(n)}))),f}(t,n,o);return new P({features:i,schema:o})}export async function toCsv(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:w.ROUND_TRIP,timeFormat:F.ROUND_TRIP,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:t.WGS84,includeHeaderRow:!0,outFields:ee(e.source),rowDelimiter:navigator.platform.startsWith("Win")?$:"\n"},...r},{includeByteOrderMark:o,includeHeaderRow:s,delimiter:c,outFields:m,rowDelimiter:l}=n,u=[];o&&u.push("\ufeff");const f=q(a,n),d=Q(a,m,e.schema,!0),y=Q(a,m,e.schema,!1);if(s){const e=[];for(const t of f)e.push(ae(t,n));for(const t of d)e.push(ae(t,n));for(const t of y)e.push(ae(t,n));const t=e.join(c)+l;u.push(t)}await Promise.all(a.map((async e=>{const t=[],r=(t,r)=>{const a=oe(e,t,r),n=e.schema.findFieldByName(t)?.type;return ae(ne(a,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await te(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":ne(e,t))));return r.map((e=>""===e?"":ae(e,t)))}(e.geometry,n)),t.push(...d.map((e=>r(e,n)))),t.push(...y.map((e=>r(e,n))));const a=`${t.join(c)}${l}`;u.push(a)})));return new Blob(u,{type:"text/plain",endings:"\n"===l||l===$?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(i("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const a=new FileReader;a.onload=()=>{t(a.result)},a.onerror=()=>{r(a.error)},a.readAsText(e)}));r=await t}else r=e;const o=Z(t),s=o.rowDelimiter||function(e){let t=j;return me(e,$,((r,a)=>(0===r&&a===e.length||(t=$),!1))),t}(r),c=o.delimiter??function(e,t,r){const a=",";if(0===e.length)return a;const o=[];if(me(e,t,((t,r)=>(r!==e.length||t!==r)&&(o.push(e.substring(t,r)),o.length<3))),0===o.length)return a;let i=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>o[0].includes(e.delimiter)));if(0===i.length)return a;for(const e of o)for(const t of i){let a=0,n=0;me(e,t.delimiter,((o,i)=>{if(i!==e.length&&a++,","===t.delimiter){const t=e.charAt(i-1),a=e.charAt(i+1);I(t,r)&&I(a,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(a),","===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!==n){const e=i[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]){i=i.filter((e=>","!==e.delimiter));break}}if(0===i.length)return a;return i[0].delimiter}(r,s,t.locale),m=function(e,t,r){const a=[],n=(e,t)=>{const a=[];return me(e,r,((r,n)=>{const o=e.substring(r,n);return a.push({raw:ce(o,t,a.length)}),!0})),a};if(me(e,t,((t,r)=>{const o=e.substring(t,r);return o.length>0&&a.push(n(o,a.length)),!0})),a.length){const e=a[0].length;a.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return a}(r,s,c);let{geometryFormat:l,geometryFields:u}=t;if(!l){const[e,t]=await ge(m,o.inSpatialReference,o.includeHeaderRow);l=e,u=t.map((e=>o.includeHeaderRow?m[0][e]?.raw??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:m,...o,geometryFormat:l,geometryFields:u}}export async function csvToFeatureSet(e,t){const r=Z(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:ee(e.source),outSpatialReference:t.WGS84,dateFormat:w.DEFAULT,timeFormat:F.DEFAULT,numberFormat:h.DEFAULT,sheetName:"sheet1"},...r},{outFields:s,includeHeaderRow:c,dateFormat:m,timeFormat:l,numberFormat:u}=n,f=q(a,n),d=Q(a,s,e.schema,!0),y=Q(a,s,e.schema,!1),p=await import("xlsx"),g=p.utils.sheet_new();let S=!1;if(c){const t=f.concat(d).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))}(y,e.source));S=!0,p.utils.sheet_add_aoa(g,[t],{cellDates:!0})}await Promise.all(a.map((async e=>{const t=[],r=new Set,a=new Set;t.push(...await te(e.geometry,n));for(const r of d){const a=Re(e.attributes.get(r),n);t.push(a)}for(const i of y){const s=oe(e,i,n);if(s instanceof o){const a=e.schema.findFieldByName(i);"time-only"===a?.type&&r.add(t.length)}else if(s instanceof Date){const r=e.schema.findFieldByName(i);"date-only"===r?.type&&a.add(t.length)}const c=Re(s,n);t.push(c)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void B().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(g,[t],{cellDates:!0,origin:S?-1:void 0}),S=!0;const i=p.utils.decode_range(g["!ref"]);for(let e=i.s.c;e<=i.e.c;e++){const t=g[p.utils.encode_cell({r:i.e.r,c:e})];"d"===t.t?r.has(e)?t.z=Ne(l??F.ROUND_TRIP):a.has(e)?t.z=Te(m??w.ROUND_TRIP):t.z=Se(m??w.ROUND_TRIP):"n"===t.t&&(t.z=Oe(u))}})));const T={SheetNames:[],Sheets:{}};T.SheetNames.push(n.sheetName),T.Sheets[n.sheetName]=g;const N=p.write(T,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),O=new Uint8Array(N.length);for(let e=0;e<N.length;e++)O[e]=N.charCodeAt(e);return new Blob([O.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){i("xlsxData",e).isNotMissing();const r=K(t),n=await async function(e,t){const r=await import("xlsx"),a=new Promise(((a,n)=>{const o=new FileReader;o.onload=()=>{const e=new Uint8Array(o.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];a(c)},o.onerror=()=>{n(o.error)},o.readAsArrayBuffer(e)})),n=await a,o=r.utils.decode_range(n["!ref"]),i=[];for(let e=o.s.r;e<=o.e.r;e++){const t=[];for(let a=o.s.c;a<=o.e.c;a++){const o=n[`${r.utils.encode_cell({r:e,c:a})}`];o&&"d"===o.t&&o.v instanceof Date&&(o.v=new Date(o.v.getTime()+6e4*o.v.getTimezoneOffset())),t.push(o?{raw:o.v,formatted:"s"===o.t?void 0:o.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:o,geometryFields:s}=t;if(!o){const[e,t]=await ge(n,r.inSpatialReference,r.includeHeaderRow);o=e,s=t.map((e=>r.includeHeaderRow?n[0][e]?.raw.toString()??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:n,...r,geometryFormat:o,geometryFields:s}}export async function xlsxToFeatureSet(e,t){i("xlsxData",e).isNotMissing();const r=K(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export async function toShapefile(e,r){i("featureSet",e).isNotMissing();const[{default:a},n]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),o=Array.from(e),s={...{useFormattedValues:!1,outFields:ee(e.source),fileName:e.title||"export"},...r},{outFields:d,outSpatialReference:y,fileName:p}=s,g=e=>e.geometry.hasZ||e.geometry.hasM,w=new Map,h=o.filter((e=>c(e.geometry)));w.set("POINTZ",h.filter(g)),w.set("POINT",h.filter((e=>!g(e))));const F=o.filter((e=>m(e.geometry)));w.set("MULTIPOINTZ",F.filter(g)),w.set("MULTIPOINT",F.filter((e=>!g(e))));const S=o.filter((e=>l(e.geometry)));w.set("POLYLINEZ",S.filter(g)),w.set("POLYLINE",S.filter((e=>!g(e))));const T=o.filter((e=>u(e.geometry)||f(e.geometry)));w.set("POLYGONZ",T.filter(g)),w.set("POLYGON",T.filter((e=>!g(e))));const N=Q(o,d,e.schema,!0);let O=Q(o,d,e.schema,!1);O=N.concat(O);const R=new a,D=Array.from(w.keys()).filter((e=>w.get(e).length>0));await Promise.all(D.map((async r=>{const a=w.get(r),o=await Promise.all(a.map((e=>re(e.geometry,y)))),i=await async function(e){const{wkid:r,wkt:a}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===r&&e.spatialReference.wkt===a)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return a??await E(r??t.WGS84.wkid)}(o),d=s.useFormattedValues?Object.assign({},...O.map((e=>({[e]:W.STRING})))):function(e,t,r,a){const n={};for(const o of t){if(e.some((e=>ie(e,o)))){n[o]=W.STRING;continue}const t=r?r.fields.find((e=>v(e.name,o))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[o]=W.NUMBER;break;case"date":case"timestamp-offset":n[o]=a?W.NUMBER:W.DATE;break;default:n[o]=W.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,o)instanceof Date||void 0===i(e,o)))&&e.some((e=>i(e,o)instanceof Date))?n[o]=a?W.NUMBER:W.DATE:e.every((e=>"number"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"number"==typeof i(e,o)))?n[o]=W.NUMBER:e.every((e=>"boolean"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"boolean"==typeof i(e,o)))?n[o]=W.BOOLEAN:n[o]=W.STRING}return n}(a,O,e.schema,"timestamp"===s.dateFormat),g=function(e){return e.map((e=>{if(c(e)){const{x:t,y:r,z:a,m:n}=e,o=[t,r];return e.hasZ&&o.push(a),e.hasM&&o.push(n),De(o,e)}if(m(e))return Me(e.points,e);if(l(e))return Ae(e.paths,e);if(u(e))return Ae(e.rings,e);if(f(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.")}))}(o),h=function(e,t,r,a){const n=[];for(const o of e){const e={};for(const n of t){let t=oe(o,n,a);if(null==t&&(t=""),a.useFormattedValues)t=t.toString();else{t=Ee(t,r[n],{...a,isDateOnly:"date-only"===o.schema.findFieldByName(n)?.type})}e[n]=t}n.push(e)}return n}(a,O,d,s);n.write(h,r,g,((e,t)=>{const a=D.length>1?`${p}_${r.toLowerCase()}`:p;R.file(`${a}.shp`,t.shp.buffer,{binary:!0}),R.file(`${a}.shx`,t.shx.buffer,{binary:!0}),R.file(`${a}.dbf`,t.dbf.buffer,{binary:!0}),R.file(`${a}.prj`,i)}))})));const M=await R.generateAsync({type:"uint8array"});return new Blob([M.buffer],{type:"text/plain"})}export async function shapefileToUploadData(r,a){i("shapefileData",r).isNotMissing();const n=V(a),o=new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{t(a.error)},a.readAsArrayBuffer(r)})),[{default:s},{default:m}]=await Promise.all([import("jszip"),import("shpjs")]),l=await o,u=await s.loadAsync(new Uint8Array(l)),f=u.filter((()=>!0)).map((e=>e.name));let d,y=f.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(J);return r?(t=r[1],e.filter((e=>{const r=e.match(J);return r&&r[1]===t}))):[t]}(y),f.some((e=>e.endsWith(".prj")))&&!y.every((e=>f.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(f.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await u.file(e).async("string");if(d){if(t!==d)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else d=t})));let p=[],g=[];for(const e of y){if(!f.includes(`${e}.shx`)||!f.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await u.file(`${e}.shp`).async("uint8array"),r=m.parseShp(t),a=await u.file(`${e}.dbf`).async("uint8array"),n=m.parseDbf(a);if(n.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");p=p.concat(n),g=g.concat(r)}const w=await Promise.all(g.map((r=>async function(r,a){const n=c(r)?function(r){i("geometry.coordinates",r.type).matches("Point"),i("geometry.coordinates",r.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[a,n,o]=r.coordinates,s=new e({x:a,y:n,spatialReference:t.WGS84});if(Array.isArray(o)){const[e,t]=o;!e&&!t||e?s.z=e:s.m=t}return s}(r):await b(r);if(a){let e;try{const r=await G(a);e=new t({wkid:S(r)})}catch{}e||(e=new t({wkt:a})),n.spatialReference=e}return n}(r,d)))),h=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];p.forEach(((e,t)=>e[h]=JSON.stringify(w[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),...n,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[h],inSpatialReference:w[0]?.spatialReference??t.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){i("shapefileData",e).isNotMissing();const r=V(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}function k(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:n,detectOid:!e?.primaryKeyField}}function Z(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function K(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function V(e){return{...{...k(e)},...e}}function q(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 Q(e,t,r,a){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(a)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 a=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||a.includes(e)||a.push(e);return a=a.sort(),t.concat(a)}}function ee(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 te(e,t){const r=await re(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!c(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(!c(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(!c(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 M(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await _(r))]:[""]:[]}async function re(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await D([e],t))[0]:e}function ae(e,t){const r=[t.delimiter,C,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(C,"g"),`${C}${C}`);return`${C}${t}${C}`}return e}function ne(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||h.ROUND_TRIP;return T(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():y({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof o)return O({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function oe(e,t,r){if(r.useFormattedValues||ie(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const a=e.schema.findFieldByName(t)?.type;if(null!=a)switch(a){case"date":case"date-only":case"timestamp-offset":{const r=d(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=N(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function ie(e,t){return!!v(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function se(e){for(const t of U)if(e.startsWith(t))return`\t${e}`;return e}function ce(e,t,r){const a=e.startsWith(C),n=e.endsWith(C);if(a&&!n||!a&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const o=a?e.substring(1,e.length-1):e;let i=-1;return me(o,C,((e,a)=>{if(a===o.length)return!0;if(i<0){if(a!==o.length)return i=a,!0}else if(a===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),o.replace(new RegExp(`${C}${C}`,"g"),C)}function me(e,t,r){let a,n=!1,o=0,i=0;for(;a=e.indexOf(t,o),!(a<0);){for(let t=o;t<a;)e.substring(t).startsWith(C)?(n=!n,t+=1):t++;const s=a+t.length;if(!n){const e=r(i,a);if(i=s,!e)return}o=s}r(i,e.length)}async function le(e,t){const r=JSON.parse(e),a=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(a.spatialReference=t),a}async function ue(e,t){const r=await b(JSON.parse(e));return r.spatialReference=t,r}async function fe(e,t){const r=await A(e);return r.spatialReference=t,r}function de(e,t,r){const a=r?[r]:geometryTypeHeaders[t];for(const t of a){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 ye(e,t){return(await Promise.all(e.map((async(e,r)=>{const a=e?.raw;if("string"==typeof a&&""!==a)try{return await t(a,void 0),r}catch{return}})))).find((e=>void 0!==e))}function pe(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:S({locale:t,format:r},e)}async function ge(e,t,r){const a=r?e.slice(1):e;if(r){const r=de(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of X){try{await we(r[0],n,t,a)}catch(e){continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=de(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of X){const n=await ye(a[0],r);if(void 0!==n){try{await we(n,r,t,a)}catch(e){continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function we(e,t,r,a){return{columnIndices:[e],geometries:await Promise.all(a.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function he(e,t,r){let a=!1,n=!0,i=!0,s=!0,c=!0,m=!0;const l=new Set,{data:u,includeHeaderRow:f,dateFormat:y,timeFormat:w,primaryKeyField:h,locale:F}=e,S=f?u[0]:[],T=f?u.slice(1):u;for(const e of T){const r=e[t];r?.raw&&(l.add(r.raw),a=!0,n&&(n=I(r.raw,F)||Number.isNaN(r.raw)),i&&(i=r.raw instanceof Date||d(y||p,r.raw)!==g),c&&(c=d(y||H,r.formatted)!==g),s&&(s=r.raw instanceof o||N(w||R,r.raw).isValid),m&&(m=N({format:w||z,locale:"en"},r.formatted).isValid))}const O=l.size===T.length;return h&&S[t]?.raw===h||r&&a&&O&&n?"esriFieldTypeOID":a&&m?"esriFieldTypeTimeOnly":a&&c?"esriFieldTypeDate":a&&n?"esriFieldTypeDouble":a&&s?"esriFieldTypeTimeOnly":a&&i?"esriFieldTypeDate":"esriFieldTypeString"}async function Fe(e,t,r){const{escapeFormulaChars:a,locale:n,numberFormat:i,dateFormat:s,timeFormat:c}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?pe(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:d({locale:n,format:s},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof o)return e.toString();if(e instanceof Date)return new o(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new o(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:N({locale:n,format:c},e).toString()}const m=e?.toString()??"";if(a&&m.startsWith("\t"))for(const e of U)if(m.length>1&&m.charAt(1)===e)return m.substring(1);return m}function Se(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.TIME_SHORT:return"h:mm AM/PM";case w.TIME_LONG:return"h:mm:ss AM/PM";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy h:mm AM/PM";case w.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case w.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case w.ISO_8601:case w.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&B().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Te(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy";case w.DATE_TIME_LONG:return"MMMM d yyyy";case w.FULL:return"dddd, MMMM d yyyy";case w.ISO_8601:case w.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function Ne(e){switch(e){case F.TIME_SHORT:return"h:mm AM/PM";case F.TIME_LONG:return"h:mm:ss AM/PM";case F.ISO_8601:case F.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Oe(e){switch(e){case h.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case h.CURRENCY:return'"$"#,##0.00';case h.FIXED_POINT:case h.DEFAULT:return"0.0000";case h.NUMBER:return"#,##0.0000";case h.PERCENT:return"0%";case h.ROUND_TRIP:return"0.00000";default:return e}}function Re(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 o)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function De(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function Me(e,t){return e.map((e=>De(e,t)))}function Ae(e,t){return e.map((e=>Me(e,t)))}function Ee(e,t,r){switch(t){case W.NUMBER:return e instanceof Date?e.getTime():S(e);case W.STRING:return e instanceof Date?y({format:r.dateFormat??w.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof o?O({format:r.timeFormat??F.ROUND_TRIP},e):"number"==typeof e?T(r.numberFormat??h.DEFAULT,e):e.toString();case W.BOOLEAN:return!!e;case W.DATE:return d(e);default:return e.toString()}}
1
+ import e from"@arcgis/core/geometry/Point";import t from"@arcgis/core/geometry/SpatialReference";import{geometryTypeToJson as r}from"../json/GeometryJson.js";import{translate as a}from"../locale/language.js";import{INVARIANT as n}from"../locale.js";import{Time as o}from"../utilities/Time.js";import{checkArg as i,assertNever as s}from"../utilities/checkArg.js";import{isPoint as c,isMultipoint as m,isPolyline as l,isPolygon as u,isExtent as f}from"../utilities/esri.js";import{parse as d,format as y,DEFAULT_PARSING_FORMATS as p,INVALID_DATE as g}from"../utilities/format/date.js";import{DateFormat as w,NumberFormat as h,TimeFormat as F}from"../utilities/format/formats.js";import{parse as S,format as T}from"../utilities/format/number.js";import{parse as N,format as O,DEFAULT_PARSING_FORMATS as R}from"../utilities/format/time.js";import{project as D,esriToWKT as M,wktToEsri as A,esriWkidToWkt as E,esriWktToWkid as G,esriToGeoJSON as _,geoJSONToEsri as b}from"../utilities/geometry.js";import{getLogger as x}from"../utilities/log.js";import{isNumeric as I}from"../utilities/number.js";import{caseInsensitiveEquals as v}from"../utilities/string.js";import{Feature as L}from"./Feature.js";import{FeatureSet as P}from"./FeatureSet.js";const U=["=","-","+","@"],C='"',$="\r\n",j="\n",H=[...p.map(Se),"M/d/yy"],z=[...R.map(Ne).map((e=>e.replace("AM/PM","tt")))],J=/(\w+)_(point|multipoint|polyline|polygon)z?/;var W;function B(){return x("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(W||(W={}));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 X=[[GeometryFormat.ARCGIS_JSON,le],[GeometryFormat.GEO_JSON,ue],[GeometryFormat.WKT,fe]],Y=new Map(X);export async function uploadDataToFeatureSet(t){const n=await async function(t){const{data:r,includeHeaderRow:a,geometryFormat:n,geometryFields:o,locale:i,numberFormat:c,inSpatialReference:m}=t,l=a?r.slice(1):r;if(n===GeometryFormat.NONE)return{columnIndices:[]};const u=e=>pe(e,i,c),f=(t,r)=>{const a=r===GeometryFormat.XYZ,n=r===GeometryFormat.LAT_LON;return{columnIndices:t,geometries:l.map((r=>{if(r.length>=Math.max(...t)&&I(r[t[0]]?.raw,i)&&I(r[t[1]]?.raw,i)&&(!a||I(r[t[2]]?.raw,i)))return new e({x:u(n?r[t[1]].raw:r[t[0]].raw),y:u(n?r[t[0]].raw:r[t[1]].raw),z:a?u(r[t[2]].raw):0,spatialReference:m})}))}},d=async(e,t)=>({columnIndices:[e],geometries:await Promise.all(l.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),m)})))}),y=async(e,t)=>{switch(t){case GeometryFormat.NONE:return{columnIndices:[0]};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return f(e,t);case GeometryFormat.ARCGIS_JSON:return d(e[0],le);case GeometryFormat.GEO_JSON:return d(e[0],ue);case GeometryFormat.WKT:return d(e[0],fe);default:return s(t,new Error(`Unknown geometry format "${t}".`))}};if(n){const e=de(a?r[0]:r[0].map(((e,t)=>({raw:t.toString()}))),n,a?o:o.map((e=>""+(parseInt(e.match(/\d+/g)[0])-1))));if(a&&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,g]=await ge(r,m,a);if(p===GeometryFormat.NONE)return{columnIndices:[]};return g.length>1?f(g,p):d(g[0],Y.get(p))}(t),o=function(e,t){const{data:n,displayField:o,includeHeaderRow:i,inSpatialReference:s,outSpatialReference:c,generatePrimaryKey:m}=e,l={fields:[]},u=e=>!(!t.columnIndices||0===t.columnIndices.length)&&t.columnIndices.includes(e);let{primaryKeyField:f}=e,d=0;for(let t=0;t<n[0].length;t++){if(u(t))continue;const r=he(e,t,!m&&!f&&!l.fields.find((e=>"esriFieldTypeOID"===e.type)));let o=n[0][t]?.raw?.toString(),s=o?.replace(FIELD_NAME_REGEX,"_");i&&s||(s="field"+ ++d,o=a("gcx.api.data.convert.import-field-alias",d)),l.fields.push({alias:o,name:s,type:r}),"esriFieldTypeOID"===r&&(f=s)}if(l.spatialReference=c??t.geometries?.[0]?.spatialReference??s,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),a=e[0];l.geometryType=e.every((e=>e===a))?r(a):void 0}if(!l.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=l.fields.length+1,t=!!l.fields.find((e=>"objectid"===e.name.toLowerCase()));f=t?`OBJECTID_${e}`:"OBJECTID",l.fields.push({name:f,alias:f,type:"esriFieldTypeOID"})}return l.displayField=o??l.fields.find((e=>!v(e.name,f)&&"esriFieldTypeString"===e.type))?.name??l.fields.find((e=>!v(e.name,f)))?.name??f,l.primaryKeyField=f,l}(t,n),i=await async function(e,t,r){const{data:a,includeHeaderRow:n,outFields:o,escapeFormulaChars:i,locale:s,numberFormat:c,dateFormat:m,timeFormat:l}=e,{spatialReference:u}=r,f=[],d=n?a.slice(1):a,y=(e,r)=>!t.columnIndices||0===t.columnIndices.length||!t.columnIndices.includes(r);return await Promise.all(d.map((async(e,a)=>{const n=new L;for(let t=0;t<r.fields.length;t++){const u=r.fields[t],f=e.filter(y);if(o.includes("*")||o.filter((e=>v(e,u.name))).length>0){let e=await Fe(f[t]?.raw,u,{escapeFormulaChars:i,dateFormat:m,numberFormat:c,timeFormat:l,locale:s});"esriFieldTypeOID"===u.type&&null===e&&(e=a),n.attributes.set(u.name,e)}}t.geometries&&(n.geometry=await re(t.geometries[a],u)),f.push(n)}))),f}(t,n,o);return new P({features:i,schema:o})}export async function toCsv(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:w.ROUND_TRIP,timeFormat:F.ROUND_TRIP,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:t.WGS84,includeHeaderRow:!0,outFields:ee(e.source),rowDelimiter:navigator.platform?.startsWith("Win")?$:"\n"},...r},{includeByteOrderMark:o,includeHeaderRow:s,delimiter:c,outFields:m,rowDelimiter:l}=n,u=[];o&&u.push("\ufeff");const f=q(a,n),d=Q(a,m,e.schema,!0),y=Q(a,m,e.schema,!1);if(s){const e=[];for(const t of f)e.push(ae(t,n));for(const t of d)e.push(ae(t,n));for(const t of y)e.push(ae(t,n));const t=e.join(c)+l;u.push(t)}await Promise.all(a.map((async e=>{const t=[],r=(t,r)=>{const a=oe(e,t,r),n=e.schema.findFieldByName(t)?.type;return ae(ne(a,{...r,isDateOnly:"date-only"===n}),r)};t.push(...await async function(e,t){let r=await te(e,t);t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":ne(e,t))));return r.map((e=>""===e?"":ae(e,t)))}(e.geometry,n)),t.push(...d.map((e=>r(e,n)))),t.push(...y.map((e=>r(e,n))));const a=`${t.join(c)}${l}`;u.push(a)})));return new Blob(u,{type:"text/plain",endings:"\n"===l||l===$?"transparent":"native"})}export async function csvToUploadData(e,t){let r;if(i("csvData",e).isNotMissing(),e instanceof Blob){const t=new Promise(((t,r)=>{const a=new FileReader;a.onload=()=>{t(a.result)},a.onerror=()=>{r(a.error)},a.readAsText(e)}));r=await t}else r=e;const o=Z(t),s=o.rowDelimiter||function(e){let t=j;return me(e,$,((r,a)=>(0===r&&a===e.length||(t=$),!1))),t}(r),c=o.delimiter??function(e,t,r){const a=",";if(0===e.length)return a;const o=[];if(me(e,t,((t,r)=>(r!==e.length||t!==r)&&(o.push(e.substring(t,r)),o.length<3))),0===o.length)return a;let i=[{delimiter:",",rowsDelimiterOccurrences:[],rowsNumberAdjacentOccurrences:[]},{delimiter:";",rowsDelimiterOccurrences:[]},{delimiter:"|",rowsDelimiterOccurrences:[]},{delimiter:"\t",rowsDelimiterOccurrences:[]},{delimiter:" ",rowsDelimiterOccurrences:[]}].filter((e=>o[0].includes(e.delimiter)));if(0===i.length)return a;for(const e of o)for(const t of i){let a=0,n=0;me(e,t.delimiter,((o,i)=>{if(i!==e.length&&a++,","===t.delimiter){const t=e.charAt(i-1),a=e.charAt(i+1);I(t,r)&&I(a,r)&&n++}return!0})),t.rowsDelimiterOccurrences.push(a),","===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!==n){const e=i[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]){i=i.filter((e=>","!==e.delimiter));break}}if(0===i.length)return a;return i[0].delimiter}(r,s,t.locale),m=function(e,t,r){const a=[],n=(e,t)=>{const a=[];return me(e,r,((r,n)=>{const o=e.substring(r,n);return a.push({raw:ce(o,t,a.length)}),!0})),a};if(me(e,t,((t,r)=>{const o=e.substring(t,r);return o.length>0&&a.push(n(o,a.length)),!0})),a.length){const e=a[0].length;a.forEach(((t,r)=>{if(t.length!==e)throw new Error(`Detected invalid CSV: Row ${r} does not have expected number of columns: ${e}`)}))}return a}(r,s,c);let{geometryFormat:l,geometryFields:u}=t;if(!l){const[e,t]=await ge(m,o.inSpatialReference,o.includeHeaderRow);l=e,u=t.map((e=>o.includeHeaderRow?m[0][e]?.raw??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:m,...o,geometryFormat:l,geometryFields:u}}export async function csvToFeatureSet(e,t){const r=Z(t);return uploadDataToFeatureSet(await csvToUploadData(e,r))}export async function toXLSX(e,r){i("featureSet",e).isNotMissing();const a=Array.from(e),n={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:a.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:ee(e.source),outSpatialReference:t.WGS84,dateFormat:w.DEFAULT,timeFormat:F.DEFAULT,numberFormat:h.DEFAULT,sheetName:"sheet1"},...r},{outFields:s,includeHeaderRow:c,dateFormat:m,timeFormat:l,numberFormat:u}=n,f=q(a,n),d=Q(a,s,e.schema,!0),y=Q(a,s,e.schema,!1),p=await import("xlsx"),g=p.utils.sheet_new();let S=!1;if(c){const t=f.concat(d).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))}(y,e.source));S=!0,p.utils.sheet_add_aoa(g,[t],{cellDates:!0})}await Promise.all(a.map((async e=>{const t=[],r=new Set,a=new Set;t.push(...await te(e.geometry,n));for(const r of d){const a=Re(e.attributes.get(r),n);t.push(a)}for(const i of y){const s=oe(e,i,n);if(s instanceof o){const a=e.schema.findFieldByName(i);"time-only"===a?.type&&r.add(t.length)}else if(s instanceof Date){const r=e.schema.findFieldByName(i);"date-only"===r?.type&&a.add(t.length)}const c=Re(s,n);t.push(c)}if(!t.every((e=>"string"!=typeof e||e.length<=32767)))return void B().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`);p.utils.sheet_add_aoa(g,[t],{cellDates:!0,origin:S?-1:void 0}),S=!0;const i=p.utils.decode_range(g["!ref"]);for(let e=i.s.c;e<=i.e.c;e++){const t=g[p.utils.encode_cell({r:i.e.r,c:e})];"d"===t.t?r.has(e)?t.z=Ne(l??F.ROUND_TRIP):a.has(e)?t.z=Te(m??w.ROUND_TRIP):t.z=Se(m??w.ROUND_TRIP):"n"===t.t&&(t.z=Oe(u))}})));const T={SheetNames:[],Sheets:{}};T.SheetNames.push(n.sheetName),T.Sheets[n.sheetName]=g;const N=p.write(T,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),O=new Uint8Array(N.length);for(let e=0;e<N.length;e++)O[e]=N.charCodeAt(e);return new Blob([O.buffer],{type:"text/plain"})}export async function xlsxToUploadData(e,t){i("xlsxData",e).isNotMissing();const r=K(t),n=await async function(e,t){const r=await import("xlsx"),a=new Promise(((a,n)=>{const o=new FileReader;o.onload=()=>{const e=new Uint8Array(o.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];a(c)},o.onerror=()=>{n(o.error)},o.readAsArrayBuffer(e)})),n=await a,o=r.utils.decode_range(n["!ref"]),i=[];for(let e=o.s.r;e<=o.e.r;e++){const t=[];for(let a=o.s.c;a<=o.e.c;a++){const o=n[`${r.utils.encode_cell({r:e,c:a})}`];o&&"d"===o.t&&o.v instanceof Date&&(o.v=new Date(o.v.getTime()+6e4*o.v.getTimezoneOffset())),t.push(o?{raw:o.v,formatted:"s"===o.t?void 0:o.w}:{raw:""})}i.push(t)}return i}(e,r);let{geometryFormat:o,geometryFields:s}=t;if(!o){const[e,t]=await ge(n,r.inSpatialReference,r.includeHeaderRow);o=e,s=t.map((e=>r.includeHeaderRow?n[0][e]?.raw.toString()??a("gcx.api.data.convert.import-field-alias",(e+1).toString()):a("gcx.api.data.convert.import-field-alias",(e+1).toString())))}return{data:n,...r,geometryFormat:o,geometryFields:s}}export async function xlsxToFeatureSet(e,t){i("xlsxData",e).isNotMissing();const r=K(t);return uploadDataToFeatureSet(await xlsxToUploadData(e,r))}export async function toShapefile(e,r){i("featureSet",e).isNotMissing();const[{default:a},n]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),o=Array.from(e),s={...{useFormattedValues:!1,outFields:ee(e.source),fileName:e.title||"export"},...r},{outFields:d,outSpatialReference:y,fileName:p}=s,g=e=>e.geometry.hasZ||e.geometry.hasM,w=new Map,h=o.filter((e=>c(e.geometry)));w.set("POINTZ",h.filter(g)),w.set("POINT",h.filter((e=>!g(e))));const F=o.filter((e=>m(e.geometry)));w.set("MULTIPOINTZ",F.filter(g)),w.set("MULTIPOINT",F.filter((e=>!g(e))));const S=o.filter((e=>l(e.geometry)));w.set("POLYLINEZ",S.filter(g)),w.set("POLYLINE",S.filter((e=>!g(e))));const T=o.filter((e=>u(e.geometry)||f(e.geometry)));w.set("POLYGONZ",T.filter(g)),w.set("POLYGON",T.filter((e=>!g(e))));const N=Q(o,d,e.schema,!0);let O=Q(o,d,e.schema,!1);O=N.concat(O);const R=new a,D=Array.from(w.keys()).filter((e=>w.get(e).length>0));await Promise.all(D.map((async r=>{const a=w.get(r),o=await Promise.all(a.map((e=>re(e.geometry,y)))),i=await async function(e){const{wkid:r,wkt:a}=e[0].spatialReference;if(!e.every((e=>e.spatialReference.wkid===r&&e.spatialReference.wkt===a)))throw new Error("Cannot create shapefile that contains geometries with different spatial references.");return a??await E(r??t.WGS84.wkid)}(o),d=s.useFormattedValues?Object.assign({},...O.map((e=>({[e]:W.STRING})))):function(e,t,r,a){const n={};for(const o of t){if(e.some((e=>ie(e,o)))){n[o]=W.STRING;continue}const t=r?r.fields.find((e=>v(e.name,o))):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":case"big-integer":n[o]=W.NUMBER;break;case"date":case"timestamp-offset":n[o]=a?W.NUMBER:W.DATE;break;default:n[o]=W.STRING}continue}const i=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>i(e,o)instanceof Date||void 0===i(e,o)))&&e.some((e=>i(e,o)instanceof Date))?n[o]=a?W.NUMBER:W.DATE:e.every((e=>"number"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"number"==typeof i(e,o)))?n[o]=W.NUMBER:e.every((e=>"boolean"==typeof i(e,o)||void 0===i(e,o)))&&e.some((e=>"boolean"==typeof i(e,o)))?n[o]=W.BOOLEAN:n[o]=W.STRING}return n}(a,O,e.schema,"timestamp"===s.dateFormat),g=function(e){return e.map((e=>{if(c(e)){const{x:t,y:r,z:a,m:n}=e,o=[t,r];return e.hasZ&&o.push(a),e.hasM&&o.push(n),De(o,e)}if(m(e))return Me(e.points,e);if(l(e))return Ae(e.paths,e);if(u(e))return Ae(e.rings,e);if(f(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.")}))}(o),h=function(e,t,r,a){const n=[];for(const o of e){const e={};for(const n of t){let t=oe(o,n,a);if(null==t&&(t=""),a.useFormattedValues)t=t.toString();else{t=Ee(t,r[n],{...a,isDateOnly:"date-only"===o.schema.findFieldByName(n)?.type})}e[n]=t}n.push(e)}return n}(a,O,d,s);n.write(h,r,g,((e,t)=>{const a=D.length>1?`${p}_${r.toLowerCase()}`:p;R.file(`${a}.shp`,t.shp.buffer,{binary:!0}),R.file(`${a}.shx`,t.shx.buffer,{binary:!0}),R.file(`${a}.dbf`,t.dbf.buffer,{binary:!0}),R.file(`${a}.prj`,i)}))})));const M=await R.generateAsync({type:"uint8array"});return new Blob([M.buffer],{type:"text/plain"})}export async function shapefileToUploadData(r,a){i("shapefileData",r).isNotMissing();const n=V(a),o=new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{t(a.error)},a.readAsArrayBuffer(r)})),[{default:s},{default:m}]=await Promise.all([import("jszip"),import("shpjs")]),l=await o,u=await s.loadAsync(new Uint8Array(l)),f=u.filter((()=>!0)).map((e=>e.name));let d,y=f.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(J);return r?(t=r[1],e.filter((e=>{const r=e.match(J);return r&&r[1]===t}))):[t]}(y),f.some((e=>e.endsWith(".prj")))&&!y.every((e=>f.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(f.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await u.file(e).async("string");if(d){if(t!==d)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else d=t})));let p=[],g=[];for(const e of y){if(!f.includes(`${e}.shx`)||!f.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await u.file(`${e}.shp`).async("uint8array"),r=m.parseShp(t),a=await u.file(`${e}.dbf`).async("uint8array"),n=m.parseDbf(a);if(n.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");p=p.concat(n),g=g.concat(r)}const w=await Promise.all(g.map((r=>async function(r,a){const n=c(r)?function(r){i("geometry.coordinates",r.type).matches("Point"),i("geometry.coordinates",r.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[a,n,o]=r.coordinates,s=new e({x:a,y:n,spatialReference:t.WGS84});if(Array.isArray(o)){const[e,t]=o;!e&&!t||e?s.z=e:s.m=t}return s}(r):await b(r);if(a){let e;try{const r=await G(a);e=new t({wkid:S(r)})}catch{}e||(e=new t({wkt:a})),n.spatialReference=e}return n}(r,d)))),h=geometryTypeHeaders[GeometryFormat.ARCGIS_JSON][0][0];p.forEach(((e,t)=>e[h]=JSON.stringify(w[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),...n,includeHeaderRow:!0,geometryFormat:GeometryFormat.ARCGIS_JSON,geometryFields:[h],inSpatialReference:w[0]?.spatialReference??t.fromJSON({wkid:4326})}}export async function shapefileToFeatureSet(e,t){i("shapefileData",e).isNotMissing();const r=V(t);return uploadDataToFeatureSet(await shapefileToUploadData(e,r))}function k(e){return{escapeFormulaChars:!0,outFields:["*"],generatePrimaryKey:!1,locale:n,detectOid:!e?.primaryKeyField}}function Z(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function K(e){return{...{includeHeaderRow:!0,inSpatialReference:t.WGS84,...k(e)},...e}}function V(e){return{...{...k(e)},...e}}function q(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 Q(e,t,r,a){const n=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(a)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 a=[];for(const r of e)for(const e of r.attributes.keys())t.includes(e)||n.includes(e)||a.includes(e)||a.push(e);return a=a.sort(),t.concat(a)}}function ee(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 te(e,t){const r=await re(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!c(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(!c(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(!c(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 M(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(await _(r))]:[""]:[]}async function re(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await D([e],t))[0]:e}function ae(e,t){const r=[t.delimiter,C,"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){const t=e.replace(new RegExp(C,"g"),`${C}${C}`);return`${C}${t}${C}`}return e}function ne(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||h.ROUND_TRIP;return T(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():y({format:t.dateFormat,timeZone:"UTC",isDateOnly:t.isDateOnly},e);if(e instanceof o)return O({format:t.timeFormat},e)}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function oe(e,t,r){if(r.useFormattedValues||ie(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);const a=e.schema.findFieldByName(t)?.type;if(null!=a)switch(a){case"date":case"date-only":case"timestamp-offset":{const r=d(e.attributes.get(t));if(!isNaN(r.getTime()))return r;break}case"time-only":{const r=N(e.attributes.get(t));if(r.isValid)return r;break}}return e.attributes.get(t)??e.presentableAttributes.get(t)}function ie(e,t){return!!v(t,e.schema.typeIdField)||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function se(e){for(const t of U)if(e.startsWith(t))return`\t${e}`;return e}function ce(e,t,r){const a=e.startsWith(C),n=e.endsWith(C);if(a&&!n||!a&&n)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const o=a?e.substring(1,e.length-1):e;let i=-1;return me(o,C,((e,a)=>{if(a===o.length)return!0;if(i<0){if(a!==o.length)return i=a,!0}else if(a===i+1)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),o.replace(new RegExp(`${C}${C}`,"g"),C)}function me(e,t,r){let a,n=!1,o=0,i=0;for(;a=e.indexOf(t,o),!(a<0);){for(let t=o;t<a;)e.substring(t).startsWith(C)?(n=!n,t+=1):t++;const s=a+t.length;if(!n){const e=r(i,a);if(i=s,!e)return}o=s}r(i,e.length)}async function le(e,t){const r=JSON.parse(e),a=(await import("@arcgis/core/geometry/support/jsonUtils")).fromJSON(r);return r.spatialReference||(a.spatialReference=t),a}async function ue(e,t){const r=await b(JSON.parse(e));return r.spatialReference=t,r}async function fe(e,t){const r=await A(e);return r.spatialReference=t,r}function de(e,t,r){const a=r?[r]:geometryTypeHeaders[t];for(const t of a){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 ye(e,t){return(await Promise.all(e.map((async(e,r)=>{const a=e?.raw;if("string"==typeof a&&""!==a)try{return await t(a,void 0),r}catch{return}})))).find((e=>void 0!==e))}function pe(e,t,r){return"inv"===t?"string"==typeof e?parseFloat(e.replaceAll(",","")):e:S({locale:t,format:r},e)}async function ge(e,t,r){const a=r?e.slice(1):e;if(r){const r=de(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==r)for(const[e,n]of X){try{await we(r[0],n,t,a)}catch{continue}return[e,[r[0]]]}const n=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of n){const r=de(e[0],t);if(void 0!==r)return[t,r]}}for(const[e,r]of X){const n=await ye(a[0],r);if(void 0!==n){try{await we(n,r,t,a)}catch{continue}return[e,[n]]}}return[GeometryFormat.NONE,[]]}async function we(e,t,r,a){return{columnIndices:[e],geometries:await Promise.all(a.map((t=>t[e])).map((e=>{if(e?.raw)return t(e.raw.toString(),r)})))}}function he(e,t,r){let a=!1,n=!0,i=!0,s=!0,c=!0,m=!0;const l=new Set,{data:u,includeHeaderRow:f,dateFormat:y,timeFormat:w,primaryKeyField:h,locale:F}=e,S=f?u[0]:[],T=f?u.slice(1):u;for(const e of T){const r=e[t];r?.raw&&(l.add(r.raw),a=!0,n&&(n=I(r.raw,F)||Number.isNaN(r.raw)),i&&(i=r.raw instanceof Date||d(y||p,r.raw)!==g),c&&(c=d(y||H,r.formatted)!==g),s&&(s=r.raw instanceof o||N(w||R,r.raw).isValid),m&&(m=N({format:w||z,locale:"en"},r.formatted).isValid))}const O=l.size===T.length;return h&&S[t]?.raw===h||r&&a&&O&&n?"esriFieldTypeOID":a&&m?"esriFieldTypeTimeOnly":a&&c?"esriFieldTypeDate":a&&n?"esriFieldTypeDouble":a&&s?"esriFieldTypeTimeOnly":a&&i?"esriFieldTypeDate":"esriFieldTypeString"}async function Fe(e,t,r){const{escapeFormulaChars:a,locale:n,numberFormat:i,dateFormat:s,timeFormat:c}=r;if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?pe(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:d({locale:n,format:s},e).getTime()}if("esriFieldTypeTimeOnly"===t.type){if(e instanceof o)return e.toString();if(e instanceof Date)return new o(e).toString();if("number"==typeof e){const t=(await import("xlsx")).SSF.parse_date_code(e);return t?new o(`${t.H.toString().padStart(2,"0")}:${t.M.toString().padStart(2,"0")}:${t.S.toString().padStart(2,"0")}`).toString():void 0}return""===e?null:N({locale:n,format:c},e).toString()}const m=e?.toString()??"";if(a&&m.startsWith("\t"))for(const e of U)if(m.length>1&&m.charAt(1)===e)return m.substring(1);return m}function Se(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.TIME_SHORT:return"h:mm AM/PM";case w.TIME_LONG:return"h:mm:ss AM/PM";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy h:mm AM/PM";case w.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case w.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case w.ISO_8601:case w.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&B().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Te(e){switch(e){case w.DATE_SHORT:return"dd/MM/yyyy";case w.DATE_LONG:return"MMMM d, yyyy";case w.DATE_TIME_SHORT:case w.DEFAULT:return"MMM d yyyy";case w.DATE_TIME_LONG:return"MMMM d yyyy";case w.FULL:return"dddd, MMMM d yyyy";case w.ISO_8601:case w.ROUND_TRIP:return"yyyy-MM-dd";default:return e.replace(/TtZzHhmSsUua/g,"")}}function Ne(e){switch(e){case F.TIME_SHORT:return"h:mm AM/PM";case F.TIME_LONG:return"h:mm:ss AM/PM";case F.ISO_8601:case F.ROUND_TRIP:return"HH:mm:ss";default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("h")&&!t.includes("AM/PM")&&B().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function Oe(e){switch(e){case h.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case h.CURRENCY:return'"$"#,##0.00';case h.FIXED_POINT:case h.DEFAULT:return"0.0000";case h.NUMBER:return"#,##0.0000";case h.PERCENT:return"0%";case h.ROUND_TRIP:return"0.00000";default:return e}}function Re(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 o)return e.toDate()}let r=e.toString();return t.escapeFormulaChars&&(r=se(r)),r}function De(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function Me(e,t){return e.map((e=>De(e,t)))}function Ae(e,t){return e.map((e=>Me(e,t)))}function Ee(e,t,r){switch(t){case W.NUMBER:return e instanceof Date?e.getTime():S(e);case W.STRING:return e instanceof Date?y({format:r.dateFormat??w.ROUND_TRIP,timeZone:"UTC",isDateOnly:r.isDateOnly},e):e instanceof o?O({format:r.timeFormat??F.ROUND_TRIP},e):"number"==typeof e?T(r.numberFormat??h.DEFAULT,e):e.toString();case W.BOOLEAN:return!!e;case W.DATE:return d(e);default:return e.toString()}}
@@ -1 +1 @@
1
- window.navigationData = "data:application/octet-stream;base64,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"
1
+ window.navigationData = "data:application/octet-stream;base64,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"