@nextgis/ngw-map 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 3.1.0; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 3.1.1; author: NextGIS */
2
2
  import { getIcon } from '@nextgis/icons';
3
3
  import NgwConnector from '@nextgis/ngw-connector';
4
4
  import { NgwKit, fetchNgwLayerItem, fetchNgwLayerItems, fetchNgwLayerFeature, fetchNgwLayerFeatureCollection, fetchIdentifyItem, fetchIdentifyGeoJson, createNgwLayerAdapter, fetchNgwExtent, sendIdentifyRequest, getCompanyLogo, getIdentifyItems, createIdentifyItem } from '@nextgis/ngw-kit';
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.esm-bundler.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n ControlPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["__spreadProps","__spreadValues","__async"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.esm-bundler.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n ControlPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["__spreadProps","__spreadValues","__async"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.esm-bundler.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n ControlPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","__spreadProps","Array","isArray","resourceId","id","__spreadValues","OPTIONS","target","baseUrl","whitlabel","controls","getDefaultControls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","prepareWebMapOptions","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","withCredentials","deepmerge","center","bounds","NgwKit","create","_NgwMap","WebMap","constructor","super","__publicField","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","__async","onLoad","__superGet","prototype","call","addNgwLayer","onMapLoad","keyname","filters","deprecatedWarn","Error","defined","adapterOptions","setViewDelay","propertiesFilter","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","abortController","AbortController","abortSignal","signal","addEventListener","abort","promise","_addPromise","fetchIdentifyGeoJson","multiple","aborted","Promise","reject","errors","AbortError","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","style_parent_id","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fitResource","resources","getIdOrFail","extent","fetchNgwExtent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","emitter","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","_a","_emitStatusEvent","promises","layers","values","sort","a","b","order","l","identFunc","interactive","selectable","isLayerVisible","layerIds","getIdsPromise","all","getIds","getCenter","getZoom","radius","getIdentifyRadius","geom","highlightIdentification","highlightOptions","highlightDuration","lng","lat","lngLat","type","coordinates","getCirclePolygonCoordinates","highlightIdentificationLayer","addGeoJsonLayer","data","geometry","Infinity","setTimeout","selectPromise","sendIdentifyRequest","resp","sourceType","identifyEvent","_prepareToIdentify","groupName","findIndex","g","removeFromGroup","index","splice","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","layerFitAllowed","webmapId","r","warn","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","items","featureCount","features","fields","properties","label","parent","getIdentifyItems","map","createIdentifyItem","listenerCount","logo","getCompanyLogo","companyLogoOptions","appendChild","getIcon","NgwMap","createNgwMap"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.esm-bundler.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n ControlPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","__spreadProps","Array","isArray","resourceId","id","__spreadValues","OPTIONS","target","baseUrl","whitlabel","controls","getDefaultControls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","prepareWebMapOptions","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","withCredentials","deepmerge","center","bounds","NgwKit","create","_NgwMap","WebMap","constructor","super","__publicField","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","__async","onLoad","__superGet","prototype","call","addNgwLayer","onMapLoad","keyname","filters","deprecatedWarn","Error","defined","adapterOptions","setViewDelay","propertiesFilter","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","abortController","AbortController","abortSignal","signal","addEventListener","abort","promise","_addPromise","fetchIdentifyGeoJson","multiple","aborted","Promise","reject","errors","AbortError","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","style_parent_id","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fitResource","resources","getIdOrFail","extent","fetchNgwExtent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","emitter","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","_a","_emitStatusEvent","promises","layers","values","sort","a","b","order","l","identFunc","interactive","selectable","isLayerVisible","layerIds","getIdsPromise","all","getIds","getCenter","getZoom","radius","getIdentifyRadius","geom","highlightIdentification","highlightOptions","highlightDuration","lng","lat","lngLat","type","coordinates","getCirclePolygonCoordinates","highlightIdentificationLayer","addGeoJsonLayer","data","geometry","Infinity","setTimeout","selectPromise","sendIdentifyRequest","resp","sourceType","identifyEvent","_prepareToIdentify","groupName","findIndex","g","removeFromGroup","index","splice","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","layerFitAllowed","webmapId","r","warn","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","items","featureCount","features","fields","properties","label","parent","getIdentifyItems","map","createIdentifyItem","listenerCount","logo","getCompanyLogo","companyLogoOptions","appendChild","getIcon","NgwMap","createNgwMap"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 3.1.0; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 3.1.1; author: NextGIS */
2
2
  var NgwMap = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -638,7 +638,9 @@ var NgwMap = (function (exports) {
638
638
  this.domain = null;
639
639
  if (EventEmitter.usingDomains) {
640
640
  // if there is an active domain, then attach to it.
641
- if (domain.active) ;
641
+ if (domain.active && !(this instanceof domain.Domain)) {
642
+ this.domain = domain.active;
643
+ }
642
644
  }
643
645
 
644
646
  if (!this._events || this._events === Object.getPrototypeOf(this)._events) {
@@ -1081,63 +1083,7 @@ var NgwMap = (function (exports) {
1081
1083
  }
1082
1084
 
1083
1085
  var pkg = {
1084
- name: "@nextgis/ngw-connector",
1085
- version: "3.0.1",
1086
- _priority: 12,
1087
- description: "A lightweight HTTP client optimized for use with NextGIS Web API",
1088
- main: "index.js",
1089
- module: "lib/ngw-connector.esm-bundler.js",
1090
- unpkg: "lib/ngw-connector.global.prod.js",
1091
- jsdelivr: "lib/ngw-connector.global.prod.js",
1092
- types: "lib/index.d.ts",
1093
- dependencies: {
1094
- "@nextgis/cache": "3.0.0",
1095
- "@nextgis/cancelable-promise": "3.0.0",
1096
- "@nextgis/utils": "3.0.0",
1097
- "@types/events": "^3.0.0",
1098
- events: "*",
1099
- "form-data": "^4.0.0"
1100
- },
1101
- devDependencies: {
1102
- "@nextgis/build-tools": "3.0.0"
1103
- },
1104
- scripts: {
1105
- clean: "rimraf ./lib",
1106
- dev: "node ../build-tools/lib/build.js",
1107
- prod: "npm run dev -- --release",
1108
- lint: "eslint ./src/**/*.ts --fix --c ../../.eslintrc",
1109
- watch: "npm run dev -- --watch",
1110
- "gen:types": "node ./scripts/generator"
1111
- },
1112
- buildOptions: {
1113
- name: "NgwConnector",
1114
- formats: [
1115
- "esm-bundler",
1116
- "esm-browser",
1117
- "cjs",
1118
- "global"
1119
- ]
1120
- },
1121
- keywords: [
1122
- "NextGIS",
1123
- "MAP"
1124
- ],
1125
- author: "NextGIS",
1126
- files: [
1127
- "index.js",
1128
- "lib"
1129
- ],
1130
- license: "MIT",
1131
- homepage: "https://github.com/nextgis/nextgis_frontend/tree/master/packages/ngw-connector#readme",
1132
- repository: {
1133
- type: "git",
1134
- url: "git://github.com/nextgis/nextgis_frontend.git"
1135
- },
1136
- engines: {
1137
- node: ">=18.20.4"
1138
- },
1139
- gitHead: "edc68033f914f6c95c4125b9738bba6d36e990b4"
1140
- };
1086
+ version: "3.1.1"};
1141
1087
 
1142
1088
  class AbortError extends Error {
1143
1089
  constructor(message = "AbortError") {
@@ -2048,7 +1994,7 @@ var NgwMap = (function (exports) {
2048
1994
  throw new Error("Empty `url` not allowed");
2049
1995
  }
2050
1996
  if (params) {
2051
- const _a = params, restParams = __objRest$4(_a, ["paramList"]);
1997
+ const _a = params, { paramList } = _a, restParams = __objRest$4(_a, ["paramList"]);
2052
1998
  url = template(url, restParams);
2053
1999
  }
2054
2000
  url = encodeURI(fixUrlStr(url));
@@ -2338,8 +2284,9 @@ var NgwMap = (function (exports) {
2338
2284
  query: __spreadValues$u({
2339
2285
  serialization: "full"
2340
2286
  }, query)
2341
- })).then((resources) => {
2342
- if ((requestOptions == null ? void 0 : requestOptions.cache) && resources) {
2287
+ })).then((response) => {
2288
+ const resources = Array.isArray(response) ? response : response.items;
2289
+ if (requestOptions == null ? void 0 : requestOptions.cache) {
2343
2290
  for (const x of resources) {
2344
2291
  this.cache.add("resource.item", Promise.resolve(x), {
2345
2292
  id: x.resource.id
@@ -5463,9 +5410,9 @@ var NgwMap = (function (exports) {
5463
5410
  item
5464
5411
  }) {
5465
5412
  if (item.basemap_layer) {
5466
- const qms = item.basemap_layer.qms;
5467
- const url = item.basemap_layer.url;
5468
- if (qms) {
5413
+ const basemap = item.basemap_layer;
5414
+ const { qms, url } = basemap;
5415
+ if (qms && typeof qms === "string") {
5469
5416
  const qms_ = JSON.parse(qms);
5470
5417
  const adapter = Promise.resolve(
5471
5418
  QmsKit.utils.createQmsAdapter(webMap, void 0, {
@@ -5478,10 +5425,19 @@ var NgwMap = (function (exports) {
5478
5425
  const TileAdapter = webMap.mapAdapter.layerAdapters.TILE;
5479
5426
  if (TileAdapter) {
5480
5427
  class BasemapTileAdapter extends TileAdapter {
5428
+ constructor(map, options) {
5429
+ super(map, __spreadProps$8(__spreadValues$d({}, options), { baselayer: true, order: 0 }));
5430
+ }
5481
5431
  addLayer(opt) {
5482
5432
  return __async$g(this, null, function* () {
5433
+ var _a, _b, _c;
5483
5434
  if (url) {
5484
- return __superGet$2(BasemapTileAdapter.prototype, this, "addLayer").call(this, __spreadProps$8(__spreadValues$d({}, opt), { url }));
5435
+ return __superGet$2(BasemapTileAdapter.prototype, this, "addLayer").call(this, __spreadProps$8(__spreadValues$d({}, opt), {
5436
+ url,
5437
+ minZoom: (_a = basemap.z_min) != null ? _a : opt.minZoom,
5438
+ maxZoom: (_b = basemap.z_max) != null ? _b : opt.maxZoom,
5439
+ attribution: (_c = basemap.copyright_text) != null ? _c : opt.attribution
5440
+ }));
5485
5441
  }
5486
5442
  });
5487
5443
  }
@@ -10274,7 +10230,6 @@ var NgwMap = (function (exports) {
10274
10230
  const promise = fetchIdentifyGeoJson({
10275
10231
  identify,
10276
10232
  connector: this.connector,
10277
- multiple,
10278
10233
  requestOptions: { signal: abortController.signal }
10279
10234
  });
10280
10235
  if (promise && "then" in promise) {