esri-gl 1.0.0 → 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifyImage-DmyKcbAv.js","sources":["../src/utils.ts","../src/Services/Service.ts","../src/Services/DynamicMapService.ts","../src/Services/TiledMapService.ts","../src/Services/ImageService.ts","../src/Services/VectorBasemapStyle.ts","../src/Services/VectorTileService.ts","../src/Services/FeatureService.ts","../src/Tasks/Task.ts","../src/Tasks/Query.ts","../src/Tasks/Find.ts","../src/Tasks/IdentifyFeatures.ts","../src/Tasks/IdentifyImage.ts"],"sourcesContent":["import type { Map, ServiceMetadata } from '@/types';\n\nexport function cleanTrailingSlash(url: string): string {\n return url.replace(/\\/$/, '');\n}\n\n/**\n * Check if an error represents an AbortError (request was cancelled)\n * Handles various error shapes from different browsers and environments\n */\nexport function isAbortError(error: unknown): boolean {\n if (!error) return false;\n\n // Standard DOMException check\n if (typeof DOMException !== 'undefined' && error instanceof DOMException) {\n return error.name === 'AbortError';\n }\n\n // Error instance checks\n if (error instanceof Error) {\n if (error.name === 'AbortError') return true;\n if (error.message?.toLowerCase().includes('abort')) return true;\n }\n\n // Duck typing for error-like objects\n const errorObj = error as { name?: string; message?: string; constructor?: { name?: string } };\n if (errorObj.name === 'AbortError') return true;\n if (errorObj.constructor?.name === 'AbortError') return true;\n\n // String check\n const stringified = String(error).toLowerCase();\n return stringified.includes('abort');\n}\n\nexport async function getServiceDetails(\n url: string,\n fetchOptions: RequestInit = {},\n token?: string\n): Promise<ServiceMetadata> {\n const params = new URLSearchParams({ f: 'json' });\n if (token) {\n params.append('token', token);\n }\n const response = await fetch(`${url}?${params.toString()}`, fetchOptions);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch service details: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(data.error.message || 'Service returned an error');\n }\n\n return data;\n}\n\nconst POWERED_BY_ESRI_ATTRIBUTION_STRING = 'Powered by <a href=\"https://www.esri.com\">Esri</a>';\n\n// This requires hooking into some undocumented properties\nexport function updateAttribution(newAttribution: string, sourceId: string, map: Map): void {\n // Accessing undocumented MapLibre/Mapbox internal properties\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mapWithControls = map as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const attributionController = mapWithControls._controls?.find((c: any) => '_attribHTML' in c);\n if (!attributionController) return;\n\n const customAttribution = attributionController.options?.customAttribution;\n\n if (typeof customAttribution === 'string') {\n if (!customAttribution.includes(POWERED_BY_ESRI_ATTRIBUTION_STRING)) {\n attributionController.options.customAttribution = `${customAttribution} | ${POWERED_BY_ESRI_ATTRIBUTION_STRING}`;\n }\n } else if (customAttribution === undefined) {\n if (attributionController.options) {\n attributionController.options.customAttribution = POWERED_BY_ESRI_ATTRIBUTION_STRING;\n }\n } else if (Array.isArray(customAttribution)) {\n if (customAttribution.indexOf(POWERED_BY_ESRI_ATTRIBUTION_STRING) === -1) {\n customAttribution.push(POWERED_BY_ESRI_ATTRIBUTION_STRING);\n }\n }\n\n // Accessing undocumented map style properties\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mapStyle = (map as any).style;\n if (mapStyle?.sourceCaches?.[sourceId]?._source) {\n mapStyle.sourceCaches[sourceId]._source.attribution = newAttribution;\n } else if (mapStyle?._otherSourceCaches?.[sourceId]?._source) {\n mapStyle._otherSourceCaches[sourceId]._source.attribution = newAttribution;\n } else {\n // Source may not be registered in style caches yet (async attribution fetch race).\n // Silently skip — attribution will be set when the source is ready.\n return;\n }\n\n // Call undocumented method to update attribution display\n if (attributionController._updateAttributions) {\n attributionController._updateAttributions();\n }\n}\n","import { cleanTrailingSlash, updateAttribution } from '@/utils';\nimport type { Map, ServiceMetadata } from '@/types';\n\nexport interface ServiceOptions {\n url: string;\n proxy?: string | boolean;\n useCors?: boolean;\n timeout?: number;\n token?: string;\n requestParams?: Record<string, unknown>;\n getAttributionFromService?: boolean;\n apiKey?: string;\n}\n\nexport type ServiceCallback<T = unknown> = (error?: Error, response?: T) => void;\n\nexport interface ServiceEvents {\n requeststart: { url: string; params: Record<string, unknown>; method: string };\n requestsuccess: {\n url: string;\n params: Record<string, unknown>;\n response: unknown;\n method: string;\n };\n requesterror: {\n url: string;\n params: Record<string, unknown>;\n message: string;\n code?: number;\n method: string;\n };\n requestend: { url: string; params: Record<string, unknown>; method: string };\n authenticationrequired: { authenticate: (token: string) => void };\n}\n\n/**\n * Base Service class for ArcGIS REST API services\n * Similar to Esri Leaflet's Service class\n */\nexport class Service {\n protected options: ServiceOptions & {\n proxy: string | boolean;\n useCors: boolean;\n timeout: number;\n getAttributionFromService: boolean;\n };\n protected _requestQueue: Array<\n [string, string, Record<string, unknown>, (error?: Error, response?: unknown) => void, unknown]\n > = [];\n protected _authenticating: boolean = false;\n protected _serviceMetadata: ServiceMetadata | null = null;\n protected _map?: Map;\n\n private _eventListeners: Partial<\n Record<keyof ServiceEvents, ((event: ServiceEvents[keyof ServiceEvents]) => void)[]>\n > = {};\n\n constructor(options: ServiceOptions) {\n if (!options.url) {\n throw new Error('A url must be supplied as part of the service options.');\n }\n\n this.options = {\n proxy: false,\n useCors: true,\n timeout: 0,\n getAttributionFromService: true,\n ...options,\n url: cleanTrailingSlash(options.url),\n };\n }\n\n /**\n * Make a GET request\n */\n async get(path: string, params: Record<string, unknown> = {}): Promise<unknown> {\n return this._request('GET', path, params);\n }\n\n /**\n * Make a POST request\n */\n async post(path: string, params: Record<string, unknown> = {}): Promise<unknown> {\n return this._request('POST', path, params);\n }\n\n /**\n * Make a generic request\n */\n async request(path: string, params: Record<string, unknown> = {}): Promise<unknown> {\n return this._request('GET', path, params);\n }\n\n /**\n * Make a request with callback support (public for Tasks)\n */\n requestWithCallback<T = unknown>(\n method: string,\n path: string,\n params: Record<string, unknown>,\n callback?: ServiceCallback<T>\n ): Promise<T> | void {\n if (callback) {\n this._requestWithCallback(method, path, params, callback);\n return;\n }\n return this._request(method, path, params) as Promise<T>;\n }\n\n /**\n * Get service metadata\n */\n async metadata(): Promise<ServiceMetadata> {\n if (this._serviceMetadata) {\n return this._serviceMetadata;\n }\n\n try {\n const response = await this._request('GET', '', { f: 'json' });\n this._serviceMetadata = response as ServiceMetadata;\n return this._serviceMetadata;\n } catch (error) {\n const isTestEnvironment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'test';\n if (!isTestEnvironment) {\n console.error('Error fetching service metadata:', error);\n }\n throw error;\n }\n }\n\n /**\n * Set authentication token\n */\n authenticate(token: string): Service {\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n }\n\n /**\n * Get request timeout\n */\n getTimeout(): number {\n return this.options.timeout;\n }\n\n /**\n * Set request timeout\n */\n setTimeout(timeout: number): Service {\n this.options.timeout = timeout;\n return this;\n }\n\n /**\n * Set attribution from service metadata\n */\n async setAttributionFromService(): Promise<void> {\n if (!this._map) {\n return;\n }\n\n if (this._serviceMetadata) {\n updateAttribution(this._serviceMetadata.copyrightText || '', 'service', this._map);\n return;\n }\n\n try {\n await this.metadata();\n if (this._serviceMetadata && typeof this._serviceMetadata === 'object') {\n const metadata = this._serviceMetadata as ServiceMetadata;\n updateAttribution(metadata?.copyrightText || '', 'service', this._map);\n }\n } catch (error) {\n console.warn('Could not fetch service attribution:', error);\n }\n }\n\n /**\n * Add event listener\n */\n on<K extends keyof ServiceEvents>(\n event: K,\n callback: (event: ServiceEvents[K]) => void\n ): Service {\n if (!this._eventListeners[event]) {\n this._eventListeners[event] = [];\n }\n this._eventListeners[event]!.push(\n callback as (event: ServiceEvents[keyof ServiceEvents]) => void\n );\n return this;\n }\n\n /**\n * Remove event listener\n */\n off<K extends keyof ServiceEvents>(\n event: K,\n callback: (event: ServiceEvents[K]) => void\n ): Service {\n const listeners = this._eventListeners[event];\n if (listeners) {\n const index = listeners.indexOf(\n callback as (event: ServiceEvents[keyof ServiceEvents]) => void\n );\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n return this;\n }\n\n /**\n * Fire an event\n */\n fire<K extends keyof ServiceEvents>(event: K, data: ServiceEvents[K]): Service {\n const listeners = this._eventListeners[event];\n if (listeners) {\n listeners.forEach(callback => callback(data));\n }\n return this;\n }\n\n // Private methods\n\n private _requestWithCallback<T = unknown>(\n method: string,\n path: string,\n params: Record<string, unknown>,\n callback: ServiceCallback<T>\n ): void {\n this.fire('requeststart', {\n url: this.options.url + path,\n params,\n method,\n });\n\n const wrappedCallback = this._createServiceCallback(method, path, params, (error, response) => {\n callback(error, response as T);\n });\n\n let finalParams = { ...params };\n if (this.options.token) {\n finalParams.token = this.options.token;\n }\n if (this.options.requestParams) {\n finalParams = { ...finalParams, ...this.options.requestParams };\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, finalParams, wrappedCallback, this]);\n } else {\n this._makeRequest(method, path, finalParams, wrappedCallback);\n }\n }\n\n private async _request(\n method: string,\n path: string,\n params: Record<string, unknown>\n ): Promise<unknown> {\n this.fire('requeststart', {\n url: this.options.url + path,\n params,\n method,\n });\n\n return new Promise((resolve, reject) => {\n const wrappedCallback = this._createServiceCallback(\n method,\n path,\n params,\n (error, response) => {\n if (error) {\n reject(error);\n } else {\n resolve(response);\n }\n }\n );\n\n let finalParams = { ...params };\n if (this.options.token) {\n finalParams.token = this.options.token;\n }\n if (this.options.requestParams) {\n finalParams = { ...finalParams, ...this.options.requestParams };\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, finalParams, wrappedCallback, this]);\n } else {\n this._makeRequest(method, path, finalParams, wrappedCallback);\n }\n });\n }\n\n private async _makeRequest(\n method: string,\n path: string,\n params: Record<string, unknown>,\n callback: (error?: Error, response?: unknown) => void\n ): Promise<void> {\n const url = this.options.proxy\n ? `${this.options.proxy}?${this.options.url}${path}`\n : `${this.options.url}${path}`;\n\n // Set up abort controller for timeout support\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (this.options.timeout > 0) {\n timeoutId = setTimeout(() => {\n controller.abort();\n }, this.options.timeout);\n }\n\n try {\n let response: Response;\n const fetchOptions: RequestInit = { signal: controller.signal };\n\n // Add API key header if present\n if (this.options.apiKey) {\n fetchOptions.headers = {\n 'X-Esri-Authorization': `Bearer ${this.options.apiKey}`,\n };\n }\n\n if (method === 'POST') {\n const formData = new FormData();\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value !== undefined && value !== null) {\n if (typeof value === 'object') {\n formData.append(key, JSON.stringify(value));\n } else {\n formData.append(key, value.toString());\n }\n }\n });\n\n response = await fetch(url, {\n ...fetchOptions,\n method: 'POST',\n body: formData,\n });\n } else {\n const searchParams = new URLSearchParams();\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n searchParams.append(key, value.join(','));\n } else if (typeof value === 'object') {\n searchParams.append(key, JSON.stringify(value));\n } else {\n searchParams.append(key, value.toString());\n }\n }\n });\n\n const fullUrl = `${url}?${searchParams.toString()}`;\n response = await fetch(fullUrl, fetchOptions);\n }\n\n if (!response.ok) {\n const error = new Error(`HTTP error! status: ${response.status}`) as Error & {\n code?: number;\n };\n error.code = response.status;\n throw error;\n }\n\n const data = await response.json();\n\n // Check for AGOL JSON-level errors (HTTP 200 with error body)\n if (data && typeof data === 'object' && data.error) {\n const err = new Error(data.error.message || 'ArcGIS service error') as Error & {\n code?: number;\n details?: string[];\n };\n err.code = data.error.code;\n err.details = data.error.details;\n callback(err);\n return;\n }\n\n callback(undefined, data);\n } catch (error) {\n // Provide clearer error message for timeout\n if (error instanceof Error && error.name === 'AbortError' && this.options.timeout > 0) {\n const timeoutError = new Error(`Request timed out after ${this.options.timeout}ms`);\n callback(timeoutError);\n } else {\n callback(error as Error);\n }\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private _createServiceCallback(\n method: string,\n path: string,\n params: Record<string, unknown>,\n callback: (error?: Error, response?: unknown) => void\n ): (error?: Error, response?: unknown) => void {\n return (error?: Error, response?: unknown) => {\n // Check if error has authentication-related status codes\n const errorWithCode = error as Error & { code?: number };\n if (error && (errorWithCode.code === 499 || errorWithCode.code === 498)) {\n this._authenticating = true;\n this._requestQueue.push([method, path, params, callback, this]);\n\n // Fire event for users to handle re-authentication\n this.fire('authenticationrequired', {\n authenticate: (token: string) => this.authenticate(token),\n });\n\n // Add authenticate method to error for callback handling\n const authError = error as Error & { authenticate?: (token: string) => void };\n authError.authenticate = (token: string) => this.authenticate(token);\n return;\n }\n\n if (error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params,\n message: error.message,\n code: errorWithCode.code,\n method,\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params,\n response,\n method,\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params,\n method,\n });\n\n callback(error, response);\n };\n }\n\n private _runQueue(): void {\n for (let i = this._requestQueue.length - 1; i >= 0; i--) {\n const request = this._requestQueue[i];\n const [method, path, params, callback] = request;\n if (callback) {\n this._makeRequest(method, path, params, callback);\n }\n }\n this._requestQueue = [];\n }\n}\n\nexport function service(options: ServiceOptions): Service {\n return new Service(options);\n}\n\nexport default service;\n","import { cleanTrailingSlash, getServiceDetails, isAbortError, updateAttribution } from '@/utils';\nimport type {\n Map,\n EsriServiceOptions,\n RasterSourceOptions,\n ServiceMetadata,\n DynamicLayer,\n EsriDrawingInfo,\n EsriRenderer,\n LayerFilter,\n GroupFilter,\n BetweenFilter,\n InFilter,\n NullFilter,\n ComparisonFilter,\n LayerLabelingInfo,\n LayerTimeOptions,\n TimeAnimationOptions,\n StatisticResult,\n LayerQueryOptions,\n FeatureSet,\n MapExportOptions,\n LegendInfo,\n LayerMetadata,\n FieldInfo,\n Extent,\n LayerInfo,\n BatchLayerOperation,\n} from '@/types';\n\n// Minimal raster source type returned to the map\ntype RasterExportSource = RasterSourceOptions & {\n type: 'raster';\n tiles: string[];\n tileSize: number;\n};\n\ninterface DynamicMapServiceOptions extends EsriServiceOptions {\n from?: Date | number;\n to?: Date | number;\n fetchOptions?: RequestInit;\n}\n\nexport class DynamicMapService {\n private _sourceId: string;\n private _map: Map;\n private _defaultEsriOptions: Omit<Required<EsriServiceOptions>, 'url' | 'time'>;\n private _serviceMetadata: ServiceMetadata | null = null;\n private _pendingUpdate: number | null = null;\n private _lastUpdateTime = 0;\n private _updateDelay = 50; // ms debounce to avoid rapid successive aborts\n\n public rasterSrcOptions?: RasterSourceOptions;\n public esriServiceOptions: DynamicMapServiceOptions;\n\n constructor(\n sourceId: string,\n map: Map,\n esriServiceOptions: DynamicMapServiceOptions,\n rasterSrcOptions?: RasterSourceOptions\n ) {\n if (!esriServiceOptions.url) {\n throw new Error('A url must be supplied as part of the esriServiceOptions object.');\n }\n\n esriServiceOptions.url = cleanTrailingSlash(esriServiceOptions.url);\n\n this._sourceId = sourceId;\n this._map = map;\n\n this._defaultEsriOptions = {\n layers: false,\n layerDefs: false,\n dynamicLayers: false,\n format: 'png24',\n dpi: 96,\n transparent: true,\n getAttributionFromService: true,\n };\n\n this.rasterSrcOptions = rasterSrcOptions;\n this.esriServiceOptions = esriServiceOptions;\n this._createSource();\n\n if (this.options.getAttributionFromService) {\n this.setAttributionFromService().catch(() => {\n // Silently handle attribution fetch errors to prevent unhandled rejections\n });\n }\n }\n\n get options(): Required<DynamicMapServiceOptions> {\n return {\n ...this._defaultEsriOptions,\n ...this.esriServiceOptions,\n } as Required<DynamicMapServiceOptions>;\n }\n\n get _layersStr(): string | false {\n let lyrs = this.options.layers;\n if (!lyrs) return false;\n if (!Array.isArray(lyrs)) lyrs = [lyrs];\n return `show:${lyrs.join(',')}`;\n }\n\n get _layerDefs(): string | false {\n if (this.options.layerDefs !== false) return JSON.stringify(this.options.layerDefs);\n return false;\n }\n\n get _time(): string | false {\n if (!this.options.to) return false;\n let from = this.options.from;\n let to = this.options.to;\n if (from instanceof Date) from = from.valueOf();\n if (to instanceof Date) to = to.valueOf();\n\n return `${from},${to}`;\n }\n\n // ArcGIS Dynamic Layer styling parameter (JSON string)\n get _dynamicLayers(): string | false {\n const dl = this.options.dynamicLayers as DynamicLayer[] | false | undefined;\n if (!dl) return false;\n try {\n const normalized = (dl as DynamicLayer[]).map(l => {\n const { visible, ...rest } = l;\n\n const withSource = {\n ...rest,\n // ensure required source exists\n source: l.source ?? { type: 'mapLayer', mapLayerId: l.id },\n } as Record<string, unknown>;\n\n // Convert client-friendly 'visible' to ArcGIS 'visibility'\n if (typeof visible === 'boolean') {\n (withSource as Record<string, unknown>).visibility = visible;\n }\n return withSource;\n });\n const result = JSON.stringify(normalized);\n return result;\n } catch {\n return false;\n }\n }\n\n get _source(): RasterExportSource {\n const tileSize = this.rasterSrcOptions?.tileSize ?? 256;\n // These are the bare minimum parameters\n const params = new URLSearchParams({\n bboxSR: '3857',\n imageSR: '3857',\n format: this.options.format,\n dpi: this.options.dpi.toString(),\n layers: this._layersStr || '',\n transparent: this.options.transparent.toString(),\n size: `${tileSize},${tileSize}`,\n f: 'image',\n });\n\n // These are optional params\n if (this._time) params.append('time', this._time);\n if (this._layerDefs) params.append('layerDefs', this._layerDefs);\n if (this._dynamicLayers) params.append('dynamicLayers', this._dynamicLayers);\n\n this._appendTokenIfExists(params);\n\n const tileUrl = `${this.options.url}/export?bbox={bbox-epsg-3857}&${params.toString()}`;\n\n return {\n type: 'raster',\n tiles: [tileUrl],\n tileSize,\n ...this.rasterSrcOptions,\n };\n }\n\n private _createSource(): void {\n // Check if source already exists before adding\n if (!this._map.getSource(this._sourceId)) {\n this._map.addSource(this._sourceId, this._source);\n }\n }\n\n // This requires hooking into some undocumented methods\n private _updateSource(): void {\n // Simple debounce: collapse multiple rapid calls (e.g., visibility + labels in same tick)\n const now = performance.now();\n if (now - this._lastUpdateTime < this._updateDelay) {\n if (this._pendingUpdate) cancelAnimationFrame(this._pendingUpdate);\n this._pendingUpdate = requestAnimationFrame(() => this._updateSourceInternal());\n return;\n }\n this._lastUpdateTime = now;\n this._updateSourceInternal();\n }\n\n private _updateSourceInternal(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const src = this._map.getSource(this._sourceId) as any;\n if (!src) return;\n\n try {\n // Ensure src.tiles exists before accessing it\n if (\n src.tiles &&\n Array.isArray(src.tiles) &&\n this._source.tiles &&\n this._source.tiles.length > 0\n ) {\n src.tiles[0] = this._source.tiles[0];\n }\n src._options = this._source;\n if (src.setTiles) {\n // New MapboxGL >= 2.13.0\n // setTiles may return a promise - handle rejections to prevent console errors\n const result = src.setTiles(this._source.tiles);\n if (result && typeof result.catch === 'function') {\n result.catch(() => {\n // Silently ignore - setTiles rejections are often abort errors during rapid updates\n // The outer try/catch will handle any synchronous errors\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if ((this._map as any).style.sourceCaches) {\n // Old MapboxGL and MaplibreGL\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._map as any).style.sourceCaches[this._sourceId].clearTiles();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._map as any).style.sourceCaches[this._sourceId].update((this._map as any).transform);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if ((this._map as any).style._otherSourceCaches) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._map as any).style._otherSourceCaches[this._sourceId].clearTiles();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._map as any).style._otherSourceCaches[this._sourceId].update(\n (this._map as any).transform\n );\n }\n } catch (error) {\n // Silently ignore aborted tile operations - MapLibre will retry\n if (isAbortError(error)) {\n return;\n }\n // Swallow occasional transient errors that can happen during style reloads\n if (\n error &&\n (error as Error).message?.includes('Source') &&\n (error as Error).message?.includes('not found')\n ) {\n return;\n }\n throw error;\n }\n }\n\n setLayerDefs(obj: Record<string, string>): void {\n this.esriServiceOptions.layerDefs = obj;\n this._updateSource();\n }\n\n /**\n * Replace the entire dynamicLayers array. Server applies these drawing rules.\n * Note: dynamicLayers overrides default drawing for listed sublayers.\n */\n setDynamicLayers(layers: DynamicLayer[] | false): void {\n this.esriServiceOptions.dynamicLayers = layers || false;\n this._updateSource();\n }\n\n /** Helper to ensure all visible layers are included when using dynamicLayers */\n private _ensureAllVisibleLayers(dynamicLayers: DynamicLayer[]): DynamicLayer[] {\n const visibleLayerIds = this._getVisibleLayerIds();\n const existingIds = new Set(dynamicLayers.map(dl => dl.id));\n\n // Add entries for visible layers that aren't already in dynamicLayers\n const additional = visibleLayerIds\n .filter(id => !existingIds.has(id))\n .map(id => ({ id, visible: true }));\n\n return [...dynamicLayers, ...additional];\n }\n\n /** Get the list of currently visible layer IDs */\n private _getVisibleLayerIds(): number[] {\n const lyrs = this.options.layers;\n if (!lyrs) return [];\n if (!Array.isArray(lyrs)) return [lyrs];\n return lyrs;\n }\n\n /** Merge/update a sublayer's drawingInfo with provided fields. */\n setLayerDrawingInfo(layerId: number, drawingInfo: EsriDrawingInfo): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n if (idx >= 0) {\n next[idx] = { ...next[idx], drawingInfo: { ...next[idx].drawingInfo, ...drawingInfo } };\n } else {\n next.push({ id: layerId, drawingInfo });\n }\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n /** Convenience to set a renderer on a sublayer */\n setLayerRenderer(layerId: number, renderer: EsriRenderer): void {\n this.setLayerDrawingInfo(layerId, { renderer });\n }\n\n /** Show/hide a sublayer via dynamicLayers */\n setLayerVisibility(layerId: number, visible: boolean): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n if (idx >= 0) {\n next[idx] = { ...next[idx], visible };\n } else {\n next.push({ id: layerId, visible });\n }\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n /** Set a definitionExpression for a sublayer, applied server-side */\n setLayerDefinition(layerId: number, definitionExpression: string): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n if (idx >= 0) {\n next[idx] = { ...next[idx], definitionExpression };\n } else {\n next.push({ id: layerId, definitionExpression });\n }\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n // Build a SQL where clause and apply as definitionExpression\n setLayerFilter(layerId: number, filter: LayerFilter): void {\n const where = this._buildWhere(filter);\n if (where) this.setLayerDefinition(layerId, where);\n }\n\n private _appendTokenIfExists(params: URLSearchParams): void {\n const token = (this.esriServiceOptions as any).token;\n if (token) {\n params.append('token', token);\n }\n }\n\n private _escapeValue(val: unknown): string {\n if (val === null) return 'NULL';\n if (val instanceof Date) return `${val.valueOf()}`; // epoch ms for time-enabled services\n if (typeof val === 'number') return `${val}`;\n if (typeof val === 'boolean') return val ? '1' : '0';\n const s = String(val).replace(/'/g, \"''\");\n return `'${s}'`;\n }\n\n // Very small, pragmatic builder that covers common cases in types.ts\n private _isGroupFilter(f: LayerFilter): f is GroupFilter {\n return (\n typeof f !== 'string' &&\n 'op' in f &&\n (f.op === 'AND' || f.op === 'OR') &&\n 'filters' in f &&\n Array.isArray((f as GroupFilter).filters)\n );\n }\n\n private _isBetweenFilter(f: LayerFilter): f is BetweenFilter {\n return (\n typeof f !== 'string' &&\n 'op' in f &&\n f.op === 'BETWEEN' &&\n 'field' in f &&\n typeof (f as BetweenFilter).field === 'string' &&\n 'from' in f &&\n (f as BetweenFilter).from !== undefined &&\n 'to' in f &&\n (f as BetweenFilter).to !== undefined\n );\n }\n\n private _isInFilter(f: LayerFilter): f is InFilter {\n return (\n typeof f !== 'string' &&\n 'op' in f &&\n f.op === 'IN' &&\n 'field' in f &&\n typeof (f as InFilter).field === 'string' &&\n 'values' in f &&\n Array.isArray((f as InFilter).values)\n );\n }\n\n private _isNullFilter(f: LayerFilter): f is NullFilter {\n return (\n typeof f !== 'string' &&\n 'op' in f &&\n (f.op === 'IS NULL' || f.op === 'IS NOT NULL') &&\n 'field' in f &&\n typeof (f as NullFilter).field === 'string'\n );\n }\n\n private _isComparisonFilter(f: LayerFilter): f is ComparisonFilter {\n return (\n typeof f !== 'string' &&\n 'field' in f &&\n typeof (f as ComparisonFilter).field === 'string' &&\n 'op' in f &&\n typeof (f as ComparisonFilter).op === 'string' &&\n 'value' in f &&\n (f as ComparisonFilter).value !== undefined\n );\n }\n\n private _buildWhere(filter: LayerFilter): string | undefined {\n if (!filter) return undefined;\n if (typeof filter === 'string') return filter.trim();\n\n if (this._isBetweenFilter(filter)) {\n return `${filter.field} BETWEEN ${this._escapeValue(filter.from)} AND ${this._escapeValue(filter.to)}`;\n }\n if (this._isInFilter(filter)) {\n const vals = filter.values.map(v => this._escapeValue(v)).join(', ');\n return `${filter.field} IN (${vals})`;\n }\n if (this._isNullFilter(filter)) {\n return `${filter.field} ${filter.op}`;\n }\n if (this._isGroupFilter(filter)) {\n const built = (filter.filters as LayerFilter[])\n .map((f: LayerFilter) => this._buildWhere(f))\n .filter((s): s is string => Boolean(s));\n if (!built.length) return undefined;\n if (built.length === 1) return built[0];\n return `(${built.join(` ${filter.op} `)})`;\n }\n if (this._isComparisonFilter(filter)) {\n return `${filter.field} ${filter.op} ${this._escapeValue(filter.value)}`;\n }\n return undefined;\n }\n\n setLayers(arr: number[] | number): void {\n this.esriServiceOptions.layers = arr;\n this._updateSource();\n }\n\n setDate(from: Date | number, to: Date | number): void {\n this.esriServiceOptions.from = from;\n this.esriServiceOptions.to = to;\n this._updateSource();\n }\n\n setToken(token: string | null): void {\n (this.esriServiceOptions as any).token = token ?? undefined;\n this._updateSource();\n }\n\n setAttributionFromService(): Promise<void> {\n if (this._serviceMetadata) {\n updateAttribution(this._serviceMetadata.copyrightText || '', this._sourceId, this._map);\n return Promise.resolve();\n } else {\n return this.getMetadata().then(() => {\n updateAttribution(this._serviceMetadata?.copyrightText || '', this._sourceId, this._map);\n });\n }\n }\n\n getMetadata(): Promise<ServiceMetadata> {\n if (this._serviceMetadata !== null) return Promise.resolve(this._serviceMetadata);\n return new Promise((resolve, reject) => {\n getServiceDetails(\n this.esriServiceOptions.url,\n this.esriServiceOptions.fetchOptions,\n (this.esriServiceOptions as any).token\n )\n .then(data => {\n this._serviceMetadata = data;\n resolve(this._serviceMetadata);\n })\n .catch(err => reject(err));\n });\n }\n\n get _layersStrIdentify(): string | false {\n const layersStr = this._layersStr;\n return layersStr ? layersStr.replace('show', 'visible') : false;\n }\n\n async identify(\n lnglat: { lng: number; lat: number },\n returnGeometry: boolean = false\n ): Promise<unknown> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const canvas = (this._map as any).getCanvas();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bounds = (this._map as any).getBounds().toArray();\n\n const params = new URLSearchParams({\n sr: '4326',\n geometryType: 'esriGeometryPoint',\n geometry: JSON.stringify({\n x: lnglat.lng,\n y: lnglat.lat,\n spatialReference: {\n wkid: 4326,\n },\n }),\n tolerance: '3',\n returnGeometry: returnGeometry.toString(),\n imageDisplay: `${canvas.width},${canvas.height},${this.options.dpi}`,\n mapExtent: `${bounds[0][0]},${bounds[0][1]},${bounds[1][0]},${bounds[1][1]}`,\n layers: this._layersStrIdentify || '',\n f: 'json',\n });\n\n if (this._layerDefs) params.append('layerDefs', this._layerDefs);\n if (this._dynamicLayers) params.append('dynamicLayers', this._dynamicLayers);\n if (this._time) params.append('time', this._time);\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(\n `${this.esriServiceOptions.url}/identify?${params.toString()}`,\n this.esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Identify request failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Identify request failed: ${data.error.message}`);\n }\n\n return data;\n }\n\n // ========================================\n // Advanced Features\n // ========================================\n\n /** Set labeling configuration for a sublayer */\n setLayerLabels(layerId: number, labelingInfo: LayerLabelingInfo): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n\n if (idx >= 0) {\n next[idx] = {\n ...next[idx],\n drawingInfo: {\n ...next[idx].drawingInfo,\n labelingInfo: [labelingInfo],\n },\n };\n } else {\n next.push({\n id: layerId,\n drawingInfo: { labelingInfo: [labelingInfo] },\n });\n }\n\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n /** Toggle label visibility for a sublayer */\n setLayerLabelsVisible(layerId: number, visible: boolean): void {\n if (visible) {\n // If enabling labels but no labeling info exists, set a default\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const layer = Array.isArray(current) ? current.find(l => l.id === layerId) : null;\n\n if (!layer?.drawingInfo?.labelingInfo) {\n // Set a basic label configuration\n this.setLayerLabels(layerId, {\n labelExpression: '[OBJECTID]', // Default to object ID\n symbol: {\n type: 'esriTS',\n color: [0, 0, 0, 255],\n font: { family: 'Arial', size: 8 },\n },\n });\n }\n } else {\n // Remove labeling info to disable labels\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n\n if (idx >= 0) {\n const drawingInfo = { ...next[idx].drawingInfo };\n delete drawingInfo.labelingInfo;\n next[idx] = { ...next[idx], drawingInfo };\n\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n }\n }\n\n /** Set time options for a time-enabled sublayer */\n setLayerTimeOptions(layerId: number, timeOptions: LayerTimeOptions): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n const idx = next.findIndex(l => l.id === layerId);\n\n if (idx >= 0) {\n next[idx] = { ...next[idx], layerTimeOptions: timeOptions };\n } else {\n next.push({ id: layerId, layerTimeOptions: timeOptions });\n }\n\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n /** Animate through time periods for time-enabled layers */\n async animateTime(options: TimeAnimationOptions): Promise<void> {\n const { from, to, intervalMs, loop = false, onFrame, onComplete } = options;\n const totalDuration = to.getTime() - from.getTime();\n const steps = Math.ceil(totalDuration / intervalMs);\n\n return new Promise<void>(resolve => {\n let currentStep = 0;\n\n const animate = () => {\n if (currentStep >= steps && !loop) {\n onComplete?.();\n resolve();\n return;\n }\n\n const progress = (currentStep % steps) / steps;\n const currentTime = new Date(from.getTime() + progress * totalDuration);\n\n // Update service time extent\n this.esriServiceOptions.from = currentTime;\n this.esriServiceOptions.to = currentTime;\n this._updateSource();\n\n onFrame?.(currentTime, progress);\n currentStep++;\n\n setTimeout(animate, intervalMs);\n };\n\n animate();\n });\n }\n\n /** Get statistics for a sublayer */\n async getLayerStatistics(\n layerId: number,\n statisticFields: Array<{\n statisticType: 'count' | 'sum' | 'min' | 'max' | 'avg' | 'stddev' | 'var';\n onStatisticField: string;\n outStatisticFieldName: string;\n }>,\n options: {\n where?: string;\n groupByFieldsForStatistics?: string;\n } = {}\n ): Promise<StatisticResult[]> {\n const queryUrl = `${this.esriServiceOptions.url}/${layerId}/query`;\n const params = new URLSearchParams({\n f: 'json',\n where: options.where || '1=1',\n outStatistics: JSON.stringify(statisticFields),\n returnGeometry: 'false',\n });\n\n if (options.groupByFieldsForStatistics) {\n params.append('groupByFieldsForStatistics', options.groupByFieldsForStatistics);\n }\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${queryUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Statistics query failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Statistics query failed: ${data.error.message}`);\n }\n\n return data.features || [];\n }\n\n /** Query features from a specific sublayer */\n async queryLayerFeatures(layerId: number, options: LayerQueryOptions = {}): Promise<FeatureSet> {\n const queryUrl = `${this.esriServiceOptions.url}/${layerId}/query`;\n const params = new URLSearchParams({\n f: 'json',\n where: options.where || '1=1',\n returnGeometry: options.returnGeometry !== false ? 'true' : 'false',\n outFields: Array.isArray(options.outFields)\n ? options.outFields.join(',')\n : options.outFields || '*',\n });\n\n if (options.geometry) {\n params.append('geometry', JSON.stringify(options.geometry));\n params.append('geometryType', options.geometryType || 'esriGeometryEnvelope');\n params.append('spatialRel', options.spatialRel || 'esriSpatialRelIntersects');\n }\n\n if (options.orderByFields) {\n params.append('orderByFields', options.orderByFields);\n }\n\n if (options.resultOffset) {\n params.append('resultOffset', options.resultOffset.toString());\n }\n\n if (options.resultRecordCount) {\n params.append('resultRecordCount', options.resultRecordCount.toString());\n }\n\n if (options.returnCountOnly) {\n params.append('returnCountOnly', 'true');\n }\n\n if (options.returnIdsOnly) {\n params.append('returnIdsOnly', 'true');\n }\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${queryUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Layer query failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Layer query failed: ${data.error.message}`);\n }\n\n return data;\n }\n\n /** Export high-resolution map image */\n async exportMapImage(options: MapExportOptions): Promise<Blob> {\n const exportUrl = `${this.esriServiceOptions.url}/export`;\n const params = new URLSearchParams({\n f: 'image',\n bbox: options.bbox.join(','),\n size: options.size.join(','),\n format: options.format || 'png24',\n transparent: options.transparent !== false ? 'true' : 'false',\n dpi: (options.dpi || 96).toString(),\n bboxSR: (options.bboxSR || 3857).toString(),\n imageSR: (options.imageSR || 3857).toString(),\n });\n\n if (options.layerDefs) {\n params.append('layerDefs', JSON.stringify(options.layerDefs));\n }\n\n if (options.dynamicLayers) {\n const normalized = this._ensureAllVisibleLayers(options.dynamicLayers);\n params.append('dynamicLayers', JSON.stringify(normalized));\n }\n\n if (options.gdbVersion) {\n params.append('gdbVersion', options.gdbVersion);\n }\n\n if (options.historicMoment) {\n params.append('historicMoment', options.historicMoment.toString());\n }\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${exportUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Export failed: ${response.statusText}`);\n }\n\n return response.blob();\n }\n\n /** Generate legend information for layers */\n async generateLegend(layerIds?: number[]): Promise<LegendInfo[]> {\n const legendUrl = `${this.esriServiceOptions.url}/legend`;\n const params = new URLSearchParams({\n f: 'json',\n });\n\n if (layerIds?.length) {\n params.append('layers', layerIds.join(','));\n }\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${legendUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Legend generation failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Legend generation failed: ${data.error.message}`);\n }\n\n return data.layers || [];\n }\n\n /** Get detailed information about a specific layer */\n async getLayerInfo(layerId: number): Promise<LayerMetadata> {\n const layerUrl = `${this.esriServiceOptions.url}/${layerId}`;\n const params = new URLSearchParams({ f: 'json' });\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${layerUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Layer info request failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Layer info request failed: ${data.error.message}`);\n }\n\n return data;\n }\n\n /** Get field information for a layer */\n async getLayerFields(layerId: number): Promise<FieldInfo[]> {\n const layerInfo = await this.getLayerInfo(layerId);\n return layerInfo.fields || [];\n }\n\n /** Get spatial extent of a layer */\n async getLayerExtent(layerId: number): Promise<Extent> {\n const layerInfo = await this.getLayerInfo(layerId);\n if (!layerInfo.extent) {\n throw new Error(`No extent available for layer ${layerId}`);\n }\n return layerInfo.extent;\n }\n\n /** Discover all layers in the service */\n async discoverLayers(): Promise<LayerInfo[]> {\n const serviceUrl = this.esriServiceOptions.url;\n const params = new URLSearchParams({ f: 'json' });\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${serviceUrl}?${params.toString()}`);\n\n if (!response.ok) {\n throw new Error(`Service discovery failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Service discovery failed: ${data.error.message}`);\n }\n\n return data.layers || [];\n }\n\n /** Apply multiple layer operations in a single update */\n setBulkLayerProperties(operations: BatchLayerOperation[]): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n const next = Array.isArray(current) ? [...current] : [];\n\n // Process all operations\n for (const op of operations) {\n const idx = next.findIndex(l => l.id === op.layerId);\n const layer = idx >= 0 ? { ...next[idx] } : { id: op.layerId };\n\n switch (op.operation) {\n case 'visibility':\n layer.visible = op.value as boolean;\n break;\n case 'renderer':\n layer.drawingInfo = { ...layer.drawingInfo, renderer: op.value as EsriRenderer };\n break;\n case 'definition':\n layer.definitionExpression = op.value as string;\n break;\n case 'filter': {\n const where = this._buildWhere(op.value as LayerFilter);\n if (where) layer.definitionExpression = where;\n break;\n }\n case 'labels':\n layer.drawingInfo = {\n ...layer.drawingInfo,\n labelingInfo: op.value as LayerLabelingInfo[],\n };\n break;\n case 'time':\n layer.layerTimeOptions = op.value as LayerTimeOptions;\n break;\n }\n\n if (idx >= 0) {\n next[idx] = layer;\n } else {\n next.push(layer);\n }\n }\n\n // Ensure all visible layers are included\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(next);\n this._updateSource();\n }\n\n // Transaction-like updates\n private _pendingUpdates: DynamicLayer[] | null = null;\n\n /** Begin a batch update transaction */\n beginUpdate(): void {\n const current = (this.esriServiceOptions.dynamicLayers as DynamicLayer[] | false) || [];\n this._pendingUpdates = Array.isArray(current) ? [...current] : [];\n }\n\n /** Commit all pending updates */\n commitUpdate(): void {\n if (this._pendingUpdates) {\n this.esriServiceOptions.dynamicLayers = this._ensureAllVisibleLayers(this._pendingUpdates);\n this._pendingUpdates = null;\n this._updateSource();\n }\n }\n\n /** Rollback pending updates */\n rollbackUpdate(): void {\n this._pendingUpdates = null;\n }\n\n /** Check if currently in a transaction */\n get isInTransaction(): boolean {\n return this._pendingUpdates !== null;\n }\n\n update(): void {\n this._updateSource();\n }\n\n remove(): void {\n const map = this._map;\n if (!map || typeof map.removeSource !== 'function') {\n return;\n }\n\n try {\n // Guard against map whose style has already been destroyed\n if (!(map as unknown as { style?: unknown }).style) return;\n\n const mapWithStyle = map as unknown as {\n getStyle?: () => { layers?: Array<{ id: string; source?: string }> };\n };\n const mapLayerApi = map as unknown as {\n getLayer?: (id: string) => unknown;\n removeLayer?: (id: string) => void;\n };\n const mapSourceApi = map as unknown as {\n getSource?: (id: string) => unknown;\n };\n\n if (typeof mapWithStyle.getStyle === 'function') {\n const style = mapWithStyle.getStyle();\n const layers = style?.layers || [];\n layers.forEach(layer => {\n if (layer.source !== this._sourceId) return;\n if (\n typeof mapLayerApi.getLayer !== 'function' ||\n typeof mapLayerApi.removeLayer !== 'function'\n ) {\n return;\n }\n let hasLayer = false;\n try {\n hasLayer = Boolean(mapLayerApi.getLayer(layer.id));\n } catch {\n hasLayer = false;\n }\n if (!hasLayer) return;\n try {\n mapLayerApi.removeLayer(layer.id);\n } catch (error) {\n console.warn(`Failed to remove layer ${layer.id} for source ${this._sourceId}:`, error);\n }\n });\n }\n\n if (typeof mapSourceApi.getSource === 'function') {\n let hasSource = false;\n try {\n hasSource = Boolean(mapSourceApi.getSource(this._sourceId));\n } catch {\n hasSource = false;\n }\n\n if (hasSource) {\n try {\n map.removeSource(this._sourceId);\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n}\n","import { cleanTrailingSlash, getServiceDetails, updateAttribution } from '@/utils';\nimport type { Map, EsriServiceOptions, RasterSourceOptions, ServiceMetadata } from '@/types';\n\ninterface TiledMapServiceOptions extends EsriServiceOptions {\n fetchOptions?: RequestInit;\n}\n\ninterface RasterSource {\n type: 'raster';\n tiles: string[];\n tileSize?: number;\n attribution?: string;\n bounds?: number[];\n minzoom?: number;\n maxzoom?: number;\n}\n\nexport class TiledMapService {\n private _sourceId: string;\n private _map: Map;\n private _serviceMetadata: ServiceMetadata | null = null;\n\n public rasterSrcOptions?: RasterSourceOptions;\n public esriServiceOptions: TiledMapServiceOptions;\n\n constructor(\n sourceId: string,\n map: Map,\n esriServiceOptions: TiledMapServiceOptions,\n rasterSrcOptions?: RasterSourceOptions\n ) {\n if (!esriServiceOptions.url) {\n throw new Error('A url must be supplied as part of the esriServiceOptions object.');\n }\n\n esriServiceOptions.url = cleanTrailingSlash(esriServiceOptions.url);\n\n this._sourceId = sourceId;\n this._map = map;\n\n this.rasterSrcOptions = rasterSrcOptions;\n this.esriServiceOptions = esriServiceOptions;\n this._createSource();\n\n if (esriServiceOptions.getAttributionFromService) {\n this.setAttributionFromService().catch(() => {\n // Silently handle attribution fetch errors to prevent unhandled rejections\n });\n }\n }\n\n get _source(): RasterSource {\n return {\n ...this.rasterSrcOptions,\n type: 'raster',\n tiles: [\n (this.esriServiceOptions as any).token\n ? `${this.esriServiceOptions.url}/tile/{z}/{y}/{x}?token=${(this.esriServiceOptions as any).token}`\n : `${this.esriServiceOptions.url}/tile/{z}/{y}/{x}`,\n ],\n tileSize: this.rasterSrcOptions?.tileSize || 256,\n };\n }\n\n private _createSource(): void {\n // Check if source already exists before adding\n if (!this._map.getSource(this._sourceId)) {\n this._map.addSource(\n this._sourceId,\n this._source as unknown as Parameters<Map['addSource']>[1]\n );\n }\n }\n\n setToken(token: string | null): void {\n (this.esriServiceOptions as any).token = token ?? undefined;\n // Tiled sources need recreation to pick up new URL\n const src = this._map.getSource(this._sourceId) as any;\n if (src && src.setTiles) {\n src.setTiles(this._source.tiles);\n }\n }\n\n setAttributionFromService(): Promise<void> {\n if (this._serviceMetadata) {\n updateAttribution(this._serviceMetadata.copyrightText || '', this._sourceId, this._map);\n return Promise.resolve();\n } else {\n return this.getMetadata().then(() => {\n updateAttribution(this._serviceMetadata?.copyrightText || '', this._sourceId, this._map);\n });\n }\n }\n\n getMetadata(): Promise<ServiceMetadata> {\n if (this._serviceMetadata !== null) return Promise.resolve(this._serviceMetadata);\n return new Promise((resolve, reject) => {\n getServiceDetails(\n this.esriServiceOptions.url,\n this.esriServiceOptions.fetchOptions,\n (this.esriServiceOptions as any).token\n )\n .then(data => {\n this._serviceMetadata = data;\n resolve(data);\n })\n .catch(err => reject(err));\n });\n }\n\n update(): void {\n // Tiled sources use static tile URLs and don't support hot-updates.\n // This is a no-op to satisfy the common service interface.\n }\n\n remove(): void {\n // Guard against disposed or invalid map\n if (!this._map || typeof this._map.removeSource !== 'function') {\n return;\n }\n\n try {\n // Guard against map whose style has already been destroyed\n if (!(this._map as unknown as { style?: unknown }).style) return;\n\n // First, remove any layers that are using this source\n const mapWithStyle = this._map as unknown as {\n getStyle?: () => { layers?: Array<{ id: string; source?: string }> };\n getLayer?: (id: string) => unknown;\n };\n\n if (mapWithStyle.getStyle && typeof mapWithStyle.getLayer === 'function') {\n const style = mapWithStyle.getStyle();\n const layers = style?.layers || [];\n const getLayer = mapWithStyle.getLayer;\n layers.forEach(layer => {\n if (layer.source === this._sourceId) {\n try {\n if (getLayer(layer.id)) {\n this._map.removeLayer(layer.id);\n }\n } catch {\n // Layer may already be removed\n }\n }\n });\n }\n\n // Then check if source exists before trying to remove it\n if (typeof this._map.getSource === 'function') {\n const source = this._map.getSource(this._sourceId);\n if (source) {\n this._map.removeSource(this._sourceId);\n }\n }\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n}\n","import { cleanTrailingSlash, getServiceDetails, updateAttribution } from '@/utils';\nimport type { Map, ImageServiceOptions, RasterSourceOptions, ServiceMetadata } from '@/types';\n\ninterface ImageServiceExtendedOptions extends ImageServiceOptions {\n from?: Date | number;\n to?: Date | number;\n fetchOptions?: RequestInit;\n}\n\nexport class ImageService {\n private _sourceId: string;\n private _map: Map;\n private _defaultEsriOptions: Omit<\n Required<ImageServiceOptions>,\n 'url' | 'renderingRule' | 'mosaicRule' | 'bbox' | 'size' | 'bboxSR' | 'imageSR'\n >;\n private _serviceMetadata: ServiceMetadata | null = null;\n\n public rasterSrcOptions?: RasterSourceOptions;\n public esriServiceOptions: ImageServiceExtendedOptions;\n\n constructor(\n sourceId: string,\n map: Map,\n esriServiceOptions: ImageServiceExtendedOptions,\n rasterSrcOptions?: RasterSourceOptions\n ) {\n if (!esriServiceOptions.url) {\n throw new Error('A url must be supplied as part of the esriServiceOptions object.');\n }\n\n esriServiceOptions.url = cleanTrailingSlash(esriServiceOptions.url);\n\n this._sourceId = sourceId;\n this._map = map;\n\n this._defaultEsriOptions = {\n layers: false,\n layerDefs: false,\n dynamicLayers: false,\n format: 'jpgpng',\n dpi: 96,\n transparent: true,\n getAttributionFromService: true,\n time: false,\n };\n\n this.rasterSrcOptions = rasterSrcOptions;\n this.esriServiceOptions = esriServiceOptions;\n this._createSource();\n\n if (this.options.getAttributionFromService) {\n this.setAttributionFromService().catch(() => {\n // Silently handle attribution fetch errors to prevent unhandled rejections\n });\n }\n }\n\n get options(): Required<ImageServiceExtendedOptions> {\n return {\n ...this._defaultEsriOptions,\n ...this.esriServiceOptions,\n } as Required<ImageServiceExtendedOptions>;\n }\n\n get _time(): string | false {\n if (!this.options.to) return false;\n let from = this.options.from;\n let to = this.options.to;\n if (from instanceof Date) from = from.valueOf();\n if (to instanceof Date) to = to.valueOf();\n\n return `${from},${to}`;\n }\n\n get _source(): {\n type: 'raster';\n tiles: string[];\n tileSize: number;\n } & Partial<RasterSourceOptions> {\n const tileSize = this.rasterSrcOptions?.tileSize ?? 256;\n // These are the bare minimum parameters\n const params = new URLSearchParams({\n bboxSR: '3857',\n imageSR: '3857',\n format: this.options.format,\n dpi: this.options.dpi.toString(),\n size: `${tileSize},${tileSize}`,\n f: 'image',\n });\n\n // These are optional params\n if (this._time) params.append('time', this._time);\n if (this.options.mosaicRule)\n params.append('mosaicRule', JSON.stringify(this.options.mosaicRule));\n if (this.options.renderingRule)\n params.append('renderingRule', JSON.stringify(this.options.renderingRule));\n if ((this.esriServiceOptions as any).token) {\n params.append('token', (this.esriServiceOptions as any).token);\n }\n\n return {\n type: 'raster',\n tiles: [`${this.options.url}/exportImage?bbox={bbox-epsg-3857}&${params.toString()}`],\n tileSize,\n ...this.rasterSrcOptions,\n };\n }\n\n private _createSource(): void {\n // Check if source already exists before adding\n if (!this._map.getSource(this._sourceId)) {\n this._map.addSource(this._sourceId, this._source);\n }\n }\n\n // This requires hooking into some undocumented methods\n private _updateSource(): void {\n const src = this._map.getSource(this._sourceId) as any;\n if (!src) {\n // Source not yet added to map, nothing to update\n return;\n }\n src.tiles[0] = this._source.tiles[0];\n src._options = this._source;\n\n if (src.setTiles) {\n // New MapboxGL >= 2.13.0\n src.setTiles(this._source.tiles);\n } else if ((this._map as any).style.sourceCaches) {\n // Old MapboxGL and MaplibreGL\n (this._map as any).style.sourceCaches[this._sourceId].clearTiles();\n (this._map as any).style.sourceCaches[this._sourceId].update((this._map as any).transform);\n } else if ((this._map as any).style._otherSourceCaches) {\n (this._map as any).style._otherSourceCaches[this._sourceId].clearTiles();\n (this._map as any).style._otherSourceCaches[this._sourceId].update(\n (this._map as any).transform\n );\n }\n }\n\n setDate(from: Date | number, to: Date | number): void {\n this.esriServiceOptions.from = from;\n this.esriServiceOptions.to = to;\n this._updateSource();\n }\n\n setRenderingRule(rule: Record<string, unknown>): void {\n this.esriServiceOptions.renderingRule = rule;\n this._updateSource();\n }\n\n setMosaicRule(rule: Record<string, unknown>): void {\n this.esriServiceOptions.mosaicRule = rule;\n this._updateSource();\n }\n\n setToken(token: string | null): void {\n (this.esriServiceOptions as any).token = token ?? undefined;\n this._updateSource();\n }\n\n setAttributionFromService(): Promise<void> {\n if (this._serviceMetadata) {\n updateAttribution(this._serviceMetadata.copyrightText || '', this._sourceId, this._map);\n return Promise.resolve();\n } else {\n return this.getMetadata().then(() => {\n updateAttribution(this._serviceMetadata?.copyrightText || '', this._sourceId, this._map);\n });\n }\n }\n\n getMetadata(): Promise<ServiceMetadata> {\n if (this._serviceMetadata !== null) return Promise.resolve(this._serviceMetadata);\n return new Promise((resolve, reject) => {\n getServiceDetails(\n this.esriServiceOptions.url,\n this.esriServiceOptions.fetchOptions,\n (this.esriServiceOptions as any).token\n )\n .then(data => {\n this._serviceMetadata = data;\n resolve(this._serviceMetadata);\n })\n .catch(err => reject(err));\n });\n }\n\n async identify(\n lnglat: { lng: number; lat: number },\n returnGeometry: boolean = false\n ): Promise<unknown> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const canvas = (this._map as any).getCanvas();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bounds = (this._map as any).getBounds().toArray();\n\n const params = new URLSearchParams({\n sr: '4326',\n geometryType: 'esriGeometryPoint',\n geometry: JSON.stringify({\n x: lnglat.lng,\n y: lnglat.lat,\n spatialReference: {\n wkid: 4326,\n },\n }),\n tolerance: '3',\n returnGeometry: returnGeometry.toString(),\n imageDisplay: `${canvas.width},${canvas.height},${this.options.dpi}`,\n mapExtent: `${bounds[0][0]},${bounds[0][1]},${bounds[1][0]},${bounds[1][1]}`,\n f: 'json',\n });\n\n if (this._time) params.append('time', this._time);\n if ((this.esriServiceOptions as any).token) {\n params.append('token', (this.esriServiceOptions as any).token);\n }\n\n const response = await fetch(\n `${this.esriServiceOptions.url}/identify?${params.toString()}`,\n this.esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Identify request failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(`Identify request failed: ${data.error.message}`);\n }\n\n return data;\n }\n\n update(): void {\n this._updateSource();\n }\n\n remove(): void {\n if (this._map && typeof this._map.removeSource === 'function') {\n try {\n // Guard against map whose style has already been destroyed\n const mapWithStyle = this._map as unknown as {\n style?: unknown;\n getStyle?: () => { layers?: Array<{ id: string; source?: string }> };\n };\n if (!mapWithStyle.style) return;\n\n // First, remove any layers that are using this source\n if (mapWithStyle.getStyle) {\n const style = mapWithStyle.getStyle();\n const layers = style?.layers || [];\n layers.forEach(layer => {\n if (layer.source === this._sourceId && this._map.getLayer(layer.id)) {\n this._map.removeLayer(layer.id);\n }\n });\n }\n\n // Then check if source exists before trying to remove it\n if (this._map.getSource && this._map.getSource(this._sourceId)) {\n this._map.removeSource(this._sourceId);\n }\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n }\n}\n","/**\n * VectorBasemapStyle supports both modern slash form (arcgis/streets) and legacy colon form (ArcGIS:Streets).\n * The URL always uses the slash form expected by the Basemap Styles Service.\n *\n * Note: MapLibre GL v5+ may show vector tile parsing warnings with some Esri tiles.\n * These warnings are expected and do not affect map rendering functionality.\n */\n\n// Available Esri basemap style names\nexport type EsriBasemapStyleName =\n | 'arcgis/streets'\n | 'arcgis/topographic'\n | 'arcgis/navigation'\n | 'arcgis/streets-relief'\n | 'arcgis/dark-gray'\n | 'arcgis/light-gray'\n | 'arcgis/oceans'\n | 'arcgis/imagery'\n | 'arcgis/streets-night'\n // Legacy colon form (for backwards compatibility)\n | 'arcgis:streets'\n | 'arcgis:topographic'\n | 'arcgis:navigation'\n | 'arcgis:streetsrelief'\n | 'arcgis:darkgray'\n | 'arcgis:lightgray'\n | 'arcgis:oceans'\n | 'arcgis:imagery'\n | 'arcgis:streetsnight'\n // Allow custom enterprise styles\n | string;\n\nexport interface VectorBasemapStyleAuthOptions {\n apiKey?: string; // API key for v1 host (basemaps-api)\n token?: string; // OAuth / user token for v2 host (basemapstyles-api)\n version?: 'v1' | 'v2'; // Force version; inferred if not supplied\n host?: string; // Override host (useful for enterprise / future domains)\n echoToken?: boolean; // Only for v2 token endpoints (default false)\n format?: 'json' | 'style'; // Output format (v2 default json, v1 uses style semantics)\n language?: string; // Optional locale\n worldview?: string; // Optional worldview parameter\n itemId?: string; // Custom style via portal item ID\n}\n\nexport class VectorBasemapStyle {\n public styleName: string; // original user-supplied value (for display / debugging)\n private _canonical: string; // normalized slash form used in URL\n private _apiKey?: string;\n private _token?: string;\n private _version: 'v1' | 'v2';\n private _host: string;\n private _format: 'json' | 'style';\n private _language?: string;\n private _worldview?: string;\n private _itemId?: string;\n\n // Mapping from legacy colon form to canonical slash form\n private static readonly COLON_TO_SLASH: Record<string, string> = {\n 'arcgis:streets': 'arcgis/streets',\n 'arcgis:topographic': 'arcgis/topographic',\n 'arcgis:navigation': 'arcgis/navigation',\n 'arcgis:streetsrelief': 'arcgis/streets-relief',\n 'arcgis:darkgray': 'arcgis/dark-gray',\n 'arcgis:lightgray': 'arcgis/light-gray',\n 'arcgis:oceans': 'arcgis/oceans',\n 'arcgis:imagery': 'arcgis/imagery',\n 'arcgis:streetsnight': 'arcgis/streets-night',\n };\n\n // Overload signature: (styleName, apiKeyString) or (styleName, options)\n constructor(styleName?: EsriBasemapStyleName, auth?: string | VectorBasemapStyleAuthOptions) {\n let opts: VectorBasemapStyleAuthOptions;\n if (typeof auth === 'string') {\n opts = { apiKey: auth };\n } else {\n opts = auth || {};\n }\n const provided =\n styleName && styleName.trim() ? styleName : opts.itemId ? '' : 'arcgis/streets';\n this.styleName = provided;\n this._canonical = VectorBasemapStyle._toCanonical(provided);\n\n this._apiKey = opts.apiKey;\n this._token = opts.token;\n this._language = opts.language;\n this._worldview = opts.worldview;\n this._itemId = opts.itemId;\n\n // Infer version: token => v2, else apiKey => v1\n this._version = opts.version || (this._token ? 'v2' : 'v1');\n // Determine host based on version if not overridden\n this._host =\n opts.host ||\n (this._version === 'v2'\n ? 'https://basemapstyles-api.arcgis.com'\n : 'https://basemaps-api.arcgis.com');\n // For v2 we default to 'style' so the response is directly consumable by map.setStyle\n this._format = opts.format || 'style';\n\n if (!this._apiKey && !this._token) {\n // Keep legacy error string for backwards compatibility with existing tests / consumers\n throw new Error('An Esri API Key must be supplied to consume vector basemap styles');\n }\n }\n\n get styleUrl(): string {\n // Custom style via portal item ID\n if (this._itemId) {\n const portalHost = this._host.includes('basemap') ? 'https://www.arcgis.com' : this._host;\n const params = new URLSearchParams();\n if (this._token) params.set('token', this._token);\n if (this._apiKey) params.set('token', this._apiKey);\n const qs = params.toString();\n return `${portalHost}/sharing/rest/content/items/${this._itemId}/resources/styles/root.json${qs ? '?' + qs : ''}`;\n }\n\n // v1 pattern: https://basemaps-api.arcgis.com/arcgis/rest/services/styles/{id}?type=style&apiKey=KEY\n // v2 pattern: https://basemapstyles-api.arcgis.com/arcgis/rest/services/styles/v2/styles/{id}?f=json&token=TOKEN&echoToken=false\n if (this._version === 'v2') {\n const params = new URLSearchParams();\n params.set('f', this._format); // usually 'style'\n if (this._token) params.set('token', this._token);\n if (this._language) params.set('language', this._language);\n if (this._worldview) params.set('worldview', this._worldview);\n return `${this._host}/arcgis/rest/services/styles/v2/styles/${this._canonical}?${params.toString()}`;\n }\n // v1 (apiKey)\n const params = new URLSearchParams();\n params.set('type', 'style');\n if (this._apiKey) params.set('apiKey', this._apiKey);\n if (this._language) params.set('language', this._language);\n if (this._worldview) params.set('worldview', this._worldview);\n return `${this._host}/arcgis/rest/services/styles/v1/styles/${this._canonical}?${params.toString()}`;\n }\n\n setStyle(styleName: EsriBasemapStyleName): void {\n if (!styleName) return;\n this.styleName = styleName;\n this._canonical = VectorBasemapStyle._toCanonical(styleName);\n }\n\n update(): void {}\n remove(): void {}\n\n /**\n * Simple wrapper to apply a basemap style to a MapLibre/Mapbox map.\n *\n * @param map - MapLibre GL or Mapbox GL map instance with setStyle method\n * @param styleName - Esri style name (e.g., 'arcgis/streets', 'arcgis/topographic')\n * @param auth - Authentication options (API key or token)\n *\n * @example\n * // Using API key\n * VectorBasemapStyle.applyStyle(map, 'arcgis/streets', { apiKey: 'your-api-key' });\n *\n * // Using token\n * VectorBasemapStyle.applyStyle(map, 'arcgis/topographic', { token: 'your-token' });\n */\n static applyStyle(\n map: { setStyle: (style: string) => void },\n styleName: EsriBasemapStyleName,\n auth: VectorBasemapStyleAuthOptions\n ): void {\n const vectorStyle = new VectorBasemapStyle(styleName, auth);\n map.setStyle(vectorStyle.styleUrl);\n }\n\n private static _toCanonical(name: string): string {\n if (!name) return 'arcgis/streets';\n // Already slash form\n if (name.includes('/')) return name;\n const lower = name.toLowerCase();\n if (this.COLON_TO_SLASH[lower]) return this.COLON_TO_SLASH[lower];\n // If it looks like ArcGIS:Token (legacy) attempt smart conversion\n if (/^arcgis:/i.test(name)) {\n const token = name.split(':')[1];\n if (token) {\n const slug = token\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase();\n return `arcgis/${slug}`;\n }\n }\n return name; // custom enterprise style: leave untouched (caller controls format)\n }\n}\n","import { cleanTrailingSlash, getServiceDetails } from '@/utils';\nimport type { Map, VectorTileServiceOptions, VectorSourceOptions, ServiceMetadata } from '@/types';\n\ninterface VectorTileServiceExtendedOptions extends VectorTileServiceOptions {\n useDefaultStyle?: boolean;\n fetchOptions?: RequestInit;\n}\n\ninterface StyleLayoutPaint {\n [key: string]: unknown;\n}\n\ninterface StyleData {\n type: string;\n // Mapbox layer definition fields\n source?: string;\n 'source-layer': string;\n layout?: StyleLayoutPaint;\n paint?: StyleLayoutPaint;\n}\n\nexport class VectorTileService {\n private _sourceId: string;\n private _map: Map;\n private _defaultEsriOptions: { useDefaultStyle: boolean };\n private _serviceMetadata: ServiceMetadata | null = null;\n private _defaultStyleData: StyleData | null = null;\n\n public vectorSrcOptions?: VectorSourceOptions;\n public esriServiceOptions: VectorTileServiceExtendedOptions;\n\n constructor(\n sourceId: string,\n map: Map,\n esriServiceOptions: VectorTileServiceExtendedOptions,\n vectorSrcOptions?: VectorSourceOptions\n ) {\n if (!esriServiceOptions.url) {\n throw new Error('A url must be supplied as part of the esriServiceOptions object.');\n }\n\n esriServiceOptions.url = cleanTrailingSlash(esriServiceOptions.url);\n\n this._sourceId = sourceId;\n this._map = map;\n\n this._defaultEsriOptions = {\n useDefaultStyle: true,\n };\n\n this.vectorSrcOptions = vectorSrcOptions;\n this.esriServiceOptions = esriServiceOptions;\n\n this._createSource();\n }\n\n get options(): Required<VectorTileServiceExtendedOptions> {\n return {\n ...this._defaultEsriOptions,\n ...this.esriServiceOptions,\n } as Required<VectorTileServiceExtendedOptions>;\n }\n\n get _tileUrl(): string {\n if (this._serviceMetadata === null) return '/tile/{z}/{y}/{x}.pbf';\n return this._serviceMetadata.tiles?.[0] || '/tile/{z}/{y}/{x}.pbf';\n }\n\n get _source(): VectorSourceOptions & { type: 'vector'; tiles: string[] } {\n return {\n ...(this.vectorSrcOptions || {}),\n type: 'vector',\n tiles: [`${this.options.url}${this._tileUrl}`],\n } as VectorSourceOptions & { type: 'vector'; tiles: string[] };\n }\n\n private _createSource(): void {\n // Check if source already exists before adding\n if (!this._map.getSource(this._sourceId)) {\n this._map.addSource(\n this._sourceId,\n this._source as unknown as Parameters<Map['addSource']>[1]\n );\n }\n }\n\n private _mapToLocalSource(style: StyleData): StyleData {\n return {\n type: style.type,\n source: this._sourceId,\n 'source-layer': style['source-layer'],\n layout: style.layout,\n paint: style.paint,\n };\n }\n\n get defaultStyle(): StyleData {\n // Consumers should only call after getStyle resolves\n return this._mapToLocalSource(this._defaultStyleData!);\n }\n\n get _styleUrl(): string {\n // Return a RELATIVE path which will be prefixed with options.url during fetch\n // ArcGIS VectorTileServer typically exposes defaultStyles like 'resources/styles/root.json'\n if (this._serviceMetadata === null) return 'resources/styles/root.json';\n return this._serviceMetadata.defaultStyles || 'resources/styles/root.json';\n }\n\n getStyle(): Promise<StyleData> {\n // Always resolve the mapped defaultStyle so the 'source' equals this._sourceId\n if (this._defaultStyleData !== null) return Promise.resolve(this.defaultStyle);\n return new Promise((resolve, reject) => {\n const load = () =>\n this._retrieveStyle()\n .then(() => resolve(this.defaultStyle))\n .catch(error => reject(error));\n\n if (this._serviceMetadata === null) {\n this.getMetadata()\n .then(() => load())\n .catch(error => reject(error));\n } else {\n load();\n }\n });\n }\n\n private _retrieveStyle(): Promise<void> {\n return new Promise((resolve, reject) => {\n fetch(`${this.options.url}/${this._styleUrl}`, this.esriServiceOptions.fetchOptions)\n .then(response => {\n if (!response.ok) throw new Error(`Failed to fetch style: ${response.status}`);\n return response.json();\n })\n .then(data => {\n if (!data || !Array.isArray(data.layers) || data.layers.length === 0) {\n throw new Error('VectorTile style document is missing layers.');\n }\n // Use the first layer as a simple default style for the demo\n this._defaultStyleData = data.layers[0];\n resolve();\n })\n .catch(error => reject(error));\n });\n }\n\n getMetadata(): Promise<ServiceMetadata> {\n if (this._serviceMetadata !== null) return Promise.resolve(this._serviceMetadata);\n return new Promise((resolve, reject) => {\n getServiceDetails(this.esriServiceOptions.url, this.esriServiceOptions.fetchOptions)\n .then(data => {\n this._serviceMetadata = data;\n resolve(this._serviceMetadata);\n })\n .catch(err => reject(err));\n });\n }\n\n update(): void {\n // Vector tile services don't need dynamic updates like dynamic services\n }\n\n remove(): void {\n const map = this._map;\n if (!map || typeof map.removeSource !== 'function') {\n return;\n }\n\n try {\n // Guard against map whose style has already been destroyed\n if (!(map as unknown as { style?: unknown }).style) return;\n\n const mapWithStyle = map as unknown as {\n getStyle?: () => { layers?: Array<{ id: string; source?: string }> };\n };\n const mapLayerApi = map as unknown as {\n getLayer?: (id: string) => unknown;\n removeLayer?: (id: string) => void;\n };\n const mapSourceApi = map as unknown as {\n getSource?: (id: string) => unknown;\n };\n\n if (typeof mapWithStyle.getStyle === 'function') {\n const style = mapWithStyle.getStyle();\n const layers = style?.layers || [];\n layers.forEach(layer => {\n if (layer.source !== this._sourceId) return;\n if (\n typeof mapLayerApi.getLayer !== 'function' ||\n typeof mapLayerApi.removeLayer !== 'function'\n ) {\n return;\n }\n let hasLayer = false;\n try {\n hasLayer = Boolean(mapLayerApi.getLayer(layer.id));\n } catch {\n hasLayer = false;\n }\n if (!hasLayer) return;\n try {\n mapLayerApi.removeLayer(layer.id);\n } catch (error) {\n console.warn(`Failed to remove layer ${layer.id} for source ${this._sourceId}:`, error);\n }\n });\n }\n\n if (typeof mapSourceApi.getSource === 'function') {\n let hasSource = false;\n try {\n hasSource = Boolean(mapSourceApi.getSource(this._sourceId));\n } catch {\n hasSource = false;\n }\n\n if (hasSource) {\n try {\n map.removeSource(this._sourceId);\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n}\n","/**\n * FeatureService - Tile-based feature loading from ArcGIS FeatureServers\n *\n * This implementation is based on mapbox-gl-arcgis-featureserver by Rowan Winsemius\n * @see https://github.com/rowanwins/mapbox-gl-arcgis-featureserver\n *\n * Key features:\n * - Prioritizes PBF format for minimal payload size (requires ArcGIS Server 10.7+)\n * - Falls back to GeoJSON if PBF is not supported\n * - Uses tiled requests for efficient data loading\n * - Client-side feature deduplication\n * - Service bounds detection and coordinate projection\n */\n\nimport * as tilebelt from '@mapbox/tilebelt';\nimport tileDecode from 'arcgis-pbf-parser';\nimport { cleanTrailingSlash, updateAttribution } from '@/utils';\nimport type {\n Map,\n FeatureServiceOptions,\n ServiceMetadata,\n Extent,\n EditResult,\n ApplyEditsResult,\n AttachmentInfo,\n} from '@/types';\n\n// Extended options for FeatureService\nexport interface FeatureServiceExtendedOptions extends FeatureServiceOptions {\n fetchOptions?: RequestInit;\n /** Use a static zoom level for tile requests instead of dynamic */\n useStaticZoomLevel?: boolean;\n /** Minimum zoom level for data requests (default: 7 if useStaticZoomLevel, else 2) */\n minZoom?: number;\n /** Simplification factor for geometry (0-1, default: 0.3) */\n simplifyFactor?: number;\n /** Decimal precision for coordinates (default: 8) */\n precision?: number;\n /** Time filter: start date */\n from?: Date | number | null;\n /** Time filter: end date */\n to?: Date | number | null;\n /** Set attribution from service metadata (default: true) */\n setAttributionFromService?: boolean;\n /** Use service bounds to limit tile requests (default: true) */\n useServiceBounds?: boolean;\n /** Custom projection endpoint URL */\n projectionEndpoint?: string;\n /** API key sent via X-Esri-Authorization header */\n apiKey?: string;\n}\n\ninterface GeoJSONSourceOptions {\n attribution?: string;\n buffer?: number;\n cluster?: boolean;\n clusterMaxZoom?: number;\n clusterMinPoints?: number;\n clusterProperties?: Record<string, unknown>;\n clusterRadius?: number;\n data?: string | GeoJSON.FeatureCollection;\n generateId?: boolean;\n lineMetrics?: boolean;\n maxzoom?: number;\n promoteId?: string | { [key: string]: string };\n tolerance?: number;\n}\n\ninterface StyleData {\n type: string;\n source?: string;\n 'source-layer'?: string;\n layout?: Record<string, unknown>;\n paint?: Record<string, unknown>;\n}\n\ninterface ExtendedServiceMetadata extends ServiceMetadata {\n supportedQueryFormats?: string;\n uniqueIdField?: { name: string; type: string };\n extent?: Extent;\n geometryType?: string;\n name?: string;\n}\n\nexport class FeatureService {\n private _sourceId: string;\n private _map: Map;\n private _tileIndices: globalThis.Map<number, globalThis.Map<string, boolean>>;\n private _featureIndices: globalThis.Map<number, globalThis.Map<string | number, boolean>>;\n private _featureCollections: globalThis.Map<number, GeoJSON.FeatureCollection>;\n private _esriServiceOptions: Required<\n Pick<\n FeatureServiceExtendedOptions,\n | 'url'\n | 'useStaticZoomLevel'\n | 'minZoom'\n | 'simplifyFactor'\n | 'precision'\n | 'where'\n | 'outFields'\n | 'setAttributionFromService'\n | 'useServiceBounds'\n | 'projectionEndpoint'\n >\n > &\n Omit<FeatureServiceExtendedOptions, 'url'>;\n private _fallbackProjectionEndpoint: string;\n private _serviceMetadata: ExtendedServiceMetadata | null = null;\n private _maxExtent: [number, number, number, number];\n private _boundEvent: (() => void) | null = null;\n private _format: 'pbf' | 'geojson' = 'pbf';\n private _sourceReadyResolve: (() => void) | null = null;\n private _sourceReadyReject: ((error: Error) => void) | null = null;\n private _eventListeners: Record<string, Array<(event: unknown) => void>> = {};\n\n /**\n * Promise that resolves when the source has been successfully added to the map\n * and is ready to receive data.\n */\n public sourceReady: Promise<void>;\n\n /**\n * The GeoJSON source options passed to the constructor\n */\n public geojsonSourceOptions: GeoJSONSourceOptions;\n\n constructor(\n sourceId: string,\n map: Map,\n arcgisOptions: FeatureServiceExtendedOptions,\n geojsonSourceOptions?: GeoJSONSourceOptions\n ) {\n if (!sourceId || !map || !arcgisOptions) {\n throw new Error(\n 'Source id, map and arcgisOptions must be supplied as the first three arguments.'\n );\n }\n if (!arcgisOptions.url) {\n throw new Error('A url must be supplied as part of the esriServiceOptions object.');\n }\n\n this._sourceId = sourceId;\n this._map = map;\n\n // Initialize tile/feature tracking maps\n this._tileIndices = new globalThis.Map();\n this._featureIndices = new globalThis.Map();\n this._featureCollections = new globalThis.Map();\n\n // Clean URL and set up options\n const cleanedUrl = cleanTrailingSlash(arcgisOptions.url);\n\n this._esriServiceOptions = {\n useStaticZoomLevel: false,\n minZoom: arcgisOptions.useStaticZoomLevel ? 7 : 2,\n simplifyFactor: 0.3,\n precision: 8,\n where: '1=1',\n to: null,\n from: null,\n outFields: '*',\n setAttributionFromService: true,\n useServiceBounds: true,\n projectionEndpoint: `${cleanedUrl.split('rest/services')[0]}rest/services/Geometry/GeometryServer/project`,\n token: '',\n fetchOptions: undefined,\n ...arcgisOptions,\n url: cleanedUrl,\n };\n\n this._fallbackProjectionEndpoint =\n 'https://tasks.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer/project';\n this._maxExtent = [-Infinity, -Infinity, Infinity, Infinity];\n\n this.geojsonSourceOptions = geojsonSourceOptions || {};\n\n // Create the sourceReady promise\n this.sourceReady = new Promise<void>((resolve, reject) => {\n this._sourceReadyResolve = resolve;\n this._sourceReadyReject = reject;\n });\n\n // Add GeoJSON source to map\n this._map.addSource(sourceId, {\n type: 'geojson' as const,\n data: this._getBlankFc(),\n ...this.geojsonSourceOptions,\n });\n\n // Initialize the service\n this._initialize();\n }\n\n private async _initialize(): Promise<void> {\n try {\n await this._getServiceMetadata();\n\n if (!this.supportsPbf) {\n if (!this.supportsGeojson) {\n this._map.removeSource(this._sourceId);\n const error = new Error('Server does not support PBF or GeoJSON query formats.');\n if (this._sourceReadyReject) this._sourceReadyReject(error);\n throw error;\n }\n this._format = 'geojson';\n }\n\n if (this._esriServiceOptions.useServiceBounds && this._serviceMetadata?.extent) {\n const serviceExtent = this._serviceMetadata.extent;\n if (serviceExtent.spatialReference?.wkid === 4326) {\n this._setBounds([\n serviceExtent.xmin,\n serviceExtent.ymin,\n serviceExtent.xmax,\n serviceExtent.ymax,\n ]);\n } else {\n await this._projectBounds();\n }\n }\n\n // Ensure unique ID field is included in outFields\n if (\n this._esriServiceOptions.outFields !== '*' &&\n this._serviceMetadata?.uniqueIdField?.name\n ) {\n const currentFields = this._esriServiceOptions.outFields;\n const uniqueIdField = this._serviceMetadata.uniqueIdField.name;\n if (typeof currentFields === 'string') {\n if (!currentFields.includes(uniqueIdField)) {\n this._esriServiceOptions.outFields = `${currentFields},${uniqueIdField}`;\n }\n } else if (Array.isArray(currentFields)) {\n if (!currentFields.includes(uniqueIdField)) {\n this._esriServiceOptions.outFields = [...currentFields, uniqueIdField].join(',');\n }\n }\n }\n\n this._setAttribution();\n this.enableRequests();\n this._clearAndRefreshTiles();\n\n if (this._sourceReadyResolve) this._sourceReadyResolve();\n } catch (error) {\n const isTestEnvironment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'test';\n if (!isTestEnvironment) {\n console.error('Error initializing FeatureService:', error);\n }\n if (this._sourceReadyReject && error instanceof Error) {\n this._sourceReadyReject(error);\n }\n }\n }\n\n /**\n * Remove the source and clean up event listeners\n */\n remove(): void {\n this.disableRequests();\n if (this._map && typeof this._map.removeSource === 'function') {\n try {\n // Guard against map whose style has already been destroyed\n const mapWithStyle = this._map as unknown as {\n style?: unknown;\n getStyle?: () => { layers?: Array<{ id: string; source?: string }> };\n };\n if (!mapWithStyle.style) return;\n\n // First, remove any layers that are using this source\n if (mapWithStyle.getStyle) {\n const style = mapWithStyle.getStyle();\n const layers = style?.layers || [];\n layers.forEach(layer => {\n if (\n layer.source === this._sourceId &&\n this._map.getLayer &&\n this._map.getLayer(layer.id)\n ) {\n this._map.removeLayer(layer.id);\n }\n });\n }\n\n if (this._map.getSource && this._map.getSource(this._sourceId)) {\n this._map.removeSource(this._sourceId);\n }\n } catch (error) {\n console.warn(`Failed to remove source ${this._sourceId}:`, error);\n }\n }\n }\n\n /** Alias for remove() for API compatibility */\n destroySource(): void {\n this.remove();\n }\n\n private _getBlankFc(): GeoJSON.FeatureCollection {\n return {\n type: 'FeatureCollection',\n features: [],\n };\n }\n\n private _setBounds(bounds: [number, number, number, number]): void {\n this._maxExtent = bounds;\n }\n\n /** Check if service supports GeoJSON format */\n get supportsGeojson(): boolean {\n return (this._serviceMetadata?.supportedQueryFormats?.indexOf('geoJSON') ?? -1) > -1;\n }\n\n /** Check if service supports PBF format */\n get supportsPbf(): boolean {\n return (this._serviceMetadata?.supportedQueryFormats?.indexOf('PBF') ?? -1) > -1;\n }\n\n /** Get the service metadata */\n get serviceMetadata(): ExtendedServiceMetadata | null {\n return this._serviceMetadata;\n }\n\n /** Get the source object from the map */\n get _source(): unknown {\n return this._map.getSource(this._sourceId);\n }\n\n /** Get the current query URL */\n get _url(): string {\n return this._esriServiceOptions.url;\n }\n\n /** Get the esri service options */\n get esriServiceOptions(): FeatureServiceExtendedOptions {\n return this._esriServiceOptions;\n }\n\n /** Get default style based on geometry type */\n get defaultStyle(): StyleData {\n const geometryType = String(this._serviceMetadata?.geometryType || 'esriGeometryPoint');\n\n const baseStyle: Partial<StyleData> = {\n source: this._sourceId,\n };\n\n if (geometryType.includes('Point')) {\n return {\n type: 'circle',\n ...baseStyle,\n paint: {\n 'circle-radius': 4,\n 'circle-color': '#3b82f6',\n 'circle-stroke-color': '#1e40af',\n 'circle-stroke-width': 1,\n },\n };\n } else if (geometryType.includes('Polyline')) {\n return {\n type: 'line',\n ...baseStyle,\n paint: {\n 'line-color': '#3b82f6',\n 'line-width': 2,\n },\n };\n } else if (geometryType.includes('Polygon')) {\n return {\n type: 'fill',\n ...baseStyle,\n paint: {\n 'fill-color': 'rgba(59, 130, 246, 0.4)',\n 'fill-outline-color': '#1e40af',\n },\n };\n }\n\n // Default to circle for unknown geometry types\n return {\n type: 'circle',\n ...baseStyle,\n paint: {\n 'circle-radius': 4,\n 'circle-color': '#3b82f6',\n 'circle-stroke-color': '#1e40af',\n 'circle-stroke-width': 1,\n },\n };\n }\n\n /** Get style, fetching metadata if needed */\n async getStyle(): Promise<StyleData> {\n if (this._serviceMetadata) {\n return this.defaultStyle;\n }\n await this._getServiceMetadata();\n return this.defaultStyle;\n }\n\n /** Disable map event listeners */\n disableRequests(): void {\n if (this._boundEvent) {\n this._map.off('moveend', this._boundEvent);\n this._boundEvent = null;\n }\n }\n\n /** Enable map event listeners */\n enableRequests(): void {\n this._boundEvent = this._findAndMapData.bind(this);\n this._map.on('moveend', this._boundEvent);\n }\n\n private _clearAndRefreshTiles(): void {\n this._tileIndices = new globalThis.Map();\n this._featureIndices = new globalThis.Map();\n this._featureCollections = new globalThis.Map();\n this._findAndMapData();\n }\n\n /**\n * Set the WHERE clause filter\n */\n setWhere(newWhere: string): void {\n this._esriServiceOptions.where = newWhere;\n this._clearAndRefreshTiles();\n }\n\n /**\n * Clear the WHERE clause filter\n */\n clearWhere(): void {\n this._esriServiceOptions.where = '1=1';\n this._clearAndRefreshTiles();\n }\n\n /**\n * Set a date/time filter\n */\n setDate(to: Date | number | null, from?: Date | number | null): void {\n this._esriServiceOptions.to = to;\n this._esriServiceOptions.from = from ?? null;\n this._clearAndRefreshTiles();\n }\n\n /**\n * Set the authentication token\n */\n setToken(token: string | null): void {\n this._esriServiceOptions.token = token ?? '';\n this._clearAndRefreshTiles();\n }\n\n /**\n * Set output fields\n */\n setOutFields(fields: string | string[]): void {\n this._esriServiceOptions.outFields = Array.isArray(fields) ? fields.join(',') : fields;\n this._clearAndRefreshTiles();\n }\n\n private _createOrGetTileIndex(zoomLevel: number): globalThis.Map<string, boolean> {\n const existingZoomIndex = this._tileIndices.get(zoomLevel);\n if (existingZoomIndex) return existingZoomIndex;\n const newIndex = new globalThis.Map<string, boolean>();\n this._tileIndices.set(zoomLevel, newIndex);\n return newIndex;\n }\n\n private _createOrGetFeatureCollection(zoomLevel: number): GeoJSON.FeatureCollection {\n const existingZoomIndex = this._featureCollections.get(zoomLevel);\n if (existingZoomIndex) return existingZoomIndex;\n const fc = this._getBlankFc();\n this._featureCollections.set(zoomLevel, fc);\n return fc;\n }\n\n private _createOrGetFeatureIdIndex(zoomLevel: number): globalThis.Map<string | number, boolean> {\n const existingFeatureIdIndex = this._featureIndices.get(zoomLevel);\n if (existingFeatureIdIndex) return existingFeatureIdIndex;\n const newFeatureIdIndex = new globalThis.Map<string | number, boolean>();\n this._featureIndices.set(zoomLevel, newFeatureIdIndex);\n return newFeatureIdIndex;\n }\n\n private async _findAndMapData(): Promise<void> {\n const z = this._map.getZoom();\n\n if (z < this._esriServiceOptions.minZoom) {\n return;\n }\n\n const bounds = this._map.getBounds();\n if (!bounds) return;\n\n const boundsArray = bounds.toArray();\n const primaryTile = tilebelt.bboxToTile([\n boundsArray[0][0],\n boundsArray[0][1],\n boundsArray[1][0],\n boundsArray[1][1],\n ]) as [number, number, number];\n\n if (this._esriServiceOptions.useServiceBounds) {\n if (\n this._maxExtent[0] !== -Infinity &&\n !this._doesTileOverlapBbox(this._maxExtent, boundsArray)\n ) {\n return;\n }\n }\n\n // Round to nearest even zoom level to reuse data across zooms\n const zoomLevel = this._esriServiceOptions.useStaticZoomLevel\n ? this._esriServiceOptions.minZoom\n : 2 * Math.floor(z / 2);\n\n const zoomLevelIndex = this._createOrGetTileIndex(zoomLevel);\n const featureIdIndex = this._createOrGetFeatureIdIndex(zoomLevel);\n const fc = this._createOrGetFeatureCollection(zoomLevel);\n\n let tilesToRequest: [number, number, number][] = [];\n\n if (primaryTile[2] < zoomLevel) {\n let candidateTiles = tilebelt.getChildren(primaryTile) as [number, number, number][];\n let minZoomOfCandidates = candidateTiles[0][2];\n\n while (minZoomOfCandidates < zoomLevel) {\n const newCandidateTiles: [number, number, number][] = [];\n candidateTiles.forEach(t => {\n newCandidateTiles.push(...(tilebelt.getChildren(t) as [number, number, number][]));\n });\n candidateTiles = newCandidateTiles;\n minZoomOfCandidates = candidateTiles[0][2];\n }\n\n for (let index = 0; index < candidateTiles.length; index++) {\n if (this._doesTileOverlapBbox(candidateTiles[index], boundsArray)) {\n tilesToRequest.push(candidateTiles[index]);\n }\n }\n } else {\n tilesToRequest.push(primaryTile);\n }\n\n // Filter out already fetched tiles\n tilesToRequest = tilesToRequest.filter(tile => {\n const quadKey = tilebelt.tileToQuadkey(tile);\n if (zoomLevelIndex.has(quadKey)) {\n return false;\n }\n zoomLevelIndex.set(quadKey, true);\n return true;\n });\n\n if (tilesToRequest.length === 0) {\n this._updateFcOnMap(fc);\n return;\n }\n\n // Calculate tolerance for simplification\n const mapWidth = Math.abs(boundsArray[1][0] - boundsArray[0][0]);\n const canvas = this._map.getCanvas();\n const tolerance = (mapWidth / canvas.width) * this._esriServiceOptions.simplifyFactor;\n\n await this._loadTiles(tilesToRequest, tolerance, featureIdIndex, fc);\n this._updateFcOnMap(fc);\n }\n\n private async _loadTiles(\n tilesToRequest: [number, number, number][],\n tolerance: number,\n featureIdIndex: globalThis.Map<string | number, boolean>,\n fc: GeoJSON.FeatureCollection\n ): Promise<void> {\n const promises = tilesToRequest.map(t => this._getTile(t, tolerance));\n const featureCollections = await Promise.all(promises);\n\n featureCollections.forEach(tileFc => {\n if (tileFc) this._iterateItems(tileFc, featureIdIndex, fc);\n });\n }\n\n private _iterateItems(\n tileFc: GeoJSON.FeatureCollection | null | undefined,\n featureIdIndex: globalThis.Map<string | number, boolean>,\n fc: GeoJSON.FeatureCollection\n ): void {\n if (!tileFc || !tileFc.features) return;\n\n tileFc.features.forEach(feature => {\n const featureId = feature.id;\n if (featureId !== undefined && !featureIdIndex.has(featureId)) {\n fc.features.push(feature);\n featureIdIndex.set(featureId, true);\n } else if (featureId === undefined) {\n // If no ID, just add it (can't deduplicate)\n fc.features.push(feature);\n }\n });\n }\n\n private get _time(): string | false {\n if (!this._esriServiceOptions.to) return false;\n let from = this._esriServiceOptions.from;\n let to = this._esriServiceOptions.to;\n if (from instanceof Date) from = from.valueOf();\n if (to instanceof Date) to = to.valueOf();\n\n return `${from ?? ''},${to}`;\n }\n\n private async _getTile(\n tile: [number, number, number],\n tolerance: number\n ): Promise<GeoJSON.FeatureCollection | null> {\n const tileBounds = tilebelt.tileToBBOX(tile);\n\n const extent = {\n spatialReference: {\n latestWkid: 4326,\n wkid: 4326,\n },\n xmin: tileBounds[0],\n ymin: tileBounds[1],\n xmax: tileBounds[2],\n ymax: tileBounds[3],\n };\n\n const params = new URLSearchParams({\n f: this._format,\n geometry: JSON.stringify(extent),\n where: this._esriServiceOptions.where,\n outFields:\n typeof this._esriServiceOptions.outFields === 'string'\n ? this._esriServiceOptions.outFields\n : this._esriServiceOptions.outFields?.join(',') || '*',\n outSR: '4326',\n returnZ: 'false',\n returnM: 'false',\n precision: this._esriServiceOptions.precision.toString(),\n quantizationParameters: JSON.stringify({\n extent,\n tolerance,\n mode: 'view',\n }),\n resultType: 'tile',\n spatialRel: 'esriSpatialRelIntersects',\n geometryType: 'esriGeometryEnvelope',\n inSR: '4326',\n });\n\n if (this._time) {\n params.append('time', this._time);\n }\n\n this._appendTokenIfExists(params);\n\n try {\n const response = await fetch(\n `${this._esriServiceOptions.url}/query?${params.toString()}`,\n this._esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n console.warn(`Tile fetch failed: HTTP ${response.status}`);\n return null;\n }\n\n if (this._format === 'pbf') {\n const buffer = await response.arrayBuffer();\n try {\n const decoded = tileDecode(new Uint8Array(buffer));\n return decoded.featureCollection;\n } catch {\n console.error('Could not parse arcgis buffer. Please check the url you requested.');\n return null;\n }\n } else {\n const data = await response.json();\n this._checkAgolError(data);\n return data;\n }\n } catch (error) {\n this._handleAuthError(error);\n console.warn('Error fetching tile:', error);\n return null;\n }\n }\n\n private _updateFcOnMap(fc: GeoJSON.FeatureCollection): void {\n const source = this._map.getSource(this._sourceId) as\n | { setData: (data: GeoJSON.FeatureCollection) => void }\n | undefined;\n if (source && 'setData' in source) {\n source.setData(fc);\n }\n }\n\n private _doesTileOverlapBbox(\n tile: [number, number, number] | [number, number, number, number],\n bbox: [number, number][] | [[number, number], [number, number]]\n ): boolean {\n const tileBounds =\n tile.length === 4 ? tile : tilebelt.tileToBBOX(tile as [number, number, number]);\n if (tileBounds[2] < bbox[0][0]) return false;\n if (tileBounds[0] > bbox[1][0]) return false;\n if (tileBounds[3] < bbox[0][1]) return false;\n if (tileBounds[1] > bbox[1][1]) return false;\n return true;\n }\n\n private async _getServiceMetadata(): Promise<ExtendedServiceMetadata> {\n if (this._serviceMetadata !== null) return this._serviceMetadata;\n\n const params = new URLSearchParams({ f: 'json' });\n this._appendTokenIfExists(params);\n\n const response = await fetch(\n `${this._esriServiceOptions.url}?${params.toString()}`,\n this._esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch service metadata: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(JSON.stringify(data.error));\n }\n\n this._serviceMetadata = data as ExtendedServiceMetadata;\n return this._serviceMetadata;\n }\n\n /**\n * Query features by longitude/latitude with optional radius\n */\n async getFeaturesByLonLat(\n lnglat: { lng: number; lat: number },\n radius: number = 20,\n returnGeometry: boolean = false\n ): Promise<GeoJSON.FeatureCollection> {\n const params = new URLSearchParams({\n sr: '4326',\n geometryType: 'esriGeometryPoint',\n geometry: JSON.stringify({\n x: lnglat.lng,\n y: lnglat.lat,\n spatialReference: { wkid: 4326 },\n }),\n returnGeometry: returnGeometry.toString(),\n outFields: '*',\n spatialRel: 'esriSpatialRelIntersects',\n units: 'esriSRUnit_Meter',\n distance: radius.toString(),\n f: 'geojson',\n });\n\n if (this._time) {\n params.append('time', this._time);\n }\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(\n `${this._esriServiceOptions.url}/query?${params.toString()}`,\n this._esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Query failed: HTTP ${response.status}`);\n }\n\n return await response.json();\n }\n\n /**\n * Query features by object IDs\n */\n async getFeaturesByObjectIds(\n objectIds: number[] | string,\n returnGeometry: boolean = false\n ): Promise<GeoJSON.FeatureCollection> {\n const idsString = Array.isArray(objectIds) ? objectIds.join(',') : objectIds;\n\n const params = new URLSearchParams({\n sr: '4326',\n objectIds: idsString,\n returnGeometry: returnGeometry.toString(),\n outFields: '*',\n f: 'geojson',\n });\n\n this._appendTokenIfExists(params);\n\n const response = await fetch(\n `${this._esriServiceOptions.url}/query?${params.toString()}`,\n this._esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Query failed: HTTP ${response.status}`);\n }\n\n return await response.json();\n }\n\n /**\n * Query features with custom options\n */\n async queryFeatures(\n options?: Partial<FeatureServiceOptions>\n ): Promise<GeoJSON.FeatureCollection> {\n const queryOptions = { ...this._esriServiceOptions, ...options };\n const params = new URLSearchParams();\n\n params.append('f', 'geojson');\n params.append('where', queryOptions.where || '1=1');\n params.append(\n 'outFields',\n typeof queryOptions.outFields === 'string'\n ? queryOptions.outFields\n : queryOptions.outFields?.join(',') || '*'\n );\n params.append('returnGeometry', (queryOptions.returnGeometry !== false).toString());\n\n if (queryOptions.geometry) {\n params.append('geometry', JSON.stringify(queryOptions.geometry));\n if (queryOptions.geometryType) params.append('geometryType', queryOptions.geometryType);\n if (queryOptions.spatialRel) params.append('spatialRel', queryOptions.spatialRel);\n if (queryOptions.inSR) params.append('inSR', queryOptions.inSR);\n }\n if (queryOptions.outSR) params.append('outSR', queryOptions.outSR);\n if (queryOptions.orderByFields) params.append('orderByFields', queryOptions.orderByFields);\n if (queryOptions.groupByFieldsForStatistics)\n params.append('groupByFieldsForStatistics', queryOptions.groupByFieldsForStatistics);\n if (queryOptions.outStatistics && queryOptions.outStatistics.length > 0)\n params.append('outStatistics', JSON.stringify(queryOptions.outStatistics));\n if (queryOptions.having) params.append('having', queryOptions.having);\n if (queryOptions.resultOffset)\n params.append('resultOffset', queryOptions.resultOffset.toString());\n if (queryOptions.resultRecordCount)\n params.append('resultRecordCount', queryOptions.resultRecordCount.toString());\n if (queryOptions.token) params.append('token', queryOptions.token);\n\n try {\n const response = await fetch(\n `${this._esriServiceOptions.url}/query?${params.toString()}`,\n this._esriServiceOptions.fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return await response.json();\n } catch (error) {\n const isTestEnvironment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'test';\n if (!isTestEnvironment) {\n console.error('Error querying features:', error);\n }\n throw error;\n }\n }\n\n private async _projectBounds(): Promise<void> {\n if (!this._serviceMetadata?.extent) return;\n\n const params = new URLSearchParams({\n geometries: JSON.stringify({\n geometryType: 'esriGeometryEnvelope',\n geometries: [this._serviceMetadata.extent],\n }),\n inSR: (this._serviceMetadata.extent.spatialReference?.wkid || 4326).toString(),\n outSR: '4326',\n f: 'json',\n });\n\n let fetchOptions = this._esriServiceOptions.fetchOptions;\n if (!this._projectionEndpointIsFallback()) {\n this._appendTokenIfExists(params);\n } else {\n fetchOptions = undefined;\n }\n\n try {\n const response = await fetch(\n `${this._esriServiceOptions.projectionEndpoint}?${params.toString()}`,\n fetchOptions\n );\n\n if (!response.ok) {\n throw new Error(`Projection failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data.error) {\n throw new Error(JSON.stringify(data.error));\n }\n\n const extent = data.geometries[0];\n this._maxExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n } catch (error) {\n // If projection endpoint fails, try fallback\n if (!this._projectionEndpointIsFallback()) {\n this._esriServiceOptions.projectionEndpoint = this._fallbackProjectionEndpoint;\n await this._projectBounds();\n } else {\n console.warn('Could not project service bounds:', error);\n }\n }\n }\n\n private _projectionEndpointIsFallback(): boolean {\n return this._esriServiceOptions.projectionEndpoint === this._fallbackProjectionEndpoint;\n }\n\n private _setAttribution(): void {\n if (!this._esriServiceOptions.setAttributionFromService) return;\n\n const copyrightText = this._serviceMetadata?.copyrightText;\n if (copyrightText) {\n updateAttribution(copyrightText, this._sourceId, this._map);\n } else {\n // Add default Esri attribution\n updateAttribution('', this._sourceId, this._map);\n }\n }\n\n private _appendTokenIfExists(params: URLSearchParams): void {\n const token = this._esriServiceOptions.token;\n if (token) {\n params.append('token', token);\n }\n }\n\n private _getFetchHeaders(): HeadersInit | undefined {\n if (this._esriServiceOptions.apiKey) {\n return { 'X-Esri-Authorization': `Bearer ${this._esriServiceOptions.apiKey}` };\n }\n return undefined;\n }\n\n private _checkAgolError(data: unknown): void {\n if (data && typeof data === 'object' && 'error' in data) {\n const errorData = (data as { error: { code?: number; message?: string; details?: string[] } })\n .error;\n const err = new Error(errorData.message || 'ArcGIS service error') as Error & {\n code?: number;\n details?: string[];\n };\n err.code = errorData.code;\n err.details = errorData.details;\n throw err;\n }\n }\n\n private _handleAuthError(error: unknown): void {\n if (error && typeof error === 'object' && 'code' in error) {\n const code = (error as { code?: number }).code;\n if (code === 498 || code === 499) {\n this._fireEvent('authenticationrequired', {\n authenticate: (token: string) => this.setToken(token),\n });\n }\n }\n }\n\n private _fireEvent(event: string, data: unknown): void {\n const listeners = this._eventListeners[event];\n if (listeners) {\n listeners.forEach(cb => cb(data));\n }\n }\n\n /**\n * Add event listener\n */\n on(event: string, callback: (event: unknown) => void): FeatureService {\n if (!this._eventListeners[event]) {\n this._eventListeners[event] = [];\n }\n this._eventListeners[event].push(callback);\n return this;\n }\n\n /**\n * Remove event listener\n */\n off(event: string, callback: (event: unknown) => void): FeatureService {\n const listeners = this._eventListeners[event];\n if (listeners) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n return this;\n }\n\n // ========================================\n // Feature Editing Methods\n // ========================================\n\n /**\n * Add features to the service\n */\n async addFeatures(\n features: GeoJSON.Feature[],\n options?: { gdbVersion?: string }\n ): Promise<EditResult[]> {\n const params = new URLSearchParams({\n f: 'json',\n features: JSON.stringify(features),\n });\n if (options?.gdbVersion) params.append('gdbVersion', options.gdbVersion);\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${this._esriServiceOptions.url}/addFeatures`, {\n method: 'POST',\n body: params,\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n });\n\n if (!response.ok) {\n throw new Error(`Add features failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.addResults;\n }\n\n /**\n * Update existing features\n */\n async updateFeatures(\n features: GeoJSON.Feature[],\n options?: { gdbVersion?: string }\n ): Promise<EditResult[]> {\n const params = new URLSearchParams({\n f: 'json',\n features: JSON.stringify(features),\n });\n if (options?.gdbVersion) params.append('gdbVersion', options.gdbVersion);\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${this._esriServiceOptions.url}/updateFeatures`, {\n method: 'POST',\n body: params,\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n });\n\n if (!response.ok) {\n throw new Error(`Update features failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.updateResults;\n }\n\n /**\n * Delete features by objectIds or where clause\n */\n async deleteFeatures(deleteParams: {\n objectIds?: number[];\n where?: string;\n }): Promise<EditResult[]> {\n const params = new URLSearchParams({ f: 'json' });\n if (deleteParams.objectIds) {\n params.append('objectIds', deleteParams.objectIds.join(','));\n }\n if (deleteParams.where) {\n params.append('where', deleteParams.where);\n }\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${this._esriServiceOptions.url}/deleteFeatures`, {\n method: 'POST',\n body: params,\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n });\n\n if (!response.ok) {\n throw new Error(`Delete features failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.deleteResults;\n }\n\n /**\n * Apply multiple edits in a single transaction\n */\n async applyEdits(\n edits: {\n adds?: GeoJSON.Feature[];\n updates?: GeoJSON.Feature[];\n deletes?: number[];\n },\n options?: { gdbVersion?: string }\n ): Promise<ApplyEditsResult> {\n const params = new URLSearchParams({ f: 'json' });\n if (edits.adds) params.append('adds', JSON.stringify(edits.adds));\n if (edits.updates) params.append('updates', JSON.stringify(edits.updates));\n if (edits.deletes) params.append('deletes', edits.deletes.join(','));\n if (options?.gdbVersion) params.append('gdbVersion', options.gdbVersion);\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${this._esriServiceOptions.url}/applyEdits`, {\n method: 'POST',\n body: params,\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n });\n\n if (!response.ok) {\n throw new Error(`Apply edits failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data;\n }\n\n // ========================================\n // Attachment Methods\n // ========================================\n\n /**\n * Query attachments for a feature\n */\n async queryAttachments(\n objectId: number,\n options?: { globalIds?: string[] }\n ): Promise<AttachmentInfo[]> {\n const params = new URLSearchParams({ f: 'json' });\n if (options?.globalIds) {\n params.append('globalIds', options.globalIds.join(','));\n }\n this._appendTokenIfExists(params);\n\n const response = await fetch(\n `${this._esriServiceOptions.url}/${objectId}/attachments?${params.toString()}`,\n {\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n }\n );\n\n if (!response.ok) {\n throw new Error(`Query attachments failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.attachmentInfos || [];\n }\n\n /**\n * Add an attachment to a feature\n */\n async addAttachment(objectId: number, file: Blob | File, fileName?: string): Promise<EditResult> {\n const formData = new FormData();\n formData.append('f', 'json');\n formData.append(\n 'attachment',\n file,\n fileName || (file instanceof File ? file.name : 'attachment')\n );\n if (this._esriServiceOptions.token) {\n formData.append('token', this._esriServiceOptions.token);\n }\n\n const headers: HeadersInit = {};\n if (this._esriServiceOptions.apiKey) {\n headers['X-Esri-Authorization'] = `Bearer ${this._esriServiceOptions.apiKey}`;\n }\n\n const response = await fetch(`${this._esriServiceOptions.url}/${objectId}/addAttachment`, {\n method: 'POST',\n body: formData,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n });\n\n if (!response.ok) {\n throw new Error(`Add attachment failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.addAttachmentResult;\n }\n\n /**\n * Delete attachments from a feature\n */\n async deleteAttachments(objectId: number, attachmentIds: number[]): Promise<EditResult[]> {\n const params = new URLSearchParams({\n f: 'json',\n attachmentIds: attachmentIds.join(','),\n });\n this._appendTokenIfExists(params);\n\n const response = await fetch(`${this._esriServiceOptions.url}/${objectId}/deleteAttachments`, {\n method: 'POST',\n body: params,\n headers: this._getFetchHeaders(),\n ...this._esriServiceOptions.fetchOptions,\n });\n\n if (!response.ok) {\n throw new Error(`Delete attachments failed: HTTP ${response.status}`);\n }\n\n const data = await response.json();\n this._checkAgolError(data);\n return data.deleteAttachmentResults;\n }\n\n // Legacy method aliases for backwards compatibility\n\n /** @deprecated Use setWhere instead */\n updateSource(): void {\n this._clearAndRefreshTiles();\n }\n\n /** @deprecated Use setWhere instead */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setLayers(_layers: number[] | number): void {\n // FeatureService doesn't support layers parameter (single layer only)\n console.warn('setLayers is not applicable to FeatureService. Use the layer URL directly.');\n }\n\n /** @deprecated Use clearWhere instead */\n setGeometry(geometry: Record<string, unknown>, geometryType?: string): void {\n // For compatibility, but recommend using queryFeatures with geometry parameter\n console.warn(\n 'setGeometry is not recommended. Use queryFeatures({ geometry: ... }) for spatial queries.'\n );\n this._esriServiceOptions.geometry = geometry;\n if (geometryType) {\n this._esriServiceOptions.geometryType = geometryType;\n }\n }\n\n /** @deprecated */\n clearGeometry(): void {\n delete this._esriServiceOptions.geometry;\n delete this._esriServiceOptions.geometryType;\n }\n\n /** @deprecated Use enableRequests/disableRequests instead */\n setBoundingBoxFilter(enabled: boolean): void {\n if (enabled) {\n this.enableRequests();\n } else {\n this.disableRequests();\n }\n }\n\n /** @deprecated Use _clearAndRefreshTiles instead */\n updateData(): void {\n this._clearAndRefreshTiles();\n }\n}\n","import { cleanTrailingSlash } from '@/utils';\nimport { Service } from '@/Services/Service';\nimport type { ServiceCallback } from '@/Services/Service';\n\nexport interface TaskOptions {\n url?: string;\n proxy?: string | boolean;\n useCors?: boolean;\n requestParams?: Record<string, unknown>;\n token?: string;\n apikey?: string;\n}\n\n/**\n * Base Task class for ArcGIS REST API operations\n * Similar to Esri Leaflet's Task class\n */\nexport class Task {\n protected _service?: Service;\n protected options: TaskOptions;\n protected params: Record<string, unknown> = {};\n protected path: string = '';\n protected setters: Record<string, string> = {};\n\n constructor(endpoint: string | TaskOptions | Service) {\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of Service\n if (endpoint && typeof endpoint === 'object' && 'request' in endpoint) {\n this._service = endpoint as Service;\n this.options = {}; // Service will handle its own options\n } else if (typeof endpoint === 'string') {\n this.options = { url: cleanTrailingSlash(endpoint) };\n } else {\n this.options = { ...(endpoint as TaskOptions) };\n if (this.options.url) {\n this.options.url = cleanTrailingSlash(this.options.url);\n }\n }\n\n // Initialize params if not already set by subclass\n if (!this.params) {\n this.params = {};\n }\n\n // Generate setter methods based on the setters object\n if (this.setters) {\n for (const setter in this.setters) {\n const param = this.setters[setter];\n (this as Record<string, unknown>)[setter] = this.generateSetter(param, this);\n }\n }\n }\n\n /**\n * Generate a method for each methodName:paramName in the setters for this task\n */\n generateSetter(param: string, context: Task): (value: unknown) => Task {\n return function (value: unknown): Task {\n context.params[param] = value;\n return context;\n };\n }\n\n /**\n * Set authentication token\n */\n token(token: string): Task {\n if (this._service) {\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n }\n\n /**\n * Set API key (alias for token)\n */\n apikey(apikey: string): Task {\n return this.token(apikey);\n }\n\n /**\n * Set whether to return formatted or unformatted values (ArcGIS Server 10.5+)\n */\n format(formatted: boolean): Task {\n this.params.returnUnformattedValues = !formatted;\n return this;\n }\n\n /**\n * Execute the task request with callback (Esri Leaflet style)\n */\n run(callback: ServiceCallback): void {\n if (this.options.requestParams) {\n Object.assign(this.params, this.options.requestParams);\n }\n\n if (this._service) {\n this._service.requestWithCallback('POST', this.path, this.params, callback);\n return;\n }\n\n // Direct request fallback\n this._request('POST', this.path, this.params, callback);\n }\n\n /**\n * Execute the task request with Promise\n */\n async request<T = unknown>(): Promise<T> {\n if (this.options.requestParams) {\n Object.assign(this.params, this.options.requestParams);\n }\n\n if (this._service) {\n return this._service.requestWithCallback('POST', this.path, this.params) as Promise<T>;\n }\n\n return new Promise((resolve, reject) => {\n this._request('POST', this.path, this.params, (error?: Error, response?: unknown) => {\n if (error) {\n reject(error);\n } else {\n resolve(response as T);\n }\n });\n });\n }\n\n /**\n * Direct HTTP request (when not using a service)\n */\n private _request(\n method: string,\n path: string,\n params: Record<string, unknown>,\n callback: ServiceCallback\n ): void {\n if (!this.options.url) {\n callback(new Error('URL is required for task execution'));\n return;\n }\n\n // Ensure proper URL construction with path separator\n const baseUrl = this.options.url.endsWith('/')\n ? this.options.url.slice(0, -1)\n : this.options.url;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n const fullServiceUrl = `${baseUrl}${cleanPath}`;\n\n const url = this.options.proxy ? `${this.options.proxy}?${fullServiceUrl}` : fullServiceUrl;\n\n // Convert params to URLSearchParams\n const searchParams = new URLSearchParams();\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n searchParams.append(key, value.join(','));\n } else if (typeof value === 'object') {\n searchParams.append(key, JSON.stringify(value));\n } else {\n searchParams.append(key, value.toString());\n }\n }\n });\n\n const fullUrl = method === 'GET' ? `${url}?${searchParams.toString()}` : url;\n\n const fetchOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n if (method === 'POST') {\n fetchOptions.body = searchParams.toString();\n }\n\n fetch(fullUrl, fetchOptions)\n .then(response => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return response.json();\n })\n .then(data => {\n // Check for AGOL JSON-level errors (HTTP 200 with error body)\n if (data && typeof data === 'object' && data.error) {\n const err = new Error(data.error.message || 'ArcGIS service error') as Error & {\n code?: number;\n details?: string[];\n };\n err.code = data.error.code;\n err.details = data.error.details;\n callback(err);\n return;\n }\n callback(undefined, data);\n })\n .catch(error => callback(error));\n }\n}\n","import { Task } from './Task';\nimport { Service } from '@/Services/Service';\n\nexport interface QueryOptions {\n url: string;\n token?: string;\n where?: string;\n outFields?: string | string[];\n returnGeometry?: boolean;\n spatialRel?: string;\n geometry?: unknown;\n geometryType?: string;\n inSR?: string | number;\n outSR?: string | number;\n returnDistinctValues?: boolean;\n returnIdsOnly?: boolean;\n returnCountOnly?: boolean;\n returnExtentOnly?: boolean;\n orderByFields?: string;\n groupByFieldsForStatistics?: string;\n outStatistics?: unknown[];\n resultOffset?: number;\n resultRecordCount?: number;\n maxAllowableOffset?: number;\n geometryPrecision?: number;\n time?: number[];\n gdbVersion?: string;\n historicMoment?: number;\n returnTrueCurves?: boolean;\n returnZ?: boolean;\n returnM?: boolean;\n f?: string;\n}\n\nexport interface QueryGeometry {\n x?: number;\n y?: number;\n xmin?: number;\n ymin?: number;\n xmax?: number;\n ymax?: number;\n paths?: number[][][];\n rings?: number[][][];\n points?: number[][];\n spatialReference?: {\n wkid: number;\n latestWkid?: number;\n };\n}\n\nexport interface Bounds {\n _southWest: { lat: number; lng: number };\n _northEast: { lat: number; lng: number };\n}\n\n/**\n * Query task for ArcGIS Feature Services\n * Based on Esri Leaflet's Query functionality\n */\nexport class Query extends Task {\n protected setters = {\n offset: 'resultOffset',\n limit: 'resultRecordCount',\n fields: 'outFields',\n precision: 'geometryPrecision',\n featureIds: 'objectIds',\n returnGeometry: 'returnGeometry',\n returnM: 'returnM',\n transform: 'datumTransformation',\n token: 'token',\n };\n\n protected path = 'query';\n\n protected params: Record<string, unknown> = {\n returnGeometry: true,\n where: '1=1',\n outSR: 4326,\n outFields: '*',\n f: 'json',\n };\n\n constructor(options: string | QueryOptions | Service) {\n super(options);\n this.path = 'query';\n\n // If options is a QueryOptions object, merge relevant properties into params\n if (\n options &&\n typeof options === 'object' &&\n !('request' in options) &&\n typeof options !== 'string'\n ) {\n const queryOptions = options as QueryOptions;\n\n // Merge query-specific options into params\n if (queryOptions.where !== undefined) this.params.where = queryOptions.where;\n if (queryOptions.outFields !== undefined) this.params.outFields = queryOptions.outFields;\n if (queryOptions.returnGeometry !== undefined)\n this.params.returnGeometry = queryOptions.returnGeometry;\n if (queryOptions.spatialRel !== undefined) this.params.spatialRel = queryOptions.spatialRel;\n if (queryOptions.geometry !== undefined) this.params.geometry = queryOptions.geometry;\n if (queryOptions.geometryType !== undefined)\n this.params.geometryType = queryOptions.geometryType;\n if (queryOptions.inSR !== undefined) this.params.inSR = queryOptions.inSR;\n if (queryOptions.outSR !== undefined) this.params.outSR = queryOptions.outSR;\n if (queryOptions.returnDistinctValues !== undefined)\n this.params.returnDistinctValues = queryOptions.returnDistinctValues;\n if (queryOptions.returnIdsOnly !== undefined)\n this.params.returnIdsOnly = queryOptions.returnIdsOnly;\n if (queryOptions.returnCountOnly !== undefined)\n this.params.returnCountOnly = queryOptions.returnCountOnly;\n if (queryOptions.returnExtentOnly !== undefined)\n this.params.returnExtentOnly = queryOptions.returnExtentOnly;\n if (queryOptions.orderByFields !== undefined)\n this.params.orderByFields = queryOptions.orderByFields;\n if (queryOptions.groupByFieldsForStatistics !== undefined)\n this.params.groupByFieldsForStatistics = queryOptions.groupByFieldsForStatistics;\n if (queryOptions.outStatistics !== undefined)\n this.params.outStatistics = queryOptions.outStatistics;\n if (queryOptions.resultOffset !== undefined)\n this.params.resultOffset = queryOptions.resultOffset;\n if (queryOptions.resultRecordCount !== undefined)\n this.params.resultRecordCount = queryOptions.resultRecordCount;\n if (queryOptions.maxAllowableOffset !== undefined)\n this.params.maxAllowableOffset = queryOptions.maxAllowableOffset;\n if (queryOptions.geometryPrecision !== undefined)\n this.params.geometryPrecision = queryOptions.geometryPrecision;\n if (queryOptions.time !== undefined) this.params.time = queryOptions.time;\n if (queryOptions.gdbVersion !== undefined) this.params.gdbVersion = queryOptions.gdbVersion;\n if (queryOptions.historicMoment !== undefined)\n this.params.historicMoment = queryOptions.historicMoment;\n if (queryOptions.returnTrueCurves !== undefined)\n this.params.returnTrueCurves = queryOptions.returnTrueCurves;\n if (queryOptions.returnZ !== undefined) this.params.returnZ = queryOptions.returnZ;\n if (queryOptions.returnM !== undefined) this.params.returnM = queryOptions.returnM;\n if (queryOptions.token !== undefined) this.params.token = queryOptions.token;\n }\n }\n\n // Spatial relationship methods\n\n /**\n * Returns a feature if its shape is wholly contained within the search geometry\n */\n within(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelContains';\n return this;\n }\n\n /**\n * Returns a feature if any spatial relationship is found\n */\n intersects(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n }\n\n /**\n * Returns a feature if its shape wholly contains the search geometry\n */\n contains(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin';\n return this;\n }\n\n /**\n * Returns a feature if the intersection of the interiors is not empty and has lower dimension\n */\n crosses(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelCrosses';\n return this;\n }\n\n /**\n * Returns a feature if the two shapes share a common boundary\n */\n touches(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelTouches';\n return this;\n }\n\n /**\n * Returns a feature if the intersection results in same dimension but different from both shapes\n */\n overlaps(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n }\n\n /**\n * Returns a feature if the envelope of the two shapes intersects\n */\n bboxIntersects(geometry: QueryGeometry | unknown): Query {\n this._setGeometryParams(geometry);\n this.params.spatialRel = 'esriSpatialRelEnvelopeIntersects';\n return this;\n }\n\n /**\n * Nearby search - only valid for ArcGIS Server 10.3+ or ArcGIS Online\n */\n nearby(latlng: { lat: number; lng: number }, radius: number): Query {\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSR = 4326;\n return this;\n }\n\n // Query methods\n\n /**\n * Set WHERE clause for the query\n */\n where(whereClause: string): Query {\n this.params.where = whereClause;\n return this;\n }\n\n /**\n * Set time range for temporal queries\n */\n between(start: Date | number, end: Date | number): Query {\n const startTime = start instanceof Date ? start.valueOf() : start;\n const endTime = end instanceof Date ? end.valueOf() : end;\n this.params.time = [startTime, endTime];\n return this;\n }\n\n /**\n * Simplify geometries based on map resolution\n */\n simplify(\n map: { getBounds(): Bounds; getSize(): { x: number; y: number } },\n factor: number\n ): Query {\n const bounds = map.getBounds();\n const mapWidth = Math.abs(bounds._northEast.lng - bounds._southWest.lng);\n this.params.maxAllowableOffset = (mapWidth / map.getSize().x) * factor;\n return this;\n }\n\n /**\n * Set order by fields\n */\n orderBy(fieldName: string, order: 'ASC' | 'DESC' = 'ASC'): Query {\n const currentOrder = (this.params.orderByFields as string) || '';\n this.params.orderByFields = currentOrder\n ? `${currentOrder},${fieldName} ${order}`\n : `${fieldName} ${order}`;\n return this;\n }\n\n /**\n * Set specific layer to query (for Map Services)\n */\n layer(layerId: number): Query {\n this.path = `${layerId}/query`;\n return this;\n }\n\n /**\n * Return only distinct values\n */\n distinct(): Query {\n this.params.returnGeometry = false;\n this.params.returnDistinctValues = true;\n return this;\n }\n\n /**\n * Set pixel size for image services\n */\n pixelSize(point: { x: number; y: number }): Query {\n this.params.pixelSize = [point.x, point.y];\n return this;\n }\n\n // Execution methods\n\n /**\n * Execute the query and return features\n */\n async run(): Promise<GeoJSON.FeatureCollection> {\n this._cleanParams();\n\n // Use GeoJSON format if supported\n this.params.f = 'geojson';\n\n try {\n const response = await this.request<GeoJSON.FeatureCollection>();\n return response;\n } catch {\n // Fallback to JSON format and convert\n this.params.f = 'json';\n const response = await this.request<{\n features?: Array<{\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n }>();\n\n return this._convertToGeoJSON(response);\n }\n }\n\n /**\n * Execute the query with automatic pagination, collecting all pages of results.\n * Loops while exceededTransferLimit is true, incrementing resultOffset.\n */\n async runAll(options?: { maxPages?: number }): Promise<GeoJSON.FeatureCollection> {\n const maxPages = options?.maxPages ?? 100;\n const allFeatures: GeoJSON.Feature[] = [];\n let page = 0;\n let offset = (this.params.resultOffset as number) || 0;\n\n while (page < maxPages) {\n this.params.resultOffset = offset;\n this._cleanParams();\n this.params.f = 'geojson';\n\n const response = await this.request<\n GeoJSON.FeatureCollection & { exceededTransferLimit?: boolean }\n >();\n const features = response.features || [];\n allFeatures.push(...features);\n\n if (!response.exceededTransferLimit || features.length === 0) {\n break;\n }\n\n offset += features.length;\n page++;\n }\n\n // Reset offset\n delete this.params.resultOffset;\n\n return {\n type: 'FeatureCollection',\n features: allFeatures,\n };\n }\n\n /**\n * Execute the query and return only the count\n */\n async count(): Promise<number> {\n this._cleanParams();\n this.params.returnCountOnly = true;\n const response = await this.request<{ count: number }>();\n return response.count;\n }\n\n /**\n * Execute the query and return only feature IDs\n */\n async ids(): Promise<(number | string)[]> {\n this._cleanParams();\n this.params.returnIdsOnly = true;\n const response = await this.request<{\n objectIds?: (number | string)[];\n globalIds?: string[];\n }>();\n return response.objectIds || response.globalIds || [];\n }\n\n /**\n * Execute the query and return extent bounds (ArcGIS Server 10.3+)\n */\n async bounds(): Promise<{\n _southWest: { lat: number; lng: number };\n _northEast: { lat: number; lng: number };\n }> {\n this._cleanParams();\n this.params.returnExtentOnly = true;\n const response = await this.request<{\n extent: {\n xmin: number;\n ymin: number;\n xmax: number;\n ymax: number;\n };\n }>();\n\n if (!response.extent) {\n throw new Error('Invalid bounds returned');\n }\n\n return {\n _southWest: { lat: response.extent.ymin, lng: response.extent.xmin },\n _northEast: { lat: response.extent.ymax, lng: response.extent.xmax },\n };\n }\n\n // Private methods\n\n private _setGeometryParams(geometry: unknown): void {\n this.params.inSR = 4326;\n const converted = this._setGeometry(geometry);\n this.params.geometry = converted.geometry;\n this.params.geometryType = converted.geometryType;\n }\n\n private _setGeometry(geometry: unknown): { geometry: unknown; geometryType: string } {\n if (!geometry) {\n return { geometry: null, geometryType: 'esriGeometryPoint' };\n }\n\n // Handle different geometry types\n if (typeof geometry === 'object' && geometry !== null) {\n const geom = geometry as Record<string, unknown>;\n\n if ('lat' in geom && 'lng' in geom) {\n // Leaflet LatLng-like object\n return {\n geometry: { x: geom.lng, y: geom.lat, spatialReference: { wkid: 4326 } },\n geometryType: 'esriGeometryPoint',\n };\n }\n\n if ('_southWest' in geom && '_northEast' in geom) {\n // Leaflet Bounds-like object\n const bounds = geom as unknown as Bounds;\n return {\n geometry: {\n xmin: bounds._southWest.lng,\n ymin: bounds._southWest.lat,\n xmax: bounds._northEast.lng,\n ymax: bounds._northEast.lat,\n spatialReference: { wkid: 4326 },\n },\n geometryType: 'esriGeometryEnvelope',\n };\n }\n\n if ('xmin' in geom && 'ymin' in geom && 'xmax' in geom && 'ymax' in geom) {\n // Esri envelope geometry\n return {\n geometry,\n geometryType: 'esriGeometryEnvelope',\n };\n }\n }\n\n // Default: assume it's already in Esri geometry format\n return {\n geometry,\n geometryType: 'esriGeometryPoint',\n };\n }\n\n private _cleanParams(): void {\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n delete this.params.returnDistinctValues;\n }\n\n private _convertToGeoJSON(response: {\n features?: Array<{\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n }): GeoJSON.FeatureCollection {\n // Handle cases where features might be undefined or empty\n const features: GeoJSON.Feature[] = (response.features || []).map(feature => ({\n type: 'Feature',\n properties: feature.attributes,\n geometry: (feature.geometry as GeoJSON.Geometry) || null,\n }));\n\n return {\n type: 'FeatureCollection',\n features,\n };\n }\n}\n\nexport function query(options: string | QueryOptions): Query {\n return new Query(options);\n}\n\nexport default query;\n","import { Task } from './Task';\nimport { Service } from '@/Services/Service';\n\nexport interface FindOptions {\n url: string;\n token?: string;\n searchText?: string;\n contains?: boolean;\n searchFields?: string | string[];\n sr?: string | number;\n layers?: number | number[] | string;\n returnGeometry?: boolean;\n maxAllowableOffset?: number;\n geometryPrecision?: number;\n dynamicLayers?: unknown[];\n returnZ?: boolean;\n returnM?: boolean;\n gdbVersion?: string;\n layerDefs?: string;\n}\n\n/**\n * Find task for searching text in ArcGIS Map Services\n * Based on Esri Leaflet's Find functionality\n */\nexport class Find extends Task {\n protected setters = {\n contains: 'contains',\n text: 'searchText',\n fields: 'searchFields',\n spatialReference: 'sr',\n sr: 'sr',\n layers: 'layers',\n returnGeometry: 'returnGeometry',\n maxAllowableOffset: 'maxAllowableOffset',\n precision: 'geometryPrecision',\n dynamicLayers: 'dynamicLayers',\n returnZ: 'returnZ',\n returnM: 'returnM',\n gdbVersion: 'gdbVersion',\n token: 'token',\n };\n\n protected path = 'find';\n\n protected params: Record<string, unknown> = {\n searchText: '', // Required parameter\n layers: 'all', // Can be 'all' or comma-separated layer IDs\n contains: true,\n returnGeometry: true,\n f: 'json',\n };\n\n constructor(options: string | FindOptions | Service) {\n super(options);\n this.path = 'find';\n\n // If options is a FindOptions object, merge relevant properties into params\n if (\n options &&\n typeof options === 'object' &&\n !('request' in options) &&\n typeof options !== 'string'\n ) {\n const findOptions = options as FindOptions;\n\n // Merge find-specific options into params\n if (findOptions.searchText !== undefined) this.params.searchText = findOptions.searchText;\n if (findOptions.contains !== undefined) this.params.contains = findOptions.contains;\n if (findOptions.searchFields !== undefined) {\n this.params.searchFields = Array.isArray(findOptions.searchFields)\n ? findOptions.searchFields.join(',')\n : findOptions.searchFields;\n }\n if (findOptions.sr !== undefined) this.params.sr = findOptions.sr;\n if (findOptions.layers !== undefined) {\n // Convert array to comma-separated string or use as-is if already string\n if (Array.isArray(findOptions.layers)) {\n this.params.layers = findOptions.layers.join(',');\n } else if (typeof findOptions.layers === 'string') {\n this.params.layers = findOptions.layers;\n } else {\n this.params.layers = findOptions.layers.toString();\n }\n }\n if (findOptions.returnGeometry !== undefined)\n this.params.returnGeometry = findOptions.returnGeometry;\n if (findOptions.maxAllowableOffset !== undefined)\n this.params.maxAllowableOffset = findOptions.maxAllowableOffset;\n if (findOptions.geometryPrecision !== undefined)\n this.params.geometryPrecision = findOptions.geometryPrecision;\n if (findOptions.dynamicLayers !== undefined)\n this.params.dynamicLayers = findOptions.dynamicLayers;\n if (findOptions.returnZ !== undefined) this.params.returnZ = findOptions.returnZ;\n if (findOptions.returnM !== undefined) this.params.returnM = findOptions.returnM;\n if (findOptions.gdbVersion !== undefined) this.params.gdbVersion = findOptions.gdbVersion;\n if (findOptions.layerDefs !== undefined) this.params.layerDefs = findOptions.layerDefs;\n if (findOptions.token !== undefined) this.params.token = findOptions.token;\n }\n }\n\n /**\n * Set the text to search for\n */\n text(searchText: string): Find {\n this.params.searchText = searchText;\n return this;\n }\n\n /**\n * Set the fields to search in\n */\n fields(fields: string | string[]): Find {\n this.params.searchFields = Array.isArray(fields) ? fields.join(',') : fields;\n return this;\n }\n\n /**\n * Set whether the search should contain the text (partial match) or exact match\n */\n contains(contains: boolean): Find {\n this.params.contains = contains;\n return this;\n }\n\n /**\n * Set which layers to search in\n */\n layers(layers: number | number[] | string): Find {\n if (Array.isArray(layers)) {\n this.params.layers = layers.join(',');\n } else {\n this.params.layers = layers;\n }\n return this;\n }\n\n /**\n * Set layer definitions for filtering specific layers\n */\n layerDefs(layerId: number | string, whereClause: string): Find {\n const currentLayerDefs = (this.params.layerDefs as string) || '';\n this.params.layerDefs = currentLayerDefs\n ? `${currentLayerDefs};${layerId}:${whereClause}`\n : `${layerId}:${whereClause}`;\n return this;\n }\n\n /**\n * Simplify geometries based on map resolution\n */\n simplify(\n map: {\n getBounds(): {\n getWest(): number;\n getEast(): number;\n };\n getSize(): { x: number; y: number };\n },\n factor: number\n ): Find {\n const bounds = map.getBounds();\n const mapWidth = Math.abs(bounds.getWest() - bounds.getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().x) * factor;\n return this;\n }\n\n /**\n * Execute the find operation\n */\n async run(): Promise<GeoJSON.FeatureCollection<GeoJSON.Geometry | null>> {\n // Always use JSON format for Find API (GeoJSON might not be supported)\n this.params.f = 'json';\n\n try {\n const response = await this.request<{\n results?: Array<{\n layerId: number;\n layerName: string;\n foundFieldName: string;\n value: string;\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n }>();\n\n return this._convertToGeoJSON(response);\n } catch (error) {\n const isTestEnvironment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'test';\n if (!isTestEnvironment) {\n console.error('Find task error:', error);\n }\n throw error;\n }\n }\n\n private _convertToGeoJSON(\n response: {\n results?: Array<{\n layerId: number;\n layerName: string;\n foundFieldName: string;\n value: string;\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n } | null\n ): GeoJSON.FeatureCollection<GeoJSON.Geometry | null> {\n // Handle cases where response is null or results might be undefined, null, or empty\n const results = response?.results || [];\n const features: GeoJSON.Feature<GeoJSON.Geometry | null>[] = results.map(result => ({\n type: 'Feature' as const,\n properties: {\n ...result.attributes,\n layerId: result.layerId,\n layerName: result.layerName,\n foundFieldName: result.foundFieldName,\n value: result.value,\n },\n geometry: this._convertEsriGeometry(result.geometry),\n }));\n\n return {\n type: 'FeatureCollection',\n features,\n };\n }\n\n private _convertEsriGeometry(esriGeom: unknown): GeoJSON.Geometry | null {\n if (!esriGeom || typeof esriGeom !== 'object') return null;\n\n const geom = esriGeom as Record<string, unknown>;\n\n // Point geometry\n if ('x' in geom && 'y' in geom) {\n return {\n type: 'Point',\n coordinates: [geom.x as number, geom.y as number],\n };\n }\n\n // Polygon geometry\n if ('rings' in geom && Array.isArray(geom.rings)) {\n return {\n type: 'Polygon',\n coordinates: geom.rings as number[][][],\n };\n }\n\n // Polyline geometry\n if ('paths' in geom && Array.isArray(geom.paths)) {\n const paths = geom.paths as number[][][];\n\n if (paths.length === 1) {\n // Single path = LineString\n return {\n type: 'LineString',\n coordinates: paths[0],\n };\n } else {\n // Multiple paths = MultiLineString\n return {\n type: 'MultiLineString',\n coordinates: paths,\n };\n }\n }\n\n // Default: return null for unknown geometry types\n return null;\n }\n}\n\nexport function find(options: string | FindOptions): Find {\n return new Find(options);\n}\n\nexport default find;\n","import { Task, type TaskOptions } from '@/Tasks/Task';\nimport { Service } from '@/Services/Service';\nimport type { Map } from '@/types';\n\nexport interface LayerScaleRange {\n minScale?: number;\n maxScale?: number;\n}\n\nexport interface IdentifyFeaturesOptions {\n url: string;\n layers?: number[] | number | string;\n layerDefs?: Record<string, string>;\n tolerance?: number;\n returnGeometry?: boolean;\n maxAllowableOffset?: number;\n geometryPrecision?: number;\n dynamicLayers?: unknown[];\n mapExtent?: [number, number, number, number];\n imageDisplay?: [number, number, number];\n dpi?: number;\n sr?: string | number;\n layerTimeOptions?: Record<string, unknown>;\n time?: number[] | Date[];\n fetchOptions?: RequestInit;\n}\n\nexport interface IdentifyResult {\n layerId: number;\n layerName: string;\n value: string;\n displayFieldName: string;\n attributes: Record<string, unknown>;\n geometry?: unknown;\n geometryType?: string;\n}\n\nexport interface IdentifyResponse {\n results: IdentifyResult[];\n}\n\nexport interface GeometryInput {\n x: number;\n y: number;\n spatialReference?: {\n wkid: number;\n latestWkid?: number;\n };\n}\n\n/**\n * IdentifyFeatures task for performing identify operations against ArcGIS Map Services\n * Similar to Esri Leaflet's identifyFeatures functionality\n */\n// Scale constant: at zoom 0 and 96 DPI, the Web Mercator scale denominator\nconst SCALE_AT_ZOOM_0 = 559082264.028;\n\nexport class IdentifyFeatures extends Task {\n protected setters = {\n layers: 'layers',\n precision: 'geometryPrecision',\n tolerance: 'tolerance',\n returnGeometry: 'returnGeometry',\n };\n\n protected path = '/identify';\n\n protected params: Record<string, unknown> = {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true,\n f: 'json',\n };\n\n private _map: Map | null = null;\n private _layerScaleRanges: Record<number, LayerScaleRange> = {};\n\n constructor(options: string | IdentifyFeaturesOptions | Service) {\n // Handle different input types and convert to TaskOptions format\n let taskOptions: string | TaskOptions;\n\n if (typeof options === 'string') {\n taskOptions = options;\n } else if (options instanceof Service) {\n // Extract URL from Service instance\n taskOptions = { url: (options as Service & { options: { url: string } }).options.url };\n } else {\n // It's IdentifyFeaturesOptions, use as TaskOptions\n taskOptions = options;\n }\n\n super(taskOptions);\n this.path = '/identify';\n\n // Ensure dynamic setters are available even though subclass fields\n // are initialized after super() runs. This rebinds setter methods.\n if (this.setters) {\n for (const [method, param] of Object.entries(this.setters)) {\n (this as unknown as Record<string, unknown>)[method] = this.generateSetter(param, this);\n }\n }\n }\n\n /**\n * Perform identify operation at a point location\n */\n at(point: { lng: number; lat: number } | [number, number]): IdentifyFeatures {\n let geometry: GeometryInput;\n\n if (Array.isArray(point)) {\n geometry = {\n x: point[0],\n y: point[1],\n spatialReference: { wkid: 4326 },\n };\n } else {\n geometry = {\n x: point.lng,\n y: point.lat,\n spatialReference: { wkid: 4326 },\n };\n }\n\n this.params.geometry = JSON.stringify(geometry);\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n }\n\n // Strongly-typed chainable setters for common Identify params\n layers(value: number[] | number | string): IdentifyFeatures {\n this.params.layers = value;\n return this;\n }\n\n tolerance(value: number): IdentifyFeatures {\n this.params.tolerance = value;\n return this;\n }\n\n returnGeometry(value: boolean): IdentifyFeatures {\n this.params.returnGeometry = value;\n return this;\n }\n\n precision(value: number): IdentifyFeatures {\n this.params.geometryPrecision = value;\n return this;\n }\n\n /**\n * Set the map extent and image display for the identify operation.\n * Also stores the map reference for zoom-based scale filtering.\n */\n on(map: Map): IdentifyFeatures {\n this._map = map;\n try {\n const bounds = map.getBounds().toArray();\n this.params.mapExtent = [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]].join(',');\n\n const canvas = map.getCanvas();\n const dpi = (this.options as IdentifyFeaturesOptions)?.dpi ?? 96;\n this.params.imageDisplay = [canvas.width, canvas.height, dpi].join(',');\n } catch (error) {\n console.warn('Could not extract map extent and display info:', error);\n }\n return this;\n }\n\n /**\n * Set scale ranges for layers so the identify can skip layers not visible at the current zoom.\n * ArcGIS uses minScale (zoomed out limit) and maxScale (zoomed in limit).\n * A value of 0 means no limit.\n *\n * @example\n * identify.layerScales({\n * 0: { minScale: 1000000, maxScale: 0 }, // Cities: visible below 1:1M\n * 1: { minScale: 5000000, maxScale: 500000 }, // Highways: visible between 1:5M and 1:500K\n * 2: { minScale: 0, maxScale: 0 }, // States: always visible\n * });\n */\n layerScales(scales: Record<number, LayerScaleRange>): IdentifyFeatures {\n this._layerScaleRanges = scales;\n return this;\n }\n\n /**\n * Set layer definitions for filtering specific layers\n */\n layerDef(layerId: number | string, whereClause: string): IdentifyFeatures {\n const currentLayerDefs = (this.params.layerDefs as string) || '';\n this.params.layerDefs = currentLayerDefs\n ? `${currentLayerDefs};${layerId}:${whereClause}`\n : `${layerId}:${whereClause}`;\n return this;\n }\n\n /**\n * Simplify geometries based on map resolution\n */\n simplify(\n map: {\n getBounds(): {\n getWest(): number;\n getEast(): number;\n };\n getSize(): { x: number; y: number };\n },\n factor: number\n ): IdentifyFeatures {\n const bounds = map.getBounds();\n const mapWidth = Math.abs(bounds.getWest() - bounds.getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().x) * factor;\n return this;\n }\n\n /**\n * Get the current map scale from zoom level.\n * Uses the standard Web Mercator scale formula at 96 DPI.\n */\n private _getMapScale(): number | null {\n if (!this._map || typeof this._map.getZoom !== 'function') return null;\n const zoom = this._map.getZoom();\n return SCALE_AT_ZOOM_0 / Math.pow(2, zoom);\n }\n\n /**\n * Check if a layer is visible at the given scale.\n * ArcGIS convention: minScale = most zoomed out (largest number), maxScale = most zoomed in (smallest number).\n * A value of 0 means no limit in that direction.\n */\n private _isLayerVisibleAtScale(layerId: number, scale: number): boolean {\n const range = this._layerScaleRanges[layerId];\n if (!range) return true; // No scale info means always visible\n if (range.minScale && scale > range.minScale) return false; // Too zoomed out\n if (range.maxScale && scale < range.maxScale) return false; // Too zoomed in\n return true;\n }\n\n /**\n * Filter the layers parameter to only include layers visible at the current scale.\n * Returns false if no layers are visible (request should be skipped).\n */\n private _filterLayersByScale(): boolean {\n const scale = this._getMapScale();\n if (scale === null || Object.keys(this._layerScaleRanges).length === 0) return true;\n\n const layersParam = this.params.layers;\n if (typeof layersParam !== 'string') return true;\n\n // Parse layers string: \"all\", \"visible:0,1,2\", \"top\", \"visible\", \"0,1,2\"\n const match = layersParam.match(/^(all|top|visible)(?::(.+))?$/);\n if (!match) return true;\n\n const prefix = match[1];\n const idsPart = match[2];\n\n // If no specific IDs, filter all known layer IDs from scale ranges\n let layerIds: number[];\n if (idsPart) {\n layerIds = idsPart\n .split(',')\n .map(Number)\n .filter(n => !isNaN(n));\n } else {\n layerIds = Object.keys(this._layerScaleRanges).map(Number);\n }\n\n const visibleIds = layerIds.filter(id => this._isLayerVisibleAtScale(id, scale));\n\n if (visibleIds.length === 0) return false;\n\n // Update layers param with only visible IDs\n this.params.layers = `${prefix}:${visibleIds.join(',')}`;\n return true;\n }\n\n /**\n * Execute the identify operation.\n * If layer scale ranges are set via `layerScales()` and a map is provided via `on()`,\n * layers not visible at the current zoom level will be excluded. If no layers are visible,\n * an empty FeatureCollection is returned without making a network request.\n */\n async run(): Promise<GeoJSON.FeatureCollection> {\n // Skip request entirely if no layers are visible at the current scale\n if (!this._filterLayersByScale()) {\n return { type: 'FeatureCollection', features: [] };\n }\n\n try {\n const response = await this.request<{\n results: Array<{\n layerId: number;\n layerName: string;\n value: string;\n displayFieldName: string;\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n }>();\n\n return this._convertToGeoJSON(response);\n } catch (error) {\n const isTestEnvironment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'test';\n if (!isTestEnvironment) {\n console.error('IdentifyFeatures error:', error);\n }\n throw error;\n }\n }\n\n private _convertToGeoJSON(response: {\n results: Array<{\n layerId: number;\n layerName: string;\n value: string;\n displayFieldName: string;\n attributes: Record<string, unknown>;\n geometry?: unknown;\n }>;\n }): GeoJSON.FeatureCollection {\n const features: GeoJSON.Feature[] = (response.results || []).map(result => {\n const feature: GeoJSON.Feature = {\n type: 'Feature',\n properties: {\n ...result.attributes,\n layerId: result.layerId,\n layerName: result.layerName,\n displayFieldName: result.displayFieldName,\n value: result.value,\n },\n geometry: (result.geometry as GeoJSON.Geometry) || null,\n };\n\n // Add layerId as a custom property for easier identification\n const featureWithLayerId = feature as GeoJSON.Feature & { layerId: number };\n featureWithLayerId.layerId = result.layerId;\n\n return feature;\n });\n\n return {\n type: 'FeatureCollection',\n features,\n };\n }\n}\n","import { Task } from '@/Tasks/Task';\n\nexport interface IdentifyImageOptions {\n url: string;\n token?: string;\n geometry?: unknown;\n geometryType?: string;\n sr?: string | number;\n mosaic?: boolean;\n renderingRules?: unknown[];\n pixelSize?: [number, number];\n returnGeometry?: boolean;\n returnCatalogItems?: boolean;\n f?: string;\n}\n\nexport interface PixelValue {\n attributes: Record<string, unknown>;\n geometry?: unknown;\n}\n\nexport interface IdentifyImageResult {\n objectId?: number;\n name?: string;\n value?: string;\n location?: {\n x: number;\n y: number;\n spatialReference?: {\n wkid: number;\n latestWkid?: number;\n };\n };\n attributes?: Record<string, unknown>;\n catalogItems?: unknown[];\n catalogItemVisibilities?: number[];\n}\n\n/**\n * IdentifyImage task for identifying pixel values in ArcGIS Image Services\n * Based on Esri Leaflet's IdentifyImage functionality\n */\nexport class IdentifyImage extends Task {\n protected setters = {\n returnCatalogItems: 'returnCatalogItems',\n returnGeometry: 'returnGeometry',\n pixelSize: 'pixelSize',\n token: 'token',\n };\n\n protected path = 'identify';\n\n protected params: Record<string, unknown> = {\n sr: 4326,\n returnGeometry: false,\n returnCatalogItems: false,\n f: 'json',\n };\n\n constructor(options: string | IdentifyImageOptions) {\n super(options);\n\n // If options is a IdentifyImageOptions object, merge relevant properties into params\n if (options && typeof options === 'object' && typeof options !== 'string') {\n const imageOptions = options as IdentifyImageOptions;\n\n // Merge identify-specific options into params\n if (imageOptions.geometry !== undefined) this.params.geometry = imageOptions.geometry;\n if (imageOptions.geometryType !== undefined)\n this.params.geometryType = imageOptions.geometryType;\n if (imageOptions.sr !== undefined) this.params.sr = imageOptions.sr;\n if (imageOptions.mosaic !== undefined) this.params.mosaic = imageOptions.mosaic;\n if (imageOptions.renderingRules !== undefined)\n this.params.renderingRules = imageOptions.renderingRules;\n if (imageOptions.pixelSize !== undefined) this.params.pixelSize = imageOptions.pixelSize;\n if (imageOptions.returnGeometry !== undefined)\n this.params.returnGeometry = imageOptions.returnGeometry;\n if (imageOptions.returnCatalogItems !== undefined)\n this.params.returnCatalogItems = imageOptions.returnCatalogItems;\n if (imageOptions.token !== undefined) this.params.token = imageOptions.token;\n if (imageOptions.f !== undefined) this.params.f = imageOptions.f;\n }\n }\n\n /**\n * Identify pixel values at a specific point\n */\n at(point: { lng: number; lat: number } | [number, number]): IdentifyImage {\n let geometry: { x: number; y: number; spatialReference: { wkid: number } };\n\n if (Array.isArray(point)) {\n geometry = {\n x: point[0],\n y: point[1],\n spatialReference: { wkid: 4326 },\n };\n } else {\n geometry = {\n x: point.lng,\n y: point.lat,\n spatialReference: { wkid: 4326 },\n };\n }\n\n this.params.geometry = JSON.stringify(geometry);\n this.params.geometryType = 'esriGeometryPoint';\n this.params.sr = 4326;\n return this;\n }\n\n /**\n * Set custom geometry for identification\n */\n geometry(geometry: unknown, geometryType?: string): IdentifyImage {\n this.params.geometry = JSON.stringify(geometry);\n this.params.geometryType = geometryType || 'esriGeometryPoint';\n return this;\n }\n\n /**\n * Set pixel size for the identify operation\n */\n pixelSize(size: [number, number] | { x: number; y: number }): IdentifyImage {\n if (Array.isArray(size)) {\n this.params.pixelSize = `${size[0]},${size[1]}`;\n } else {\n this.params.pixelSize = `${size.x},${size.y}`;\n }\n return this;\n }\n\n /**\n * Set whether to return geometry with results\n */\n returnGeometry(returnGeom: boolean): IdentifyImage {\n this.params.returnGeometry = returnGeom;\n return this;\n }\n\n /**\n * Set whether to return catalog items\n */\n returnCatalogItems(returnItems: boolean): IdentifyImage {\n this.params.returnCatalogItems = returnItems;\n return this;\n }\n\n /**\n * Set mosaic rule for the identify operation\n */\n mosaicRule(rule: unknown): IdentifyImage {\n this.params.mosaicRule = JSON.stringify(rule);\n return this;\n }\n\n /**\n * Set rendering rules for the identify operation\n */\n renderingRule(rule: unknown): IdentifyImage {\n this.params.renderingRule = JSON.stringify(rule);\n return this;\n }\n\n /**\n * Execute the identify operation\n */\n async run(): Promise<{\n results: IdentifyImageResult[];\n location?: {\n x: number;\n y: number;\n spatialReference?: {\n wkid: number;\n latestWkid?: number;\n };\n };\n }> {\n const response = await this.request<{\n results?: IdentifyImageResult[];\n location?: {\n x: number;\n y: number;\n spatialReference?: {\n wkid: number;\n latestWkid?: number;\n };\n };\n // Handle different response formats\n value?: string;\n values?: string[];\n properties?: Record<string, unknown>;\n catalogItems?: unknown[];\n }>();\n\n // Normalize different response formats\n let results: IdentifyImageResult[] = [];\n\n if (response.results) {\n results = response.results;\n } else if (response.value !== undefined || response.values) {\n // Handle simple value responses\n results = [\n {\n value: response.value || (response.values && response.values[0]) || '',\n attributes: response.properties || {},\n },\n ];\n }\n\n return {\n results,\n location: response.location,\n };\n }\n\n /**\n * Execute and return pixel values as a simple array\n */\n async getPixelValues(): Promise<Array<string | number | null>> {\n const response = await this.run();\n return response.results.map(result => {\n if (result.value !== undefined) {\n const numValue = parseFloat(result.value);\n return isNaN(numValue) ? result.value : numValue;\n }\n return null;\n });\n }\n\n /**\n * Execute and return detailed pixel information\n */\n async getPixelData(): Promise<IdentifyImageResult[]> {\n const response = await this.run();\n return response.results;\n }\n}\n\nexport function identifyImage(options: string | IdentifyImageOptions): IdentifyImage {\n return new IdentifyImage(options);\n}\n\nexport default identifyImage;\n"],"names":["cleanTrailingSlash","url","replace","isAbortError","error","DOMException","name","Error","message","toLowerCase","includes","errorObj","constructor","stringified","String","getServiceDetails","fetchOptions","token","params","URLSearchParams","f","append","response","fetch","toString","ok","status","data","json","POWERED_BY_ESRI_ATTRIBUTION_STRING","updateAttribution","newAttribution","sourceId","map","mapWithControls","attributionController","_controls","find","c","customAttribution","options","undefined","Array","isArray","indexOf","push","mapStyle","style","sourceCaches","_source","attribution","_otherSourceCaches","_updateAttributions","Service","Object","defineProperty","proxy","useCors","timeout","getAttributionFromService","get","path","_request","post","request","requestWithCallback","method","callback","_requestWithCallback","metadata","_serviceMetadata","isTestEnvironment","process","env","NODE_ENV","console","authenticate","_authenticating","_runQueue","getTimeout","setTimeout","setAttributionFromService","_map","copyrightText","warn","on","event","_eventListeners","off","listeners","index","splice","fire","forEach","wrappedCallback","_createServiceCallback","finalParams","requestParams","_requestQueue","_makeRequest","Promise","resolve","reject","controller","AbortController","timeoutId","abort","signal","apiKey","headers","formData","FormData","keys","key","value","JSON","stringify","body","searchParams","join","fullUrl","code","err","details","timeoutError","clearTimeout","errorWithCode","authError","i","length","DynamicMapService","esriServiceOptions","rasterSrcOptions","_sourceId","_defaultEsriOptions","layers","layerDefs","dynamicLayers","format","dpi","transparent","_createSource","catch","_layersStr","lyrs","_layerDefs","_time","to","from","Date","valueOf","_dynamicLayers","dl","normalized","l","visible","rest","withSource","source","type","mapLayerId","id","visibility","result","tileSize","bboxSR","imageSR","size","_appendTokenIfExists","tileUrl","tiles","getSource","addSource","_updateSource","now","performance","_lastUpdateTime","_updateDelay","_pendingUpdate","cancelAnimationFrame","requestAnimationFrame","_updateSourceInternal","src","_options","setTiles","clearTiles","update","transform","setLayerDefs","obj","setDynamicLayers","_ensureAllVisibleLayers","visibleLayerIds","_getVisibleLayerIds","existingIds","Set","additional","filter","has","setLayerDrawingInfo","layerId","drawingInfo","current","next","idx","findIndex","setLayerRenderer","renderer","setLayerVisibility","setLayerDefinition","definitionExpression","setLayerFilter","where","_buildWhere","_escapeValue","val","s","_isGroupFilter","op","filters","_isBetweenFilter","field","_isInFilter","values","_isNullFilter","_isComparisonFilter","trim","vals","v","built","Boolean","setLayers","arr","setDate","setToken","getMetadata","then","_layersStrIdentify","layersStr","identify","lnglat","returnGeometry","canvas","getCanvas","bounds","getBounds","toArray","sr","geometryType","geometry","x","lng","y","lat","spatialReference","wkid","tolerance","imageDisplay","width","height","mapExtent","setLayerLabels","labelingInfo","setLayerLabelsVisible","layer","labelExpression","symbol","color","font","family","setLayerTimeOptions","timeOptions","layerTimeOptions","animateTime","intervalMs","loop","onFrame","onComplete","totalDuration","getTime","steps","Math","ceil","currentStep","animate","progress","currentTime","getLayerStatistics","statisticFields","queryUrl","outStatistics","groupByFieldsForStatistics","features","queryLayerFeatures","outFields","spatialRel","orderByFields","resultOffset","resultRecordCount","returnCountOnly","returnIdsOnly","exportMapImage","exportUrl","bbox","gdbVersion","historicMoment","statusText","blob","generateLegend","layerIds","legendUrl","getLayerInfo","layerUrl","getLayerFields","layerInfo","fields","getLayerExtent","extent","discoverLayers","serviceUrl","setBulkLayerProperties","operations","operation","beginUpdate","_pendingUpdates","commitUpdate","rollbackUpdate","isInTransaction","remove","removeSource","mapWithStyle","mapLayerApi","mapSourceApi","getStyle","getLayer","removeLayer","hasLayer","hasSource","TiledMapService","ImageService","time","mosaicRule","renderingRule","setRenderingRule","rule","setMosaicRule","VectorBasemapStyle","styleName","auth","opts","provided","itemId","_canonical","_toCanonical","_apiKey","_token","_language","language","_worldview","worldview","_itemId","_version","version","_host","host","_format","styleUrl","portalHost","set","qs","setStyle","applyStyle","vectorStyle","lower","COLON_TO_SLASH","test","split","slug","VectorTileService","vectorSrcOptions","useDefaultStyle","_tileUrl","_mapToLocalSource","layout","paint","defaultStyle","_defaultStyleData","_styleUrl","defaultStyles","load","_retrieveStyle","FeatureService","arcgisOptions","geojsonSourceOptions","_tileIndices","globalThis","Map","_featureIndices","_featureCollections","cleanedUrl","_esriServiceOptions","useStaticZoomLevel","minZoom","simplifyFactor","precision","useServiceBounds","projectionEndpoint","_fallbackProjectionEndpoint","_maxExtent","Infinity","sourceReady","_sourceReadyResolve","_sourceReadyReject","_getBlankFc","_initialize","_getServiceMetadata","supportsPbf","supportsGeojson","serviceExtent","_setBounds","xmin","ymin","xmax","ymax","_projectBounds","uniqueIdField","currentFields","_setAttribution","enableRequests","_clearAndRefreshTiles","disableRequests","destroySource","supportedQueryFormats","serviceMetadata","_url","baseStyle","_boundEvent","_findAndMapData","bind","setWhere","newWhere","clearWhere","setOutFields","_createOrGetTileIndex","zoomLevel","existingZoomIndex","newIndex","_createOrGetFeatureCollection","fc","_createOrGetFeatureIdIndex","existingFeatureIdIndex","newFeatureIdIndex","z","getZoom","boundsArray","primaryTile","tilebelt","bboxToTile","_doesTileOverlapBbox","floor","zoomLevelIndex","featureIdIndex","tilesToRequest","candidateTiles","getChildren","minZoomOfCandidates","newCandidateTiles","t","tile","quadKey","tileToQuadkey","_updateFcOnMap","mapWidth","abs","_loadTiles","promises","_getTile","featureCollections","all","tileFc","_iterateItems","feature","featureId","tileBounds","tileToBBOX","latestWkid","outSR","returnZ","returnM","quantizationParameters","mode","resultType","inSR","buffer","arrayBuffer","decoded","tileDecode","Uint8Array","featureCollection","_checkAgolError","_handleAuthError","setData","getFeaturesByLonLat","radius","units","distance","getFeaturesByObjectIds","objectIds","idsString","queryFeatures","queryOptions","having","geometries","_projectionEndpointIsFallback","_getFetchHeaders","errorData","_fireEvent","cb","addFeatures","addResults","updateFeatures","updateResults","deleteFeatures","deleteParams","deleteResults","applyEdits","edits","adds","updates","deletes","queryAttachments","objectId","globalIds","attachmentInfos","addAttachment","file","fileName","File","addAttachmentResult","deleteAttachments","attachmentIds","deleteAttachmentResults","updateSource","_layers","setGeometry","clearGeometry","setBoundingBoxFilter","enabled","updateData","Task","endpoint","_service","setters","setter","param","generateSetter","context","apikey","formatted","returnUnformattedValues","run","assign","baseUrl","endsWith","slice","cleanPath","startsWith","fullServiceUrl","Query","offset","limit","featureIds","returnDistinctValues","returnExtentOnly","maxAllowableOffset","geometryPrecision","returnTrueCurves","within","_setGeometryParams","intersects","contains","crosses","touches","overlaps","bboxIntersects","nearby","latlng","whereClause","between","start","end","startTime","endTime","simplify","factor","_northEast","_southWest","getSize","orderBy","fieldName","order","currentOrder","distinct","pixelSize","point","_cleanParams","_convertToGeoJSON","runAll","maxPages","allFeatures","page","exceededTransferLimit","count","ids","converted","_setGeometry","geom","properties","attributes","query","Find","text","searchText","findOptions","searchFields","currentLayerDefs","getWest","getEast","results","layerName","foundFieldName","_convertEsriGeometry","esriGeom","coordinates","rings","paths","SCALE_AT_ZOOM_0","IdentifyFeatures","taskOptions","entries","at","layerScales","scales","_layerScaleRanges","layerDef","_getMapScale","zoom","pow","_isLayerVisibleAtScale","scale","range","minScale","maxScale","_filterLayersByScale","layersParam","match","prefix","idsPart","Number","n","isNaN","visibleIds","displayFieldName","featureWithLayerId","IdentifyImage","returnCatalogItems","imageOptions","mosaic","renderingRules","returnGeom","returnItems","location","getPixelValues","numValue","parseFloat","getPixelData","identifyImage"],"mappings":"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"}