esri-gl 1.0.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DsY1_0df.js","sources":["../src/request.ts","../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","../src/Portal/index.ts"],"sourcesContent":["/**\n * Shared request + authentication adapter built on `@esri/arcgis-rest-request`.\n *\n * Every network call in esri-gl that talks to an ArcGIS REST endpoint flows\n * through this module so that authentication, error handling and parameter\n * encoding are handled once by the official ArcGIS REST JS client instead of\n * the bespoke `fetch` wrappers this library used to ship.\n */\nimport {\n request,\n ApiKeyManager,\n ArcGISIdentityManager,\n ApplicationCredentialsManager,\n ArcGISRequestError,\n ArcGISAuthError,\n type IAuthenticationManager,\n type IRequestOptions,\n} from '@esri/arcgis-rest-request';\n\nexport {\n ApiKeyManager,\n ArcGISIdentityManager,\n ApplicationCredentialsManager,\n ArcGISRequestError,\n ArcGISAuthError,\n};\nexport type { IAuthenticationManager, IRequestOptions };\n\n/**\n * Authentication accepted throughout esri-gl. Either an ArcGIS REST JS\n * authentication manager (`ApiKeyManager`, `ArcGISIdentityManager`, …) or a\n * raw token/API-key string for convenience.\n */\nexport type EsriAuthentication = IAuthenticationManager | string;\n\n/**\n * Options every service/task accepts for authenticating ArcGIS REST requests.\n * `authentication` takes precedence, then `apiKey`, then `token`.\n */\nexport interface EsriAuthOptions {\n /** An ArcGIS REST JS authentication manager. */\n authentication?: EsriAuthentication;\n /** A static API key (ArcGIS Location Platform). */\n apiKey?: string;\n /** A static, pre-generated token. */\n token?: string;\n}\n\n/**\n * Normalise the various auth inputs into an `IAuthenticationManager` (or\n * `undefined` for anonymous requests). A bare string is wrapped in an\n * `ApiKeyManager` so it is sent as the `token` parameter, matching ArcGIS REST\n * conventions.\n */\nexport function resolveAuthentication(\n options: EsriAuthOptions | undefined\n): IAuthenticationManager | undefined {\n if (!options) return undefined;\n\n const { authentication, apiKey, token } = options;\n\n if (authentication) {\n return typeof authentication === 'string'\n ? ApiKeyManager.fromKey(authentication)\n : authentication;\n }\n\n const key = apiKey ?? token;\n return key ? ApiKeyManager.fromKey(key) : undefined;\n}\n\nexport interface EsriRequestOptions extends EsriAuthOptions {\n /** Query/body parameters. `f: 'json'` is supplied by default. */\n params?: Record<string, unknown>;\n /** HTTP method. ArcGIS REST JS defaults to POST; most reads use GET. */\n httpMethod?: 'GET' | 'POST';\n /** Return the raw `Response` instead of the parsed body (e.g. for PBF). */\n rawResponse?: boolean;\n /** Abort signal for cancellation/timeout support. */\n signal?: AbortSignal;\n /** Additional request headers. */\n headers?: Record<string, string>;\n}\n\n/**\n * Thin wrapper over `@esri/arcgis-rest-request`'s `request()` that applies\n * esri-gl's auth resolution and sensible defaults. Throws `ArcGISRequestError`\n * (and friends) on ArcGIS service-level or HTTP errors.\n */\nexport function esriRequest<T = unknown>(\n url: string,\n options: EsriRequestOptions = {}\n): Promise<T> {\n const { params, httpMethod, rawResponse, signal, headers, ...auth } = options;\n\n const requestOptions: IRequestOptions = {\n params: { f: 'json', ...params },\n authentication: resolveAuthentication(auth),\n };\n\n if (httpMethod) requestOptions.httpMethod = httpMethod;\n if (rawResponse) requestOptions.rawResponse = true;\n if (signal) requestOptions.signal = signal;\n if (headers) requestOptions.headers = headers;\n\n return request(url, requestOptions) as Promise<T>;\n}\n\nexport interface EsriRawRequestOptions extends EsriAuthOptions {\n /** Query parameters (objects are JSON-stringified). */\n params?: Record<string, unknown>;\n /** Abort signal for cancellation/timeout support. */\n signal?: AbortSignal;\n /** Additional request headers. */\n headers?: Record<string, string>;\n}\n\n/**\n * Fetch a **binary** ArcGIS response (PBF tiles, exported images) as a raw\n * `Response`, applying esri-gl auth. Used instead of `esriRequest`'s deprecated\n * `rawResponse` option (removed in ArcGIS REST JS v5).\n */\nexport async function esriRawRequest(\n url: string,\n options: EsriRawRequestOptions = {}\n): Promise<Response> {\n const { params, signal, headers, ...auth } = options;\n\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(params ?? {})) {\n if (value === undefined || value === null) continue;\n search.append(key, typeof value === 'object' ? JSON.stringify(value) : String(value));\n }\n\n const manager = resolveAuthentication(auth);\n if (manager) {\n try {\n const token = await manager.getToken(url);\n if (token) search.append('token', token);\n } catch {\n // fall through and request anonymously\n }\n }\n\n const response = await fetch(`${url}?${search.toString()}`, { signal, headers });\n if (!response.ok) {\n throw new Error(`Request failed: HTTP ${response.status}`);\n }\n return response;\n}\n","import type { Map, ServiceMetadata } from '@/types';\nimport { esriRequest, type EsriRequestOptions } from '@/request';\n\nexport function cleanTrailingSlash(url: string): string {\n return url.replace(/\\/$/, '');\n}\n\n/**\n * Append a `token` query parameter if a non-empty token is supplied.\n * Centralizes the duplicated token-injection logic used by every service.\n */\nexport function appendTokenIfExists(params: URLSearchParams, token?: string | null): void {\n if (token) {\n params.append('token', token);\n }\n}\n\n/**\n * Remove every layer that references the given source, then remove the\n * source itself. Safe against disposed maps, missing style methods, and\n * layers that were already removed elsewhere.\n */\nexport function removeMapSource(map: Map | null | undefined, sourceId: string): void {\n if (!map || typeof map.removeSource !== 'function') return;\n\n try {\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 getLayer?: (id: string) => unknown;\n removeLayer?: (id: string) => void;\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 !== sourceId) return;\n if (\n typeof mapWithStyle.getLayer !== 'function' ||\n typeof mapWithStyle.removeLayer !== 'function'\n ) {\n return;\n }\n let hasLayer = false;\n try {\n hasLayer = Boolean(mapWithStyle.getLayer(layer.id));\n } catch {\n hasLayer = false;\n }\n if (!hasLayer) return;\n try {\n mapWithStyle.removeLayer(layer.id);\n } catch (error) {\n console.warn(`Failed to remove layer ${layer.id} for source ${sourceId}:`, error);\n }\n });\n }\n\n if (typeof mapWithStyle.getSource === 'function') {\n let hasSource = false;\n try {\n hasSource = Boolean(mapWithStyle.getSource(sourceId));\n } catch {\n hasSource = false;\n }\n if (hasSource) {\n try {\n map.removeSource(sourceId);\n } catch (error) {\n console.warn(`Failed to remove source ${sourceId}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Failed to remove source ${sourceId}:`, error);\n }\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\n/**\n * Fetch the `?f=json` metadata document for an ArcGIS service endpoint.\n *\n * Delegates to `@esri/arcgis-rest-request` via {@link esriRequest}, which\n * handles authentication and ArcGIS error responses. Accepts an\n * {@link EsriRequestOptions} object (`token` / `apiKey` / `authentication`).\n */\nexport async function getServiceDetails(\n url: string,\n options: EsriRequestOptions = {}\n): Promise<ServiceMetadata> {\n return esriRequest<ServiceMetadata>(url, { httpMethod: 'GET', ...options });\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 { esriRequest } from '@/request';\nimport type { EsriAuthentication } from '@/request';\nimport type { Map, ServiceMetadata } from '@/types';\n\nexport interface ServiceOptions {\n url: string;\n /** @deprecated The leaflet-style proxy string is no longer applied; configure\n * a proxy through your `authentication` manager or a global fetch override. */\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 /** An ArcGIS REST JS authentication manager (takes precedence over token/apiKey). */\n authentication?: EsriAuthentication;\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 // Token/apiKey/authentication are applied by the request adapter, not as\n // raw params, so they are not injected here.\n let finalParams = { ...params };\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.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 const data = await esriRequest(url, {\n params,\n httpMethod: method === 'POST' ? 'POST' : 'GET',\n signal: controller.signal,\n token: this.options.token,\n apiKey: this.options.apiKey,\n authentication: this.options.authentication,\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 callback(new Error(`Request timed out after ${this.options.timeout}ms`));\n } else {\n // ArcGISRequestError exposes a numeric `code` used downstream for\n // authentication (498/499) detection.\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","import {\n appendTokenIfExists,\n cleanTrailingSlash,\n getServiceDetails,\n isAbortError,\n removeMapSource,\n updateAttribution,\n} from '@/utils';\nimport { esriRequest, esriRawRequest, resolveAuthentication } from '@/request';\nimport { getLayer, getAllLayersAndTables, queryFeatures } from '@esri/arcgis-rest-feature-service';\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<\n Required<EsriServiceOptions>,\n 'url' | 'time' | 'token' | 'apiKey' | 'authentication'\n >;\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 // apiKey is sent as the token URL parameter, matching the request-based paths.\n const auth = this.esriServiceOptions as { token?: string; apiKey?: string };\n appendTokenIfExists(params, auth.token ?? auth.apiKey);\n }\n\n private _auth() {\n const o = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: import('@/request').EsriAuthentication;\n };\n return { token: o.token, apiKey: o.apiKey, authentication: o.authentication };\n }\n\n /** Resolved ArcGIS REST JS auth manager for the typed feature-service helpers. */\n private _authentication() {\n return resolveAuthentication(this._auth());\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(this.esriServiceOptions.url, this._auth())\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: Record<string, unknown> = {\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 };\n\n if (this._layerDefs) params.layerDefs = this._layerDefs;\n if (this._dynamicLayers) params.dynamicLayers = this._dynamicLayers;\n if (this._time) params.time = this._time;\n\n const data = await esriRequest(`${this.esriServiceOptions.url}/identify`, {\n params,\n ...this._auth(),\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 data = await queryFeatures({\n url: `${this.esriServiceOptions.url}/${layerId}`,\n where: options.where || '1=1',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n outStatistics: statisticFields as any,\n groupByFieldsForStatistics: options.groupByFieldsForStatistics,\n returnGeometry: false,\n authentication: this._authentication(),\n });\n\n return ((data as { features?: StatisticResult[] }).features || []) as StatisticResult[];\n }\n\n /** Query features from a specific sublayer */\n async queryLayerFeatures(layerId: number, options: LayerQueryOptions = {}): Promise<FeatureSet> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const requestOptions: Record<string, any> = {\n url: `${this.esriServiceOptions.url}/${layerId}`,\n where: options.where || '1=1',\n returnGeometry: options.returnGeometry !== false,\n outFields: options.outFields || '*',\n authentication: this._authentication(),\n };\n\n if (options.geometry) {\n requestOptions.geometry = options.geometry;\n requestOptions.geometryType = options.geometryType || 'esriGeometryEnvelope';\n requestOptions.spatialRel = options.spatialRel || 'esriSpatialRelIntersects';\n }\n if (options.orderByFields) requestOptions.orderByFields = options.orderByFields;\n if (options.resultOffset) requestOptions.resultOffset = options.resultOffset;\n if (options.resultRecordCount) requestOptions.resultRecordCount = options.resultRecordCount;\n if (options.returnCountOnly) requestOptions.returnCountOnly = true;\n if (options.returnIdsOnly) requestOptions.returnIdsOnly = true;\n\n const data = await queryFeatures(requestOptions as Parameters<typeof queryFeatures>[0]);\n return data as unknown as FeatureSet;\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: Record<string, unknown> = {\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.layerDefs = JSON.stringify(options.layerDefs);\n }\n\n if (options.dynamicLayers) {\n const normalized = this._ensureAllVisibleLayers(options.dynamicLayers);\n params.dynamicLayers = JSON.stringify(normalized);\n }\n\n if (options.gdbVersion) {\n params.gdbVersion = options.gdbVersion;\n }\n\n if (options.historicMoment) {\n params.historicMoment = options.historicMoment.toString();\n }\n\n const response = await esriRawRequest(`${exportUrl}`, {\n params,\n ...this._auth(),\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: Record<string, unknown> = {};\n\n if (layerIds?.length) {\n params.layers = layerIds.join(',');\n }\n\n const data = await esriRequest<{ layers?: LegendInfo[] }>(legendUrl, {\n params,\n ...this._auth(),\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 data = await getLayer({\n url: `${this.esriServiceOptions.url}/${layerId}`,\n authentication: this._authentication(),\n });\n\n return data as unknown as LayerMetadata;\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 data = await getAllLayersAndTables({\n url: this.esriServiceOptions.url,\n authentication: this._authentication(),\n });\n\n return ((data.layers as unknown as LayerInfo[]) || []) as LayerInfo[];\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 removeMapSource(this._map, this._sourceId);\n }\n}\n","import { cleanTrailingSlash, getServiceDetails, removeMapSource, updateAttribution } from '@/utils';\nimport type { EsriAuthentication } from '@/request';\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 const { token, apiKey, authentication } = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n return new Promise((resolve, reject) => {\n getServiceDetails(this.esriServiceOptions.url, { token, apiKey, authentication })\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 removeMapSource(this._map, this._sourceId);\n }\n}\n","import {\n appendTokenIfExists,\n cleanTrailingSlash,\n getServiceDetails,\n removeMapSource,\n updateAttribution,\n} from '@/utils';\nimport { esriRequest, type EsriAuthentication } from '@/request';\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'\n | 'renderingRule'\n | 'mosaicRule'\n | 'bbox'\n | 'size'\n | 'bboxSR'\n | 'imageSR'\n | 'token'\n | 'apiKey'\n | 'authentication'\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 // apiKey is sent as the token URL parameter, matching the request-based paths.\n const auth = this.esriServiceOptions as { token?: string; apiKey?: string };\n appendTokenIfExists(params, auth.token ?? auth.apiKey);\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 const { token, apiKey, authentication } = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n return new Promise((resolve, reject) => {\n getServiceDetails(this.esriServiceOptions.url, { token, apiKey, authentication })\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: Record<string, unknown> = {\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 };\n\n if (this._time) params.time = this._time;\n\n const { token, apiKey, authentication } = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n\n return esriRequest(`${this.esriServiceOptions.url}/identify`, {\n params,\n token,\n apiKey,\n authentication,\n });\n }\n\n update(): void {\n this._updateSource();\n }\n\n remove(): void {\n removeMapSource(this._map, this._sourceId);\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\nimport { BasemapStyleSession, type StyleFamily } from '@esri/arcgis-rest-basemap-sessions';\nimport { resolveAuthentication } from '@/request';\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 useSession?: boolean; // Opt-in: back style requests with an official basemap style session\n sessionDuration?: number; // Optional session duration in seconds (matches the sessions API unit)\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 private _useSession: boolean;\n private _sessionDuration?: number;\n private _session?: BasemapStyleSession;\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 this._useSession = opts.useSession ?? false;\n this._sessionDuration = opts.sessionDuration;\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 /**\n * The style family for the official basemap sessions API, derived from the\n * canonical style id. esri-gl styles are all in the `arcgis` family.\n */\n private get _styleFamily(): StyleFamily {\n return this._canonical.startsWith('open/') ? 'open' : 'arcgis';\n }\n\n /**\n * The token from the active session, if a session has been started. Useful\n * for inspection / debugging. Returns `undefined` until `startSession()` runs.\n */\n get sessionToken(): string | undefined {\n return this._session?.token;\n }\n\n /**\n * Start (or reuse) an official basemap style session via\n * `@esri/arcgis-rest-basemap-sessions`. Requires an apiKey or token. The\n * resulting session is cached so repeated calls return the same instance.\n */\n async startSession(): Promise<BasemapStyleSession> {\n if (this._session) return this._session;\n const authentication = resolveAuthentication({ apiKey: this._apiKey, token: this._token });\n if (!authentication) {\n throw new Error('An Esri API Key or token must be supplied to start a basemap style session');\n }\n this._session = await BasemapStyleSession.start({\n authentication,\n styleFamily: this._styleFamily,\n ...(this._sessionDuration !== undefined ? { duration: this._sessionDuration } : {}),\n });\n return this._session;\n }\n\n /**\n * Resolve the style URL to apply. When `useSession` is enabled this starts a\n * session and returns a v2 style URL backed by the session token; otherwise it\n * returns the synchronous `styleUrl`.\n */\n async getStyleUrl(): Promise<string> {\n if (!this._useSession) return this.styleUrl;\n const session = await this.startSession();\n const token = await session.getToken();\n const params = new URLSearchParams();\n params.set('f', this._format);\n params.set('token', token);\n if (this._language) params.set('language', this._language);\n if (this._worldview) params.set('worldview', this._worldview);\n return `https://basemapstyles-api.arcgis.com/arcgis/rest/services/styles/v2/styles/${this._canonical}?${params.toString()}`;\n }\n\n /**\n * Apply a basemap style to a MapLibre/Mapbox map using a session-backed style\n * URL. Mirrors {@link applyStyle} but starts a basemap style session first.\n */\n static async applyStyleWithSession(\n map: { setStyle: (style: string) => void },\n styleName: EsriBasemapStyleName,\n auth: VectorBasemapStyleAuthOptions\n ): Promise<void> {\n const vectorStyle = new VectorBasemapStyle(styleName, { ...auth, useSession: true });\n const url = await vectorStyle.getStyleUrl();\n map.setStyle(url);\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, removeMapSource } from '@/utils';\nimport { esriRequest, type EsriAuthentication } from '@/request';\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 const { token, apiKey, authentication } = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n return new Promise((resolve, reject) => {\n esriRequest<{ layers?: unknown[] }>(`${this.options.url}/${this._styleUrl}`, {\n httpMethod: 'GET',\n token,\n apiKey,\n authentication,\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] as StyleData;\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 const { token, apiKey, authentication } = this.esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n return new Promise((resolve, reject) => {\n getServiceDetails(this.esriServiceOptions.url, { token, apiKey, authentication })\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 removeMapSource(this._map, this._sourceId);\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 {\n queryFeatures,\n queryRelated,\n decodeValues,\n getLayer,\n addFeatures,\n updateFeatures,\n deleteFeatures,\n applyEdits,\n getAttachments,\n deleteAttachments,\n} from '@esri/arcgis-rest-feature-service';\nimport { cleanTrailingSlash, removeMapSource, updateAttribution } from '@/utils';\nimport {\n esriRequest,\n esriRawRequest,\n resolveAuthentication,\n type EsriAuthentication,\n} from '@/request';\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 /** ArcGIS Location Platform API key (sent as the `token` parameter) */\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 _removed = false;\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._removed = true;\n this.disableRequests();\n removeMapSource(this._map, this._sourceId);\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 if (this._removed) return;\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: Record<string, unknown> = {\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.time = this._time;\n }\n\n const { token, apiKey, authentication } = this._authOptions();\n const queryUrl = `${this._esriServiceOptions.url}/query`;\n\n try {\n if (this._format === 'pbf') {\n const response = await esriRawRequest(queryUrl, {\n params,\n token,\n apiKey,\n authentication,\n });\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 esriRequest<GeoJSON.FeatureCollection>(queryUrl, {\n params,\n token,\n apiKey,\n authentication,\n });\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 // Guard against an in-flight tile request resolving after the service/map\n // was removed (e.g. a moveend handler firing during unmount).\n const map = this._map as unknown as { style?: unknown; getSource?: (id: string) => unknown };\n if (this._removed || !map || !map.style || typeof map.getSource !== 'function') return;\n\n let source: unknown;\n try {\n source = map.getSource(this._sourceId);\n } catch {\n return;\n }\n if (source && typeof source === 'object' && 'setData' in source) {\n (source as { setData: (data: GeoJSON.FeatureCollection) => void }).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 // The FeatureService url is a layer endpoint, so the layer definition\n // (supportedQueryFormats, uniqueIdField, extent, geometryType, …) comes\n // from the typed `getLayer` helper.\n const data = await getLayer({\n url: this._esriServiceOptions.url,\n authentication: this._authentication(),\n });\n\n this._serviceMetadata = data as unknown 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: Record<string, unknown> = {\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,\n outFields: '*',\n spatialRel: 'esriSpatialRelIntersects',\n units: 'esriSRUnit_Meter',\n distance: radius,\n f: 'geojson',\n };\n\n if (this._time) {\n params.time = this._time;\n }\n\n const result = await queryFeatures({\n url: this._esriServiceOptions.url,\n params,\n authentication: this._authentication(),\n });\n\n return result as unknown as GeoJSON.FeatureCollection;\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: Record<string, unknown> = {\n sr: '4326',\n objectIds: idsString,\n returnGeometry,\n outFields: '*',\n f: 'geojson',\n };\n\n const result = await queryFeatures({\n url: this._esriServiceOptions.url,\n params,\n authentication: this._authentication(),\n });\n\n return result as unknown as GeoJSON.FeatureCollection;\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: Record<string, unknown> = {};\n\n params.f = 'geojson';\n params.where = queryOptions.where || '1=1';\n params.outFields =\n typeof queryOptions.outFields === 'string'\n ? queryOptions.outFields\n : queryOptions.outFields?.join(',') || '*';\n params.returnGeometry = (queryOptions.returnGeometry !== false).toString();\n\n if (queryOptions.geometry) {\n params.geometry = JSON.stringify(queryOptions.geometry);\n if (queryOptions.geometryType) params.geometryType = queryOptions.geometryType;\n if (queryOptions.spatialRel) params.spatialRel = queryOptions.spatialRel;\n if (queryOptions.inSR) params.inSR = queryOptions.inSR;\n }\n if (queryOptions.outSR) params.outSR = queryOptions.outSR;\n if (queryOptions.orderByFields) params.orderByFields = queryOptions.orderByFields;\n if (queryOptions.groupByFieldsForStatistics)\n params.groupByFieldsForStatistics = queryOptions.groupByFieldsForStatistics;\n if (queryOptions.outStatistics && queryOptions.outStatistics.length > 0)\n params.outStatistics = JSON.stringify(queryOptions.outStatistics);\n if (queryOptions.having) params.having = queryOptions.having;\n if (queryOptions.resultOffset) params.resultOffset = queryOptions.resultOffset.toString();\n if (queryOptions.resultRecordCount)\n params.resultRecordCount = queryOptions.resultRecordCount.toString();\n\n try {\n const result = await queryFeatures({\n url: this._esriServiceOptions.url,\n params,\n authentication: this._authentication(),\n });\n\n return result as unknown as GeoJSON.FeatureCollection;\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: Record<string, unknown> = {\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 // The public fallback projection endpoint is anonymous; only forward auth\n // to the service's own projection endpoint.\n const auth = this._projectionEndpointIsFallback() ? {} : this._authOptions();\n\n try {\n const data = await esriRequest<{\n geometries: Array<{ xmin: number; ymin: number; xmax: number; ymax: number }>;\n }>(this._esriServiceOptions.projectionEndpoint, {\n params,\n ...auth,\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 /**\n * Read the authentication-related fields off the service options. The\n * `authentication` field is not part of the public options type, so the\n * options object is cast to surface it for {@link resolveAuthentication}.\n */\n private _authOptions(): { token?: string; apiKey?: string; authentication?: EsriAuthentication } {\n const opts = this._esriServiceOptions as {\n token?: string;\n apiKey?: string;\n authentication?: EsriAuthentication;\n };\n return { token: opts.token, apiKey: opts.apiKey, authentication: opts.authentication };\n }\n\n /** Build an ArcGIS REST JS authentication manager from the service options. */\n private _authentication() {\n return resolveAuthentication(this._authOptions());\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 // Related Records & Domain Decoding\n // ========================================\n\n /**\n * Query records related to this layer's features through a relationship\n * class. Wraps `queryRelated` from `@esri/arcgis-rest-feature-service`.\n */\n async queryRelatedRecords(options: {\n relationshipId?: number;\n objectIds?: number[];\n outFields?: string | string[];\n definitionExpression?: string;\n returnGeometry?: boolean;\n }): Promise<import('@esri/arcgis-rest-feature-service').IQueryRelatedResponse> {\n return queryRelated({\n url: this._esriServiceOptions.url,\n relationshipId: options.relationshipId,\n objectIds: options.objectIds,\n outFields: options.outFields as never,\n definitionExpression: options.definitionExpression,\n // `returnGeometry` is not a top-level queryRelated option; pass via params.\n params:\n options.returnGeometry !== undefined\n ? { returnGeometry: options.returnGeometry }\n : undefined,\n authentication: this._authentication(),\n });\n }\n\n /**\n * Replace coded-value-domain codes with their human-readable names in a\n * query response. Wraps `decodeValues` from\n * `@esri/arcgis-rest-feature-service`.\n *\n * @param queryResponse A response from a `f=json` feature query.\n * @param fields Optional subset of field names to decode (defaults to all).\n */\n async decodeValues(\n queryResponse: unknown,\n fields?: string[]\n ): Promise<import('@esri/arcgis-rest-feature-service').IQueryFeaturesResponse> {\n return decodeValues({\n url: this._esriServiceOptions.url,\n queryResponse: queryResponse as never,\n fields: fields as never,\n authentication: this._authentication(),\n });\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 res = await addFeatures({\n url: this._esriServiceOptions.url,\n features: features as unknown as Parameters<typeof addFeatures>[0]['features'],\n gdbVersion: options?.gdbVersion,\n authentication: this._authentication(),\n });\n return res.addResults as unknown as EditResult[];\n }\n\n /**\n * Update existing features\n */\n async updateFeatures(\n features: GeoJSON.Feature[],\n options?: { gdbVersion?: string }\n ): Promise<EditResult[]> {\n const res = await updateFeatures({\n url: this._esriServiceOptions.url,\n features: features as unknown as Parameters<typeof updateFeatures>[0]['features'],\n gdbVersion: options?.gdbVersion,\n authentication: this._authentication(),\n });\n return res.updateResults as unknown as EditResult[];\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 // Pass objectIds / where as first-order fields so arcgis-rest encodes them.\n // Only include each when supplied: deletion by `where` alone must not send\n // an empty objectIds list, and a hardcoded `objectIds: []` would (being\n // truthy) override a supplied `where`/objectIds via appendCustomParams.\n const res = await deleteFeatures({\n url: this._esriServiceOptions.url,\n authentication: this._authentication(),\n ...(deleteParams.objectIds ? { objectIds: deleteParams.objectIds } : {}),\n ...(deleteParams.where ? { where: deleteParams.where } : {}),\n } as Parameters<typeof deleteFeatures>[0]);\n return res.deleteResults as unknown as EditResult[];\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 type ApplyEditsParams = Parameters<typeof applyEdits>[0];\n const data = await applyEdits({\n url: this._esriServiceOptions.url,\n adds: edits.adds as unknown as ApplyEditsParams['adds'],\n updates: edits.updates as unknown as ApplyEditsParams['updates'],\n deletes: edits.deletes,\n gdbVersion: options?.gdbVersion,\n authentication: this._authentication(),\n });\n return data as unknown as ApplyEditsResult;\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 res = await getAttachments({\n url: this._esriServiceOptions.url,\n featureId: objectId,\n params: options?.globalIds ? { globalIds: options.globalIds.join(',') } : undefined,\n authentication: this._authentication(),\n });\n return (res.attachmentInfos as unknown as AttachmentInfo[]) || [];\n }\n\n /**\n * Add an attachment to a feature\n */\n async addAttachment(objectId: number, file: Blob | File, fileName?: string): Promise<EditResult> {\n // The package `addAttachment` only accepts a `File`. Preserve the existing\n // support for bare `Blob`s and an explicit `fileName` by posting the\n // attachment ourselves; `esriRequest` handles auth and error responses.\n const name = fileName || (file instanceof File ? file.name : 'attachment');\n const res = await esriRequest<{ addAttachmentResult: EditResult }>(\n `${this._esriServiceOptions.url}/${objectId}/addAttachment`,\n {\n params: { attachment: file, fileName: name },\n httpMethod: 'POST',\n ...this._authOptions(),\n }\n );\n return res.addAttachmentResult;\n }\n\n /**\n * Delete attachments from a feature\n */\n async deleteAttachments(objectId: number, attachmentIds: number[]): Promise<EditResult[]> {\n const res = await deleteAttachments({\n url: this._esriServiceOptions.url,\n featureId: objectId,\n attachmentIds,\n authentication: this._authentication(),\n });\n return res.deleteAttachmentResults as unknown as EditResult[];\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 { esriRequest } from '@/request';\nimport type { EsriAuthentication } from '@/request';\nimport { Service } from '@/Services/Service';\nimport type { ServiceCallback } from '@/Services/Service';\n\nexport interface TaskOptions {\n url?: string;\n /** @deprecated No longer applied; use `authentication` or a global fetch override. */\n proxy?: string | boolean;\n useCors?: boolean;\n requestParams?: Record<string, unknown>;\n token?: string;\n apikey?: string;\n /** An ArcGIS REST JS authentication manager (takes precedence over token/apikey). */\n authentication?: EsriAuthentication;\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), delegated to\n * `@esri/arcgis-rest-request`. Token/apiKey supplied either as task options\n * or as `token`/`apiKey` params are routed through the auth layer rather than\n * being sent as raw query parameters.\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 const baseUrl = cleanTrailingSlash(this.options.url);\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n const url = `${baseUrl}${cleanPath}`;\n\n const { token, apiKey, ...restParams } = params;\n\n esriRequest(url, {\n params: restParams,\n httpMethod: method === 'GET' ? 'GET' : 'POST',\n token: (token as string | undefined) ?? this.options.token,\n apiKey: (apiKey as string | undefined) ?? this.options.apikey,\n authentication: this.options.authentication,\n })\n .then(data => callback(undefined, data))\n .catch(error => callback(error as 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","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","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 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 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","/**\n * Portal item resolution.\n *\n * Turns an ArcGIS portal item id into ready-to-render esri-gl services using\n * `@esri/arcgis-rest-portal`. Two entry points are provided:\n *\n * - {@link serviceFromPortalItem} — resolve a single-layer item (Feature / Map /\n * Image / Vector Tile service) to the matching esri-gl service.\n * - {@link servicesFromWebMap} — read a Web Map item's `operationalLayers`\n * (and optionally its basemap) and instantiate a service per layer.\n */\nimport { getItem, getItemData, searchItems, SearchQueryBuilder } from '@esri/arcgis-rest-portal';\nimport type {\n IItem,\n ISearchResult,\n ISearchOptions,\n IGroup,\n IUser,\n IPagingParams,\n} from '@esri/arcgis-rest-portal';\nimport { resolveAuthentication, type EsriAuthOptions } from '@/request';\n\nexport { SearchQueryBuilder };\nexport type { ISearchResult, ISearchOptions, IItem, IGroup, IUser, IPagingParams };\nimport { cleanTrailingSlash } from '@/utils';\nimport type { Map } from '@/types';\n\nimport { DynamicMapService } from '@/Services/DynamicMapService';\nimport { TiledMapService } from '@/Services/TiledMapService';\nimport { ImageService } from '@/Services/ImageService';\nimport { VectorTileService } from '@/Services/VectorTileService';\nimport { FeatureService } from '@/Services/FeatureService';\n\n/** Any esri-gl service instance a portal item can resolve to. */\nexport type PortalResolvedService =\n | DynamicMapService\n | TiledMapService\n | ImageService\n | VectorTileService\n | FeatureService;\n\n/** esri-gl service kinds, used to label resolution results. */\nexport type PortalServiceKind = 'dynamic' | 'tiled' | 'image' | 'vector-tile' | 'feature';\n\nexport interface PortalRequestOptions extends EsriAuthOptions {\n /** Portal sharing REST URL. Defaults to ArcGIS Online. */\n portal?: string;\n}\n\nexport interface PortalItemServiceOptions extends PortalRequestOptions {\n /** For multi-layer Feature Services, which sublayer to load (default 0). */\n layerId?: number;\n /** Extra options merged into the constructed service's options object. */\n serviceOptions?: Record<string, unknown>;\n /** Raster source options (Dynamic / Tiled / Image services). */\n rasterSrcOptions?: Record<string, unknown>;\n /** Vector source options (Vector Tile service). */\n vectorSrcOptions?: Record<string, unknown>;\n /** GeoJSON source options (Feature service). */\n geojsonSourceOptions?: Record<string, unknown>;\n}\n\nexport interface PortalServiceResult {\n /** The instantiated esri-gl service. */\n service: PortalResolvedService;\n /** Which kind of service was created. */\n kind: PortalServiceKind;\n /** The source id registered on the map. */\n sourceId: string;\n /** The service URL the item resolved to. */\n url: string;\n /** The portal item (single-item resolution only). */\n item?: IItem;\n /** Human-readable title (item title or web map layer title). */\n title?: string;\n}\n\nfunction requestOptions(options: PortalRequestOptions | undefined) {\n const authentication = resolveAuthentication(options);\n const opts: { authentication?: ReturnType<typeof resolveAuthentication>; portal?: string } = {};\n if (authentication) opts.authentication = authentication;\n if (options?.portal) opts.portal = options.portal;\n return opts;\n}\n\n/** Shared auth fields forwarded into a constructed service's options. */\nfunction authServiceFields(options: EsriAuthOptions | undefined) {\n const fields: Record<string, unknown> = {};\n if (options?.authentication !== undefined) fields.authentication = options.authentication;\n if (options?.apiKey !== undefined) fields.apiKey = options.apiKey;\n if (options?.token !== undefined) fields.token = options.token;\n return fields;\n}\n\n/** True when a Feature Service url already points at a specific sublayer. */\nfunction urlHasLayerIndex(url: string): boolean {\n return /\\/\\d+$/.test(cleanTrailingSlash(url));\n}\n\n/**\n * Construct an esri-gl service for a known ArcGIS service `url` and a\n * normalized service `kind`. Shared by single-item and web map resolution.\n */\nfunction constructService(\n kind: PortalServiceKind,\n sourceId: string,\n map: Map,\n url: string,\n options: PortalItemServiceOptions | undefined\n): PortalResolvedService {\n const auth = authServiceFields(options);\n const serviceOptions = options?.serviceOptions ?? {};\n const baseOptions = { url, ...auth, ...serviceOptions };\n\n switch (kind) {\n case 'tiled':\n return new TiledMapService(\n sourceId,\n map,\n baseOptions as never,\n options?.rasterSrcOptions as never\n );\n case 'image':\n return new ImageService(\n sourceId,\n map,\n baseOptions as never,\n options?.rasterSrcOptions as never\n );\n case 'vector-tile':\n return new VectorTileService(\n sourceId,\n map,\n baseOptions as never,\n options?.vectorSrcOptions as never\n );\n case 'feature': {\n let layerUrl = cleanTrailingSlash(url);\n if (!urlHasLayerIndex(layerUrl)) {\n layerUrl = `${layerUrl}/${options?.layerId ?? 0}`;\n }\n return new FeatureService(\n sourceId,\n map,\n { ...baseOptions, url: layerUrl } as never,\n options?.geojsonSourceOptions as never\n );\n }\n case 'dynamic':\n default:\n return new DynamicMapService(\n sourceId,\n map,\n baseOptions as never,\n options?.rasterSrcOptions as never\n );\n }\n}\n\n/** Map a portal item `type` (+ typeKeywords) to an esri-gl service kind. */\nfunction kindFromItemType(type: string, typeKeywords: string[] = []): PortalServiceKind | null {\n switch (type) {\n case 'Feature Service':\n case 'Feature Layer':\n return 'feature';\n case 'Image Service':\n return 'image';\n case 'Vector Tile Service':\n return 'vector-tile';\n case 'Map Service': {\n const tiled = typeKeywords.some(k => /tiled|cached/i.test(k));\n return tiled ? 'tiled' : 'dynamic';\n }\n default:\n return null;\n }\n}\n\n/**\n * Resolve a single-layer portal item to the matching esri-gl service and add\n * its source to the map.\n *\n * @example\n * const { service } = await serviceFromPortalItem('my-source', map, 'a1b2c3', { token });\n */\nexport async function serviceFromPortalItem(\n sourceId: string,\n map: Map,\n itemId: string,\n options?: PortalItemServiceOptions\n): Promise<PortalServiceResult> {\n const item = await getItem(itemId, requestOptions(options));\n\n if (!item.url) {\n throw new Error(`Portal item ${itemId} (\"${item.title}\") has no service url.`);\n }\n\n const kind = kindFromItemType(item.type, item.typeKeywords);\n if (!kind) {\n throw new Error(`Portal item ${itemId} has unsupported type \"${item.type}\" for esri-gl.`);\n }\n\n const service = constructService(kind, sourceId, map, item.url, options);\n\n return { service, kind, sourceId, url: item.url, item, title: item.title };\n}\n\n// -----------------------------\n// Web Map resolution\n// -----------------------------\n\ninterface WebMapLayer {\n id?: string;\n title?: string;\n url?: string;\n styleUrl?: string;\n itemId?: string;\n layerType?: string;\n visibility?: boolean;\n}\n\nexport interface WebMapOptions extends PortalItemServiceOptions {\n /** Also instantiate the web map's basemap layers (default false). */\n includeBasemap?: boolean;\n /** Prefix for generated source ids (default the web map item id). */\n sourceIdPrefix?: string;\n}\n\n/** Map a Web Map operationalLayer `layerType` to an esri-gl service kind. */\nfunction kindFromLayerType(layerType: string | undefined): PortalServiceKind | null {\n switch (layerType) {\n case 'ArcGISFeatureLayer':\n return 'feature';\n case 'ArcGISMapServiceLayer':\n return 'dynamic';\n case 'ArcGISTiledMapServiceLayer':\n return 'tiled';\n case 'ArcGISImageServiceLayer':\n return 'image';\n case 'VectorTileLayer':\n return 'vector-tile';\n default:\n return null;\n }\n}\n\n/**\n * Read a Web Map item's data and instantiate an esri-gl service for each\n * supported operational layer (optionally including basemap layers).\n * Unsupported layer types are skipped.\n *\n * @example\n * const layers = await servicesFromWebMap(map, 'webmap-item-id', { token });\n * layers.forEach(({ service, title }) => { ... });\n */\nexport async function servicesFromWebMap(\n map: Map,\n itemId: string,\n options?: WebMapOptions\n): Promise<PortalServiceResult[]> {\n const data = (await getItemData(itemId, requestOptions(options))) as {\n operationalLayers?: WebMapLayer[];\n baseMap?: { baseMapLayers?: WebMapLayer[] };\n } | null;\n\n if (!data) {\n throw new Error(`Web Map ${itemId} has no item data (is it shared / a Web Map?).`);\n }\n\n const prefix = options?.sourceIdPrefix ?? itemId;\n const results: PortalServiceResult[] = [];\n\n const layers: WebMapLayer[] = [...(data.operationalLayers ?? [])];\n if (options?.includeBasemap && data.baseMap?.baseMapLayers) {\n layers.push(...data.baseMap.baseMapLayers);\n }\n\n layers.forEach((layer, index) => {\n const kind = kindFromLayerType(layer.layerType);\n const url = layer.url ?? layer.styleUrl;\n if (!kind || !url) return; // skip unsupported / urlless layers\n\n const sourceId = layer.id ? `${prefix}-${layer.id}` : `${prefix}-${index}`;\n try {\n const service = constructService(kind, sourceId, map, url, options);\n results.push({ service, kind, sourceId, url, title: layer.title });\n } catch (error) {\n console.warn(`Skipping web map layer \"${layer.title ?? sourceId}\":`, error);\n }\n });\n\n return results;\n}\n\n// -----------------------------\n// Portal item search\n// -----------------------------\n\n/**\n * Search an ArcGIS portal for items, e.g. to discover services to load.\n * Thin wrapper over `searchItems` from `@esri/arcgis-rest-portal`; accepts a\n * query string, a {@link SearchQueryBuilder}, or a full `ISearchOptions`.\n *\n * @example\n * const { results } = await searchPortalItems('type:\"Feature Service\" AND owner:esri');\n * // or with auth / paging:\n * await searchPortalItems({ q: 'wildfire', num: 20, authentication }, { token });\n */\nexport async function searchPortalItems(\n search: string | SearchQueryBuilder | ISearchOptions,\n options?: PortalRequestOptions\n): Promise<ISearchResult<IItem>> {\n if (typeof search === 'string' || search instanceof SearchQueryBuilder) {\n const { authentication } = requestOptions(options);\n return searchItems({ q: search, authentication });\n }\n // Full ISearchOptions: merge in resolved auth/portal unless already provided.\n const { authentication } = requestOptions(options);\n return searchItems({ authentication, ...search });\n}\n"],"names":["resolveAuthentication","options","undefined","authentication","apiKey","token","ApiKeyManager","fromKey","key","esriRequest","url","params","httpMethod","rawResponse","signal","headers","auth","requestOptions","f","request","esriRawRequest","search","URLSearchParams","value","Object","entries","append","JSON","stringify","String","manager","getToken","response","fetch","toString","ok","Error","status","cleanTrailingSlash","replace","appendTokenIfExists","removeMapSource","map","sourceId","removeSource","style","mapWithStyle","getStyle","layers","forEach","layer","source","getLayer","removeLayer","hasLayer","Boolean","id","error","console","warn","getSource","hasSource","isAbortError","DOMException","name","message","toLowerCase","includes","errorObj","constructor","stringified","getServiceDetails","POWERED_BY_ESRI_ATTRIBUTION_STRING","updateAttribution","newAttribution","mapWithControls","attributionController","_controls","find","c","customAttribution","Array","isArray","indexOf","push","mapStyle","sourceCaches","_source","attribution","_otherSourceCaches","_updateAttributions","Service","defineProperty","proxy","useCors","timeout","getAttributionFromService","get","path","_request","post","requestWithCallback","method","callback","_requestWithCallback","metadata","_serviceMetadata","isTestEnvironment","process","env","NODE_ENV","authenticate","_authenticating","_runQueue","getTimeout","setTimeout","setAttributionFromService","_map","copyrightText","on","event","_eventListeners","off","listeners","index","splice","fire","data","wrappedCallback","_createServiceCallback","finalParams","requestParams","_requestQueue","_makeRequest","Promise","resolve","reject","controller","AbortController","timeoutId","abort","clearTimeout","errorWithCode","code","authError","i","length","DynamicMapService","esriServiceOptions","rasterSrcOptions","_sourceId","_defaultEsriOptions","layerDefs","dynamicLayers","format","dpi","transparent","_createSource","catch","_layersStr","lyrs","join","_layerDefs","_time","to","from","Date","valueOf","_dynamicLayers","dl","normalized","l","visible","rest","withSource","type","mapLayerId","visibility","result","tileSize","bboxSR","imageSR","size","_appendTokenIfExists","tileUrl","tiles","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","_auth","o","_authentication","_escapeValue","val","s","_isGroupFilter","op","filters","_isBetweenFilter","field","_isInFilter","values","_isNullFilter","_isComparisonFilter","trim","vals","v","built","setLayers","arr","setDate","setToken","getMetadata","then","err","_layersStrIdentify","layersStr","identify","lnglat","returnGeometry","canvas","getCanvas","bounds","getBounds","toArray","sr","geometryType","geometry","x","lng","y","lat","spatialReference","wkid","tolerance","imageDisplay","width","height","mapExtent","time","setLayerLabels","labelingInfo","setLayerLabelsVisible","labelExpression","symbol","color","font","family","setLayerTimeOptions","timeOptions","layerTimeOptions","animateTime","intervalMs","loop","onFrame","onComplete","totalDuration","getTime","steps","Math","ceil","currentStep","animate","progress","currentTime","getLayerStatistics","statisticFields","queryFeatures","outStatistics","groupByFieldsForStatistics","features","queryLayerFeatures","outFields","spatialRel","orderByFields","resultOffset","resultRecordCount","returnCountOnly","returnIdsOnly","exportMapImage","exportUrl","bbox","gdbVersion","historicMoment","blob","generateLegend","layerIds","legendUrl","getLayerInfo","getLayerFields","layerInfo","fields","getLayerExtent","extent","discoverLayers","getAllLayersAndTables","setBulkLayerProperties","operations","operation","beginUpdate","_pendingUpdates","commitUpdate","rollbackUpdate","isInTransaction","remove","TiledMapService","ImageService","mosaicRule","renderingRule","setRenderingRule","rule","setMosaicRule","VectorBasemapStyle","styleName","opts","provided","itemId","_canonical","_toCanonical","_apiKey","_token","_language","language","_worldview","worldview","_itemId","_useSession","useSession","_sessionDuration","sessionDuration","_version","version","_host","host","_format","styleUrl","portalHost","set","qs","setStyle","applyStyle","vectorStyle","_styleFamily","startsWith","sessionToken","_session","startSession","BasemapStyleSession","start","styleFamily","duration","getStyleUrl","session","applyStyleWithSession","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","fetchOptions","_fallbackProjectionEndpoint","_maxExtent","Infinity","sourceReady","_sourceReadyResolve","_sourceReadyReject","_getBlankFc","_initialize","_getServiceMetadata","supportsPbf","supportsGeojson","serviceExtent","_setBounds","xmin","ymin","xmax","ymax","_projectBounds","uniqueIdField","currentFields","_setAttribution","enableRequests","_clearAndRefreshTiles","_removed","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","_authOptions","queryUrl","buffer","arrayBuffer","decoded","tileDecode","Uint8Array","featureCollection","_handleAuthError","setData","getFeaturesByLonLat","radius","units","distance","getFeaturesByObjectIds","objectIds","idsString","queryOptions","having","geometries","_projectionEndpointIsFallback","_fireEvent","cb","queryRelatedRecords","queryRelated","relationshipId","decodeValues","queryResponse","addFeatures","res","addResults","updateFeatures","updateResults","deleteFeatures","deleteParams","deleteResults","applyEdits","edits","adds","updates","deletes","queryAttachments","objectId","getAttachments","globalIds","attachmentInfos","addAttachment","file","fileName","File","attachment","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","cleanPath","restParams","Query","offset","limit","featureIds","returnDistinctValues","returnExtentOnly","maxAllowableOffset","geometryPrecision","returnTrueCurves","within","_setGeometryParams","intersects","contains","crosses","touches","overlaps","bboxIntersects","nearby","latlng","whereClause","between","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","at","layerScales","scales","_layerScaleRanges","layerDef","_getMapScale","zoom","pow","_isLayerVisibleAtScale","scale","range","minScale","maxScale","_filterLayersByScale","keys","layersParam","match","prefix","idsPart","Number","n","isNaN","visibleIds","displayFieldName","featureWithLayerId","IdentifyImage","returnCatalogItems","imageOptions","mosaic","renderingRules","returnGeom","returnItems","location","getPixelValues","numValue","parseFloat","getPixelData","identifyImage","portal","authServiceFields","urlHasLayerIndex","constructService","kind","serviceOptions","baseOptions","layerUrl","kindFromItemType","typeKeywords","tiled","some","k","serviceFromPortalItem","item","getItem","title","service","kindFromLayerType","layerType","servicesFromWebMap","getItemData","sourceIdPrefix","operationalLayers","includeBasemap","baseMap","baseMapLayers","searchPortalItems","SearchQueryBuilder","searchItems","q"],"mappings":"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"}