@vertigis/arcgis-extensions 34.7.0 → 35.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AppConfig.schema.json +8 -4
- package/ItemType.js +1 -1
- package/LanguageResources.js +1 -1
- package/data/ArcGISServiceTableExtension.js +1 -1
- package/data/Attachment.js +1 -1
- package/data/Feature.js +1 -1
- package/data/FeatureList.js +1 -1
- package/data/FeatureSet.js +1 -1
- package/data/FeatureSettings.js +1 -1
- package/data/FeatureSourceBase.js +1 -1
- package/data/FeatureStream.js +1 -1
- package/data/FieldExtension.js +1 -1
- package/data/Schema.js +1 -1
- package/data/Table.js +1 -1
- package/data/_TableExtension.js +1 -1
- package/data/convert.js +1 -1
- package/data/support/attachments.js +1 -1
- package/declarations/arcgis-js-api-extensions/index.d.ts +11 -120
- package/docs/html/assets/search.js +1 -1
- package/docs/html/classes/data_FeatureStream.FeatureStream.html +1 -1
- package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerSchema.html +1 -1
- package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerExtension.html +18 -16
- package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +5 -5
- package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +2 -2
- package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +2 -2
- package/docs/html/classes/mapping_KMLSublayerExtension.KMLSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_MapImageSublayerExtension.MapImageSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_TileSublayerExtension.TileSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_WMSSublayerExtension.WMSSublayerExtension.html +5 -3
- package/docs/html/classes/mapping_WMTSSublayerExtension.WMTSSublayerExtension.html +5 -3
- package/docs/html/classes/mapping__SublayerExtension.SubSublayerExtensionCollection.html +6 -6
- package/docs/html/classes/mapping__SublayerExtension.SublayerExtension.html +5 -3
- package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +2 -2
- package/docs/html/classes/tasks_identify_BuildingComponentSublayerClientSideIdentifyProvider.BuildingComponentSublayerClientSideIdentifyProvider.html +2 -2
- package/docs/html/classes/tasks_identify_BuildingComponentSublayerHitTestIdentifyProvider.BuildingComponentSublayerHitTestIdentifyProvider.html +4 -4
- package/docs/html/classes/tasks_identify_CSVLayer3DHitTestIdentifyProvider.CSVLayer3DHitTestIdentifyProvider.html +4 -4
- package/docs/html/classes/tasks_identify_ClientSideIdentifyProvider.ClientSideIdentifyProvider.html +2 -2
- package/docs/html/classes/tasks_identify_FeatureLayer3DHitTestIdentifyProvider.FeatureLayer3DHitTestIdentifyProvider.html +4 -4
- package/docs/html/classes/tasks_identify_FeatureLayerClientSideIdentifyProvider.FeatureLayerClientSideIdentifyProvider.html +2 -2
- package/docs/html/classes/tasks_identify_HitTestIdentifyProvider.HitTestIdentifyProvider.html +6 -6
- package/docs/html/classes/tasks_identify_PointCloudLayerHitTestIdentifyProvider.PointCloudLayerHitTestIdentifyProvider.html +4 -4
- package/docs/html/classes/tasks_identify_SceneLayerClientSideIdentifyProvider.SceneLayerClientSideIdentifyProvider.html +2 -2
- package/docs/html/classes/tasks_identify_SceneLayerHitTestIdentifyProvider.SceneLayerHitTestIdentifyProvider.html +3 -3
- package/docs/html/classes/tasks_identify_StreamLayerClientSideQueryIdentifyProvider.StreamLayerClientSideQueryIdentifyProvider.html +2 -2
- package/docs/html/classes/tasks_query_BuildingComponentSublayerClientSideQueryProvider.BuildingComponentSublayerClientSideQueryProvider.html +6 -3
- package/docs/html/classes/tasks_query_ClientSideQueryProvider.ClientSideQueryProvider.html +6 -3
- package/docs/html/classes/tasks_query_QueryService.QueryService.html +3 -3
- package/docs/html/classes/tasks_query_SceneLayerClientSideQueryProvider.SceneLayerClientSideQueryProvider.html +6 -3
- package/docs/html/classes/tasks_query_SceneLayerQueryProvider.SceneLayerQueryProvider.html +2 -2
- package/docs/html/classes/tasks_query_StreamLayerClientSideQueryProvider.StreamLayerClientSideQueryProvider.html +4 -4
- package/docs/html/classes/utilities_asyncIterable.AsyncQueue.html +1 -1
- package/docs/html/classes/utilities_geometry.CoordinateSystemBounds.html +1 -1
- package/docs/html/enums/support_esri.WellKnownBasemap.html +1 -1
- package/docs/html/interfaces/data__TableExtension.TableExtensionProperties.html +1 -1
- package/docs/html/interfaces/data_support_attachments.AttachmentEnabledLayer.html +2 -2
- package/docs/html/interfaces/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerExtensionProperties.html +1 -1
- package/docs/html/interfaces/portal_Domain.DomainBase.html +1 -1
- package/docs/html/interfaces/portal_ImageServiceLayer.ImageServiceLayer-1.html +17 -17
- package/docs/html/interfaces/portal_Item.Item-1.html +48 -48
- package/docs/html/interfaces/portal_LayerDefinition.FieldOverride.html +3 -3
- package/docs/html/interfaces/portal_LayerDefinition.LayerDefinition-1.html +49 -50
- package/docs/html/interfaces/portal_LayerDefinition.LayerDefinitionDefaults.html +8 -8
- package/docs/html/interfaces/portal_LayerDefinition.LayerTimeInfo.html +9 -9
- package/docs/html/interfaces/portal_LayerDefinition.OrderByClause.html +9 -5
- package/docs/html/interfaces/portal_LayerDefinition.TimeInfoExportOptions.html +4 -4
- package/docs/html/interfaces/portal_PopupInfo.OrderByFields.html +2 -2
- package/docs/html/interfaces/portal_PopupInfo.PopupElement.html +5 -5
- package/docs/html/interfaces/portal_PopupInfo.PopupInfo-1.html +8 -8
- package/docs/html/interfaces/portal_PopupInfo.RelatedRecordsInfo.html +2 -2
- package/docs/html/interfaces/support_esri.AccessorLike.html +4 -4
- package/docs/html/interfaces/support_esri.ChangeEvent.html +4 -4
- package/docs/html/interfaces/support_esri.LayerWithSublayers.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatistics.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatisticsFrequentValues.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatisticsHistogram.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatisticsLabel.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatisticsLabels.html +1 -1
- package/docs/html/interfaces/support_esri.PointCloudLayerCachedStatisticsStats.html +1 -1
- package/docs/html/interfaces/support_esri.SublayerLike.html +14 -14
- package/docs/html/interfaces/utilities_geometry.GeoJSONLineString.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeoJSONMultiLineString.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeoJSONMultiPoint.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeoJSONMultiPolygon.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeoJSONPoint.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeoJSONPolygon.html +2 -2
- package/docs/html/interfaces/utilities_geometry.GeographicTransformationJson.html +1 -1
- package/docs/html/interfaces/utilities_geometry.GeographicTransformationStepJson.html +3 -3
- package/docs/html/interfaces/utilities_geometry.GmlOptions.html +3 -3
- package/docs/html/modules/data_convert.html +5 -5
- package/docs/html/modules/mapping_MapExtension.html +1 -1
- package/docs/html/modules/portal_Domain.Domain.html +6 -6
- package/docs/html/modules/portal_Domain.DomainType.html +2 -2
- package/docs/html/modules/portal_Domain.html +2 -2
- package/docs/html/modules/portal_ImageServiceLayer.ImageServiceLayer.html +1 -1
- package/docs/html/modules/portal_LayerDefinition.LayerDefinition.html +2 -2
- package/docs/html/modules/portal_LayerDefinition.LayerDefinitionCapabilities.html +6 -6
- package/docs/html/modules/portal_LayerDefinition.html +2 -2
- package/docs/html/modules/portal_PopupInfo.PopupInfo.html +1 -1
- package/docs/html/modules/portal_PopupInfo.html +1 -1
- package/docs/html/modules/support__query.html +2 -2
- package/docs/html/modules/support_esri.html +10 -10
- package/docs/html/modules/utilities_esri.html +2 -2
- package/docs/html/modules/utilities_geometry.html +25 -25
- package/docs/html/modules/version.html +1 -1
- package/layer-preset/LayerPreset.js +1 -1
- package/locale/language.js +1 -1
- package/mapping/ArcGISSublayerExtension.js +1 -1
- package/mapping/BasemapExtension.js +1 -1
- package/mapping/BuildingComponentSublayerExtension.d.ts +1 -0
- package/mapping/BuildingComponentSublayerExtension.js +1 -1
- package/mapping/BuildingSceneLayerExtension.js +1 -1
- package/mapping/BuildingSublayerExtension.js +1 -1
- package/mapping/CSVLayerExtension.js +1 -1
- package/mapping/FeatureCollectionLayerExtension.js +1 -1
- package/mapping/FeatureLayerExtension.js +1 -1
- package/mapping/FeatureLayerExtensionBase.js +1 -1
- package/mapping/GraphicsLayerExtension.js +1 -1
- package/mapping/GroundExtension.js +1 -1
- package/mapping/GroupLayerExtension.js +1 -1
- package/mapping/ImageryLayerExtension.js +1 -1
- package/mapping/ImageryTileLayerExtension.js +1 -1
- package/mapping/KMLLayerExtension.js +1 -1
- package/mapping/KMLSublayerExtension.js +1 -1
- package/mapping/MapExtension.js +1 -1
- package/mapping/MapImageLayerExtension.js +1 -1
- package/mapping/MapImageSublayerExtension.js +1 -1
- package/mapping/PointCloudLayerExtension.js +1 -1
- package/mapping/SceneLayerExtension.js +1 -1
- package/mapping/StreamLayerExtension.js +1 -1
- package/mapping/WMTSLayerExtension.js +1 -1
- package/mapping/WMTSSublayerExtension.js +1 -1
- package/mapping/_LayerExtension.js +1 -1
- package/mapping/_SublayerExtension.d.ts +4 -0
- package/mapping/_SublayerExtension.js +1 -1
- package/mapping/support/LayerListSettings.js +1 -1
- package/mapping/support/WfsCapabilities.js +1 -1
- package/mapping/support/_LayerExtensionCollection.js +1 -1
- package/mapping/support/_SublayerExtensionCollection.js +1 -1
- package/mapping/support/layers.js +1 -1
- package/mapping/support/ogc.js +1 -1
- package/menus/Menu.js +1 -1
- package/menus/MenuItem.js +1 -1
- package/package.json +4 -3
- package/portal/BaseMap.js +1 -1
- package/portal/Domain.d.ts +1 -1
- package/portal/DrawingInfo.js +1 -1
- package/portal/FeatureLayer.js +1 -1
- package/portal/ImageServiceLayer.d.ts +1 -1
- package/portal/IntegratedMeshLayer.js +1 -1
- package/portal/Layer.js +1 -1
- package/portal/LayerDefinition.d.ts +7 -4
- package/portal/LayerDefinition.js +1 -1
- package/portal/Lighting.js +1 -1
- package/portal/MapServiceLayer.js +1 -1
- package/portal/PointCloudLayer.js +1 -1
- package/portal/PopupInfo.js +1 -1
- package/portal/Slide.js +1 -1
- package/portal/Symbol.js +1 -1
- package/portal/Table.js +1 -1
- package/portal/TiledImageServiceLayer.js +1 -1
- package/portal/TiledMapServiceLayer.js +1 -1
- package/portal/WebMap.js +1 -1
- package/portal/WebScene.js +1 -1
- package/portal/Widgets.js +1 -1
- package/support/ArcGISRequestHelper.js +1 -1
- package/support/Cancellable.js +1 -1
- package/support/Observable.js +1 -1
- package/support/Serializable.js +1 -1
- package/support/Settings.js +1 -1
- package/support/_ArcGISRelationshipCollection.js +1 -1
- package/support/_query.js +1 -1
- package/support/esri.d.ts +2 -0
- package/support/utilities.js +1 -1
- package/tasks/geocoding/ArcGISGeocoder.js +1 -1
- package/tasks/geocoding/utilities.js +1 -1
- package/tasks/identify/BuildingComponentSublayerClientSideIdentifyProvider.js +1 -1
- package/tasks/identify/BuildingComponentSublayerHitTestIdentifyProvider.js +1 -1
- package/tasks/identify/CSVLayer3DHitTestIdentifyProvider.js +1 -1
- package/tasks/identify/CSVLayerClientSideQueryIdentifyProvider.js +1 -1
- package/tasks/identify/ClientSideIdentifyProvider.js +1 -1
- package/tasks/identify/FeatureLayer3DHitTestIdentifyProvider.js +1 -1
- package/tasks/identify/FeatureLayerClientSideIdentifyProvider.js +1 -1
- package/tasks/identify/FeatureLayerQueryIdentifyProvider.js +1 -1
- package/tasks/identify/HitTestIdentifyProvider.js +1 -1
- package/tasks/identify/IdentifyProviderBase.js +1 -1
- package/tasks/identify/IdentifyService.js +1 -1
- package/tasks/identify/ImageryLayerIdentifyProvider.js +1 -1
- package/tasks/identify/PointCloudLayerHitTestIdentifyProvider.js +1 -1
- package/tasks/identify/SceneLayerHitTestIdentifyProvider.js +1 -1
- package/tasks/identify/SceneLayerQueryIdentifyProvider.js +1 -1
- package/tasks/identify/StreamLayerClientSideQueryIdentifyProvider.js +1 -1
- package/tasks/identify/WMSSublayerIdentifyProvider.js +1 -1
- package/tasks/identify/_utilities.js +1 -1
- package/tasks/query/ArcGISRelationship.js +1 -1
- package/tasks/query/BuildingComponentSublayerClientSideQueryProvider.js +1 -1
- package/tasks/query/CSVLayerClientSideQueryProvider.js +1 -1
- package/tasks/query/ClientSideQueryProvider.d.ts +5 -0
- package/tasks/query/ClientSideQueryProvider.js +1 -1
- package/tasks/query/FeatureLayerQueryProvider.js +1 -1
- package/tasks/query/ImageryLayerQueryProvider.js +1 -1
- package/tasks/query/QueryService.js +1 -1
- package/tasks/query/SceneLayerClientSideQueryProvider.js +1 -1
- package/tasks/query/SceneLayerQueryProvider.js +1 -1
- package/tasks/query/StreamLayerClientSideQueryProvider.d.ts +4 -0
- package/tasks/query/StreamLayerClientSideQueryProvider.js +1 -1
- package/tasks/search/ArcGISGeocoderSearchProvider.js +1 -1
- package/tasks/search/GeocoderSearchProvider.js +1 -1
- package/tasks/search/QuerySearchProvider.js +1 -1
- package/tasks/search/SearchService.js +1 -1
- package/tasks/search/_utilities.js +1 -1
- package/utilities/_layers.js +1 -1
- package/utilities/arcade.js +1 -1
- package/utilities/checkArg.js +1 -1
- package/utilities/date.js +1 -1
- package/utilities/esri.js +1 -1
- package/utilities/extensions.js +1 -1
- package/utilities/geometry.js +1 -1
- package/utilities/mapping.js +1 -1
- package/utilities/number.js +1 -1
- package/utilities/portal.js +1 -1
- package/utilities/query.js +1 -1
- package/utilities/renderers.js +1 -1
- package/utilities/scaleRanges.js +1 -1
- package/utilities/string.js +1 -1
- package/utilities/symbol.js +1 -1
- package/utilities/watch.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/data/convert.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import Point from"@arcgis/core/geometry/Point";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import{translate}from"../locale/language.js";import{toEsriApiGeometry,toPortalGeometry}from"../portal/Geometry.js";import{checkArg,assertNever}from"../utilities/checkArg.js";import{parse as parseDate,format as formatDate,DEFAULT_PARSING_FORMATS,DateFormat,INVALID_DATE}from"../utilities/date.js";import{esriToWKT,esriToGeoJSON,geoJSONToEsri,wktToEsri,esriWkidToWkt,esriWktToWkid,project,isPoint,isMultipoint,isPolyline,isPolygon,isExtent}from"../utilities/geometry.js";import{getLogger}from"../utilities/log.js";import{parse as parseNumber,format as formatNumber,NumberFormat,isNumeric}from"../utilities/number.js";import{Feature}from"./Feature.js";import{FeatureSet}from"./FeatureSet.js";const FORMULA_TRIGGER_CHARS=["=","-","+","@"],QUOTE='"',FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g,DEFAULT_WINDOWS_ROW_DELIMITER="\r\n",DEFAULT_UNIX_ROW_DELIMITER="\n",DEFAULT_SHEET_NAME="sheet1",DEFAULT_EXCEL_DATE_FORMATS=[...DEFAULT_PARSING_FORMATS.map(_convertToExcelDateFormatString),"M/d/yy"],shapefileNameRegex=/(\w+)_(point|multipoint|polyline|polygon)z?/;var DBaseTypes;function _getConvertLogger(){return getLogger("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(DBaseTypes||(DBaseTypes={}));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 async function toCsv(e,t){checkArg("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:DateFormat.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:SpatialReference.WGS84,includeHeaderRow:!0,outFields:_getDefaultOutFields(e.source),rowDelimiter:navigator.platform.startsWith("Win")?"\r\n":"\n"},...t},{includeByteOrderMark:a,includeHeaderRow:n,delimiter:i,outFields:s,rowDelimiter:m}=o,l=[];a&&l.push("\ufeff");const u=_getGeometryColumns(r,o),c=_getAttributeColumns(r,s,e.schema,!0),f=_getAttributeColumns(r,s,e.schema,!1);if(n){const e=[];for(const t of u)e.push(_quotify(t,o));for(const t of c)e.push(_quotify(t,o));for(const t of f)e.push(_quotify(t,o));const t=e.join(i)+m;l.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>_quotify(_stringify(_getAttributeValue(e,t,r),r),r);t.push(...await _getCSVGeometry(e.geometry,o)),t.push(...c.map((e=>r(e,o)))),t.push(...f.map((e=>r(e,o))));const a=`${t.join(i)}${m}`;l.push(a)})));return new Blob(l,{type:"text/plain",endings:"\n"===m||"\r\n"===m?"transparent":"native"})}export async function csvToFeatureSet(e,t){let r;if(checkArg("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={...{delimiter:",",escapeFormulaChars:!0,includeHeaderRow:!0,outFields:["*"],inSpatialReference:SpatialReference.WGS84,generatePrimaryKey:!0,primaryKeyField:"OBJECTID"},...t,detectOid:!(null==t?void 0:t.primaryKeyField)},a=_parseCSV(r,o.rowDelimiter||_parseRowDelimiter(r),o.delimiter),n=_parseGeometries(a,o),i=_parseSchema(a,n,o),s=await _parseFeatures(a,n,i,o);return new FeatureSet({features:s,schema:i})}export async function toXLSX(e,t){var r;checkArg("featureSet",e).isNotMissing();const o=Array.from(e),a={...{useFormattedValues:!1,includeHeaderRow:!0,escapeFormulaChars:!0,geometryFormat:o.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,outFields:_getDefaultOutFields(e.source),outSpatialReference:SpatialReference.WGS84,dateFormat:DateFormat.DEFAULT,numberFormat:NumberFormat.DEFAULT,sheetName:"sheet1"},...t},{outFields:n,includeHeaderRow:i,numberFormat:s}=a,m=[],l=_getGeometryColumns(o,a),u=_getAttributeColumns(o,n,e.schema,!0),c=_getAttributeColumns(o,n,e.schema,!1);if(i){const t=l.concat(u).concat(_getXlsxColumnName(c,e.source));m.push(t)}await Promise.all(o.map((async e=>{const t=[];t.push(...await _getGeometry(e.geometry,a));for(const r of u){const o=_toXLSXValue(e.attributes.get(r),a);t.push(o)}for(const r of c){const o=_toXLSXValue(_getAttributeValue(e,r,a),a);t.push(o)}m.push(t)})));const f=await import("xlsx"),p={SheetNames:[],Sheets:{}},d=f.utils.aoa_to_sheet(m,{cellDates:!0});for(const e of Object.keys(d).filter((e=>!e.startsWith("!")))){const t=d[e];"d"===t.t?t.z=_convertToExcelDateFormatString(null!==(r=a.dateFormat)&&void 0!==r?r:DateFormat.ROUND_TRIP):"n"===t.t&&(t.z=_convertToExcelNumberFormatString(s))}p.SheetNames.push(a.sheetName),p.Sheets[a.sheetName]=d;const y=f.write(p,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),g=new Uint8Array(y.length);for(let e=0;e<y.length;e++)g[e]=y.charCodeAt(e);return new Blob([g.buffer],{type:"text/plain"})}export async function xlsxToFeatureSet(e,t){checkArg("xlsxData",e).isNotMissing();const r={...{includeHeaderRow:!0,escapeFormulaChars:!0,outFields:["*"],inSpatialReference:SpatialReference.WGS84,generatePrimaryKey:!0,primaryKeyField:"OBJECTID"},...t,detectOid:!(null==t?void 0:t.primaryKeyField)},o=await _parseXLSX(e,r),a=_parseGeometries(o,r),n=_parseSchema(o,a,r),i=await _parseFeatures(o,a,n,r);return new FeatureSet({features:i,schema:n})}export async function toShapefile(e,t){checkArg("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),a=Array.from(e),n={...{useFormattedValues:!1,outFields:_getDefaultOutFields(e.source),fileName:e.title||"export"},...t},{outFields:i,outSpatialReference:s,fileName:m}=n,l=e=>e.geometry.hasZ||e.geometry.hasM,u=new Map,c=a.filter((e=>isPoint(e.geometry)));u.set("POINTZ",c.filter(l)),u.set("POINT",c.filter((e=>!l(e))));const f=a.filter((e=>isMultipoint(e.geometry)));u.set("MULTIPOINTZ",f.filter(l)),u.set("MULTIPOINT",f.filter((e=>!l(e))));const p=a.filter((e=>isPolyline(e.geometry)));u.set("POLYLINEZ",p.filter(l)),u.set("POLYLINE",p.filter((e=>!l(e))));const d=a.filter((e=>isPolygon(e.geometry)||isExtent(e.geometry)));u.set("POLYGONZ",d.filter(l)),u.set("POLYGON",d.filter((e=>!l(e))));const y=_getAttributeColumns(a,i,e.schema,!0);let g=_getAttributeColumns(a,i,e.schema,!1);g=y.concat(g);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),a=await Promise.all(r.map((e=>_projectGeometry(e.geometry,s)))),i=await _getDBaseSpatialReferenceWKT(a),l=n.useFormattedValues?Object.assign({},...g.map((e=>({[e]:DBaseTypes.STRING})))):_getDBaseColumnTypes(r,g,e.schema,"timestamp"===n.dateFormat),c=_getDBaseGeometries(a),f=_getDbaseValues(r,g,l,n);o.write(f,t,c,((e,r)=>{const o=F.length>1?`${m}_${t.toLowerCase()}`:m;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`,i)}))})));const _=await h.generateAsync({type:"uint8array"});return new Blob([_.buffer],{type:"text/plain"})}export async function shapefileToFeatureSet(e,t){checkArg("shapefileData",e).isNotMissing();const r={outFields:["*"],includeHeaderRow:!0,generatePrimaryKey:!0,primaryKeyField:"OBJECTID",...t,detectOid:!(null==t?void 0:t.primaryKeyField)},o=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:a},n]=await Promise.all([import("jszip"),import("shpjs")]),i=await o,s=await a.loadAsync(new Uint8Array(i)),m=s.filter((()=>!0)).map((e=>e.name));let l,u=m.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(u=_parseShapefileNames(u),m.some((e=>e.endsWith(".prj")))&&!u.every((e=>m.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(m.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await s.file(e).async("string");if(l){if(t!==l)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else l=t})));const c={geometries:[],columnCount:0,columnIndex:0};let f=[];for(const e of u){if(!m.includes(`${e}.shx`)||!m.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await s.file(`${e}.shp`).async("uint8array"),r=n.parseShp(t),o=await s.file(`${e}.dbf`).async("uint8array"),a=n.parseDbf(o);if(a.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");const i=await Promise.all(r.map((e=>_parseShpGeometry(e,l))));c.geometries=c.geometries.concat(i),f=f.concat(a)}const p=_parseDBaseData(f),d=_parseSchema(p,c,r),y=await _parseFeatures(p,c,d,r);return new FeatureSet({features:y,schema:d})}function _getGeometryColumns(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 _getAttributeColumns(e,t,r,o){const a=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return a;if(t&&!t.includes("*"))return t.filter((e=>!a.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)||a.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function _getXlsxColumnName(e,t){var r;const o=null===(r=null==t?void 0:t.schema)||void 0===r?void 0:r.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>{var t,r;return null!==(r=null===(t=null==o?void 0:o.find((t=>t.name===e)))||void 0===t?void 0:t.alias)&&void 0!==r?r:e}))}function _getDefaultOutFields(e){var t,r,o,a,n,i,s,m;if(!e)return["*"];const l=null===(t=e.featureSettings.popupTemplate)||void 0===t?void 0:t.content,u=Array.isArray(l)?null===(a=null===(o=null===(r=l.find((e=>"fields"===e.type)))||void 0===r?void 0:r.fieldInfos)||void 0===o?void 0:o.filter((e=>e.visible)))||void 0===a?void 0:a.map((e=>e.fieldName)):void 0;return null!==(m=null!=u?u:null===(s=null===(i=null===(n=e.featureSettings.popupTemplate)||void 0===n?void 0:n.fieldInfos)||void 0===i?void 0:i.filter((e=>e.visible)))||void 0===s?void 0:s.map((e=>e.fieldName)))&&void 0!==m?m:["*"]}async function _getCSVGeometry(e,t){let r=await _getGeometry(e,t);return t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":_stringify(e,t)))),r.map((e=>""===e?"":_quotify(e,t)))}async function _getGeometry(e,t){const r=await _projectGeometry(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!isPoint(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(!isPoint(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(!isPoint(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(toPortalGeometry(r))]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[esriToWKT(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(esriToGeoJSON(r))]:[""]:[]}async function _projectGeometry(e,t){return(null==e?void 0:e.spatialReference)&&!e.spatialReference.equals(t)&&t?(await project([e],t))[0]:e}function _quotify(e,t){const r=[t.delimiter,'"',"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){return`"${e.replace(new RegExp('"',"g"),'""')}"`}return e}function _stringify(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||NumberFormat.ROUND_TRIP;return formatNumber(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():formatDate({format:t.dateFormat,timeZone:"UTC"},e)}let r=e.toString();return t.escapeFormulaChars&&(r=escapeFormulaChars(r)),r}function _getAttributeValue(e,t,r){var o,a,n;if(r.useFormattedValues||_hasCodedDomain(e,t))return null!==(o=e.presentableAttributes.get(t))&&void 0!==o?o:e.attributes.get(t);if("date"===(null===(a=e.schema.findFieldByName(t))||void 0===a?void 0:a.type)){const r=parseDate(e.attributes.get(t));if(!isNaN(r.getTime()))return r}return null!==(n=e.attributes.get(t))&&void 0!==n?n:e.presentableAttributes.get(t)}function _hasCodedDomain(e,t){var r,o,a,n,i;return t===e.schema.typeIdField||("coded-value"===(null===(a=null===(o=null===(r=e.type)||void 0===r?void 0:r.domains)||void 0===o?void 0:o[t])||void 0===a?void 0:a.type)||"coded-value"===(null===(i=null===(n=e.schema.findFieldByName(t))||void 0===n?void 0:n.domain)||void 0===i?void 0:i.type))}function escapeFormulaChars(e){for(const t of FORMULA_TRIGGER_CHARS)if(e.startsWith(t))return`\t${e}`;return e}function _parseRowDelimiter(e){let t="\n";return _forDelimiter(e,"\r\n",((r,o)=>(0===r&&o===e.length||(t="\r\n"),!1))),t}function _parseCSV(e,t,r){const o=[];if(_forDelimiter(e,t,((t,a)=>{const n=e.substring(t,a);return n.length>0&&o.push(((e,t)=>{const o=[];return _forDelimiter(e,r,((r,a)=>{const n=e.substring(r,a);return o.push({raw:_parseQuotes(n,t,o.length)}),!0})),o})(n,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}function _parseQuotes(e,t,r){const o=e.startsWith('"'),a=e.endsWith('"');if(o&&!a||!o&&a)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const n=o?e.substring('"'.length,e.length-'"'.length):e;let i=-1;return _forDelimiter(n,'"',((e,o)=>{if(o===n.length)return!0;if(i<0){if(o!==n.length)return i=o,!0}else if(o===i+'"'.length)return i=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),n.replace(new RegExp('""',"g"),'"')}function _forDelimiter(e,t,r){let o,a=!1,n=0,i=0;for(;o=e.indexOf(t,n),!(o<0);){for(let t=n;t<o;)e.substring(t).startsWith('"')?(a=!a,t+='"'.length):t++;const s=o+t.length;if(!a){const e=r(i,o);if(i=s,!e)break}n=s}r(i,e.length)}const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["lat","lon"],["lat","long"],["latitude","longitude"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};function _parseArcGisJson(e,t){const r=JSON.parse(e),o=toEsriApiGeometry(r);return r.spatialReference||(o.spatialReference=t),o}function _parseGeoJson(e,t){const r=geoJSONToEsri(JSON.parse(e));return r.spatialReference=t,r}function _parseWkt(e,t){const r=wktToEsri(e);return r.spatialReference=t,r}function _findGeometryFormatIndex(e,t){const r=geometryTypeHeaders[t];for(const t of r){const r=e.findIndex(((r,o)=>!(o+t.length>e.length)&&t.every(((t,r)=>e[o+r].raw.toString().toLowerCase()===t))));if(-1!==r)return r}}function _detectGeometry(e,t){return e.map(((e,r)=>{const o=null==e?void 0:e.raw;if("string"==typeof o&&""!==o)try{return t(o,void 0),r}catch{return}})).find((e=>void 0!==e))}function _parseGeometries(e,t){const r=t.includeHeaderRow?e.slice(1):e;if(t.geometryFormat===GeometryFormat.NONE)return{columnCount:0,columnIndex:0};const o=(e,o)=>{const a=o===GeometryFormat.XYZ,n=o===GeometryFormat.LAT_LON,i=a?3:2;return{columnCount:i,columnIndex:e,geometries:r.map((r=>{if(r.length>=e+i&&isNumeric(r[e+0].raw)&&isNumeric(r[e+1].raw)&&(!a||isNumeric(r[e+2].raw)))return new Point({x:parseNumber(n?r[e+1].raw:r[e+0].raw),y:parseNumber(n?r[e+0].raw:r[e+1].raw),z:a?parseNumber(r[e+2].raw):0,spatialReference:t.inSpatialReference})}))}},a=(e,o)=>({columnCount:1,columnIndex:e,geometries:r.map((t=>t[e])).map((e=>{if(""!==e.raw)return o(e.raw.toString(),t.inSpatialReference)}))});if(t.geometryFormat){const r=_findGeometryFormatIndex(e[0],t.geometryFormat);if(t.includeHeaderRow&&void 0===r)throw new Error(`Error parsing CSV: Expected geometry columns ${geometryTypeHeaders[t.geometryFormat][0].join(",")} are missing for GeometryType.${t.geometryFormat}`);return((e,t)=>{switch(t){case GeometryFormat.NONE:return{columnCount:0,columnIndex:0};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return o(e,t);case GeometryFormat.ARCGIS_JSON:return a(e,_parseArcGisJson);case GeometryFormat.GEO_JSON:return a(e,_parseGeoJson);case GeometryFormat.WKT:return a(e,_parseWkt);default:return assertNever(t,new Error(`Unknown geometry format "${t}".`))}})(null!=r?r:0,t.geometryFormat)}if(t.includeHeaderRow){const t=_findGeometryFormatIndex(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==t)for(const e of[_parseArcGisJson,_parseGeoJson,_parseWkt])try{return a(t,e)}catch(e){}const r=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of r){const r=_findGeometryFormatIndex(e[0],t);if(void 0!==r)return o(r,t)}}for(const e of[_parseArcGisJson,_parseGeoJson,_parseWkt])try{const t=_detectGeometry(r[0],e);return a(t,e)}catch(e){}return{columnCount:0,columnIndex:0}}function _parseSchema(e,t,r){var o;const a={fields:[]};let n=0;for(let o=t.columnCount;o<e[0].length;o++){if(i=o,0!==t.columnCount&&i>=t.columnIndex&&i<t.columnIndex+t.columnCount)continue;const s=_parseFieldType(e,o,r);let m=e[0][o].raw.toString(),l=m.replace(FIELD_NAME_REGEX,"_");if(r.includeHeaderRow||(l="field"+ ++n,m=translate("gcx.api.data.convert.import-field-alias",n)),!l)throw new Error("Error parsing CSV or XLSX: Header cannot contain blank values");a.fields.push({alias:m,name:l,type:s})}var i;if(a.spatialReference=r.outSpatialReference,null===(o=t.geometries)||void 0===o?void 0:o.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];a.geometryType=e.every((e=>e===r))?r:void 0}if(r.generatePrimaryKey&&!a.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=a.fields.length+1,t=!!a.fields.find((e=>"id"===e.name.toLowerCase()));a.fields.push({name:t?`field${e}`:"id",alias:t?translate("gcx.api.data.convert.import-field-alias",e):"id",type:"esriFieldTypeOID"})}return a}function _parseFieldType(e,t,r){var o;let a=!1,n=!0,i=!0,s=!0;const m=new Set,l=r.includeHeaderRow?e[0]:[],u=r.includeHeaderRow?e.slice(1):e;for(const e of u){const o=e[t];""!==o.raw&&(m.add(o.raw),a=!0,n&&(n=isNumeric(o.raw)||Number.isNaN(o.raw)),i&&(i=o.raw instanceof Date||parseDate(r.dateFormat||DEFAULT_PARSING_FORMATS,o.raw)!==INVALID_DATE),s&&(s=parseDate(r.dateFormat||DEFAULT_EXCEL_DATE_FORMATS,o.formatted)!==INVALID_DATE))}const c=m.size===u.length;return r.primaryKeyField&&(null===(o=l[t])||void 0===o?void 0:o.raw)===r.primaryKeyField||r.detectOid&&a&&c&&n?(r.detectOid=!1,"esriFieldTypeOID"):a&&s?"esriFieldTypeDate":a&&n?"esriFieldTypeDouble":a&&i?"esriFieldTypeDate":"esriFieldTypeString"}async function _parseFeatures(e,t,r,o){const a=[],n=o.includeHeaderRow?e.slice(1):e,i=(e,r)=>0===t.columnCount||(r<t.columnIndex||r>=t.columnIndex+t.columnCount);return await Promise.all(n.map((async(e,n)=>{var s;const m=new Feature;for(let t=0;t<r.fields.length;t++){const a=r.fields[t],l=e.filter(i);if(o.outFields.includes("*")||o.outFields.includes(a.name)){let e=await _parseValue(null===(s=l[t])||void 0===s?void 0:s.raw,a,o);"esriFieldTypeOID"===a.type&&null===e&&(e=n),m.attributes.set(a.name,e)}}t.geometries&&(m.geometry=await _projectGeometry(t.geometries[n],o.outSpatialReference)),a.push(m)}))),a}async function _parseValue(e,t,r){if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?parseNumber(e):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:parseDate(e).getTime()}const o=e.toString();if(r.escapeFormulaChars&&o.startsWith("\t"))for(const e of FORMULA_TRIGGER_CHARS)if(o.length>1&&o.charAt(1)===e)return o.substring(1);return o}function _convertToExcelDateFormatString(e){switch(e){case DateFormat.DATE_SHORT:return"dd/MM/yyyy";case DateFormat.DATE_LONG:return"MMMM d, yyyy";case DateFormat.TIME_SHORT:return"h:mm AM/PM";case DateFormat.TIME_LONG:return"h:mm:ss AM/PM";case DateFormat.DATE_TIME_SHORT:case DateFormat.DEFAULT:return"MMM d yyyy h:mm AM/PM";case DateFormat.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case DateFormat.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case DateFormat.ISO_8601:case DateFormat.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&_getConvertLogger().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&_getConvertLogger().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function _convertToExcelNumberFormatString(e){switch(e){case NumberFormat.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case NumberFormat.CURRENCY:return'"$"#,##0.00';case NumberFormat.FIXED_POINT:case NumberFormat.DEFAULT:return"0.0000";case NumberFormat.NUMBER:return"#,##0.0000";case NumberFormat.PERCENT:return"0%";case NumberFormat.ROUND_TRIP:return"0.00000";default:return e}}function _toXLSXValue(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}let r=e.toString();return t.escapeFormulaChars&&(r=escapeFormulaChars(r)),r}async function _parseXLSX(e,t){const r=await import("xlsx"),o=new Promise(((o,a)=>{const n=new FileReader;n.onload=()=>{const e=new Uint8Array(n.result);let a="";for(const t of e)a+=String.fromCharCode(t);const i=r.read(a,{type:"binary",cellDates:!0}),s=t.sheetName||i.SheetNames[0],m=i.Sheets[s];o(m)},n.onerror=()=>{a(n.error)},n.readAsArrayBuffer(e)})),a=await o,n=r.utils.decode_range(a["!ref"]),i=[];for(let e=n.s.r;e<=n.e.r;e++){const t=[];for(let o=n.s.c;o<=n.e.c;o++){const n=a[`${r.utils.encode_cell({r:e,c:o})}`];t.push(n?{raw:n.v,formatted:"s"===n.t?void 0:n.w}:{raw:""})}i.push(t)}return i}async function _getDBaseSpatialReferenceWKT(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 null!=r?r:esriWkidToWkt(null!=t?t:SpatialReference.WGS84.wkid)}function _getDBaseColumnTypes(e,t,r,o){const a={};for(const n of t){if(e.some((e=>_hasCodedDomain(e,n)))){a[n]=DBaseTypes.STRING;continue}const t=r?r.fields.find((e=>e.name===n)):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":a[n]=DBaseTypes.NUMBER;break;case"date":a[n]=o?DBaseTypes.NUMBER:DBaseTypes.DATE;break;default:a[n]=DBaseTypes.STRING}continue}const i=(e,t)=>{var r;return null!==(r=e.attributes.get(t))&&void 0!==r?r:e.presentableAttributes.get(t)};e.every((e=>i(e,n)instanceof Date||void 0===i(e,n)))&&e.some((e=>i(e,n)instanceof Date))?a[n]=o?DBaseTypes.NUMBER:DBaseTypes.DATE:e.every((e=>"number"==typeof i(e,n)||void 0===i(e,n)))&&e.some((e=>"number"==typeof i(e,n)))?a[n]=DBaseTypes.NUMBER:e.every((e=>"boolean"==typeof i(e,n)||void 0===i(e,n)))&&e.some((e=>"boolean"==typeof i(e,n)))?a[n]=DBaseTypes.BOOLEAN:a[n]=DBaseTypes.STRING}return a}function _getDBaseGeometries(e){return e.map((e=>{if(isPoint(e)){const{x:t,y:r,z:o,m:a}=e,n=[t,r];return e.hasZ&&n.push(o),e.hasM&&n.push(a),_padZValues(n,e)}if(isMultipoint(e))return _padZValuesArray(e.points,e);if(isPolyline(e))return _padZValues2DArray(e.paths,e);if(isPolygon(e))return _padZValues2DArray(e.rings,e);if(isExtent(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.")}))}function _padZValues(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function _padZValuesArray(e,t){return e.map((e=>_padZValues(e,t)))}function _padZValues2DArray(e,t){return e.map((e=>_padZValuesArray(e,t)))}function _getDbaseValues(e,t,r,o){const a=[];for(const n of e){const e={};for(const a of t){let t=_getAttributeValue(n,a,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=getDbaseValue(t,r[a],o)}e[a]=t}a.push(e)}return a}function getDbaseValue(e,t,r){var o,a;switch(t){case DBaseTypes.NUMBER:return e instanceof Date?e.getTime():parseNumber(e);case DBaseTypes.STRING:return e instanceof Date?formatDate({format:null!==(o=r.dateFormat)&&void 0!==o?o:DateFormat.ROUND_TRIP,timeZone:"UTC"},e):"number"==typeof e?formatNumber(null!==(a=r.numberFormat)&&void 0!==a?a:NumberFormat.DEFAULT,e):e.toString();case DBaseTypes.BOOLEAN:return!!e;case DBaseTypes.DATE:return parseDate(e);default:return e.toString()}}function _parseShapefileNames(e){if(!e.length)return[];let t=e[0];const r=t.match(shapefileNameRegex);return r?(t=r[1],e.filter((e=>{const r=e.match(shapefileNameRegex);return r&&r[1]===t}))):[t]}function _parseDBaseData(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]})))))]}function _parseShpPointGeometry(e){checkArg("geometry.coordinates",e.type).matches("Point"),checkArg("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,r,o]=e.coordinates,a=new Point({x:t,y:r,spatialReference:SpatialReference.WGS84});if(Array.isArray(o)){const[e,t]=o;!e&&!t||e?a.z=e:a.m=t}return a}async function _parseShpGeometry(e,t){const r=isPoint(e)?_parseShpPointGeometry(e):geoJSONToEsri(e);if(t){let e;try{const r=await esriWktToWkid(t);e=new SpatialReference({wkid:parseNumber(r)})}catch{}e||(e=new SpatialReference({wkt:t})),r.spatialReference=e}return r}
|
|
1
|
+
import Point from"@arcgis/core/geometry/Point";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import{translate}from"../locale/language.js";import{toEsriApiGeometry,toPortalGeometry}from"../portal/Geometry.js";import{checkArg,assertNever}from"../utilities/checkArg.js";import{parse as parseDate,format as formatDate,DEFAULT_PARSING_FORMATS,DateFormat,INVALID_DATE}from"../utilities/date.js";import{esriToWKT,esriToGeoJSON,geoJSONToEsri,wktToEsri,esriWkidToWkt,esriWktToWkid,project,isPoint,isMultipoint,isPolyline,isPolygon,isExtent}from"../utilities/geometry.js";import{getLogger}from"../utilities/log.js";import{parse as parseNumber,format as formatNumber,NumberFormat,isNumeric}from"../utilities/number.js";import{Feature}from"./Feature.js";import{FeatureSet}from"./FeatureSet.js";const FORMULA_TRIGGER_CHARS=["=","-","+","@"],QUOTE='"',FIELD_NAME_REGEX=/[^a-zA-Z\d_]/g,DEFAULT_WINDOWS_ROW_DELIMITER="\r\n",DEFAULT_UNIX_ROW_DELIMITER="\n",DEFAULT_SHEET_NAME="sheet1",DEFAULT_EXCEL_DATE_FORMATS=[...DEFAULT_PARSING_FORMATS.map(_convertToExcelDateFormatString),"M/d/yy"],shapefileNameRegex=/(\w+)_(point|multipoint|polyline|polygon)z?/;var DBaseTypes;function _getConvertLogger(){return getLogger("geocortex.api.data.convert")}!function(e){e.DATE="D",e.NUMBER="N",e.STRING="C",e.BOOLEAN="L"}(DBaseTypes||(DBaseTypes={}));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 async function toCsv(e,t){checkArg("featureSet",e).isNotMissing();const r=Array.from(e),o={...{useFormattedValues:!1,alwaysQuote:!1,escapeFormulaChars:!0,delimiter:",",dateFormat:DateFormat.ROUND_TRIP,geometryFormat:r.some((e=>void 0!==e.geometry&&null!==e.geometry))?GeometryFormat.WKT:GeometryFormat.NONE,includeByteOrderMark:!0,outSpatialReference:SpatialReference.WGS84,includeHeaderRow:!0,outFields:_getDefaultOutFields(e.source),rowDelimiter:navigator.platform.startsWith("Win")?"\r\n":"\n"},...t},{includeByteOrderMark:a,includeHeaderRow:n,delimiter:s,outFields:i,rowDelimiter:m}=o,u=[];a&&u.push("\ufeff");const l=_getGeometryColumns(r,o),c=_getAttributeColumns(r,i,e.schema,!0),f=_getAttributeColumns(r,i,e.schema,!1);if(n){const e=[];for(const t of l)e.push(_quotify(t,o));for(const t of c)e.push(_quotify(t,o));for(const t of f)e.push(_quotify(t,o));const t=e.join(s)+m;u.push(t)}await Promise.all(r.map((async e=>{const t=[],r=(t,r)=>_quotify(_stringify(_getAttributeValue(e,t,r),r),r);t.push(...await _getCSVGeometry(e.geometry,o)),t.push(...c.map((e=>r(e,o)))),t.push(...f.map((e=>r(e,o))));const a=`${t.join(s)}${m}`;u.push(a)})));return new Blob(u,{type:"text/plain",endings:"\n"===m||"\r\n"===m?"transparent":"native"})}export async function csvToFeatureSet(e,t){let r;if(checkArg("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={...{delimiter:",",escapeFormulaChars:!0,includeHeaderRow:!0,outFields:["*"],inSpatialReference:SpatialReference.WGS84,generatePrimaryKey:!0,primaryKeyField:"OBJECTID"},...t,detectOid:!t?.primaryKeyField},a=_parseCSV(r,o.rowDelimiter||_parseRowDelimiter(r),o.delimiter),n=_parseGeometries(a,o),s=_parseSchema(a,n,o),i=await _parseFeatures(a,n,s,o);return new FeatureSet({features:i,schema:s})}export async function toXLSX(e,t){checkArg("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:_getDefaultOutFields(e.source),outSpatialReference:SpatialReference.WGS84,dateFormat:DateFormat.DEFAULT,numberFormat:NumberFormat.DEFAULT,sheetName:"sheet1"},...t},{outFields:a,includeHeaderRow:n,numberFormat:s}=o,i=[],m=_getGeometryColumns(r,o),u=_getAttributeColumns(r,a,e.schema,!0),l=_getAttributeColumns(r,a,e.schema,!1);if(n){const t=m.concat(u).concat(_getXlsxColumnName(l,e.source));i.push(t)}await Promise.all(r.map((async e=>{const t=[];t.push(...await _getGeometry(e.geometry,o));for(const r of u){const a=_toXLSXValue(e.attributes.get(r),o);t.push(a)}for(const r of l){const a=_toXLSXValue(_getAttributeValue(e,r,o),o);t.push(a)}t.every((e=>"string"!=typeof e||e.length<=32767))?i.push(t):_getConvertLogger().warn(`toXLSX cell limit exceeded, feature (${e.primaryKey??e.id}) omitted.`)})));const c=await import("xlsx"),f={SheetNames:[],Sheets:{}},p=c.utils.aoa_to_sheet(i,{cellDates:!0});for(const e of Object.keys(p).filter((e=>!e.startsWith("!")))){const t=p[e];"d"===t.t?t.z=_convertToExcelDateFormatString(o.dateFormat??DateFormat.ROUND_TRIP):"n"===t.t&&(t.z=_convertToExcelNumberFormatString(s))}f.SheetNames.push(o.sheetName),f.Sheets[o.sheetName]=p;const y=c.write(f,{type:"binary",bookType:"xlsx",compression:!0,bookSST:!0,cellDates:!0}),d=new Uint8Array(y.length);for(let e=0;e<y.length;e++)d[e]=y.charCodeAt(e);return new Blob([d.buffer],{type:"text/plain"})}export async function xlsxToFeatureSet(e,t){checkArg("xlsxData",e).isNotMissing();const r={...{includeHeaderRow:!0,escapeFormulaChars:!0,outFields:["*"],inSpatialReference:SpatialReference.WGS84,generatePrimaryKey:!0,primaryKeyField:"OBJECTID"},...t,detectOid:!t?.primaryKeyField},o=await _parseXLSX(e,r),a=_parseGeometries(o,r),n=_parseSchema(o,a,r),s=await _parseFeatures(o,a,n,r);return new FeatureSet({features:s,schema:n})}export async function toShapefile(e,t){checkArg("featureSet",e).isNotMissing();const[{default:r},o]=await Promise.all([import("jszip"),import("../forked-libs/shp-write/index.js")]),a=Array.from(e),n={...{useFormattedValues:!1,outFields:_getDefaultOutFields(e.source),fileName:e.title||"export"},...t},{outFields:s,outSpatialReference:i,fileName:m}=n,u=e=>e.geometry.hasZ||e.geometry.hasM,l=new Map,c=a.filter((e=>isPoint(e.geometry)));l.set("POINTZ",c.filter(u)),l.set("POINT",c.filter((e=>!u(e))));const f=a.filter((e=>isMultipoint(e.geometry)));l.set("MULTIPOINTZ",f.filter(u)),l.set("MULTIPOINT",f.filter((e=>!u(e))));const p=a.filter((e=>isPolyline(e.geometry)));l.set("POLYLINEZ",p.filter(u)),l.set("POLYLINE",p.filter((e=>!u(e))));const y=a.filter((e=>isPolygon(e.geometry)||isExtent(e.geometry)));l.set("POLYGONZ",y.filter(u)),l.set("POLYGON",y.filter((e=>!u(e))));const d=_getAttributeColumns(a,s,e.schema,!0);let g=_getAttributeColumns(a,s,e.schema,!1);g=d.concat(g);const h=new r,F=Array.from(l.keys()).filter((e=>l.get(e).length>0));await Promise.all(F.map((async t=>{const r=l.get(t),a=await Promise.all(r.map((e=>_projectGeometry(e.geometry,i)))),s=await _getDBaseSpatialReferenceWKT(a),u=n.useFormattedValues?Object.assign({},...g.map((e=>({[e]:DBaseTypes.STRING})))):_getDBaseColumnTypes(r,g,e.schema,"timestamp"===n.dateFormat),c=_getDBaseGeometries(a),f=_getDbaseValues(r,g,u,n);o.write(f,t,c,((e,r)=>{const o=F.length>1?`${m}_${t.toLowerCase()}`:m;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 _=await h.generateAsync({type:"uint8array"});return new Blob([_.buffer],{type:"text/plain"})}export async function shapefileToFeatureSet(e,t){checkArg("shapefileData",e).isNotMissing();const r={outFields:["*"],includeHeaderRow:!0,generatePrimaryKey:!0,primaryKeyField:"OBJECTID",...t,detectOid:!t?.primaryKeyField},o=new Promise(((t,r)=>{const o=new FileReader;o.onload=()=>{t(o.result)},o.onerror=()=>{r(o.error)},o.readAsArrayBuffer(e)})),[{default:a},n]=await Promise.all([import("jszip"),import("shpjs")]),s=await o,i=await a.loadAsync(new Uint8Array(s)),m=i.filter((()=>!0)).map((e=>e.name));let u,l=m.filter((e=>e.endsWith(".shp"))).map((e=>e.substring(0,e.length-4)));if(l=_parseShapefileNames(l),m.some((e=>e.endsWith(".prj")))&&!l.every((e=>m.includes(`${e}.prj`))))throw new Error("Shapefile zip must contain the same prj file for each separate shapefile");await Promise.all(m.filter((e=>e.endsWith(".prj"))).map((async e=>{const t=await i.file(e).async("string");if(u){if(t!==u)throw new Error("Shapefile zip must contain the same prj file for each separate shapefile")}else u=t})));const c={geometries:[],columnCount:0,columnIndex:0};let f=[];for(const e of l){if(!m.includes(`${e}.shx`)||!m.includes(`${e}.dbf`))throw new Error("Shapefile must contain shp, shx, and dbf files.");const t=await i.file(`${e}.shp`).async("uint8array"),r=n.parseShp(t),o=await i.file(`${e}.dbf`).async("uint8array"),a=n.parseDbf(o);if(a.length!==r.length)throw new Error("Shapefile must contain shp, shx, and dbf files.");const s=await Promise.all(r.map((e=>_parseShpGeometry(e,u))));c.geometries=c.geometries.concat(s),f=f.concat(a)}const p=_parseDBaseData(f),y=_parseSchema(p,c,r),d=await _parseFeatures(p,c,y,r);return new FeatureSet({features:d,schema:y})}function _getGeometryColumns(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 _getAttributeColumns(e,t,r,o){const a=r.fields.filter((e=>"oid"===e.type)).map((e=>e.name)).toArray();if(o)return a;if(t&&!t.includes("*"))return t.filter((e=>!a.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)||a.includes(e)||o.includes(e)||o.push(e);return o=o.sort(),t.concat(o)}}function _getXlsxColumnName(e,t){const r=t?.schema?.fieldExtensions.initializedItems.map((e=>e.field));return e.map((e=>r?.find((t=>t.name===e))?.alias??e))}function _getDefaultOutFields(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 _getCSVGeometry(e,t){let r=await _getGeometry(e,t);return t.geometryFormat!==GeometryFormat.XYZ&&t.geometryFormat!==GeometryFormat.XY&&t.geometryFormat!==GeometryFormat.LAT_LON||(r=r.map((e=>void 0===e?"":_stringify(e,t)))),r.map((e=>""===e?"":_quotify(e,t)))}async function _getGeometry(e,t){const r=await _projectGeometry(e,t.outSpatialReference);if(t.geometryFormat===GeometryFormat.XYZ){if(!r)return["","",""];if(!isPoint(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(!isPoint(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(!isPoint(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(toPortalGeometry(r))]:[""]:t.geometryFormat===GeometryFormat.WKT?r?[esriToWKT(r)]:[""]:t.geometryFormat===GeometryFormat.GEO_JSON?r?[JSON.stringify(esriToGeoJSON(r))]:[""]:[]}async function _projectGeometry(e,t){return e?.spatialReference&&!e.spatialReference.equals(t)&&t?(await project([e],t))[0]:e}function _quotify(e,t){const r=[t.delimiter,'"',"\r","\n",t.rowDelimiter];if(t.alwaysQuote||r.some((t=>e.includes(t)))){return`"${e.replace(new RegExp('"',"g"),'""')}"`}return e}function _stringify(e,t){if(null==e)return"";if(!t.useFormattedValues){if("number"==typeof e){const r=t.numberFormat||NumberFormat.ROUND_TRIP;return formatNumber(r,e)}if(e instanceof Date)return"timestamp"===t.dateFormat?e.getTime().toString():formatDate({format:t.dateFormat,timeZone:"UTC"},e)}let r=e.toString();return t.escapeFormulaChars&&(r=escapeFormulaChars(r)),r}function _getAttributeValue(e,t,r){if(r.useFormattedValues||_hasCodedDomain(e,t))return e.presentableAttributes.get(t)??e.attributes.get(t);if("date"===e.schema.findFieldByName(t)?.type){const r=parseDate(e.attributes.get(t));if(!isNaN(r.getTime()))return r}return e.attributes.get(t)??e.presentableAttributes.get(t)}function _hasCodedDomain(e,t){return t===e.schema.typeIdField||("coded-value"===e.type?.domains?.[t]?.type||"coded-value"===e.schema.findFieldByName(t)?.domain?.type)}function escapeFormulaChars(e){for(const t of FORMULA_TRIGGER_CHARS)if(e.startsWith(t))return`\t${e}`;return e}function _parseRowDelimiter(e){let t="\n";return _forDelimiter(e,"\r\n",((r,o)=>(0===r&&o===e.length||(t="\r\n"),!1))),t}function _parseCSV(e,t,r){const o=[];if(_forDelimiter(e,t,((t,a)=>{const n=e.substring(t,a);return n.length>0&&o.push(((e,t)=>{const o=[];return _forDelimiter(e,r,((r,a)=>{const n=e.substring(r,a);return o.push({raw:_parseQuotes(n,t,o.length)}),!0})),o})(n,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}function _parseQuotes(e,t,r){const o=e.startsWith('"'),a=e.endsWith('"');if(o&&!a||!o&&a)throw new Error(`Detected invalid CSV: Missing opening or closing quote for value at row:${t} column:${r}`);const n=o?e.substring('"'.length,e.length-'"'.length):e;let s=-1;return _forDelimiter(n,'"',((e,o)=>{if(o===n.length)return!0;if(s<0){if(o!==n.length)return s=o,!0}else if(o===s+'"'.length)return s=-1,!0;throw new Error(`Detected invalid CSV: Non-escaped quote for value at row:${t} column:${r}`)})),n.replace(new RegExp('""',"g"),'"')}function _forDelimiter(e,t,r){let o,a=!1,n=0,s=0;for(;o=e.indexOf(t,n),!(o<0);){for(let t=n;t<o;)e.substring(t).startsWith('"')?(a=!a,t+='"'.length):t++;const i=o+t.length;if(!a){const e=r(s,o);if(s=i,!e)break}n=i}r(s,e.length)}const geometryTypeHeaders={[GeometryFormat.XYZ]:[["x","y","z"]],[GeometryFormat.XY]:[["x","y"]],[GeometryFormat.LAT_LON]:[["lat","lon"],["lat","long"],["latitude","longitude"]],[GeometryFormat.ARCGIS_JSON]:[["geometry"]],[GeometryFormat.GEO_JSON]:[["geometry"]],[GeometryFormat.WKT]:[["geometry"]]};function _parseArcGisJson(e,t){const r=JSON.parse(e),o=toEsriApiGeometry(r);return r.spatialReference||(o.spatialReference=t),o}function _parseGeoJson(e,t){const r=geoJSONToEsri(JSON.parse(e));return r.spatialReference=t,r}function _parseWkt(e,t){const r=wktToEsri(e);return r.spatialReference=t,r}function _findGeometryFormatIndex(e,t){const r=geometryTypeHeaders[t];for(const t of r){const r=e.findIndex(((r,o)=>!(o+t.length>e.length)&&t.every(((t,r)=>e[o+r].raw.toString().toLowerCase()===t))));if(-1!==r)return r}}function _detectGeometry(e,t){return e.map(((e,r)=>{const o=e?.raw;if("string"==typeof o&&""!==o)try{return t(o,void 0),r}catch{return}})).find((e=>void 0!==e))}function _parseGeometries(e,t){const r=t.includeHeaderRow?e.slice(1):e;if(t.geometryFormat===GeometryFormat.NONE)return{columnCount:0,columnIndex:0};const o=(e,o)=>{const a=o===GeometryFormat.XYZ,n=o===GeometryFormat.LAT_LON,s=a?3:2;return{columnCount:s,columnIndex:e,geometries:r.map((r=>{if(r.length>=e+s&&isNumeric(r[e+0].raw)&&isNumeric(r[e+1].raw)&&(!a||isNumeric(r[e+2].raw)))return new Point({x:parseNumber(n?r[e+1].raw:r[e+0].raw),y:parseNumber(n?r[e+0].raw:r[e+1].raw),z:a?parseNumber(r[e+2].raw):0,spatialReference:t.inSpatialReference})}))}},a=(e,o)=>({columnCount:1,columnIndex:e,geometries:r.map((t=>t[e])).map((e=>{if(""!==e.raw)return o(e.raw.toString(),t.inSpatialReference)}))});if(t.geometryFormat){const r=_findGeometryFormatIndex(e[0],t.geometryFormat);if(t.includeHeaderRow&&void 0===r)throw new Error(`Error parsing CSV: Expected geometry columns ${geometryTypeHeaders[t.geometryFormat][0].join(",")} are missing for GeometryType.${t.geometryFormat}`);return((e,t)=>{switch(t){case GeometryFormat.NONE:return{columnCount:0,columnIndex:0};case GeometryFormat.LAT_LON:case GeometryFormat.XYZ:case GeometryFormat.XY:return o(e,t);case GeometryFormat.ARCGIS_JSON:return a(e,_parseArcGisJson);case GeometryFormat.GEO_JSON:return a(e,_parseGeoJson);case GeometryFormat.WKT:return a(e,_parseWkt);default:return assertNever(t,new Error(`Unknown geometry format "${t}".`))}})(r??0,t.geometryFormat)}if(t.includeHeaderRow){const t=_findGeometryFormatIndex(e[0],GeometryFormat.ARCGIS_JSON);if(void 0!==t)for(const e of[_parseArcGisJson,_parseGeoJson,_parseWkt])try{return a(t,e)}catch(e){}const r=[GeometryFormat.XYZ,GeometryFormat.XY,GeometryFormat.LAT_LON];for(const t of r){const r=_findGeometryFormatIndex(e[0],t);if(void 0!==r)return o(r,t)}}for(const e of[_parseArcGisJson,_parseGeoJson,_parseWkt])try{const t=_detectGeometry(r[0],e);return a(t,e)}catch(e){}return{columnCount:0,columnIndex:0}}function _parseSchema(e,t,r){const o={fields:[]};let a=0;for(let s=t.columnCount;s<e[0].length;s++){if(n=s,0!==t.columnCount&&n>=t.columnIndex&&n<t.columnIndex+t.columnCount)continue;const i=_parseFieldType(e,s,r);let m=e[0][s].raw.toString(),u=m.replace(FIELD_NAME_REGEX,"_");if(r.includeHeaderRow||(u="field"+ ++a,m=translate("gcx.api.data.convert.import-field-alias",a)),!u)throw new Error("Error parsing CSV or XLSX: Header cannot contain blank values");o.fields.push({alias:m,name:u,type:i})}var n;if(o.spatialReference=r.outSpatialReference,t.geometries?.length){const e=t.geometries.filter((e=>void 0!==e)).map((e=>e.type)),r=e[0];o.geometryType=e.every((e=>e===r))?r:void 0}if(r.generatePrimaryKey&&!o.fields.find((e=>"esriFieldTypeOID"===e.type))){const e=o.fields.length+1,t=!!o.fields.find((e=>"id"===e.name.toLowerCase()));o.fields.push({name:t?`field${e}`:"id",alias:t?translate("gcx.api.data.convert.import-field-alias",e):"id",type:"esriFieldTypeOID"})}return o}function _parseFieldType(e,t,r){let o=!1,a=!0,n=!0,s=!0;const i=new Set,m=r.includeHeaderRow?e[0]:[],u=r.includeHeaderRow?e.slice(1):e;for(const e of u){const m=e[t];""!==m.raw&&(i.add(m.raw),o=!0,a&&(a=isNumeric(m.raw)||Number.isNaN(m.raw)),n&&(n=m.raw instanceof Date||parseDate(r.dateFormat||DEFAULT_PARSING_FORMATS,m.raw)!==INVALID_DATE),s&&(s=parseDate(r.dateFormat||DEFAULT_EXCEL_DATE_FORMATS,m.formatted)!==INVALID_DATE))}const l=i.size===u.length;return r.primaryKeyField&&m[t]?.raw===r.primaryKeyField||r.detectOid&&o&&l&&a?(r.detectOid=!1,"esriFieldTypeOID"):o&&s?"esriFieldTypeDate":o&&a?"esriFieldTypeDouble":o&&n?"esriFieldTypeDate":"esriFieldTypeString"}async function _parseFeatures(e,t,r,o){const a=[],n=o.includeHeaderRow?e.slice(1):e,s=(e,r)=>0===t.columnCount||(r<t.columnIndex||r>=t.columnIndex+t.columnCount);return await Promise.all(n.map((async(e,n)=>{const i=new Feature;for(let t=0;t<r.fields.length;t++){const a=r.fields[t],m=e.filter(s);if(o.outFields.includes("*")||o.outFields.includes(a.name)){let e=await _parseValue(m[t]?.raw,a,o);"esriFieldTypeOID"===a.type&&null===e&&(e=n),i.attributes.set(a.name,e)}}t.geometries&&(i.geometry=await _projectGeometry(t.geometries[n],o.outSpatialReference)),a.push(i)}))),a}async function _parseValue(e,t,r){if("esriFieldTypeDouble"===t.type||"esriFieldTypeOID"===t.type)return"number"==typeof e?e:e?parseNumber(e):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:parseDate(e).getTime()}const o=e.toString();if(r.escapeFormulaChars&&o.startsWith("\t"))for(const e of FORMULA_TRIGGER_CHARS)if(o.length>1&&o.charAt(1)===e)return o.substring(1);return o}function _convertToExcelDateFormatString(e){switch(e){case DateFormat.DATE_SHORT:return"dd/MM/yyyy";case DateFormat.DATE_LONG:return"MMMM d, yyyy";case DateFormat.TIME_SHORT:return"h:mm AM/PM";case DateFormat.TIME_LONG:return"h:mm:ss AM/PM";case DateFormat.DATE_TIME_SHORT:case DateFormat.DEFAULT:return"MMM d yyyy h:mm AM/PM";case DateFormat.DATE_TIME_LONG:return"MMMM d yyyy h:mm AM/PM";case DateFormat.FULL:return"dddd, MMMM d yyyy h:mm AM/PM";case DateFormat.ISO_8601:case DateFormat.ROUND_TRIP:return'yyyy-MM-dd"T"HH:mm:ss';default:{const t=e.replace(/tt/g,"AM/PM");return t.includes("z")&&_getConvertLogger().warn("Warning: Excel will not recognize timezone format 'z', 'zz', or 'zzz'"),t.includes("h")&&!t.includes("AM/PM")&&_getConvertLogger().warn("Warning: Excel will interpret 'h' as 'H' if the format does not have an AM/PM designator"),t}}}function _convertToExcelNumberFormatString(e){switch(e){case NumberFormat.ACCOUNTING:return'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)';case NumberFormat.CURRENCY:return'"$"#,##0.00';case NumberFormat.FIXED_POINT:case NumberFormat.DEFAULT:return"0.0000";case NumberFormat.NUMBER:return"#,##0.0000";case NumberFormat.PERCENT:return"0%";case NumberFormat.ROUND_TRIP:return"0.00000";default:return e}}function _toXLSXValue(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}let r=e.toString();return t.escapeFormulaChars&&(r=escapeFormulaChars(r)),r}async function _parseXLSX(e,t){const r=await import("xlsx"),o=new Promise(((o,a)=>{const n=new FileReader;n.onload=()=>{const e=new Uint8Array(n.result);let a="";for(const t of e)a+=String.fromCharCode(t);const s=r.read(a,{type:"binary",cellDates:!0}),i=t.sheetName||s.SheetNames[0],m=s.Sheets[i];o(m)},n.onerror=()=>{a(n.error)},n.readAsArrayBuffer(e)})),a=await o,n=r.utils.decode_range(a["!ref"]),s=[];for(let e=n.s.r;e<=n.e.r;e++){const t=[];for(let o=n.s.c;o<=n.e.c;o++){const n=a[`${r.utils.encode_cell({r:e,c:o})}`];t.push(n?{raw:n.v,formatted:"s"===n.t?void 0:n.w}:{raw:""})}s.push(t)}return s}async function _getDBaseSpatialReferenceWKT(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??esriWkidToWkt(t??SpatialReference.WGS84.wkid)}function _getDBaseColumnTypes(e,t,r,o){const a={};for(const n of t){if(e.some((e=>_hasCodedDomain(e,n)))){a[n]=DBaseTypes.STRING;continue}const t=r?r.fields.find((e=>e.name===n)):void 0;if(t){switch(t.type){case"oid":case"double":case"integer":case"single":case"small-integer":a[n]=DBaseTypes.NUMBER;break;case"date":a[n]=o?DBaseTypes.NUMBER:DBaseTypes.DATE;break;default:a[n]=DBaseTypes.STRING}continue}const s=(e,t)=>e.attributes.get(t)??e.presentableAttributes.get(t);e.every((e=>s(e,n)instanceof Date||void 0===s(e,n)))&&e.some((e=>s(e,n)instanceof Date))?a[n]=o?DBaseTypes.NUMBER:DBaseTypes.DATE:e.every((e=>"number"==typeof s(e,n)||void 0===s(e,n)))&&e.some((e=>"number"==typeof s(e,n)))?a[n]=DBaseTypes.NUMBER:e.every((e=>"boolean"==typeof s(e,n)||void 0===s(e,n)))&&e.some((e=>"boolean"==typeof s(e,n)))?a[n]=DBaseTypes.BOOLEAN:a[n]=DBaseTypes.STRING}return a}function _getDBaseGeometries(e){return e.map((e=>{if(isPoint(e)){const{x:t,y:r,z:o,m:a}=e,n=[t,r];return e.hasZ&&n.push(o),e.hasM&&n.push(a),_padZValues(n,e)}if(isMultipoint(e))return _padZValuesArray(e.points,e);if(isPolyline(e))return _padZValues2DArray(e.paths,e);if(isPolygon(e))return _padZValues2DArray(e.rings,e);if(isExtent(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.")}))}function _padZValues(e,t){return 3===e.length&&!t.hasZ&&t.hasM?[e[0],e[1],void 0,e[2]]:e}function _padZValuesArray(e,t){return e.map((e=>_padZValues(e,t)))}function _padZValues2DArray(e,t){return e.map((e=>_padZValuesArray(e,t)))}function _getDbaseValues(e,t,r,o){const a=[];for(const n of e){const e={};for(const a of t){let t=_getAttributeValue(n,a,o);if(null==t&&(t=""),o.useFormattedValues)t=t.toString();else{t=getDbaseValue(t,r[a],o)}e[a]=t}a.push(e)}return a}function getDbaseValue(e,t,r){switch(t){case DBaseTypes.NUMBER:return e instanceof Date?e.getTime():parseNumber(e);case DBaseTypes.STRING:return e instanceof Date?formatDate({format:r.dateFormat??DateFormat.ROUND_TRIP,timeZone:"UTC"},e):"number"==typeof e?formatNumber(r.numberFormat??NumberFormat.DEFAULT,e):e.toString();case DBaseTypes.BOOLEAN:return!!e;case DBaseTypes.DATE:return parseDate(e);default:return e.toString()}}function _parseShapefileNames(e){if(!e.length)return[];let t=e[0];const r=t.match(shapefileNameRegex);return r?(t=r[1],e.filter((e=>{const r=e.match(shapefileNameRegex);return r&&r[1]===t}))):[t]}function _parseDBaseData(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]})))))]}function _parseShpPointGeometry(e){checkArg("geometry.coordinates",e.type).matches("Point"),checkArg("geometry.coordinates",e.coordinates).satisfies((e=>"number"==typeof e||Array.isArray(e)));const[t,r,o]=e.coordinates,a=new Point({x:t,y:r,spatialReference:SpatialReference.WGS84});if(Array.isArray(o)){const[e,t]=o;!e&&!t||e?a.z=e:a.m=t}return a}async function _parseShpGeometry(e,t){const r=isPoint(e)?_parseShpPointGeometry(e):geoJSONToEsri(e);if(t){let e;try{const r=await esriWktToWkid(t);e=new SpatialReference({wkid:parseNumber(r)})}catch{}e||(e=new SpatialReference({wkt:t})),r.spatialReference=e}return r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ArgumentError}from"../../ArgumentError.js";import{InvalidOperationError}from"../../InvalidOperationError.js";import{DefaultArcGISRequestHelper}from"../../support/ArcGISRequestHelper.js";import{checkArg}from"../../utilities/checkArg.js";import{isFeatureLayer}from"../../utilities/layers.js";import{toGraphic}from"../Feature.js";const requestHelper=new DefaultArcGISRequestHelper;export async function toAttachmentFile(e,t){
|
|
1
|
+
import{ArgumentError}from"../../ArgumentError.js";import{InvalidOperationError}from"../../InvalidOperationError.js";import{DefaultArcGISRequestHelper}from"../../support/ArcGISRequestHelper.js";import{checkArg}from"../../utilities/checkArg.js";import{isFeatureLayer}from"../../utilities/layers.js";import{toGraphic}from"../Feature.js";const requestHelper=new DefaultArcGISRequestHelper;export async function toAttachmentFile(e,t){let r;if(e instanceof File)r=e;else if(e?.url)try{const t=await requestHelper.request(e.url,{responseType:"blob"});r=new File([t.data],e.title,{type:e.contentType})}catch(e){throw new Error(`${`${t} `??""}Failed to fetch attachment from url.`,{cause:e})}if(!r)throw new Error(`${`${t} `??""}No attachment data found.`);return r}export function supportsAttachmentEditing(e){return isFeatureLayer(e)&&!!e.capabilities?.data?.supportsAttachment&&(e.capabilities.operations?.supportsUpdate||e.capabilities.operations?.supportsAdd)}export async function addAttachment(e,t,r,a){if(checkArg("feature",e).isDefined(),checkArg("layer",t).isDefined(),checkArg("attachment",r).isDefined(),e.source&&e.source.layer!==t&&e.source.table!==t)throw new ArgumentError("layer","The feature's source layer/table does not match the layer.");if(!supportsAttachmentEditing(t))throw new InvalidOperationError("Cannot add attachment; the Table does not support attachments.");const o=`Failed to add attachment to ${e.primaryKey??e.id} of source ${e.source?.title??e.source?.id}.`,n=await toAttachmentFile(r,o),s=n.name?.split(".").pop()?.toLowerCase();if(a?.attachmentTypes&&!isValidFileType(n,a.attachmentTypes))throw new ArgumentError("attachment",`The attachment type '${s}' does not exist in the set of accepted attachment types: ${a.attachmentTypes}.`);let i;const c=new FormData;c.append("attachment",n,n.name);try{const r=await t.addAttachment(toGraphic(e),c);if(r.error)throw new Error(r.error.message);i=`${r.objectId}`}catch(e){throw new Error(o,{cause:e})}return await e.fetchAttachments(),e.attachments.find((e=>e.id===i))}function isValidFileType(e,t){if(!t.map((e=>e.toLowerCase())).includes(e.type.toLowerCase())){const r=t.filter((e=>!e.includes("/"))).map((e=>e.toLowerCase())),a=e.name?.split(".").pop()?.toLowerCase();return r.includes(a)}return!0}export function isAttachmentTypeError(e){return ATTACHMENT_TYPE_ERROR_REGEX.test(e.message)}export const ATTACHMENT_TYPE_ERROR_REGEX=/^The attachment type .+ does not exist in the set of accepted attachment types: .+.$/;export async function deleteAttachments(e,t,r){if(checkArg("feature",e).isDefined(),checkArg("layer",t).isDefined(),checkArg("attachments",r).isDefined(),e.source&&e.source.layer!==t&&e.source.table!==t)throw new ArgumentError("layer","The feature's source layer/table does not match the layer.");if(!supportsAttachmentEditing(t))throw new InvalidOperationError("Cannot delete attachments; the layer/table does not support attachments.");const a=`Failed to delete attachment(s) from ${e.primaryKey??e.id} of source ${e.source?.title??e.source?.id}.`;try{const a=await t.deleteAttachments(toGraphic(e),r.map((e=>"string"==typeof e?+e:+e.id)));if(a?.length>1){const e=a.filter((e=>e.error));if(e.length>0)throw new AggregateError(e.map((e=>new Error(e.error.message))))}else if(a?.[0].error)throw new Error(a?.[0].error.message)}catch(e){throw new Error(a,{cause:e})}await e.fetchAttachments()}
|
|
@@ -198,29 +198,20 @@ declare namespace __esri {
|
|
|
198
198
|
usesGeometry: boolean | number;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
container: string | HTMLDivElement;
|
|
203
|
-
}
|
|
201
|
+
// ESRI424 - Check if the extended interfaces below are still necessary.
|
|
204
202
|
|
|
205
203
|
export interface SceneLayer {
|
|
206
204
|
associatedLayer: __esri.FeatureLayer;
|
|
207
205
|
}
|
|
208
206
|
|
|
209
|
-
export interface VectorTileLayer {
|
|
210
|
-
loadStyle(style: string | Object): Promise<void>;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Check if these properties exist in ESRI421.
|
|
214
207
|
export interface WMSLayer {
|
|
215
208
|
mapUrl: string;
|
|
216
209
|
}
|
|
217
210
|
|
|
218
|
-
// Check if these properties exist in ESRI421.
|
|
219
211
|
export interface WMSLayerProperties {
|
|
220
212
|
mapUrl?: string;
|
|
221
213
|
}
|
|
222
214
|
|
|
223
|
-
// Check if these properties exist in ESRI421.
|
|
224
215
|
export interface FeatureLayer {
|
|
225
216
|
mode: number;
|
|
226
217
|
deleteAttachments(feature: Graphic, attachmentIds: number[]): Promise<FeatureEditResult[]>;
|
|
@@ -230,70 +221,24 @@ declare namespace __esri {
|
|
|
230
221
|
clone(): this;
|
|
231
222
|
}
|
|
232
223
|
|
|
233
|
-
// Check if VectorFieldRenderer extends Renderer
|
|
224
|
+
// Check if VectorFieldRenderer extends Renderer.
|
|
234
225
|
export interface VectorFieldRenderer extends Renderer {}
|
|
235
226
|
|
|
236
|
-
// Check if WMSSublayer extends these in ESRI421.
|
|
237
|
-
export interface WMSSublayer extends JSONSupport {}
|
|
238
|
-
|
|
239
|
-
export interface SpatialReferenceConstructor {
|
|
240
|
-
// Esri marked these as instance properties, but they are static.
|
|
241
|
-
WebMercator: SpatialReference;
|
|
242
|
-
WGS84: SpatialReference;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Check if these properties exist in ESRI421.
|
|
246
227
|
export interface locatorSuggestLocationsParams {
|
|
247
|
-
// These properties are not exposed by the type file provided by esri.
|
|
248
228
|
searchExtent: Extent;
|
|
249
229
|
maxSuggestions: number;
|
|
250
230
|
countryCode: string;
|
|
251
231
|
}
|
|
252
232
|
|
|
253
|
-
export interface locator {
|
|
254
|
-
// This signature is broken in the typings and documentation. It's
|
|
255
|
-
// missing the first `url` parameter. Check if this is fixed in ESRI421.
|
|
256
|
-
locationToAddress(
|
|
257
|
-
url: string,
|
|
258
|
-
params: locatorLocationToAddressParams,
|
|
259
|
-
requestOptions?: any
|
|
260
|
-
): Promise<supportAddressCandidate>;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
export interface query {
|
|
264
|
-
// This signature is broken in the typings and documentation. It's
|
|
265
|
-
// missing the first `url` parameter. Check if this is fixed in ESRI421.
|
|
266
|
-
executeForCount(
|
|
267
|
-
url: string,
|
|
268
|
-
query: supportQuery | supportQueryProperties,
|
|
269
|
-
requestOptions?: any
|
|
270
|
-
): Promise<number>;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export interface imageService {
|
|
274
|
-
// This signature is broken in the typings and documentation. It's
|
|
275
|
-
// missing the first `url` parameter. Check if this is fixed in ESRI421.
|
|
276
|
-
identify(
|
|
277
|
-
url: string,
|
|
278
|
-
params: supportImageIdentifyParameters,
|
|
279
|
-
requestOptions?: any
|
|
280
|
-
): Promise<supportImageIdentifyResult>;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Check if layer is present in ESRI421.
|
|
284
233
|
export interface BuildingSublayer {
|
|
285
234
|
layer: __esri.BuildingSceneLayer;
|
|
286
235
|
}
|
|
287
236
|
|
|
288
|
-
// Check if present in ESRI421.
|
|
289
237
|
export interface BuildingComponentSublayer {
|
|
290
238
|
fields: __esri.Field[];
|
|
291
239
|
objectIdField: string;
|
|
292
240
|
geometryType: __esri.Geometry["type"];
|
|
293
|
-
maxScale: number;
|
|
294
241
|
capabilities: BuildingComponentSublayerCapabilities;
|
|
295
|
-
listMode: "show" | "hide" | "hide-children";
|
|
296
|
-
associatedLayer?: __esri.FeatureLayer;
|
|
297
242
|
}
|
|
298
243
|
export interface BuildingComponentSublayerCapabilities {
|
|
299
244
|
/**
|
|
@@ -302,41 +247,8 @@ declare namespace __esri {
|
|
|
302
247
|
* [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
|
|
303
248
|
*/
|
|
304
249
|
data: BuildingComponentSublayerCapabilitiesData;
|
|
305
|
-
/**
|
|
306
|
-
* Describes [query](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-support-Query.html) operations that can be performed on features in the layer.
|
|
307
|
-
*
|
|
308
|
-
* [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-CSVLayer.html#capabilities)
|
|
309
|
-
*/
|
|
310
|
-
query: BuildingComponentSublayerCapabilitiesQuery;
|
|
311
|
-
}
|
|
312
|
-
export interface BuildingComponentSublayerCapabilitiesQuery {
|
|
313
|
-
maxRecordCount: number;
|
|
314
|
-
maxRecordCountFactor: number;
|
|
315
|
-
standardMaxRecordCount: number;
|
|
316
|
-
supportsCacheHint: boolean;
|
|
317
|
-
supportsCentroid: boolean;
|
|
318
|
-
supportsDisjointSpatialRelationship: boolean;
|
|
319
|
-
supportsDistance: boolean;
|
|
320
|
-
supportsDistinct: boolean;
|
|
321
|
-
supportsExtent: boolean;
|
|
322
|
-
supportsFormatPBF: boolean;
|
|
323
|
-
supportsGeometryProperties: boolean;
|
|
324
|
-
supportsHavingClause: boolean;
|
|
325
|
-
supportsHistoricMoment: boolean;
|
|
326
|
-
supportsMaxRecordCountFactor: boolean;
|
|
327
|
-
supportsOrderBy: boolean;
|
|
328
|
-
supportsPagination: boolean;
|
|
329
|
-
supportsPercentileStatistics: boolean;
|
|
330
|
-
supportsQuantization: boolean;
|
|
331
|
-
supportsQuantizationEditMode: boolean;
|
|
332
|
-
supportsQueryByOthers: boolean;
|
|
333
|
-
supportsQueryGeometry: boolean;
|
|
334
|
-
supportsResultType: boolean;
|
|
335
|
-
supportsSqlExpression: boolean;
|
|
336
|
-
supportsStandardizedQueriesOnly: boolean;
|
|
337
|
-
supportsStatistics: boolean;
|
|
338
|
-
tileMaxRecordCount: number;
|
|
339
250
|
}
|
|
251
|
+
|
|
340
252
|
export interface BuildingComponentSublayerCapabilitiesData {
|
|
341
253
|
isVersioned: boolean;
|
|
342
254
|
supportsM: boolean;
|
|
@@ -344,36 +256,10 @@ declare namespace __esri {
|
|
|
344
256
|
}
|
|
345
257
|
|
|
346
258
|
export interface ImageryLayer {
|
|
347
|
-
// This disappeared in 4.19 for some reason.
|
|
259
|
+
// This disappeared in 4.19 for some reason.
|
|
348
260
|
rasterAttributeTableFieldPrefix: string;
|
|
349
261
|
}
|
|
350
262
|
|
|
351
|
-
export interface Task extends Accessor {
|
|
352
|
-
/**
|
|
353
|
-
* The [options](https://developers.arcgis.com/javascript/latest/api-reference/esri-request.html#esriRequest) to be used for data requests. These options can also be controlled through the `requestOptions` method parameter.
|
|
354
|
-
*
|
|
355
|
-
* [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#requestOptions)
|
|
356
|
-
*/
|
|
357
|
-
requestOptions: any;
|
|
358
|
-
/**
|
|
359
|
-
* The ArcGIS Server REST service URL (usually of a Feature Service Layer or Map Service Layer) for use in a task.
|
|
360
|
-
*
|
|
361
|
-
* [Read more...](https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-Task.html#url)
|
|
362
|
-
*/
|
|
363
|
-
url: string;
|
|
364
|
-
|
|
365
|
-
// Geocortex Edit: Typings seem to be missing execute()
|
|
366
|
-
// See API Docs: https://developers.arcgis.com/javascript/latest/api-reference/esri-tasks-ImageServiceIdentifyTask.html#execute
|
|
367
|
-
/**
|
|
368
|
-
* Sends a request to the ArcGIS REST image service resource to identify content based on the ImageServiceIdentifyParameters specified in the params argument.
|
|
369
|
-
*/
|
|
370
|
-
execute(
|
|
371
|
-
params: ImageIdentifyParameters,
|
|
372
|
-
requestOptions?: RequestOptions
|
|
373
|
-
): Promise<ImageIdentifyResult>;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// ESRI421: Check if they've added to their documented properties.
|
|
377
263
|
export interface StreamLayerView {
|
|
378
264
|
createQuery(): __esri.supportQuery;
|
|
379
265
|
view: __esri.MapView | __esri.SceneView;
|
|
@@ -403,9 +289,14 @@ declare namespace __esri {
|
|
|
403
289
|
view: __esri.MapView | __esri.SceneView;
|
|
404
290
|
}
|
|
405
291
|
|
|
292
|
+
export interface EditsResult {
|
|
293
|
+
addFeatureResults: __esri.FeatureEditResult[];
|
|
294
|
+
deleteFeatureResults: __esri.FeatureEditResult[];
|
|
295
|
+
updateFeatureResults: __esri.FeatureEditResult[];
|
|
296
|
+
}
|
|
297
|
+
|
|
406
298
|
export interface Symbol3DLayerProperties {
|
|
407
|
-
//
|
|
408
|
-
// property is required for autocasting to work.
|
|
299
|
+
// The type property is required for autocasting to work.
|
|
409
300
|
type: Symbol3DLayer["type"];
|
|
410
301
|
}
|
|
411
302
|
}
|