@nextgis/ngw-map 3.0.0-alpha.2 → 3.0.0-alpha.20

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 +1 @@
1
- {"version":3,"file":"ngw-map.esm-browser.js","sources":["../../icons/src/index.ts","../../utils/src/applyMixins.ts","../../utils/src/defined.ts","../../utils/src/deepmerge.ts","../../utils/src/debug/debugLog.ts","../../utils/src/deprecated/deprecatedMapClick.ts","../../utils/src/deprecated/deprecatedWarn.ts","../../utils/src/debounce.ts","../../utils/src/geom/constants.ts","../../utils/src/geom/getBoundsPolygon.ts","../../utils/src/geom/getCirclePolygon.ts","../../utils/src/geom/coordTransform.ts","../../utils/src/geom/isLngLatBoundsArray.ts","../../utils/src/geom/getIdentifyRadius.ts","../../utils/src/geom/checkExtent.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/number/round.ts","../../utils/src/typeHelpers/index.ts","../../utils/src/url.ts","../../cache/src/Cache.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/errors/AbortError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/utils/apiRequest.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/NgwConnector.ts","../../properties-filter/src/propertiesFilter.ts","../../ngw-kit/src/utils/featureLayerUtils.ts","../../ngw-kit/src/utils/fetchNgwLayerItem.ts","../../ngw-kit/src/BookmarkItem.ts","../../tree/src/treeFilter.ts","../../item/src/TreeHelper.ts","../../item/src/properties/BaseProperty.ts","../../item/src/properties/CheckProperty.ts","../../item/src/properties/ItemProperties.ts","../../item/src/Item.ts","../../ngw-kit/src/utils/WebmapLayerOpacityPropertyHandler.ts","../../ngw-kit/src/utils/fetchNgwExtent.ts","../../ngw-kit/src/NgwResource.ts","../../ngw-kit/src/utils/resourceIdFromLayerOptions.ts","../../qms-kit/src/utils/getSubmodulesFromOriginUrl.ts","../../qms-kit/src/utils/loadJson.ts","../../qms-kit/src/utils/updateQmsOptions.ts","../../qms-kit/src/utils/createQmsAdapter.ts","../../qms-kit/src/QmsKit.ts","../../ngw-kit/src/adapters/createBasemapLayerAdapter.ts","../../ngw-kit/src/utils/createPopupContent.ts","../../ngw-kit/src/utils/fetchNgwLayerCount.ts","../../ngw-kit/src/utils/prepareNgwFieldsToPropertiesFilter.ts","../../ngw-kit/src/utils/fetchNgwLayerItems.ts","../../ngw-kit/src/utils/fetchNgwLayerFeatures.ts","../../ngw-kit/src/utils/fetchNgwLayerFeatureCollection.ts","../../ngw-kit/src/utils/getLayerFilterOptions.ts","../../ngw-kit/src/adapters/createGeoJsonAdapter.ts","../../ngw-kit/src/adapters/createNgwWebmapAdapter.ts","../../ngw-kit/src/utils/ngwApiToAdapterOptions.ts","../../ngw-kit/src/adapters/createRasterAdapter.ts","../../ngw-kit/src/adapters/createAsyncAdapter.ts","../../ngw-kit/src/utils/utils.ts","../../ngw-kit/src/NgwWebmapItem.ts","../../ngw-kit/src/adapters/createOnFirstShowAdapter.ts","../../ngw-kit/src/adapters/createOnFirstShowNgwAdapter.ts","../../ngw-kit/src/constants.ts","../../ngw-kit/src/NgwWebmapLayerAdapter.ts","../../ngw-kit/src/NgwKit.ts","../../ngw-kit/src/IdentifyItem.ts","../../ngw-kit/src/utils/fetchNgwLayerFeature.ts","../../ngw-kit/src/utils/identifyUtils.ts","../../ngw-kit/src/utils/getCompanyLogo.ts","../../paint/src/typeHelpers.ts","../../expression/src/utils/evaluateArgs.ts","../../expression/src/expressions/decisionExpressions.ts","../../expression/src/constants/colors.ts","../../expression/src/utils/color.ts","../../expression/src/expressions/interpolationExpressions/interpolate.ts","../../expression/src/expressions/interpolationExpressions/step.ts","../../expression/src/expressions/interpolationExpressions/index.ts","../../expression/src/expressions/lookupExpressions.ts","../../expression/src/expressions/mathExpressions.ts","../../expression/src/expressions/stringExpressions.ts","../../expression/src/utils/tryConvert.ts","../../expression/src/utils/fallback.ts","../../expression/src/expressions/typeExpressions.ts","../../expression/src/expression.ts","../../paint/src/fromPaintExpression.ts","../../paint/src/preparePaint.ts","../../webmap/src/components/keys/KeysCodes.ts","../../webmap/src/components/keys/Keys.ts","../../webmap/src/components/mapStates/StateItem.ts","../../webmap/src/components/mapStates/CenterState.ts","../../webmap/src/components/mapStates/ZoomState.ts","../../webmap/src/utils/clearObject.ts","../../webmap/src/WebMapMain.ts","../../webmap/src/utils/geometryTypes.ts","../../webmap/src/utils/updateGeoJsonAdapterOptions.ts","../../webmap/src/WebMapLayers.ts","../../webmap/src/components/controls/createToggleControl.ts","../../webmap/src/WebMapControls.ts","../../webmap/src/container.ts","../../webmap/src/WebMap.ts","../../webmap/src/utils/getDefaultControls.ts","../../webmap/src/index.ts","../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { IconPaint } from '@nextgis/paint';\n\nconst svgPath: { [name: string]: string | GetPathCallback } = {\n brill: '<path d=\"m6 0-5 6 5 6 5-6z\"/>',\n circle: '<circle cx=\"6\" cy=\"6\" r=\"6\"/>',\n rect: '<rect width=\"12\" height=\"12\"/>',\n marker:\n '<path d=\"m6 0c-1.85 0-4 1.19-4 4.22 0 2.05 3.08 6.59 4 7.78 0.821-1.19 4-5.62 4-7.78 0-3.03-2.15-4.22-4-4.22z\"/>',\n cross:\n '<path d=\"M 2.4,12 6,8.4 9.6,12 12,9.6 8.4,6 12,2.4 9.6,0 6,3.6 2.4,0 0,2.4 3.6,6 0,9.6 Z\"/>',\n star: '<path d=\"m6 0.25 1.71 4.18 4.29-1.04e-4 -3.43 3.14 0.857 4.18-3.43-3.14-3.43 3.14 0.857-4.18-3.43-3.14 4.29-0.209z\"/>',\n triangle: '<path d=\"m12 11.7h-12l6-11.2z\"/>',\n plus: '<path d=\"m7.5 12v-4.5h4.5v-3h-4.5v-4.5h-3v4.5h-4.5v3h4.5v4.5z\"/>',\n minus: '<path d=\"m12 7.5v-3h-12v3z\"/>',\n asterisk:\n '<path d=\"m7.59 12v-3.27l2.83 1.64 1.58-2.74-2.85-1.64 2.83-1.64-1.56-2.74-2.83 1.64v-3.24h-3.17v3.24l-2.85-1.64-1.57 2.74 2.84 1.64-2.84 1.64 1.57 2.74 2.85-1.64v3.27z\"/>',\n};\n\nexport interface IconOptions {\n svg?: string;\n /** Svg path */\n p?: string;\n shape?:\n | 'rect'\n | 'star'\n | 'plus'\n | 'minus'\n | 'brill'\n | 'circle'\n | 'marker'\n | 'triangle'\n | 'asterisk';\n color?: string;\n size?: number;\n stroke?: number;\n strokeColor?: string;\n rotate?: number;\n anchor?: [number, number];\n}\n\ninterface GenerateSvgOptions {\n width: number;\n height: number;\n stroke?: number;\n content?: string;\n}\n\nconst VIEW_BOX = 12;\nconst STROKE = 0.8;\n\nfunction generateSvg({\n width,\n height,\n stroke = 0,\n content,\n}: GenerateSvgOptions) {\n const s = stroke / 2;\n const svg = `<svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"${width}\"\n height=\"${height}\"\n viewBox=\"-${s} -${s} ${VIEW_BOX + stroke} ${VIEW_BOX + stroke}\"\n >${content}</svg>`;\n return svg;\n}\n\nfunction insertSvg(svg: string) {\n const oParser = new DOMParser();\n const oDOM = oParser.parseFromString(svg, 'image/svg+xml');\n return oDOM.documentElement;\n}\n\ntype GetPathCallback = (opt?: IconOptions) => string;\n\n/**\n * Retrieves an icon with the provided options.\n * @function\n * @param {IconOptions} [opt={}] - Options for the icon.\n * @returns {IconPaint} Icon paint object.\n */\nexport function getIcon(opt: IconOptions = {}): IconPaint {\n // Default values\n const shape = opt.shape ?? 'circle';\n const color = opt.color ?? 'blue';\n const strokeColor = opt.strokeColor ?? 'white';\n const size = opt.size ?? VIEW_BOX;\n\n const rotate = opt.rotate ?? 0;\n\n const anchor = opt.anchor ?? [size / 2, size / 2];\n\n const stroke = opt.stroke !== undefined ? Number(opt.stroke) : STROKE;\n\n const pathAlias = opt.p || svgPath[shape] || 'circle';\n\n const path = typeof pathAlias === 'string' ? pathAlias : pathAlias(opt);\n const svg = insertSvg(\n opt.svg ||\n generateSvg({\n width: size,\n height: size,\n stroke,\n content: path,\n }),\n );\n\n svg.setAttribute('width', String(size));\n svg.setAttribute('height', String(size));\n\n svg.setAttribute('fill', color);\n if (stroke) {\n svg.setAttribute('stroke', strokeColor);\n svg.setAttribute('stroke-width', String(stroke));\n }\n const s = new XMLSerializer();\n\n return {\n type: 'icon',\n iconSize: [size, size],\n iconAnchor: anchor,\n html: s.serializeToString(svg),\n rotate,\n svg,\n };\n}\n","export interface ApplyMixinOptions {\n replace?: boolean;\n}\n\ntype Ctor = any;\n\nexport function applyMixins(\n derivedCtor: Ctor,\n baseCtors: Ctor[],\n opt: ApplyMixinOptions = {},\n): void {\n const derivedProperties = allProperties(derivedCtor.prototype);\n const replace = opt.replace !== undefined ? opt.replace : true;\n baseCtors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const isSomeProp = derivedProperties.indexOf(name) !== -1;\n if ((!replace && !isSomeProp) || replace) {\n const descriptor = Object.getOwnPropertyDescriptor(\n baseCtor.prototype,\n name,\n );\n if (descriptor) {\n Object.defineProperty(derivedCtor.prototype, name, descriptor);\n }\n }\n });\n });\n}\n\nexport function allProperties(obj: Record<string, unknown>): string[] {\n return _allProperties(obj);\n}\n\nfunction _allProperties(\n obj: Record<string, unknown>,\n _props: string[] = [],\n): string[] {\n for (; obj !== null; obj = Object.getPrototypeOf(obj)) {\n const op = Object.getOwnPropertyNames(obj);\n for (let i = 0; i < op.length; i++) {\n if (_props.indexOf(op[i]) == -1) {\n _props.push(op[i]);\n }\n }\n }\n return _props;\n}\n\nexport function mixinProperties(\n derivedCtor: Ctor,\n baseCtor: Ctor,\n properties: string[],\n): void {\n properties.forEach((name) => {\n const descriptor = Object.getOwnPropertyDescriptor(\n baseCtor.prototype,\n name,\n );\n if (descriptor) {\n Object.defineProperty(derivedCtor.prototype, name, descriptor);\n }\n });\n}\n","/**\n * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js\n *\n * @param val - The object.\n * @returns Returns true if the object is defined, returns false otherwise.\n *\n * @example\n * ```javascript\n * if (defined(positions)) {\n * doSomething();\n * } else {\n * doSomethingElse();\n * }\n * ```\n */\nexport function defined<T>(val: T): val is Exclude<T, null | undefined> {\n return val !== undefined && val !== null;\n}\n\n/**\n * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js\n *\n * @param val - The object.\n * @returns Returns true if the object is defined and not empty string, returns false otherwise.\n *\n * @example\n * ```javascript\n * full('foo') // true\n * full('') // false\n * full(undefined) // false\n * full(0) // true\n * ```\n */\nexport function full<T>(val: T): val is Exclude<T, null | undefined> {\n return typeof val === 'string' ? !!val : defined(val);\n}\n","export function deepmerge<T>(\n x: Partial<T>,\n y: Partial<T>,\n mergeArray?: boolean,\n): T;\nexport function deepmerge<T1, T2>(\n target: Partial<T1>,\n src: Partial<T2>,\n mergeArray = false,\n): T1 & T2 {\n let target_ = target as any;\n const src_ = src as any;\n const array = Array.isArray(src_);\n let dst: any = (array && []) || {};\n\n if (array && Array.isArray(src_)) {\n if (mergeArray) {\n target_ = target_ || [];\n dst = dst.concat(target_);\n src_.forEach((e: any, i: number) => {\n if (typeof dst[i] === 'undefined') {\n dst[i] = e;\n } else if (typeof e === 'object') {\n dst[i] = deepmerge(target_[i], e, mergeArray);\n } else {\n if (target_.indexOf(e) === -1) {\n dst.push(e);\n }\n }\n });\n } else {\n // Replace array. Do not merge by default\n dst = src_;\n }\n } else {\n if (target_ && typeof target_ === 'object') {\n Object.keys(target_).forEach(function (key) {\n dst[key] = target_[key];\n });\n }\n Object.keys(src_).forEach(function (key) {\n if (typeof src_[key] !== 'object' || !src_[key]) {\n dst[key] = src_[key];\n } else {\n if (typeof target_[key] === 'object' && typeof src_[key] === 'object') {\n dst[key] = deepmerge(target_[key], src_[key], mergeArray);\n } else {\n dst[key] = src_[key];\n }\n }\n });\n }\n return dst;\n}\n","export function debugLog(message?: string): boolean {\n // @ts-ignore\n if (__DEV__) {\n console.trace('DEBUG: ' + message);\n return true;\n }\n return false;\n}\n","import { debugLog } from '../debug/debugLog';\n\nimport type { LatLng } from '../geom/interfaces';\nimport type { LngLatArray } from '../geom/interfaces';\n\ninterface DeprecatedMapClickEvent {\n lngLat: LngLatArray;\n latLng?: LatLng;\n}\n\n/**\n * @internal\n */\nexport function deprecatedMapClick<\n T extends DeprecatedMapClickEvent = DeprecatedMapClickEvent,\n>(ev: T): T {\n if (!ev.lngLat && ev.latLng) {\n debugLog('deprecated use of latLng in MapClickEvent, use lngLat instead');\n const lat = ev.latLng.lat;\n const lng = ev.latLng.lng;\n ev.lngLat = [lng, lat];\n }\n return ev;\n}\n","/** @internal */\nexport function deprecatedWarn(message: string): void {\n console.warn(`DEPRECATED WARN: ${message}`);\n}\n","// based on https://github.com/bvaughn/debounce-decorator\n\nexport function debounce<T extends (...args: any[]) => void>(\n cb: T,\n wait = 10,\n): T & { clear: () => void } {\n let timeoutId: any;\n\n function wrapper(this: any, ...args: any[]) {\n wrapper.clear();\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n cb.apply(this, args);\n }, wait);\n }\n\n wrapper.clear = function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return wrapper as T & { clear: () => void };\n}\n\nexport function DebounceDecorator(wait = 10) {\n return function (\n target: unknown,\n key: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: debounce(descriptor.value, wait),\n });\n // @ts-ignore\n return this[key];\n },\n };\n };\n}\n","/**\n * Radius of the earth in kilometers\n */\nexport const EARTHS_RADIUS = 6371;\n","import type { LngLatBoundsArray } from './interfaces';\nimport type { Feature, Polygon } from 'geojson';\n\nexport function getBoundsPolygon(b: LngLatBoundsArray): Polygon {\n const polygon: Polygon = {\n type: 'Polygon',\n coordinates: [getBoundsCoordinates(b)],\n };\n return polygon;\n}\n\nexport function getBoundsCoordinates(b: LngLatBoundsArray): number[][] {\n const westNorth = [b[0], b[1]];\n const eastNorth = [b[2], b[1]];\n const eastSouth = [b[2], b[3]];\n const westSouth = [b[0], b[3]];\n\n return [westNorth, eastNorth, eastSouth, westSouth, westNorth];\n}\n\nexport function getBoundsFeature(b: LngLatBoundsArray): Feature<Polygon> {\n const feature: Feature<Polygon> = {\n type: 'Feature',\n properties: {},\n geometry: getBoundsPolygon(b),\n };\n return feature;\n}\n","import { EARTHS_RADIUS } from './constants';\n\nimport type { Feature, Polygon, Position } from 'geojson';\n\nconst d2r = Math.PI / 180; // degrees to radians\nconst r2d = 180 / Math.PI; // radians to degrees\n\nexport function getCirclePolygonCoordinates(\n lng: number,\n lat: number,\n /** In kilometers */\n radius = 10,\n points = 6,\n): Position[] {\n // find the radius in lat/lon\n const rlat = (radius / EARTHS_RADIUS) * r2d;\n const rlng = rlat / Math.cos(lat * d2r);\n\n const extp = [];\n for (let i = 0; i < points + 1; i++) {\n // one extra here makes sure we connect the\n\n const theta = Math.PI * (i / (points / 2));\n const ex = lng + rlng * Math.cos(theta); // center a + radius x * cos(theta)\n const ey = lat + rlat * Math.sin(theta); // center b + radius y * sin(theta)\n extp.push([ex, ey]);\n }\n\n return extp;\n}\n\nexport function getCircleFeature(\n lng: number,\n lat: number,\n radius = 10,\n points = 6,\n): Feature<Polygon> {\n const polygon = getCirclePolygonCoordinates(lng, lat, radius, points);\n const feature: Feature<Polygon> = {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Polygon',\n coordinates: [polygon],\n },\n };\n return feature;\n}\n","import type { LngLatArray } from './interfaces';\n\nexport function degrees2meters(lng: number, lat: number): [number, number] {\n lat = lat > 85.06 ? 85.06 : lat < -85.06 ? -85.06 : lat;\n\n const x = (lng * 20037508.34) / 180;\n let y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360)) / (Math.PI / 180);\n y = (y * 20037508.34) / 180;\n return [x, y];\n}\n\nexport function meters2degrees(x: number, y: number): LngLatArray {\n const lon = (x * 180) / 20037508.34;\n const lat =\n (Math.atan(Math.exp((y * Math.PI) / 20037508.34)) * 360) / Math.PI - 90;\n return [lon, lat];\n}\n\nexport function degrees2Radian(deg: number): number {\n return (deg * Math.PI) / 180;\n}\n\n// export function degrees2meters2(lon: number, lat: number): [number, number] {\n// const radius = 6378137.0;\n// const x = (radius * lon * Math.PI) / 180.0;\n// const y =\n// radius * Math.log(Math.tan(Math.PI / 4.0 + (lat * Math.PI) / 360.0));\n// return [x, y];\n// }\n\n// export function meters2degress2(x: number, y: number): LngLatArray {\n// const radius = 6378137.0;\n// const lon = (180 / Math.PI) * (x / radius);\n// const lat = (360 / Math.PI) * (Math.atan(Math.exp(y / radius)) - Math.PI / 4);\n// return [lon, lat];\n// }\n\n// const lon = -77.035974;\n// const lat = 38.898717;\n\n// console.log(degrees2meters(lon, lat), degrees2meters2(lon, lat));\n\n// const x = -8575605.398443861;\n// const y = 4707174.018280405;\n\n// console.log(meters2degress(x, y), meters2degress2(x, y));\n","import type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function isLngLatBoundsArray(\n array: unknown,\n): array is LngLatBoundsArray {\n return (\n Array.isArray(array) &&\n array.length === 4 &&\n array.every((x) => typeof x === 'number')\n );\n}\n","import type { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","import type { LngLatBoundsArray } from './interfaces';\n\nexport function checkExtent(extent: number[]): extent is LngLatBoundsArray {\n const [minLon, minLat, maxLon, maxLat] = extent;\n\n // Check if coordinates are in the correct order\n const isOrderValid = minLon < maxLon && minLat < maxLat;\n\n if (!isOrderValid) {\n console.log('Error: The extent coordinates are not in the correct order.');\n console.log(\n `Received extent: [${minLon}, ${minLat}, ${maxLon}, ${maxLat}]`,\n );\n\n // Create a valid array with corrected order\n const correctedExtent = [\n Math.min(minLon, maxLon),\n Math.min(minLat, maxLat),\n Math.max(minLon, maxLon),\n Math.max(maxLat, minLat),\n ];\n\n console.log(`Expected order: [${correctedExtent.join(', ')}]`);\n }\n\n // Check if the coordinates are within valid ranges\n const isValidLon = minLon >= -180 && maxLon <= 180;\n const isValidLat = minLat >= -90 && maxLat <= 90;\n\n if (!isValidLon || !isValidLat) {\n console.log(\n 'Warning: The coordinates may not be within valid geographic ranges.',\n );\n }\n\n // Return true only if all checks pass\n return isOrderValid && isValidLon && isValidLat;\n}\n","function isEqual(a: unknown, b: unknown, o: unknown, p: unknown): boolean {\n if (a instanceof Array) {\n if (!(b instanceof Array)) return false;\n //if (compareObjects(oVal, pVal === false) return false\n //would work, too, and perhaps is a better fit, still, this is easy, too\n return b.sort().join('') === a.sort().join('');\n } else if (a instanceof Date) {\n if (!(b instanceof Date)) return false;\n return '' + a === '' + b;\n } else if (a instanceof Function) {\n if (!(b instanceof Function)) return false;\n //ignore functions, or check them regardless?\n } else if (a instanceof Object) {\n if (!(b instanceof Object)) return false;\n if (a === o) {\n return b === p;\n } else {\n return objectDeepEqual(a, b);\n }\n }\n return a === b;\n}\n\n// based on https://stackoverflow.com/a/13143059\nexport function objectDeepEqual<\n T extends Record<string, any> = Record<string, any>,\n>(o: T, p: T): boolean {\n const keysO = Object.keys(o).sort();\n const keysP = Object.keys(p).sort();\n if (keysO.length !== keysP.length) return false;\n if (keysO.join('') !== keysP.join('')) return false;\n for (let i = 0; i < keysO.length; i++) {\n const oVal = o[keysO[i]];\n const pVal = p[keysP[i]];\n if (!isEqual(oVal, pVal, o, p)) {\n return false;\n }\n }\n return true;\n}\n","export function objectRemoveEmpty<T extends Record<any, any>>(obj: T): T {\n const newObj: Record<any, any> = {} as T;\n Object.keys(obj).forEach((key) => {\n if (!(obj[key] instanceof Array) && obj[key] === Object(obj[key])) {\n newObj[key] = objectRemoveEmpty(obj[key]);\n } else if (obj[key] !== undefined) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n}\n","export function round(val: number, toFixed?: number): number {\n const n = toFixed ? Number('1e+' + toFixed) : 1;\n return Math.round((val + Number.EPSILON) * n) / n;\n}\n","export * from './DeepPartial';\nexport * from './Type';\nexport * from './Json';\nexport * from './isObjKey';\n\nexport function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\nexport function isArray(val: unknown): val is [] {\n return Object.prototype.toString.call(val) === '[object Array]';\n}\n","export function fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n","import { full, objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheMatchProps<T> = {\n [P in keyof T]?: T[P];\n};\n\ninterface CacheItem<T = any, O = any> {\n key: string;\n value: CacheValue<T>;\n props?: CacheMatchProps<O>;\n}\n\nexport interface CacheOptions {\n /**\n * Cache Scope Separator\n * @defaultValue 'default'\n */\n namespace?: string;\n}\n\n/**\n * @example\n * ```javascript\n * const cache1 = new Cache();\n * cache1.add('foo', 'value');\n *\n * const cache2 = new Cache();\n * cache2.match('foo'); // value\n *\n * const cache3 = new Cache({ namespace: 'foo' });\n * cache3.match('foo'); // undefined\n * ```\n *\n * @example\n * ```javascript\n * let COUNTER = 0;\n * const createPromise = () => new Promise((res) => {\n * COUNTER++;\n * setTimeout(() => res('Ok'), 300);\n * });\n *\n * const cache = new Cache();\n * for (let i = 0; i < 10; i++) {\n * cache.add('foo', createPromise).then((data) => {\n * console.log(data); // 'Ok'\n * });\n * }\n * console.log(COUNTER); // 1\n * ```\n */\nexport class Cache<\n V = any,\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n private static instance: Record<\n string,\n Cache<unknown, Record<string, unknown>>\n > = {};\n private readonly cache: CacheItem<V, O>[] = [];\n\n constructor(options: CacheOptions = {}) {\n const namespace = options.namespace ?? 'default';\n if (Cache.instance[namespace]) {\n return Cache.instance[namespace] as Cache<V, O>;\n }\n Cache.instance[namespace] = this;\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<V, O>[] {\n return this.cache;\n }\n\n /**\n * Caching only a non-empty value.\n *\n * Useful for get or create strategy\n * @example\n * ```javascript\n * const cache = new Cache();\n * const getItemFunc = () => fetch(url).then((data) => {\n * return data.json(); // undefined\n * });\n * const item = await cache.addFull('foo', getItemFunc);\n * if (!item) {\n * await createItem(); // 'New item'\n * }\n *\n * // somewhere else in the code\n * const item = await cache.addFull('foo', getItemFunc).then((resp) => {\n * console.log(resp); // 'New item'\n * });\n * ```\n */\n addFull(\n key: string,\n valueToSet: CacheValue<V> | (() => CacheValue<V>),\n props?: CacheMatchProps<O>,\n ): CacheValue<V> {\n return this.add(key, valueToSet, props, true);\n }\n\n add(\n key: string,\n valueToSet: CacheValue<V> | (() => CacheValue<V>),\n props?: CacheMatchProps<O>,\n onlyFull?: boolean,\n ): CacheValue<V> {\n const exist = this._find(key, props);\n if (!exist) {\n let value: CacheValue<V>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const nonEmptyProps =\n props && JSON.parse(JSON.stringify(objectRemoveEmpty(props)));\n\n const cacheItem: CacheItem<V, O> = {\n key,\n value,\n props: nonEmptyProps,\n };\n if (onlyFull && !full(value)) {\n return value;\n }\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch((er) => {\n this.delete(key, props);\n });\n if (onlyFull) {\n value.then((x) => {\n if (!full(x)) {\n this.delete(key, props);\n }\n return x;\n });\n }\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, props?: CacheMatchProps<O>): CacheValue<V> | undefined {\n const cacheRecord = this._find(key, props);\n return cacheRecord?.value;\n }\n\n matchAll(key?: string, props?: CacheMatchProps<O>): CacheValue<V>[] {\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, props))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(item: CacheItem): void;\n delete(key: string, props?: CacheMatchProps<O>): void;\n delete(keyOrItem: string | CacheItem, props?: CacheMatchProps<O>): void {\n const itemsToDelete =\n typeof keyOrItem === 'string'\n ? this.cache.filter((x) => this._filter(x, keyOrItem, props))\n : [keyOrItem];\n\n for (const item of itemsToDelete) {\n const index = this.cache.indexOf(item);\n if (index !== -1) {\n this.cache.splice(index, 1);\n }\n }\n }\n\n private _find(\n key: string,\n props?: CacheMatchProps<O>,\n ): CacheItem<V> | undefined {\n return this.cache.find((x) => this._filter(x, key, props));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n props?: CacheMatchProps<O>,\n ): boolean {\n if (item.key !== key) return false;\n if (!props) return true;\n\n const itemProps = item.props;\n return objectDeepEqual(itemProps || {}, objectRemoveEmpty(props));\n }\n}\n","import type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when...\n */\nexport class NgwError extends Error {\n name = 'NgwError';\n\n title!: string;\n message!: string;\n detail!: string;\n exception!: NgwExceptions;\n status_code!: number | 404 | 500;\n data?: Record<string, any>;\n guru_meditation!: string;\n\n constructor(er?: Partial<NgwError>) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class ResourceNotFoundError extends NgwError {\n name = 'ResourceNotFoundError';\n exception: NgwExceptions = 'nextgisweb.resource.exception.ResourceNotFound';\n\n constructor(obj?: ResourceNotFoundError) {\n super(obj);\n Object.setPrototypeOf(this, ResourceNotFoundError.prototype);\n }\n}\n","export function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { defined } from '@nextgis/utils';\n\nimport { isObject } from './isObject';\n\nimport type { Resource } from '../types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nconst exclude = ['description'];\n\n/**\n * @remarks\n * https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#search-resources\n *\n * ```\n * { keyname, owner_user: { id }} > { keyname, owner_user__id }\n * ```\n *\n * @param resource - Any property from NGW resource item\n */\nexport function resourceToQuery(\n resource: DeepPartial<Resource>,\n prefix = '',\n): Record<string, unknown> {\n prefix = prefix ? prefix + '__' : '';\n const query: Record<string, any> = {};\n for (const [key, value] of Object.entries(resource)) {\n if (exclude.indexOf(key) === -1) {\n if (isObject(value)) {\n if (key === 'owner_user') {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (key === 'parent' && 'id' in value) {\n query.parent_id = value.id;\n }\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n }\n }\n return query;\n}\n","import Cache from '@nextgis/cache';\nimport { defined } from '@nextgis/utils';\n\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { isObject } from './utils/isObject';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { resourceToQuery } from './utils/resourceToQuery';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type {\n GetChildrenOfOptions,\n RequestOptions,\n ResourceDefinition,\n} from './interfaces';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nexport class ResourcesControl {\n cache: Cache<Promise<ResourceItem | undefined>, { id?: number | string }>;\n connector: NgwConnector;\n\n constructor({\n connector,\n cacheId,\n }: {\n connector: NgwConnector;\n cacheId?: string;\n }) {\n this.connector = connector;\n this.cache = new Cache({ namespace: cacheId });\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * Receive resource from NGW by id, keyname or search-object parameter.\n * @param resource - Resource id, keyname or search-object\n *\n * @remarks\n * Fetching resource would be cached to speed up next call\n */\n getOne(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n const forCache: { keyname?: string; display_name?: string; id?: number } =\n {};\n const opt = { ...requestOptions };\n if (typeof resource === 'string') {\n forCache.keyname = resource;\n } else if (typeof resource === 'number') {\n forCache.id = resource;\n } else if (isObject(resource)) {\n if (resource.id !== undefined) {\n forCache.id = resource.id;\n } else {\n if (resource.keyname) {\n forCache.keyname = resource.keyname;\n }\n if (resource.display_name) {\n forCache.display_name = resource.display_name;\n }\n }\n }\n\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, opt);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, opt);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, opt);\n }\n return Promise.resolve(undefined);\n }\n\n getOneOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem> {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res;\n }\n throw new ResourceNotFoundError();\n });\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * There are situations when exactly the resource id is needed\n * (for example, to compose the correct request to the api)\n * then this method will come in handy to facilitate the extraction of the identifier\n * if the resource is specified through a keyname or other parameters.\n */\n getId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<number | undefined> {\n if (typeof resource === 'number') {\n return Promise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return Promise.resolve(undefined);\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * Similar with {@link NgwConnector.getResourceId | getResourceId} but rise error if resource is not exist.\n * To not make one more checks if the resource is definitely exists\n */\n getIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<number> {\n return this.getId(resource, requestOptions).then((resp) => {\n if (resp === undefined) {\n throw new Error();\n }\n return resp;\n });\n }\n\n getMany(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem[]> {\n return this._resourceCacheFilter(resource).then((items) => {\n if (!items.length) {\n const query: Record<string, unknown> = {};\n if (resource.keyname) {\n query.keyname = resource.keyname;\n } else {\n Object.assign(query, resourceToQuery(resource));\n }\n return this.connector\n .get('resource.search', requestOptions, {\n serialization: 'full',\n ...query,\n })\n .then((resources) => {\n if (requestOptions?.cache && resources) {\n for (const x of resources) {\n this.cache.add('resource.item', Promise.resolve(x), {\n id: x.resource.id,\n });\n }\n }\n return resources;\n });\n }\n return items;\n });\n }\n\n getParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n return this.getOne(resource, requestOptions).then((child) => {\n if (child) {\n return this.getOne(child.resource.parent.id, requestOptions);\n }\n return Promise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): Promise<ResourceItem[]> {\n return this.getIdOrFail(resource).then((parent) =>\n this._getChildrenOf(parent, requestOptions),\n );\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): Promise<ResourceItem | undefined> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.put('resource.item', { data }, { id });\n }\n });\n }\n\n /**\n * Fast way to delete resource from NGW and clean cache.\n * @param resource - Resource definition\n */\n delete(resource: ResourceDefinition): Promise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this._cleanResourceItemCache(id);\n return undefined;\n });\n }\n });\n }\n\n private _getChildrenOf(\n parent: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n _items: ResourceItem[] = [],\n ): Promise<ResourceItem[]> {\n return this.connector\n .get('resource.collection', requestOptions, {\n parent,\n })\n .then((items) => {\n const recursivePromises = [];\n for (const item of items) {\n if (requestOptions?.cache) {\n this.cache.add('resource.item', Promise.resolve(item), {\n id: item.resource.id,\n });\n }\n _items.push(item);\n if (requestOptions?.recursive && item.resource.children) {\n recursivePromises.push(\n this._getChildrenOf(item.resource.id, requestOptions, _items),\n );\n }\n }\n if (recursivePromises.length) {\n return Promise.all(recursivePromises).then(() => {\n return _items;\n });\n }\n return _items;\n });\n }\n\n private async _cleanResourceItemCache(id: number) {\n const all = this.cache.all();\n const toDelete: typeof all = [];\n for (const c of all) {\n const cid = c.props?.id;\n if (['resource.item', 'resource'].includes(c.key) && cid !== undefined) {\n if (typeof cid === 'number') {\n if (cid === id) {\n toDelete.push(c);\n }\n } else {\n const rid = await this.getId(cid);\n if (rid === id) {\n toDelete.push(c);\n }\n }\n }\n }\n for (const d of toDelete) {\n this.cache.delete(d);\n }\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n return this.connector.get('resource.item', requestOptions, { id });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n return this.getMany(resource, requestOptions).then((resources) => {\n return resources[0];\n });\n }\n\n private _resourceCacheFilter(\n resource: DeepPartial<Resource>,\n ): Promise<ResourceItem[]> {\n return Promise.all(this.cache.matchAll('resource.item')).then(\n (resources) => {\n const items: ResourceItem[] = [];\n resources.filter((x) => {\n if (x) {\n // identical by uniq props\n if (resource.keyname && x.resource.keyname) {\n return resource.keyname === x.resource.keyname;\n }\n if (defined(resource.id) && defined(x.resource.id)) {\n return resource.id === x.resource.id;\n }\n return resourceCompare(resource, x.resource);\n }\n });\n return items;\n },\n );\n }\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { NgwConnector } from './NgwConnector';\nimport type { NgwConnectorOptions } from './interfaces';\n\nexport const CONNECTORS: NgwConnector[] = [];\n\nexport function addConnector(connector: NgwConnector): void {\n CONNECTORS.push(connector);\n}\n\nexport function findConnector(\n options: NgwConnectorOptions,\n): NgwConnector | undefined {\n return CONNECTORS.find((x) => {\n if (x.options.baseUrl === options.baseUrl) {\n if (options.auth) {\n if (x.options.auth) {\n return objectDeepEqual(x.options.auth, options.auth);\n }\n } else {\n // if auth not in find options; use first connector with same url\n return true;\n }\n }\n });\n}\n\nexport function removeConnector(connector: NgwConnector): void {\n const index = CONNECTORS.indexOf(connector);\n if (index !== -1) {\n CONNECTORS.splice(index, 1);\n }\n}\n\nexport function findAndRemoveConnector(options: NgwConnectorOptions): void {\n const exist = findConnector(options);\n if (exist) {\n removeConnector(exist);\n }\n}\n","export class AbortError extends Error {\n constructor(message = 'AbortError') {\n super(message);\n this.name = 'AbortError';\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class InsufficientPermissionsError extends NgwError {\n name = 'InsufficientPermissionsError';\n exception: NgwExceptions =\n 'nextgisweb.core.exception.InsufficientPermissions';\n\n constructor(obj: InsufficientPermissionsError) {\n super(obj);\n Object.setPrototypeOf(this, InsufficientPermissionsError.prototype);\n }\n}\n","// https://github.com/Leaflet/Leaflet/blob/b507e21c510b53cd704fb8d3f89bb46ea925c8eb/src/core/Util.js#L165\nconst templateRe = /\\{ *([\\w_-]+) *\\}/g;\n\nexport function template(str: string, data: { [param: string]: any }): string {\n return str.replace(templateRe, (s, key) => {\n let value = data[key];\n\n if (value === undefined) {\n throw new Error('No value provided for letiable ' + s);\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return value;\n });\n}\n","import { template } from './template';\n\nimport type { NgwConnector } from '../NgwConnector';\nimport type {\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n} from '../interfaces';\nimport type { RequestItemsParamsMap } from '../types/RequestItemsParamsMap';\n\ninterface ApiRequestOptions<K extends keyof RequestItemsParamsMap> {\n name: string;\n connector: NgwConnector;\n params: RequestItemsParams<K>;\n requestOptions: RequestOptions;\n}\n\nexport async function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): Promise<P[K]> {\n const { params, name, connector, requestOptions } = opt;\n\n const apiItems = await connector.connect();\n let apiItem = apiItems && apiItems[name];\n\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift(); // Extract the base URL\n\n if (apiItem.length) {\n const replaceParams: { [num: number]: string } = {};\n\n // Prepare URL template parameters described in apiItem\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = `{${arg}}`;\n\n // Check if each required by apiItem parameter is provided in params\n if (params[arg] === undefined) {\n throw new Error(`\\`${arg}\\` URL API argument is not specified`);\n }\n }\n\n // Replace URL template parameters with actual values\n if (url) {\n url = template(url, replaceParams);\n }\n }\n\n if (params) {\n const paramArray: string[] = [];\n const paramList = params.paramList;\n\n // Handle paramList if present: transform it into query string format\n if (Array.isArray(paramList)) {\n paramList.forEach(([key, value]) => {\n paramArray.push(`${key}=${value}`);\n });\n }\n\n // Append other parameters to the URL, excluding those already used in the template\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n\n // If there are any query parameters, append them to the URL\n if (paramArray.length) {\n url = `${url}?${paramArray.join('&')}`;\n }\n }\n\n if (url) {\n return connector.makeQuery(url, params, {\n cacheName: name,\n ...requestOptions,\n });\n } else {\n throw new Error('Request URL is not set');\n }\n } else {\n // Return undefined if API item is not found\n return undefined as P[K];\n }\n}\n","/**\n * Thrown when...\n */\nexport class NetworkError extends Error {\n name = 'NetworkError';\n\n constructor(url: string) {\n super();\n Object.setPrototypeOf(this, NetworkError.prototype);\n this.message = `Unable to request ${url}.\n Possibly invalid NGW URL entered or CORS not configured to get request from ${location.origin}`; // /control-panel/cors\n }\n}\n","import { NetworkError } from '../errors/NetworkError';\nimport { NgwError } from '../errors/NgwError';\nimport { isError } from '../errors/isError';\n\nimport { isObject } from './isObject';\n\nimport type {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\n\n// readyState\n// Holds the status of the XMLHttpRequest.\n// 0: request not initialized\n// 1: server connection established\n// 2: request received\n// 3: processing request\n// 4: request finished and response is ready\n\n// status\n// 200: \"OK\"\n// 201 \"Created\"\tThe request has been fulfilled, and a new resource is created\n// 403: \"Forbidden\"\n// 404: \"Page not found\"\n// 500: \"Internal Server Error\"\n// For a complete list go to the Http Messages Reference\n\ntype LoadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> | undefined,\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n) => void;\n\nlet loadData: LoadData;\n// @ts-ignore\nif (__BROWSER__) {\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): void => {\n options.method = options.method || 'GET';\n\n const xhr = new XMLHttpRequest();\n xhr.open(options.method || 'GET', url, true); // true for asynchronous\n\n if (options.responseType === 'blob') {\n xhr.responseType = options.responseType;\n }\n const getResponseText = () => {\n try {\n return JSON.parse(xhr.responseText);\n } catch (er) {\n return xhr.responseText;\n }\n };\n const processingResponse = (forError = false) => {\n const cb = forError ? error : callback;\n if (options.responseType === 'blob') {\n cb(xhr.response);\n } else {\n if (xhr.responseText) {\n cb(getResponseText());\n } else {\n error({ message: '' });\n }\n }\n };\n xhr.onload = () => {\n if ([401, 403, 404, 422, 500].indexOf(xhr.status) !== -1) {\n error(new NgwError(getResponseText()));\n }\n processingResponse();\n };\n\n // xhr.onreadystatechange = () => {\n // if (\n // (xhr.readyState === 4 && xhr.status === 200) ||\n // (xhr.readyState === 3 && xhr.status === 201)\n // ) {\n // processingResponse();\n // } else if (xhr.readyState === 3 && xhr.status === 400) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 500) {\n // processingResponse();\n // } else if (xhr.readyState === 4 && xhr.status === 401) {\n // error(xhr.statusText);\n // } else if (xhr.readyState === 4) {\n // error('request error');\n // }\n // };\n\n xhr.onerror = (er) => {\n if (xhr.status === 0) {\n error(new NetworkError(url));\n } else {\n error(er);\n }\n };\n\n xhr.upload.onprogress = function (e) {\n if (e.lengthComputable) {\n const percentComplete = (e.loaded / e.total) * 100;\n if (options.onProgress) {\n options.onProgress(percentComplete, e);\n }\n // console.log(percentComplete + '% uploaded');\n }\n };\n\n const headers = options.headers;\n if (headers) {\n for (const h in headers) {\n const header = headers[h];\n if (typeof header === 'string') {\n xhr.setRequestHeader(h, header);\n }\n }\n }\n if (options.withCredentials !== undefined) {\n xhr.withCredentials = options.withCredentials;\n }\n\n let data: FormData | any;\n if (options.file) {\n data = new FormData();\n data.append('file', options.file);\n if (options.data) {\n for (const d in options.data) {\n data.append(d, data[d]);\n }\n }\n } else {\n data = options.data\n ? typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data)\n : null;\n }\n if (onCancel) {\n onCancel(() => {\n xhr.abort();\n });\n }\n xhr.send(data);\n };\n} else {\n const url = require('url');\n const http = require('http');\n const https = require('https');\n const FormData = require('form-data');\n\n const adapterFor = (inputUrl: string) => {\n const adapters: Record<string, any> = {\n 'http:': http,\n 'https:': https,\n };\n const protocol = url.parse(inputUrl).protocol || 'https:';\n return adapters[protocol];\n };\n\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): Promise<unknown> => {\n const { file, headers, method, data, responseType } = options;\n\n const request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: headers || {},\n method,\n };\n const body = typeof data === 'string' ? data : JSON.stringify(data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n let form;\n let uploadedFile = file;\n if (file) {\n const fileMeta = {};\n if (\n isObject(file) &&\n 'file' in file &&\n ('filename' in file || 'name' in file)\n ) {\n const {\n file: file_,\n name,\n ...fileMeta_\n } = file as Record<string, any>;\n if (name && !fileMeta_.filename) {\n fileMeta_.filename = name;\n }\n Object.assign(fileMeta, fileMeta_);\n uploadedFile = file_ as File;\n }\n form = new FormData();\n form.append('file', uploadedFile, fileMeta);\n if (data) {\n for (const d in data) {\n form.append(d, data[d]);\n }\n }\n Object.assign(requestOpt.headers, {\n // 'content-length': form.getLengthSync(),\n ...form.getHeaders(),\n });\n }\n\n if (body !== undefined) {\n Object.assign(requestOpt.headers, {\n 'content-type': 'application/json',\n 'content-length': Buffer.byteLength(body),\n });\n }\n const req = adapter.request(url, requestOpt, (resp: any) => {\n let data = '';\n resp.on('data', (chunk: any) => {\n data += chunk;\n });\n resp.on('end', () => {\n if (data) {\n if (responseType === 'blob') {\n resolve(data);\n } else {\n let json: Record<string, any> | undefined;\n try {\n json = JSON.parse(data);\n if (json && json.status_code && json.status_code) {\n reject(json.message);\n }\n } catch (er) {\n reject(er);\n }\n if (json !== undefined) {\n if (isError(json)) {\n reject('extractError(json)');\n } else {\n resolve(json);\n }\n }\n }\n }\n reject('no data');\n });\n });\n if (form) {\n form.pipe(req);\n }\n req.on('error', (err: any) => {\n reject(err);\n });\n if (body) {\n req.write(body);\n }\n onCancel(() => {\n req.abort();\n });\n req.end();\n } else {\n throw new Error(`Given URL '${url}' is not correct`);\n }\n });\n return request\n .then((data) => {\n if (callback) {\n callback(data);\n }\n return data;\n })\n .catch((er) => {\n if (error) {\n error(er);\n } else {\n throw new Error(er);\n }\n });\n };\n}\n\nexport { loadData };\n","import { EventEmitter } from 'events';\n\nimport Cache from '@nextgis/cache';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\n\nimport pkg from '../package.json';\n\nimport { ResourcesControl } from './ResourcesControl';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { AbortError } from './errors/AbortError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { apiRequest } from './utils/apiRequest';\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\n\nimport type {\n Credentials,\n DeleteRequestItemsResponseMap,\n GetChildrenOfOptions,\n GetRequestItemsResponseMap,\n NgwConnectorOptions,\n Params,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n PyramidRoute,\n RequestHeaders,\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n RequestTransformFunction,\n ResourceDefinition,\n ResourceIdKeynameDef,\n UserInfo,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { Resource, ResourceItem } from './types/ResourceItem';\nimport type { DeepPartial } from '@nextgis/utils';\n\nlet ID = 0;\nlet REQUEST_ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n emitter = new EventEmitter();\n user?: UserInfo;\n resources!: ResourcesControl;\n cache: Cache;\n withCredentials?: boolean = undefined;\n\n private client = `NextGIS-NGW-Connector/${pkg.version}`;\n private routeStr = '/api/component/pyramid/route';\n private activeRequests: {\n [requestId: number]: AbortController;\n } = {};\n private requestTransform?: RequestTransformFunction | null;\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n this.cache = new Cache({ namespace: options.cacheId });\n if (exist) {\n return exist;\n } else {\n const { route, requestTransform, withCredentials } = this.options;\n if (route) {\n this.routeStr = route;\n }\n if (requestTransform) {\n this.requestTransform = requestTransform;\n }\n if (withCredentials !== undefined) {\n this.withCredentials = withCredentials;\n }\n this.resources = new ResourcesControl({\n connector: this,\n cacheId: options.cacheId,\n });\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clean();\n this.resources.cache.clean();\n }\n\n setRequestTransform(\n requestTransform: RequestTransformFunction | undefined | null,\n ) {\n this.requestTransform = requestTransform;\n }\n\n /**\n * Fast way to specify the connection address to NextGIS Web.\n * The current connection will be severed.\n * @param baseUrl - NGW url\n */\n setNgw(baseUrl: string): void {\n this.logout();\n this.options.baseUrl = baseUrl;\n addConnector(this);\n }\n\n /**\n * Establishing a connection with NextGIS Web to fulfill all other requests.\n * @remarks\n * This method need not be called manually as it is used when forming a request in {@link apiRequest | apiRequest}.\n * Can be used to check connection.\n * @example\n * ```javascript\n * const connector = new NgwConnector({baseUrl: 'https://demo.nextgis.com'});\n * connector.connect()\n * .then(() => console.log('Ok'))\n * .catch((er) => console.log('Connection problem', er));\n * ```\n */\n async connect(): Promise<PyramidRoute> {\n const auth = this.options.auth;\n\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n await this._login({ login, password });\n }\n }\n const routeUrl = `${this.routeStr}?client=${this.client}`;\n return await this.makeQuery<PyramidRoute>(\n routeUrl,\n {},\n {\n cacheName: 'route',\n cache: true,\n cacheProps: {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n },\n },\n );\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials, options?: RequestOptions): Promise<UserInfo> {\n this.logout();\n addConnector(this);\n return this._login(credentials, options);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n this.abort();\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.clearCache();\n this.emitter.emit('logout');\n }\n\n async getUserInfo(\n credentials?: Credentials,\n options?: RequestOptions,\n ): Promise<UserInfo> {\n if (this.user && this.user.id) {\n return this.user;\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options_: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n ...options,\n };\n\n // Do not use apiRequest('auth.current_user') to avoid circular-references\n return this.makeQuery<UserInfo>(\n '/api/component/auth/current_user',\n {},\n options_,\n );\n }\n\n /**\n * Obtaining the required Headers for authentication of requests in the NGW.\n */\n getAuthorizationHeaders(\n credentials?: Credentials,\n ): RequestHeaders | undefined {\n const client = this.makeClientId(credentials);\n if (client) {\n return {\n Authorization: `Basic ${client}`,\n };\n }\n }\n\n makeClientId(credentials?: Credentials): string | undefined {\n credentials = credentials || this.options.auth;\n if (credentials) {\n const { login, password } = credentials;\n const str = `${login}:${password}`;\n const encodedStr = encodeURIComponent(str);\n\n if (__BROWSER__) {\n return window.btoa(encodedStr);\n } else {\n return Buffer.from(encodedStr).toString('base64');\n }\n }\n }\n\n /** Stop all api requests */\n abort() {\n for (const abortController of Object.values(this.activeRequests)) {\n abortController.abort();\n }\n this.activeRequests = {};\n }\n\n getActiveApiRequests() {\n return { ...this.activeRequests };\n }\n\n /**\n * Send request to NGW api router.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param params - Request item params or query params\n * @param requestOptions - Request options\n *\n * @example\n * ```javascript\n *\n * // there is such an NGW route item\n * // \"feature_layer.feature.item\": [\n * // \"/api/resource/{0}/feature/{1}\",\n * // \"id\",\n * // \"fid\"\n * // ],\n *\n * const connector = new NgwConnector({ baseUrl: 'https://example.nextgis.com' });\n * connector.apiRequest('feature_layer.feature.item', {\n * // request params for {0} and {1}\n * 'id': 2011,\n * 'fid': 101,\n * // query params\n * 'srs': 4326,\n * 'geom_format': 'geojson',\n * }, { method: 'GET' });\n * // send get-request to 'https://example.nextgis.com/api/resource/2011/feature/101?srs=4326&geom_format=geojson'\n *\n * ```\n */\n apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n >(\n name: K,\n params_: RequestItemsParams<K> = {},\n requestOptions: RequestOptions = {},\n ): Promise<P[K]> {\n params_ = requestOptions.params ?? params_;\n const params = objectRemoveEmpty(params_);\n return apiRequest({ name, params, requestOptions, connector: this });\n }\n\n /**\n * Shortcut method for send POST request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n *\n * @example\n * ```javascript\n * connector.post('resource.collection', { data: POST_PAYLOAD })\n * .then((newResource) => console.log(newResource))\n * .catch((error) => console.warn(error));\n * ```\n */\n post<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'POST', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PostRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'POST';\n return this.apiRequest<K, PostRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send GET request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n get<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'GET', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): Promise<GetRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'GET';\n return this.apiRequest<K, GetRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PATCH request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n patch<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PATCH', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PatchRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PATCH';\n return this.apiRequest<K, PatchRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PUT request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n put<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PUT', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PutRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PUT';\n return this.apiRequest<K, PutRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send DELETE request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n delete<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'DELETE', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): Promise<DeleteRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'DELETE';\n return this.apiRequest<K, DeleteRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Send request to NGW.\n * @param url - URL address to NGW\n * @param params - Query params\n * @param options - Request options\n */\n async makeQuery<R = unknown>(\n url: string,\n params?: Params | null,\n options: RequestOptions = {},\n ): Promise<R> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (!url) {\n throw new Error('Empty `url` not allowed');\n }\n\n if (params) {\n const { paramList, ...restParams } = params;\n url = template(url, restParams);\n }\n url = encodeURI(fixUrlStr(url));\n\n options = { withCredentials: this.withCredentials, ...options };\n\n const {\n cache,\n signal: externalSignal,\n method = 'GET',\n headers,\n cacheName,\n cacheProps,\n responseType,\n withCredentials,\n } = options;\n\n const internalAbortController = new AbortController();\n const internalSignal = internalAbortController.signal;\n\n // If the external signal aborts, also abort the internal signal\n if (externalSignal) {\n if (externalSignal.aborted) {\n throw new AbortError();\n }\n externalSignal.addEventListener('abort', () => {\n internalAbortController.abort();\n });\n }\n\n options.signal = internalSignal;\n\n const createPromise = async () => {\n const id = REQUEST_ID++;\n this.activeRequests[id] = internalAbortController;\n try {\n return this._loadData<R>(url, options);\n } finally {\n this._cleanActiveRequest(id);\n }\n };\n\n if (cache && method === 'GET') {\n const cacheOptions = cacheProps\n ? cacheProps\n : {\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n userId: this.user?.id,\n }),\n params,\n };\n return this.cache.add(\n cacheName || url,\n createPromise,\n cacheOptions,\n false,\n );\n }\n\n return createPromise();\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@link ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n return this.resources.getOne(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem> {\n return this.resources.getOneOrFail(resource, requestOptions);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): Promise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceByKeyname(keyname: string): Promise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceById(id: number): Promise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@link ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<number | undefined> {\n return this.resources.getId(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<number> {\n return this.resources.getIdOrFail(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem[]> {\n return this.resources.getMany(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n requestOptions?: RequestOptions<'GET'>,\n ): Promise<ResourceItem | undefined> {\n return this.resources.getParent(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): Promise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): Promise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@link ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): Promise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData<R = unknown>(\n url: string,\n options: RequestOptions,\n ): Promise<R> {\n options.responseType = options.responseType || 'json';\n\n return new Promise<R>((resolve, reject) => {\n if (this.user) {\n options = options || {};\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n\n if (this.requestTransform) {\n const [transUrl, transOptions] = this.requestTransform(url, options);\n url = transUrl;\n options = transOptions;\n }\n\n let runOnAbort: (() => void) | undefined = undefined;\n\n loadData(url, resolve, options, reject, (handler: () => void) => {\n runOnAbort = handler;\n });\n\n options.signal?.addEventListener('abort', () => {\n if (runOnAbort !== undefined) {\n runOnAbort();\n }\n reject(new AbortError());\n });\n }).catch((httpError) => {\n if (httpError.name !== 'AbortError') {\n if (__DEV__) {\n console.warn('DEV WARN', httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n throw httpError;\n });\n }\n\n private async _login(\n credentials: Credentials,\n options?: RequestOptions,\n ): Promise<UserInfo> {\n try {\n const data = await this.getUserInfo(credentials, options);\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n } catch (er) {\n this.emitter.emit('login:error', er);\n throw er;\n }\n }\n\n private _cleanActiveRequest(requestId: number) {\n delete this.activeRequests[requestId];\n }\n\n private _handleHttpError(er: Error) {\n if (er) {\n if (er instanceof NgwError) {\n if (er.exception === 'nextgisweb.resource.exception.ResourceNotFound') {\n throw new ResourceNotFoundError(er);\n } else if (\n er.exception === 'nextgisweb.core.exception.InsufficientPermissions'\n ) {\n throw new InsufficientPermissionsError(er);\n }\n }\n }\n return er;\n }\n}\n","import type {\n Operation,\n Properties,\n PropertiesFilter,\n PropertyFilter,\n} from './interfaces';\nimport type { Feature } from 'geojson';\n\nfunction reEscape(s: string): string {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction like(b: string, a: string, iLike?: boolean): boolean {\n a = String(a);\n b = String(b);\n if (a === b) return true;\n if (iLike && a.toUpperCase() === b.toUpperCase()) return true;\n const re = `^${reEscape(a)}$`.replace(/%/g, '.*').replace('_', '.');\n return new RegExp(re, iLike ? 'i' : '').exec(b) !== null;\n}\n\nexport const operationsAliases: {\n [key in Operation]: (a: any, b: any) => boolean;\n} = {\n // greater(>)\n gt: (a: any, b: any) => a > b,\n // lower(<)\n lt: (a: any, b: any) => a < b,\n // greater or equal(>=)\n ge: (a: any, b: any) => a >= b,\n // lower or equal(<=)\n le: (a: any, b: any) => a <= b,\n // equal(=)\n eq: (a: any, b: any) => a === b,\n // not equal(!=)\n ne: (a: any, b: any) => a !== b,\n\n in: (a: any, b: any[]) => b.indexOf(a) !== -1,\n notin: (a: any, b: any[]) => b.indexOf(a) === -1,\n // LIKE SQL statement(for strings compare)\n like: (a: string, b: string) => {\n return like(a, b);\n },\n // ILIKE SQL statement(for strings compare)\n ilike: (a: string, b: string) => {\n return like(a, b, true);\n },\n};\n\nexport function isPropertyFilter(\n filter: PropertyFilter | PropertiesFilter | string,\n): filter is PropertyFilter {\n const pf = filter as PropertyFilter;\n if (\n pf.length === 3 &&\n typeof pf[0] === 'string' &&\n typeof pf[1] === 'string'\n ) {\n return true;\n }\n return false;\n}\n\n/** @deprecated use {@link isPropertyFilter} instead */\nexport function checkIfPropertyFilter(\n filter: PropertyFilter | PropertiesFilter | string,\n): filter is PropertyFilter {\n return isPropertyFilter(filter);\n}\n\nexport function featureFilter(\n feature: Feature,\n filters: PropertiesFilter,\n): boolean {\n const properties: Properties = { ...feature.properties };\n if (properties) {\n // workaround to filter by feature id\n properties.$id = feature.id;\n return propertiesFilter(properties, filters);\n }\n return false;\n}\n\nexport function propertiesFilter<T extends Properties = Properties>(\n properties: T,\n filters: PropertiesFilter<T>,\n): boolean {\n const logic = typeof filters[0] === 'string' ? filters[0] : 'all';\n const filterFunction = (p: PropertyFilter | PropertiesFilter) => {\n if (isPropertyFilter(p)) {\n const [field, operation, value] = p;\n const operationExec = operationsAliases[operation];\n if (operationExec) {\n if (operation === 'like' || operation === 'ilike') {\n if (typeof field === 'string') {\n let prop = '';\n const value_ = field.replace(/^%?(\\w+)%?$/, (match, cleanField) => {\n prop = properties[cleanField];\n return field.replace(cleanField, value);\n });\n return operationExec(prop, value_);\n }\n }\n return operationExec(properties[field], value);\n }\n return false;\n } else {\n return propertiesFilter(properties, p);\n }\n };\n const filters_ = filters.filter((x) => Array.isArray(x)) as (\n | PropertyFilter\n | PropertiesFilter\n )[];\n return logic === 'any'\n ? filters_.some(filterFunction)\n : filters_.every(filterFunction);\n}\n","import { isPropertyFilter } from '@nextgis/properties-filter';\nimport {\n defined,\n degrees2meters,\n getBoundsCoordinates,\n isLngLatBoundsArray,\n round,\n} from '@nextgis/utils';\n\nimport type {\n FeatureRequestParams,\n FetchNgwItemsOptions,\n NgwFeatureRequestOptions,\n} from '../interfaces';\nimport type {\n FeatureItem,\n RequestItemAdditionalParams,\n} from '@nextgis/ngw-connector';\nimport type {\n PropertiesFilter,\n PropertyFilter,\n} from '@nextgis/properties-filter';\nimport type { FeatureProperties, LngLatArray } from '@nextgis/utils';\nimport type { Feature, Geometry } from 'geojson';\n\nexport const FEATURE_REQUEST_PARAMS: FeatureRequestParams = {\n srs: 4326,\n geom_format: 'geojson',\n};\n\nexport function createGeoJsonFeature<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(item: Pick<FeatureItem, 'id' | 'geom' | 'fields'>): Feature<G, P> {\n const geometry = item.geom as G;\n const feature: Feature<G, P> = {\n geometry,\n id: item.id,\n type: 'Feature',\n properties: item.fields as P,\n };\n return feature;\n}\n\nexport function updateItemRequestParam<\n P extends FeatureProperties = FeatureProperties,\n>(params: FeatureRequestParams, options: NgwFeatureRequestOptions<P>): void {\n const { extensions, geom, fields, srs, ilike, like } = options;\n // Empty extesions by default\n const extensionsStr = extensions ? extensions.join(',') : '';\n // Use character * to set all extensions\n if (extensionsStr !== '*') {\n params.extensions = extensionsStr;\n }\n\n if (fields !== undefined && fields !== null) {\n params.fields = Array.isArray(fields) ? fields.join(',') : '';\n }\n if (geom !== undefined) {\n params.geom = geom ? 'yes' : 'no';\n if (!geom) {\n delete params.srs;\n delete params.geom_format;\n }\n }\n if (defined(ilike)) {\n params.ilike = ilike;\n } else if (defined(like)) {\n params.like = like;\n }\n if (defined(srs)) {\n params.srs = srs;\n }\n}\n\n// NGW REST API is not able to filtering by combined queries\n// therefore the filter is divided into several requests\nexport async function createFeatureFieldFilterQueries<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(\n opt: FetchNgwItemsOptions<P> &\n Required<Pick<FetchNgwItemsOptions, 'filters'>>,\n): Promise<FeatureItem<P, G>[]> {\n const queries: Promise<FeatureItem<P, G>[]>[] = getQueries<G, P>(opt);\n\n const itemsParts = await Promise.all(queries);\n // this list of ids used for optimization\n const ids: number[] = [];\n const items: FeatureItem<P, G>[] = [];\n for (const part of itemsParts) {\n for (const item of part) {\n if (!ids.includes(item.id)) {\n items.push(item);\n ids.push(item.id);\n }\n }\n }\n const offset = opt.offset !== undefined ? opt.offset : 0;\n const limit = opt.limit !== undefined ? opt.limit : items.length;\n if (opt.offset || opt.limit) {\n return items.splice(offset, limit);\n }\n return items;\n}\n\nfunction createParam(pf: PropertyFilter): [string, any] {\n const [field, operation, value] = pf;\n const isFldStr = field !== 'id' ? 'fld_' : '';\n let vStart = '';\n let vEnd = '';\n const field_ = String(field)\n .trim()\n .replace(/^(%?)(.+?)(%?)$/, (m, a, b, c) => {\n vStart = a;\n vEnd = c;\n return b;\n });\n const v = vStart + value + vEnd;\n return [`${isFldStr}${field_}__${operation}`, v];\n}\n\nfunction getQueries<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(\n opt: FetchNgwItemsOptions<P> &\n Required<Pick<FetchNgwItemsOptions, 'filters'>>,\n _queries: Promise<FeatureItem<P, G>[]>[] = [],\n _parentAllParams: [string, any][] = [],\n): Promise<FeatureItem<P, G>[]>[] {\n const { filters } = opt;\n\n const paramList = opt.paramList ?? [];\n\n const logic = typeof filters[0] === 'string' ? filters[0] : 'all';\n\n const filters_ = filters.filter((x) => Array.isArray(x)) as PropertyFilter[];\n\n if (logic === 'any') {\n for (const f of filters_) {\n if (isPropertyFilter(f)) {\n _queries.push(\n fetchNgwLayerItemsRequest<G, P>({\n ...opt,\n paramList: [..._parentAllParams, ...paramList, createParam(f)],\n }),\n );\n } else {\n getQueries(\n {\n ...opt,\n filters: f,\n },\n _queries,\n [..._parentAllParams],\n );\n }\n }\n } else if (logic === 'all') {\n const filters: [string, any][] = [];\n const propertiesFilterList: PropertiesFilter[] = [];\n for (const f of filters_) {\n if (isPropertyFilter(f)) {\n filters.push(createParam(f));\n } else {\n propertiesFilterList.push(f);\n }\n }\n\n if (propertiesFilterList.length) {\n for (const x of propertiesFilterList) {\n getQueries(\n {\n ...opt,\n filters: x,\n },\n _queries,\n [..._parentAllParams, ...filters],\n );\n }\n } else {\n _queries.push(\n fetchNgwLayerItemsRequest<G, P>({\n ...opt,\n paramList: [..._parentAllParams, ...paramList, ...filters],\n }),\n );\n }\n }\n return _queries;\n}\n\nfunction createWktFromCoordArray(coord: LngLatArray[]): string {\n const polygon = coord.map(([lng, lat]) => {\n const [x, y] = degrees2meters(lng, lat).map((c) => round(c));\n return x + ' ' + y;\n });\n return `POLYGON((${polygon.join(', ')}))`;\n}\n\nexport function fetchNgwLayerItemsRequest<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureItem<P, G>[]> {\n const params: FeatureRequestParams & RequestItemAdditionalParams = {\n ...FEATURE_REQUEST_PARAMS,\n };\n const {\n limit,\n cache,\n signal,\n offset,\n orderBy,\n paramList,\n connector,\n geomFormat,\n intersects,\n resourceId,\n } = options;\n if (limit) {\n if (limit !== Number.POSITIVE_INFINITY) {\n params.limit = limit;\n }\n } else {\n // Strict restriction on loading data from large layers\n params.limit = 7000;\n }\n if (offset) {\n params.offset = offset;\n }\n if (geomFormat) {\n params.geom_format = geomFormat;\n }\n updateItemRequestParam(params, options);\n\n if (orderBy) {\n params.order_by = orderBy.join(',');\n }\n if (Array.isArray(intersects)) {\n const coordinates = isLngLatBoundsArray(intersects)\n ? getBoundsCoordinates(intersects)\n : intersects;\n\n params.intersects = createWktFromCoordArray(coordinates);\n } else if (typeof intersects === 'string') {\n params.intersects = intersects;\n }\n\n if (paramList) {\n params.paramList = paramList;\n }\n const reqParams = {\n id: resourceId,\n ...params,\n };\n\n return connector.get(\n 'feature_layer.feature.collection',\n { cache, signal },\n reqParams,\n ) as Promise<FeatureItem<P, G>[]>;\n}\n","import {\n FEATURE_REQUEST_PARAMS,\n createGeoJsonFeature,\n updateItemRequestParam,\n} from './featureLayerUtils';\n\nimport type {\n FeatureRequestParams,\n FetchNgwItemOptions,\n NgwFeatureItemResponse,\n} from '../interfaces';\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { Geometry } from 'geojson';\n\nexport async function fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemOptions<P>): Promise<NgwFeatureItemResponse<P, G>> {\n const params: FeatureRequestParams & { [name: string]: any } = {\n ...FEATURE_REQUEST_PARAMS,\n };\n updateItemRequestParam(params, options);\n const queryParams = {\n id: options.resourceId,\n fid: options.featureId,\n ...params,\n };\n\n const resp = await options.connector.get(\n 'feature_layer.feature.item',\n options,\n queryParams,\n );\n\n const toGeojson = async () => {\n if (resp.geom) {\n return createGeoJsonFeature<G, P>(resp);\n } else {\n const onlyGeomItem = await fetchNgwLayerItem({\n ...options,\n geom: true,\n fields: null,\n extensions: null,\n });\n const geom = onlyGeomItem.geom;\n return createGeoJsonFeature<G, P>({ ...resp, geom });\n }\n };\n\n return {\n ...resp,\n toGeojson,\n } as NgwFeatureItemResponse<P, G>;\n}\n","import { createGeoJsonFeature } from './utils/featureLayerUtils';\nimport { fetchNgwLayerItem } from './utils/fetchNgwLayerItem';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { FeatureItem, RequestOptions } from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { Feature, Point } from 'geojson';\n\ninterface BookmarkItemOptions {\n connector: NgwConnector;\n resourceId: number;\n item: FeatureItem;\n labelField?: string;\n}\n\nexport class BookmarkItem {\n readonly name: string;\n readonly resourceId: number;\n readonly item: FeatureItem;\n\n private _extent?: LngLatBoundsArray;\n\n constructor(private options: BookmarkItemOptions) {\n this.resourceId = options.resourceId;\n const item = options.item;\n this.item = item;\n if (options.labelField && item.fields) {\n this.name = item.fields[options.labelField];\n } else {\n this.name = String(item.id);\n }\n }\n\n extent(opt?: RequestOptions<'GET'>): Promise<LngLatBoundsArray> {\n if (this._extent) {\n return Promise.resolve(this._extent);\n }\n return this.options.connector\n .get('feature_layer.feature.item_extent', opt, {\n id: this.resourceId,\n fid: this.item.id,\n })\n .then((resp) => {\n const { minLat, minLon, maxLat, maxLon } = resp.extent;\n const lonLat = [minLon, minLat, maxLon, maxLat];\n this._extent = lonLat;\n return lonLat;\n });\n }\n\n geoJson(\n opt?: Pick<RequestOptions<'GET'>, 'cache' | 'signal'>,\n ): Promise<Feature<Point, any>> {\n if (this.item.geom) {\n return Promise.resolve(createGeoJsonFeature(this.item));\n } else {\n return fetchNgwLayerItem({\n resourceId: this.resourceId,\n featureId: this.item.id,\n connector: this.options.connector,\n geom: true,\n fields: null,\n extensions: null,\n ...opt,\n }).then((onlyGeomItem) => {\n const geom = onlyGeomItem.geom;\n this.item.geom = geom;\n return createGeoJsonFeature(this.item);\n });\n }\n }\n}\n","import { propertiesFilter } from '@nextgis/properties-filter';\n\nimport type {\n DefaultTreeItem,\n RelationFunction,\n SelfFilter,\n TreeRelation,\n} from './interfaces';\nimport type { PropertyFilter } from '@nextgis/properties-filter';\n\ntype D = DefaultTreeItem;\n\ntype TreeFunction<X extends D> = (\n item: X | X[],\n filter: SelfFilter<X>,\n relation: TreeRelation<X>,\n) => X | X[] | boolean | undefined;\n\ntype ItemPrepareFunction<F extends D> = (item: D) => F;\n\nexport function treeEvery<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): boolean {\n return !!treeWrapper<F>(item, filter, relation, treeEvery_, itemPrepare);\n}\n\nexport function treeSome<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): boolean {\n return !!treeWrapper<F>(item, filter, relation, treeFind_, itemPrepare);\n}\n\nexport function treeFind<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F | undefined {\n return treeWrapper<F>(item, filter, relation, treeFind_, itemPrepare) as F;\n}\n\nexport function treeFilter<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F[] {\n return treeWrapper<F>(\n item,\n filter,\n relation,\n treeFilter_,\n itemPrepare,\n ) as F[];\n}\n\nexport function getChildren<F extends D = D>(\n item: F,\n relation: TreeRelation<F> = 'children',\n): F[] | undefined {\n let children: F[] = [];\n const relationFunction: RelationFunction<F> =\n typeof relation === 'function' ? relation : (i): F[] => i[relation];\n const relChild = relationFunction(item);\n if (relChild) {\n if (Array.isArray(relChild)) {\n children = relChild;\n } else {\n children.push(relChild);\n }\n }\n return relChild ? children : undefined;\n}\n\nfunction treeWrapper<F extends D = D>(\n item: F | F[],\n filter: PropertyFilter | SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F> = 'children',\n treeFunction: TreeFunction<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F[] | F | boolean | undefined {\n const filterFunction: SelfFilter<F> =\n typeof filter === 'function'\n ? filter\n : (i: F): boolean => propertiesFilter(i, filter);\n if (itemPrepare) {\n return treeFunction(\n item,\n (i: F): boolean => filterFunction(itemPrepare(i)),\n relation,\n );\n }\n return treeFunction(item, filterFunction, relation);\n}\n\nfunction treeFind_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): F | undefined {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (filter) {\n return item;\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n const result = treeFind_(children[fry], filterFunc, relation, _filtered);\n if (result) {\n return result;\n }\n }\n }\n}\n\nfunction treeFilter_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): F[] {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (filter) {\n _filtered.push(item);\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n treeFilter_(children[fry], filterFunc, relation, _filtered);\n }\n }\n\n return _filtered;\n}\n\nfunction treeEvery_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): boolean {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (!filter) {\n return false;\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n const res = treeEvery_(children[fry], filterFunc, relation, _filtered);\n if (!res) {\n return false;\n }\n }\n }\n\n return true;\n}\n","import { treeEvery, treeFilter, treeFind, treeSome } from '@nextgis/tree';\n\nimport type { Item } from './Item';\nimport type { ItemOptions } from './interfaces';\n\nexport class TreeHelper {\n item: Item;\n\n private _children: Item[] = [];\n private _parent?: Item;\n\n constructor(item: Item) {\n this.item = item;\n }\n\n setParent(parent: Item): void {\n this._parent = parent;\n }\n\n addChild(child: Item): void {\n this._children.push(child);\n }\n\n getParent(): Item | undefined {\n return this._parent;\n }\n\n getParents<I extends Item = Item>(filterFunc?: (item: I) => boolean): I[] {\n const parent = this.getParent() as I;\n if (parent) {\n return treeFilter<I>(\n parent,\n filterFunc,\n (x: I) => x.tree.getParent() as I,\n );\n }\n return [];\n }\n\n getRoot<I extends Item = Item>(): I | undefined {\n let parent = this.getParent() as I;\n let toReturn = parent;\n while (parent) {\n parent = parent.tree.getParent() as I;\n if (parent) {\n toReturn = parent;\n }\n }\n return toReturn;\n }\n\n find(filterFunc?: (item: Item) => boolean): Item<ItemOptions> | undefined {\n return treeFind(this._children, filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n every<I extends Item = Item>(filterFunc?: (item: I) => boolean): boolean {\n return treeEvery(this._children as I[], filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n some<I extends Item = Item>(filterFunc?: (item: I) => boolean): boolean {\n return treeSome(this._children as I[], filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n // getDescendants shortcut\n all(filterFunc?: (item: Item) => boolean): any[] {\n return this.getDescendants(filterFunc);\n }\n\n getDescendants(filterFunc?: (item: Item) => boolean): any[] {\n return treeFilter(this._children, filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n getChildren<T extends Item = Item>(): T[] {\n return [...this._children] as T[];\n }\n}\n","import { EventEmitter } from 'events';\n\nimport type { Item } from '../Item';\nimport type { ItemBasePropertyOptions, ItemOptions } from '../interfaces';\n\nexport abstract class BaseProperty<\n V = any,\n O extends ItemBasePropertyOptions<V> = ItemBasePropertyOptions<V>,\n I extends Item = Item,\n> {\n options: O;\n\n emitter = new EventEmitter();\n name: string;\n\n item: I;\n protected _blocked = false;\n protected _container?: HTMLElement;\n protected _value?: V;\n\n private _removeEventsListener?: () => void;\n\n constructor(name: string, item: I, options: O) {\n this.item = item;\n this.options = Object.assign({}, options);\n this.name = name;\n this._value = this.getProperty();\n }\n\n getProperty(): V | undefined {\n if (typeof this.options.getProperty === 'function') {\n return this.options.getProperty.call(this, this.item);\n }\n return this.options.value;\n }\n\n getParents(): Item[] {\n return this.item.tree.getParents() || [];\n }\n\n getParent(): Item<ItemOptions> | undefined {\n return this.item.tree.getParent();\n }\n\n getChildren(): Item<ItemOptions>[] {\n return this.item.tree.getChildren();\n }\n\n isGroup(): number {\n const children = this.item.tree.getDescendants();\n return children.length;\n }\n\n isBlocked(): boolean {\n if (this._blocked !== undefined) {\n return this._blocked;\n }\n\n const parents = this.item.tree.getParents();\n this._blocked = this._calculateBlockedStatus(parents);\n return this._blocked;\n }\n\n set(value?: V, options?: O): void {\n this._value = this._prepareValue(value);\n\n this.update(this._value, options);\n this._fireChangeEvent(this._value, options);\n }\n\n // shortcut for getValue\n get(): V | undefined {\n return this.getValue();\n }\n\n update(value?: V, options?: O): void {\n this._callOnSet(value, options);\n }\n\n getContainer(): HTMLElement | undefined {\n return this._container;\n }\n\n destroy(): void {\n if (this._container) {\n const parentNode = this._container.parentNode;\n if (parentNode) {\n parentNode.removeChild(this._container);\n }\n }\n if (this._removeEventsListener) {\n this._removeEventsListener();\n }\n }\n\n getValue(): V | undefined {\n return this._value !== undefined ? this._value : this.getProperty();\n }\n\n protected _prepareValue(value?: V): V | undefined {\n return value;\n }\n\n protected _callOnSet<W extends V = V>(value?: W, options?: O): void {\n if (this.options.onSet) {\n this.options.onSet.call(this, value, options, this.item);\n }\n }\n\n protected _fireChangeEvent(value?: V, options?: O): void {\n if (this.emitter) {\n value = value !== undefined ? value : this.getValue();\n this.emitter.emit('change', { value, options });\n const parents = this.item.tree.getParents();\n parents.forEach((x) => {\n const prop = x.properties && x.properties.property(this.name);\n if (prop) {\n prop.emitter.emit('change-tree', {\n value,\n options,\n item: this.item,\n });\n }\n });\n }\n }\n\n private _calculateBlockedStatus(parents: Item[]): boolean {\n const isBlocked = parents.some((parent: Item) => {\n const parentProp = parent.properties?.property(this.name);\n return parentProp ? !parentProp.get() : false;\n });\n\n return isBlocked;\n }\n}\n","import { BaseProperty } from './BaseProperty';\n\nimport type { Item } from '../Item';\nimport type { CheckOptions } from '../interfaces';\n\ntype VAL = boolean;\n\ntype PreparedValue = any;\n\nexport class CheckProperty<\n V extends VAL = VAL,\n O extends CheckOptions<VAL> = CheckOptions<VAL>,\n> extends BaseProperty<VAL, CheckOptions<VAL>> {\n static options: CheckOptions = {\n hierarchy: true,\n bubble: false,\n propagation: false,\n label: 'Toggle',\n // PropertyContainer: IndicatorContainer\n };\n\n constructor(name: string, item: Item, options: O) {\n super(name, item, { ...CheckProperty.options, ...options });\n this.set(this.get());\n }\n\n update(value?: V, options?: O): void {\n if (value) {\n const bubble = (options && options.bubble) || this.options.bubble;\n if (bubble) {\n this.unBlock(options);\n const parent = this.getParent();\n const property =\n parent && parent.properties && parent.properties.property(this.name);\n if (property) {\n property.set(\n value,\n Object.assign({}, options, { bubble: true, propagation: false }),\n );\n }\n }\n if (!this.isBlocked()) {\n this._turnOn(options);\n }\n } else {\n this._turnOff(options);\n }\n const propagation =\n (options && options.propagation) || this.options.propagation;\n if (propagation) {\n this._propagation(value, options);\n }\n }\n\n getHierarchyValue(): boolean | undefined {\n return (\n this.get() &&\n this.getParents().every((x) => {\n const property = x.properties && x.properties.get(this.name);\n return property && property.get();\n })\n );\n }\n\n block(options?: O): void {\n this._blocked = true;\n this._block(options);\n }\n\n unBlock(options?: O): void {\n this._blocked = false;\n if (this.getValue()) {\n this._unBlock(options);\n }\n }\n\n blockChild(options?: O): void {\n this.item.tree\n .getDescendants()\n .forEach((x) => this._blockChild(x, options));\n }\n\n unblockChild(options?: O): void {\n this.item.tree.getChildren().forEach((x) => this._unBlockChild(x, options));\n }\n\n protected _prepareValue(value?: PreparedValue): V | undefined {\n return value;\n }\n\n private _turnOff(options?: O): void {\n if (this.options.turnOff) {\n this.options.turnOff.call(this, options);\n }\n this._callOnSet(false, options);\n if (this.options.hierarchy && this.isGroup()) {\n this.blockChild(options);\n }\n }\n\n private _turnOn(options?: O): void {\n if (this.options.turnOn) {\n this.options.turnOn.call(this, options);\n }\n this._callOnSet(true, options);\n if (this.options.hierarchy && this.isGroup()) {\n this.unblockChild(options);\n }\n }\n\n private _block(options?: O): void {\n this._turnOff(options);\n }\n\n private _unBlock(options?: O): void {\n this._turnOn(options);\n }\n\n private _blockChild(item: Item, options?: O): void {\n const prop =\n item.properties &&\n (item.properties.property(this.name) as CheckProperty<V, O>);\n if (prop && prop.block) {\n prop.block(options);\n }\n }\n\n private _unBlockChild(item: Item, options?: O): void {\n const prop =\n item.properties &&\n (item.properties.property(this.name) as CheckProperty<V, O>);\n if (prop && prop.unBlock) {\n prop.unBlock(options);\n }\n }\n\n private _propagation(value?: V, options?: O): void {\n if (this.isGroup()) {\n const children = this.item.tree.getChildren();\n for (let fry = 0; fry < children.length; fry++) {\n const child = children[fry];\n const property =\n child.properties &&\n (child.properties.property(this.name) as CheckProperty<V, O>);\n if (property) {\n property.set(value, {\n ...options,\n ...{\n propagation: true,\n bubble: false,\n },\n });\n }\n }\n }\n }\n}\n","import { CheckProperty } from './CheckProperty';\n\nimport type { BaseProperty } from './BaseProperty';\nimport type { Item } from '../Item';\nimport type {\n ItemBasePropertyOptions,\n ItemPropertyConfig,\n ItemPropertyTypes,\n Type,\n} from '../interfaces';\n\n// Constants for property types\nconst BOOLEAN_TYPE = 'boolean';\nconst STRING_TYPE = 'string';\n\nexport class ItemProperties {\n static handlers: Record<string, Type<BaseProperty>> = {\n CheckProperty,\n };\n\n options: Record<string, any> = {};\n\n private _properties: Record<string, BaseProperty> = {};\n private _propertiesList: string[] = [];\n\n constructor(\n public item: Item,\n propertiesList?: ItemPropertyConfig<keyof ItemPropertyTypes>[],\n ) {\n if (propertiesList) {\n propertiesList.forEach(this._setPropertyHandler.bind(this));\n }\n }\n\n add(propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>): void {\n this._setPropertyHandler(propOpt);\n }\n\n update(): void {\n this.list().forEach((x) => x.update());\n }\n\n get(name: string): any {\n const prop = this.property(name);\n return prop ? prop.get() : undefined;\n }\n\n set<K extends keyof ItemPropertyTypes>(\n name: string,\n value: ItemPropertyTypes[K],\n options?: ItemBasePropertyOptions<ItemPropertyTypes[K]>,\n ): void {\n const prop = this.property(name);\n if (prop && prop.getValue() !== value) {\n prop.set(value, options);\n }\n }\n\n property(name: string): BaseProperty<any, ItemBasePropertyOptions<any>> {\n return this._properties[name];\n }\n\n list(): BaseProperty<any, ItemBasePropertyOptions<any>>[] {\n return this._propertiesList.map((name) => this._properties[name]);\n }\n\n destroy(): void {\n for (const name in this._properties) {\n const prop = this.property(name);\n if (prop && prop.destroy) {\n prop.destroy();\n }\n }\n this._properties = {};\n this._propertiesList = [];\n }\n\n private _setPropertyHandler(\n propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>,\n ): void {\n const Handler = this._getHandler(propOpt);\n if (Handler && propOpt.name) {\n const options = { ...propOpt };\n this._properties[propOpt.name] = new Handler(\n propOpt.name,\n this.item,\n options,\n );\n this._propertiesList.push(propOpt.name);\n }\n }\n\n private _getHandler(\n propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>,\n ): Type<BaseProperty> | undefined {\n const Handler = propOpt.handler;\n if (!Handler && propOpt.type) {\n switch (propOpt.type) {\n case BOOLEAN_TYPE:\n return ItemProperties.handlers.CheckProperty;\n case STRING_TYPE:\n default:\n return ItemProperties.handlers.BaseProperty;\n }\n }\n return Handler;\n }\n}\n","import { TreeHelper } from './TreeHelper';\nimport { ItemProperties } from './properties/ItemProperties';\n\nimport type { ItemOptions } from './interfaces';\n\nlet ID = 0;\nexport class Item<O extends ItemOptions = ItemOptions> {\n options: O = {} as O;\n\n properties!: ItemProperties;\n tree: TreeHelper;\n id = ID;\n\n constructor(options?: O) {\n ID += 1;\n this.options = { ...options } as O;\n this.tree = new TreeHelper(this);\n }\n\n initProperties(): void {\n this.properties = new ItemProperties(this, this.options.properties);\n }\n}\n","import { BaseProperty } from '@nextgis/item';\n\nimport type { ItemBasePropertyOptions } from '../../../item/src/interfaces';\nimport type { NgwWebmapItem } from '../NgwWebmapItem';\n\ntype VAL = number;\n\nexport class WebmapLayerOpacityPropertyHandler<\n V extends VAL = VAL,\n> extends BaseProperty<VAL, ItemBasePropertyOptions<VAL>, NgwWebmapItem> {\n getProperty(): number {\n const layer = this.item.layer;\n if (layer) {\n return layer && layer.options && layer.options.opacity !== undefined\n ? layer.options.opacity\n : 1;\n }\n return 1;\n }\n\n update(value: V, options?: ItemBasePropertyOptions<VAL>): void {\n options = options || {};\n\n if (this.isGroup()) {\n this._value = this._prepareValue(value, options);\n const children = this.getChildren();\n for (const child of children) {\n const property = child.properties.property(this.name);\n if (property) {\n if (options.propagation) {\n property.set(value, options);\n } else {\n property.update(property.get(), options);\n }\n }\n }\n }\n const layer = this.item.layer;\n if (layer) {\n const parents = this.getParents();\n const coef = parents.reduce((s, x) => {\n const prop = x.properties.property(this.name);\n const multiplier = prop ? prop.getValue() : 1;\n return s * multiplier;\n }, 1);\n const val = value * coef;\n this.item.webMap.setLayerOpacity(layer, this._prepareValue(val));\n }\n }\n\n protected _prepareValue(\n value: number,\n options?: ItemBasePropertyOptions<VAL>,\n ): number {\n if (options && options.propagation && this.isGroup()) {\n return 1;\n }\n // value = Number(value);\n // return value < 0.1 ? 0.1 : value;\n return Number(value);\n }\n}\n","import type {\n FetchNgwLayerExtentOptions,\n FetchNgwLayerItemExtentOptions,\n} from '../interfaces';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { ResourceItem, WebmapResource } from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function getNgwWebmapExtent(\n webmap: WebmapResource,\n): LngLatBoundsArray | undefined {\n const bottom = webmap['extent_bottom'];\n const left = webmap['extent_left'];\n const top = webmap['extent_top'];\n const right = webmap['extent_right'];\n if (bottom && left && top && right) {\n const extent: LngLatBoundsArray = [left, bottom, right, top];\n if (extent[3] > 82) {\n extent[3] = 82;\n }\n if (extent[1] < -82) {\n extent[1] = -82;\n }\n return extent;\n }\n}\n\nexport function fetchNgwLayerExtent({\n resourceId,\n connector,\n cache = true,\n signal,\n}: FetchNgwLayerExtentOptions): Promise<LngLatBoundsArray | undefined> {\n return connector\n .get('layer.extent', { cache, signal }, { id: resourceId })\n .then((resp) => {\n if (resp) {\n const { maxLat, maxLon, minLat, minLon } = resp.extent;\n const extentArray: LngLatBoundsArray = [minLon, minLat, maxLon, maxLat];\n return extentArray;\n }\n });\n}\n\nexport function fetchNgwLayerItemExtent({\n resourceId,\n featureId,\n connector,\n cache = true,\n signal,\n}: FetchNgwLayerItemExtentOptions): Promise<LngLatBoundsArray | undefined> {\n return connector\n .get(\n 'feature_layer.feature.item_extent',\n { cache, signal },\n { id: resourceId, fid: featureId },\n )\n .then((resp) => {\n if (resp) {\n const { maxLat, maxLon, minLat, minLon } = resp.extent;\n const extentArray: LngLatBoundsArray = [minLon, minLat, maxLon, maxLat];\n return extentArray;\n }\n });\n}\n\nexport function fetchNgwExtent(\n options: FetchNgwLayerExtentOptions,\n): Promise<LngLatBoundsArray | undefined> {\n return options.connector\n .getResource(options.resourceId, {\n signal: options.signal,\n cache: options.cache,\n })\n .then((resource) => {\n if (resource) {\n return fetchNgwResourceExtent(resource, options.connector, options);\n }\n });\n}\n\n/** @deprecated use {@link fetchNgwExtent} instead */\nexport function fetchNgwResourceExtent(\n item: ResourceItem,\n connector: NgwConnector,\n options?: FetchNgwLayerExtentOptions,\n): Promise<LngLatBoundsArray | undefined> {\n if (item.webmap) {\n return Promise.resolve(getNgwWebmapExtent(item.webmap));\n } else {\n const resource = item.resource;\n if (resource.cls && resource.cls.indexOf('style') !== -1) {\n return connector.getResource(resource.parent.id, options).then((res) => {\n if (res) {\n return fetchNgwLayerExtent({\n ...options,\n resourceId: res.resource.id,\n connector,\n });\n }\n });\n } else {\n return fetchNgwLayerExtent({\n ...options,\n resourceId: resource.id,\n connector,\n });\n }\n }\n}\n","import { fetchNgwResourceExtent } from './utils/fetchNgwExtent';\n\nimport type { FetchNgwLayerExtentOptions } from './interfaces';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { ResourceItem } from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport class NgwResource {\n item!: ResourceItem;\n connector!: NgwConnector;\n\n protected _extent?: LngLatBoundsArray;\n\n /** @deprecated use {@link NgwResource.getBounds} instead */\n async getExtent(): Promise<LngLatBoundsArray | undefined> {\n return this.getBounds();\n }\n\n async getBounds(\n options?: FetchNgwLayerExtentOptions,\n ): Promise<LngLatBoundsArray | undefined> {\n if (this._extent) {\n return this._extent;\n }\n if (this.item) {\n this._extent = await fetchNgwResourceExtent(\n this.item,\n this.connector,\n options,\n );\n return this._extent;\n }\n }\n}\n","import type { NgwLayerOptions } from '../interfaces';\nimport type { ResourceItem } from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\n\nexport async function resourceIdFromLayerOptions(\n options: NgwLayerOptions,\n connector: NgwConnector,\n): Promise<number> {\n const resource = options.resource;\n const item = resource as ResourceItem;\n\n // @ts-ignore @deprecated\n let { keyname, resourceId } = options;\n\n if (resource) {\n if (typeof resource === 'string') {\n keyname = resource;\n } else if (typeof resource === 'number') {\n resourceId = resource;\n } else if (\n item.resource &&\n item.resource !== undefined &&\n 'resource' in item\n ) {\n resourceId = (resource as ResourceItem).resource.id;\n } else {\n // TODO: safe remove this case\n resourceId = await resourceIdFromLayerOptions(resource as any, connector);\n }\n }\n if (!resourceId && keyname) {\n const resourceItem = await connector.getResource(keyname);\n if (resourceItem) {\n resourceId = resourceItem.resource.id;\n }\n }\n return resourceId;\n}\n","export function getSubdomainsOriginUrl(originUrl: string): [string, string[]] {\n const submodules: string[] = [];\n originUrl = originUrl.replace(/{switch:(.*?)}/, (m, group) => {\n if (typeof group === 'string') {\n group.split(',').forEach((s) => submodules.push(s));\n }\n return '{s}';\n });\n return [originUrl, submodules];\n}\n","import { fixUrlStr } from '@nextgis/utils';\n\nexport function loadJson<T = any>(url: string): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const xmlHttp = new XMLHttpRequest();\n xmlHttp.onreadystatechange = () => {\n if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {\n if (xmlHttp.responseText) {\n try {\n resolve(JSON.parse(xmlHttp.responseText));\n } catch (er) {\n reject(er);\n }\n }\n }\n };\n xmlHttp.open('GET', fixUrlStr(url), true); // true for asynchronous\n xmlHttp.send();\n });\n}\n","import type { QmsBasemap, QmsLayerType } from '../interfaces';\nimport type { AdapterOptions, LayerAdaptersOptions } from '@nextgis/webmap';\n\nexport const alias: { [key in QmsLayerType]: keyof LayerAdaptersOptions } = {\n tms: 'TILE',\n};\n\nexport function updateQmsOptions(\n qms: QmsBasemap,\n): AdapterOptions & { url: string } {\n const protocol = (location.protocol === 'https:' ? 'https' : 'http') + '://';\n let serviceUrl = qms.url.replace(/^(https?|ftp):\\/\\//, protocol);\n if (!qms.y_origin_top) {\n serviceUrl = serviceUrl.replace('{y}', '{-y}');\n }\n return {\n url: serviceUrl,\n name: qms.name,\n attribution: qms.copyright_text,\n maxZoom: qms.z_max,\n minZoom: qms.z_min,\n };\n}\n","import { mixinProperties } from '@nextgis/utils';\n\nimport { getSubdomainsOriginUrl } from './getSubmodulesFromOriginUrl';\nimport { loadJson } from './loadJson';\nimport { alias, updateQmsOptions } from './updateQmsOptions';\n\nimport type {\n CreateQmsAdapterOptions,\n QmsAdapter as QA,\n QmsAdapterOptions,\n QmsBasemap,\n} from '../interfaces';\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, WebMap } from '@nextgis/webmap';\n\nconst URL = 'https://qms.nextgis.com';\n\nexport function createQmsAdapter(\n options: CreateQmsAdapterOptions,\n): Type<MainLayerAdapter>;\nexport function createQmsAdapter(\n webMap: WebMap,\n url?: string,\n createOpt?: Partial<QmsAdapterOptions>,\n): Type<MainLayerAdapter>;\nexport function createQmsAdapter(\n webMapOrOptions: WebMap | CreateQmsAdapterOptions,\n url = URL,\n createOpt: Partial<QmsAdapterOptions> = {},\n): Type<MainLayerAdapter> {\n let webMap: WebMap;\n if ('webMap' in webMapOrOptions) {\n const { webMap: webMap_, url: url_, ...adapterOptions } = webMapOrOptions;\n webMap = webMap_;\n if (url_) {\n url = url_;\n }\n if (adapterOptions) {\n createOpt = adapterOptions;\n }\n } else {\n webMap = webMapOrOptions;\n }\n\n if (!url) {\n url = URL;\n }\n class QmsAdapter<M = any> implements MainLayerAdapter<M>, QA {\n qms?: QmsBasemap;\n\n options: QmsAdapterOptions;\n map: M;\n\n constructor(map: M, options: QmsAdapterOptions) {\n this.map = map;\n const opt = { ...createOpt, ...options };\n this.options = opt;\n this.options.baselayer = true;\n if (opt.qms) {\n this.qms = opt.qms;\n }\n }\n\n async addLayer(options: QmsAdapterOptions): Promise<any> {\n // qmsId for request, id for store\n if (!this.qms && options.qmsId) {\n try {\n this.qms = await loadJson<QmsBasemap>(\n url + '/api/v1/geoservices/' + options.qmsId,\n );\n } catch (er) {\n console.error(er);\n }\n }\n const qms = this.qms;\n if (qms) {\n const type = alias[qms.type || 'tms'];\n const WebMapAdapter = webMap.mapAdapter.layerAdapters[type];\n if (WebMapAdapter) {\n mixinProperties(QmsAdapter, WebMapAdapter, [\n 'showLayer',\n 'hideLayer',\n ]);\n if (type === 'TILE') {\n options = {\n order: 0,\n maxZoom: webMap.options.maxZoom,\n minZoom: webMap.options.minZoom,\n ...this.options,\n ...updateQmsOptions(qms),\n };\n if (qms.origin_url) {\n const [url, subdomains] = getSubdomainsOriginUrl(qms.origin_url);\n if (subdomains.length) {\n options.subdomains = subdomains;\n options.url = url;\n }\n }\n this.options = options;\n const adapter = new WebMapAdapter(this.map, options);\n return adapter.addLayer(options);\n }\n }\n }\n }\n }\n return QmsAdapter;\n}\n","import { createQmsAdapter } from './utils/createQmsAdapter';\n\nimport type { QmsOptions } from './interfaces';\nimport type { Type } from '@nextgis/utils';\nimport type {\n LayerAdapterCreators,\n MainLayerAdapter,\n StarterKit,\n WebMap,\n} from '@nextgis/webmap';\n\nexport class QmsKit implements StarterKit {\n static utils = {\n createQmsAdapter,\n };\n\n options: QmsOptions = {\n url: 'https://qms.nextgis.com',\n };\n\n url: string;\n\n constructor(options?: QmsOptions) {\n this.options = { ...this.options, ...options };\n this.url = this.options.url;\n }\n\n getLayerAdapters(): Promise<LayerAdapterCreators[]> {\n return Promise.resolve([\n {\n name: 'QMS',\n createAdapter: (webmap: WebMap) =>\n Promise.resolve(this._createAdapter(webmap)),\n },\n ]);\n }\n\n private _createAdapter(webMap: WebMap): Type<MainLayerAdapter> {\n return createQmsAdapter({ webMap, url: this.url });\n }\n}\n","import { QmsKit } from '@nextgis/qms-kit';\n\nimport type { GetClassAdapterOptions } from '../interfaces';\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\n\nexport async function createBasemapLayerAdapter({\n webMap,\n item,\n}: GetClassAdapterOptions): Promise<Type<MainLayerAdapter> | undefined> {\n if (item.basemap_layer) {\n const qms = item.basemap_layer.qms;\n const url = item.basemap_layer.url;\n if (qms) {\n const qms_ = JSON.parse(qms);\n const adapter = Promise.resolve(\n QmsKit.utils.createQmsAdapter(webMap, undefined, {\n qms: qms_,\n baselayer: true,\n }),\n );\n return adapter;\n } else if (url) {\n const TileAdapter = webMap.mapAdapter.layerAdapters.TILE as Type<\n MainLayerAdapter<any, any, TileAdapterOptions>\n >;\n if (TileAdapter) {\n class BasemapTileAdapter extends TileAdapter {\n async addLayer(opt: TileAdapterOptions) {\n return super.addLayer({ ...opt, url });\n }\n }\n return BasemapTileAdapter;\n }\n }\n }\n}\n","import type { ResourceItem } from '@nextgis/ngw-connector';\nimport type { Feature } from 'geojson';\n\nexport function createPopupContent(\n feature: Feature,\n item?: ResourceItem,\n): HTMLElement | string {\n // @ts-ignore\n if (__BROWSER__) {\n const element = document.createElement('div');\n if (item && item.feature_layer) {\n item.feature_layer.fields.forEach((x) => {\n if (x.grid_visibility) {\n const value = feature.properties && feature.properties[x.keyname];\n if (value) {\n const propElem = document.createElement('div');\n element.appendChild(propElem);\n propElem.innerHTML = `<span>${x.display_name}</span>: ${value}<span></span>`;\n }\n }\n });\n } else if (feature.properties) {\n for (const p in feature.properties) {\n const propElem = document.createElement('div');\n element.appendChild(propElem);\n propElem.innerHTML = `<span>${p}</span>: ${feature.properties[p]}<span></span>`;\n }\n }\n return element;\n } else {\n return '';\n }\n}\n","import type { FetchNgwLayerCountOptions } from '../interfaces';\n\nexport function fetchNgwLayerCount({\n connector,\n resourceId,\n cache = true,\n signal,\n}: FetchNgwLayerCountOptions): Promise<number> {\n return connector\n .get(\n 'feature_layer.feature.count',\n { cache, signal },\n {\n id: resourceId,\n },\n )\n .then((resp) => {\n return resp.total_count;\n });\n}\n","import { defined, isObject } from '@nextgis/utils';\n\nimport type { NgwDateFormat, NgwDateTimeFormat } from '@nextgis/ngw-connector';\n\nexport function prepareNgwFieldsToPropertiesFilter(\n fields: Record<string, any>,\n): Record<string, any> {\n let f: keyof typeof fields;\n for (f in fields) {\n const field = fields[f];\n if (isObject(field)) {\n const date = field as NgwDateFormat | NgwDateTimeFormat;\n if (defined(date.year) && defined(date.month) && defined(date.day)) {\n const dt: [number, number, number, number?, number?, number?] = [\n date.year,\n date.month - 1,\n date.day,\n ];\n if ('hour' in date) {\n [date.hour, date.minute, date.second].forEach((x) => {\n dt.push(x);\n });\n }\n fields[f] = new Date(...dt).toISOString();\n }\n } else if (f === 'id' && typeof field === 'string') {\n fields[f] = field.split(',').map(Number);\n }\n }\n return fields;\n}\n","import { propertiesFilter } from '@nextgis/properties-filter';\nimport { isArray } from '@nextgis/utils';\n\nimport {\n createFeatureFieldFilterQueries,\n fetchNgwLayerItemsRequest,\n} from './featureLayerUtils';\nimport { prepareNgwFieldsToPropertiesFilter } from './prepareNgwFieldsToPropertiesFilter';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\nimport type { FeatureItem } from '@nextgis/ngw-connector';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { Geometry } from 'geojson';\n\nexport async function fetchNgwLayerItems<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureItem<P, G>[]> {\n const filters = options.filters;\n if (filters) {\n let data = await createFeatureFieldFilterQueries({\n ...options,\n filters,\n });\n const clientFilterValidate =\n options.clientFilterValidate ?? isFilterWithAnyCase(filters);\n // Additional client-side filter check\n if (clientFilterValidate) {\n data = data.filter((y) => {\n const fields = prepareNgwFieldsToPropertiesFilter({\n ...y.fields,\n id: y.id,\n });\n const result = propertiesFilter(fields, filters);\n return result;\n });\n }\n return data as FeatureItem<P, G>[];\n } else {\n return fetchNgwLayerItemsRequest<G, P>(options);\n }\n}\n\nfunction isFilterWithAnyCase(filters: PropertiesFilter): boolean {\n if (filters[0] === 'any') {\n return true;\n }\n for (let i = 1; i < filters.length; i++) {\n const p = filters[i];\n if (isArray(p)) {\n const deep = isFilterWithAnyCase(p);\n if (deep) {\n return true;\n }\n }\n }\n return false;\n}\n","import { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerItems } from './fetchNgwLayerItems';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { Feature, Geometry } from 'geojson';\n\nexport async function fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<Feature<G, P>[]> {\n const x = await fetchNgwLayerItems(options);\n const features: Array<Feature<G, P>> = [];\n x.forEach((y) => {\n features.push(createGeoJsonFeature(y));\n });\n return features;\n}\n","import { fetchNgwLayerFeatures } from './fetchNgwLayerFeatures';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { FeatureCollection, Geometry } from 'geojson';\n\nexport function fetchNgwLayerFeatureCollection<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatures<G, P>(options).then((features) => {\n const featureCollection: FeatureCollection<G, P> = {\n type: 'FeatureCollection',\n features,\n };\n return featureCollection;\n });\n}\n","import type { FilterOptions, GeoJsonAdapterOptions } from '@nextgis/webmap';\n\nconst filterOptionsKeys: (keyof FilterOptions)[] = [\n 'fields',\n 'intersects',\n 'limit',\n 'orderBy',\n 'strategy',\n];\n\nexport function getLayerFilterOptions(\n options: GeoJsonAdapterOptions,\n): FilterOptions {\n const filterOptions: Record<string, any> = {};\n filterOptionsKeys.forEach((x) => {\n const opt = options[x];\n if (opt !== undefined) {\n filterOptions[x] = opt;\n }\n });\n return filterOptions as FilterOptions;\n}\n","import { EventEmitter } from 'events';\n\nimport { propertiesFilter } from '@nextgis/properties-filter';\nimport { debounce } from '@nextgis/utils';\n\nimport { createPopupContent } from '../utils/createPopupContent';\nimport { fetchNgwExtent } from '../utils/fetchNgwExtent';\nimport { fetchNgwLayerCount } from '../utils/fetchNgwLayerCount';\nimport { fetchNgwLayerFeatureCollection } from '../utils/fetchNgwLayerFeatureCollection';\nimport { getLayerFilterOptions } from '../utils/getLayerFilterOptions';\nimport { prepareNgwFieldsToPropertiesFilter } from '../utils/prepareNgwFieldsToPropertiesFilter';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\nimport { vectorLayerGeomToPaintTypeAlias } from '../utils/utils';\n\nimport type {\n GetClassAdapterOptions,\n NgwFeatureRequestOptions,\n NgwLayerOptions,\n} from '../interfaces';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { LngLatBoundsArray, Type } from '@nextgis/utils';\nimport type {\n FilterOptions,\n GeoJsonAdapterOptions,\n LayerAdapter,\n VectorLayerAdapter,\n} from '@nextgis/webmap';\nimport type { FeatureCollection } from 'geojson';\n\ninterface FilterArgs {\n filters?: PropertiesFilter;\n options?: FilterOptions;\n}\n\nexport async function createGeoJsonAdapter(\n props: GetClassAdapterOptions,\n): Promise<Type<VectorLayerAdapter>> {\n const {\n item,\n webMap,\n Adapter,\n connector,\n layerOptions,\n addLayerOptionsPriority: alop,\n } = props;\n const addLayerOptionsPriority = alop ?? true;\n const options = layerOptions as NgwLayerOptions<'GEOJSON'>;\n const GeoJsonAdapter: Type<VectorLayerAdapter> =\n Adapter || layerOptions.Adapter || webMap.mapAdapter.layerAdapters.GEOJSON;\n\n const _loadedIds: string[] = [];\n let _fullDataLoad = false;\n let _lastFilterArgs: FilterArgs | undefined;\n let internalAbortController: AbortController | undefined;\n\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n\n if (options.adapterOptions?.popupOptions?.fromProperties) {\n options.adapterOptions.popupOptions.createPopupContent = ({ feature }) => {\n return feature && createPopupContent(feature, item);\n };\n }\n\n const getData = async (\n filters?: PropertiesFilter,\n filterOpt?: NgwFeatureRequestOptions,\n ) => {\n abort();\n\n internalAbortController = new AbortController();\n const internalSignal = internalAbortController.signal;\n\n if (filterOpt?.signal) {\n filterOpt.signal.addEventListener('abort', internalAbortController.abort);\n }\n filterOpt = filterOpt || {};\n filterOpt.signal = internalSignal;\n\n _lastFilterArgs = { filters, options: filterOpt };\n return fetchNgwLayerFeatureCollection({\n resourceId,\n filters,\n connector,\n cache: true,\n ...filterOpt,\n });\n };\n let removed = false;\n const abort = () => {\n if (internalAbortController) {\n internalAbortController.abort();\n internalAbortController = undefined;\n }\n };\n\n class NgwGeoJsonAdapter extends GeoJsonAdapter {\n emitter = new EventEmitter();\n __onMapMove?: () => void;\n __onMapMoveStart?: () => void;\n __enableMapMoveListener?: (e: LayerAdapter) => void;\n __disableMapMoveListener?: (e: LayerAdapter) => void;\n\n async addLayer(opt: GeoJsonAdapterOptions) {\n let needUpdate = !opt.data;\n const waitFullLoad =\n opt.waitFullLoad !== undefined ? opt.waitFullLoad : true;\n if (options.id !== undefined) {\n opt.id = options.id;\n }\n if (item && item.vector_layer) {\n opt.type =\n vectorLayerGeomToPaintTypeAlias[item.vector_layer.geometry_type];\n }\n if (options.adapterOptions) {\n // TODO: remove addLayerOptionsPriority options/\n // in some cases, addLayer options must be used,\n // but in others factory method options needs first\n if (addLayerOptionsPriority) {\n opt = {\n ...options.adapterOptions,\n ...opt,\n };\n } else {\n opt = {\n ...opt,\n ...options.adapterOptions,\n };\n }\n }\n if (opt.data && Object.keys(opt.data).length === 0) {\n opt.data = undefined;\n needUpdate = false;\n }\n const strategy = opt.strategy || undefined;\n this.options.strategy = strategy;\n\n const layer = super.addLayer(opt);\n _lastFilterArgs = {\n filters: opt.propertiesFilter,\n options: getLayerFilterOptions(opt),\n };\n let updatePromise: Promise<any> | undefined;\n if (needUpdate) {\n updatePromise = this.updateLayer();\n }\n if (waitFullLoad && updatePromise) {\n await updatePromise;\n }\n if (strategy && strategy.startsWith('BBOX') && !_fullDataLoad) {\n this._addBboxEventListener();\n }\n return layer;\n }\n\n /** @deprecated use {@link NgwGeoJsonAdapter.getBounds} instead */\n getExtent(): Promise<LngLatBoundsArray | undefined> {\n return this.getBounds();\n }\n\n async getBounds(): Promise<LngLatBoundsArray | undefined> {\n const hasData = this.getLayers && this.getLayers().length;\n const strategy = this.options.strategy;\n if (strategy?.startsWith('BBOX') || hasData) {\n return fetchNgwExtent({ connector, resourceId: item.resource.id });\n } else {\n if (super.getBounds) {\n return super.getBounds();\n }\n }\n }\n\n beforeRemove() {\n removed = true;\n this._removeMoveEventListener();\n this._removeBboxEventListener();\n this.__disableMapMoveListener = undefined;\n this.__enableMapMoveListener = undefined;\n this.__onMapMove = undefined;\n this.__onMapMoveStart = undefined;\n abort();\n }\n\n getCount() {\n return fetchNgwLayerCount({ connector, resourceId, cache: true });\n }\n\n async updateLayer(filterArgs?: FilterArgs) {\n filterArgs = filterArgs || _lastFilterArgs || {};\n if (this.options.strategy?.startsWith('BBOX')) {\n await webMap.onLoad('create');\n filterArgs.options = filterArgs.options || {};\n filterArgs.options.intersects = webMap.getBounds();\n const { minZoom, maxZoom } = this.options;\n const zoom = webMap.getZoom();\n if (zoom !== undefined) {\n if (minZoom !== undefined && zoom < minZoom) {\n return;\n }\n if (maxZoom !== undefined && zoom > maxZoom) {\n return;\n }\n if (_fullDataLoad) {\n return;\n }\n }\n }\n if (removed) {\n return;\n }\n try {\n this.emitter.emit('preupdate', filterArgs);\n webMap._emitLayerEvent('layer:preupdate', options.id || '', filterArgs);\n\n const data = await getData(filterArgs.filters, {\n ...filterArgs.options,\n srs: this.options.srs,\n });\n let newData: FeatureCollection = data;\n const count = await this.getCount();\n\n if (this.options.strategy === 'BBOX+') {\n newData = {\n type: 'FeatureCollection',\n features: [],\n };\n for (const f of data.features) {\n if (_loadedIds.indexOf(String(f.id)) === -1) {\n _loadedIds.push(String(f.id));\n newData.features.push(f);\n }\n }\n _fullDataLoad = count !== undefined && _loadedIds.length >= count;\n await webMap.addLayerData(this, newData);\n } else {\n _fullDataLoad = count !== undefined && data.features.length >= count;\n await webMap.setLayerData(this, data);\n }\n this.emitter.emit('updated', data);\n webMap._emitLayerEvent('layer:updated', options.id || '', {\n data,\n newData,\n isFull: _fullDataLoad,\n });\n } catch (er) {\n if (er instanceof Error && er.name !== 'CancelError') {\n throw er;\n }\n }\n if (super.updateLayer) {\n super.updateLayer();\n }\n }\n\n async propertiesFilter(\n filters: PropertiesFilter,\n opt?: FilterOptions,\n ): Promise<void> {\n abort();\n if (this.filter && _fullDataLoad) {\n this.filter((e) => {\n const props_ =\n e.feature &&\n e.feature.properties &&\n prepareNgwFieldsToPropertiesFilter({ ...e.feature.properties });\n if (props_) {\n return propertiesFilter(props_, filters);\n }\n return true;\n });\n } else if (this.setData) {\n if (this.clearLayer) {\n this.clearLayer();\n }\n const data = await getData(filters, {\n ...opt,\n srs: this.options.srs,\n });\n this.setData(data);\n }\n }\n\n removeFilter() {\n _lastFilterArgs = undefined;\n this.propertiesFilter([]);\n if (this.filter) {\n this.filter(() => {\n return true;\n });\n }\n }\n\n private _addBboxEventListener() {\n this.__enableMapMoveListener = (e: LayerAdapter) => {\n if (e === this) {\n this._removeMoveEventListener();\n this.updateLayer();\n this._addMoveEventListener();\n }\n };\n this.__disableMapMoveListener = (e: LayerAdapter) => {\n if (e === this) {\n this._removeMoveEventListener();\n }\n };\n webMap.emitter.on('layer:show', this.__enableMapMoveListener);\n webMap.emitter.on('layer:hide', this.__disableMapMoveListener);\n this.__enableMapMoveListener(this);\n }\n\n private _removeBboxEventListener() {\n if (this.__enableMapMoveListener) {\n webMap.emitter.on('layer:show', this.__enableMapMoveListener);\n }\n if (this.__disableMapMoveListener) {\n webMap.emitter.on('layer:hide', this.__disableMapMoveListener);\n }\n }\n\n private _addMoveEventListener() {\n this.__onMapMove = debounce(() => this.updateLayer());\n this.__onMapMoveStart = abort;\n webMap.emitter.on('movestart', this.__onMapMoveStart);\n webMap.emitter.on('moveend', this.__onMapMove);\n }\n\n private _removeMoveEventListener() {\n if (this.__onMapMove) {\n webMap.emitter.removeListener('moveend', this.__onMapMove);\n }\n if (this.__onMapMoveStart) {\n webMap.emitter.removeListener('movestart', this.__onMapMoveStart);\n }\n }\n }\n\n return NgwGeoJsonAdapter;\n}\n","import { NgwWebmapLayerAdapter as NWLayerAdapter } from '../NgwWebmapLayerAdapter';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\n\nimport type { GetClassAdapterOptions } from '../interfaces';\nimport type { Type } from '@nextgis/utils';\n\nexport async function createWebMapAdapter({\n layerOptions: options,\n webMap,\n connector,\n}: GetClassAdapterOptions): Promise<Type<NWLayerAdapter>> {\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n return class NgwWebmapLayerAdapter extends NWLayerAdapter {\n constructor(map: any) {\n super(map, {\n url: '',\n webMap,\n resourceId,\n connector,\n });\n }\n };\n}\n","import { updateImageParams } from './utils';\n\nimport type { NgwLayerOptions, TileNoData } from '../interfaces';\nimport type {\n ImageAdapterOptions,\n MvtAdapterOptions,\n RasterAdapterOptions,\n WebMap,\n WmsAdapterOptions,\n} from '@nextgis/webmap';\n\nexport interface GetLayerAdapterOptions {\n options: NgwLayerOptions;\n webMap?: WebMap;\n baseUrl?: string;\n}\n\nexport interface GetImageAdapterOptionsParams {\n resourceId: number | number[];\n baseUrl?: string;\n nd?: TileNoData;\n headers: any;\n}\n\nexport function getImageAdapterOptions({\n resourceId,\n baseUrl,\n nd,\n headers,\n}: GetImageAdapterOptionsParams): ImageAdapterOptions {\n const url = baseUrl + '/api/component/render/image';\n const params: Record<string, any> = { resource: resourceId };\n if (nd) {\n params.nd = nd;\n }\n return {\n url,\n resourceId,\n headers,\n params,\n updateWmsParams: (params_: Record<string, any>) => {\n if (nd) {\n params_.nd = nd;\n }\n return updateImageParams(params_, resourceId);\n },\n } as ImageAdapterOptions;\n}\n\nexport function ngwApiToAdapterOptions({\n options,\n webMap,\n baseUrl,\n}: GetLayerAdapterOptions):\n | MvtAdapterOptions\n | RasterAdapterOptions\n | ImageAdapterOptions\n | undefined {\n let adapter = options.adapter || 'IMAGE';\n let url: string;\n const layerAdapters = webMap && webMap.getLayerAdapters();\n const isImageAllowed = layerAdapters ? layerAdapters.IMAGE : true;\n\n const resourceId = options.resource;\n const nd: TileNoData = options.tileNoData ? options.tileNoData : 200;\n\n if (typeof resourceId === 'number') {\n if (adapter === 'IMAGE') {\n if (isImageAllowed) {\n return getImageAdapterOptions({\n resourceId,\n headers: options.headers,\n nd,\n baseUrl,\n });\n } else {\n adapter = 'TILE';\n }\n }\n if (adapter === 'WMS') {\n url = `${baseUrl}/api/resource/${resourceId}/wms`;\n const adapterOptions = options.adapterOptions as WmsAdapterOptions;\n return {\n url,\n format: 'image/png',\n version: '1.1.1',\n layers: adapterOptions && adapterOptions.layers,\n headers: options.headers,\n };\n }\n if (adapter === 'MVT') {\n url =\n baseUrl +\n '/api/component/feature_layer/mvt?x={x}&y={y}&z={z}&' +\n 'resource=' +\n resourceId +\n '&simplification=' +\n (options.simplification ?? 6);\n // url = baseUrl + '/api/resource/' + options.resourceId + '/{z}/{x}/{y}.mvt';\n return {\n url,\n sourceLayer: 'ngw:' + resourceId,\n featureIdName: '$id',\n };\n }\n if (adapter === 'TERRAIN') {\n url = baseUrl + `/api/resource/${resourceId}/terrain_provider`;\n // `/api/resource/${resourceId}/terrain_provider/{z}/{x}/{y}.terrain`;\n return { url, adapter };\n }\n if (adapter === 'MODEL_3D') {\n url = baseUrl + `/api/component/model_3d/${resourceId}/data.glb`;\n return { url };\n }\n if (adapter === 'TILE') {\n url =\n baseUrl +\n '/api/component/render/tile?z={z}&x={x}&y={y}&resource=' +\n resourceId +\n '&nd=' +\n nd;\n return { url, adapter };\n }\n } else if (resourceId !== undefined) {\n throw new Error(\n 'Option `resource` must be number, not ' + typeof resourceId,\n );\n } else {\n console.log('Option `resource` not set');\n }\n}\n\n/** @deprecated use {@link ngwApiToAdapterOptions} instead */\nexport function getLayerAdapterOptions(\n options: NgwLayerOptions,\n webMap: WebMap,\n baseUrl: string,\n): RasterAdapterOptions | ImageAdapterOptions | undefined {\n return ngwApiToAdapterOptions({ options, webMap, baseUrl });\n}\n","import { defined } from '@nextgis/utils';\n\nimport { ngwApiToAdapterOptions } from '../utils/ngwApiToAdapterOptions';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\n\nimport type {\n GetClassAdapterOptions,\n NgwLayerAdapterType,\n ResourceAdapter,\n} from '../interfaces';\nimport type { ResourceCls, ResourceItem } from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type {\n GetLegendOptions,\n ImageAdapterOptions,\n LayerLegend,\n MainLayerAdapter,\n} from '@nextgis/webmap';\n\nexport async function createRasterAdapter({\n layerOptions,\n webMap,\n connector,\n item,\n}: GetClassAdapterOptions): Promise<Type<MainLayerAdapter> | undefined> {\n const resourceCls = item.resource.cls;\n const clsAdapterAlias: { [key in ResourceCls]?: NgwLayerAdapterType } = {\n wmsserver_service: 'WMS',\n tmsclient_layer: 'IMAGE',\n };\n let adapter =\n layerOptions.adapter ||\n (resourceCls && clsAdapterAlias[resourceCls]) ||\n 'IMAGE';\n if (adapter !== undefined) {\n layerOptions.adapter = adapter;\n }\n if (adapter === 'IMAGE') {\n const layerAdapters = webMap.getLayerAdapters();\n const isImageAllowed = layerAdapters ? layerAdapters.IMAGE : true;\n if (!isImageAllowed) {\n adapter = 'TILE';\n }\n }\n\n const AdapterClass = webMap.mapAdapter.layerAdapters[\n adapter\n ] as Type<MainLayerAdapter>;\n if (AdapterClass) {\n const resourceId = await resourceIdFromLayerOptions(\n layerOptions,\n connector,\n );\n return class RasterAdapter extends AdapterClass implements ResourceAdapter {\n // options = {};\n item?: ResourceItem = item;\n resourceId = resourceId;\n\n constructor(\n public map: any,\n _options: any,\n ) {\n super(map, _options);\n const opt = ngwApiToAdapterOptions({\n options: layerOptions,\n webMap,\n baseUrl: connector.options.baseUrl || '',\n });\n if (opt) {\n const layerAdapterOptions: ImageAdapterOptions = {\n ...opt,\n ...layerOptions.adapterOptions,\n params: { resource: resourceId },\n layers: opt.layers || String(resourceId),\n resourceId,\n };\n if (\n layerOptions.adapterOptions &&\n defined(layerOptions.adapterOptions.setViewDelay)\n ) {\n layerAdapterOptions.setViewDelay =\n layerOptions.adapterOptions.setViewDelay;\n }\n this.options = { ...this.options, ...layerAdapterOptions };\n }\n }\n addLayer(addOptions: any) {\n return super.addLayer({ ...this.options, ...addOptions });\n }\n\n async getLegend(options?: GetLegendOptions): Promise<LayerLegend[]> {\n const ngwLegend = await connector.get('render.legend_symbols', {\n params: { id: resourceId },\n cache: true,\n ...options,\n });\n const id = this.options.id;\n if (id !== undefined) {\n const legend: LayerLegend = {\n layerId: id,\n legend: ngwLegend.map(({ display_name, icon }) => ({\n name: display_name,\n symbol: icon,\n })),\n };\n return [legend];\n }\n return [];\n }\n\n async getIdentificationIds(): Promise<number[]> {\n if (this.item) {\n if (adapter === 'MVT') {\n return [this.item.resource.id];\n }\n const id = this.item.resource.parent.id;\n if (defined(id)) {\n return [id];\n }\n }\n return [];\n }\n // beforeRemove() {\n\n // }\n };\n } else {\n throw new Error(adapter + ' not supported yet. Only TILE');\n }\n}\n","import { applyMixins } from '@nextgis/utils';\n\nimport { NgwResource } from '../NgwResource';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\nimport { vectorLayerGeomToPaintTypeAlias } from '../utils/utils';\n\nimport { createBasemapLayerAdapter } from './createBasemapLayerAdapter';\nimport { createGeoJsonAdapter } from './createGeoJsonAdapter';\nimport { createWebMapAdapter } from './createNgwWebmapAdapter';\nimport { createRasterAdapter } from './createRasterAdapter';\n\nimport type {\n ClassAdapter,\n GetClassAdapter,\n GetClassAdapterByType,\n GetClassAdapterCallback,\n GetClassAdapterOptions,\n NgwLayerOptions,\n ResourceAdapter,\n} from '../interfaces';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { ResourceCls, ResourceItem } from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { WebMap } from '@nextgis/webmap';\n\nexport const classAdapters: Record<string, GetClassAdapter> = {};\n\nconst supportCls: ResourceCls[] = [\n 'mapserver_style',\n 'qgis_vector_style',\n 'qgis_raster_style',\n 'wmsserver_service',\n 'raster_style',\n 'basemap_layer',\n 'vector_layer',\n 'raster_layer',\n 'postgis_layer',\n 'webmap',\n // in tms branch\n 'tmsclient_layer',\n];\n\nasync function createAdapterFromFirstStyle({\n layerOptions,\n webMap,\n connector,\n item,\n}: GetClassAdapterOptions) {\n const parent = item.resource.id;\n const childrenStyles = await connector.getResourceChildren(parent);\n const firstStyle = childrenStyles && childrenStyles[0];\n if (firstStyle) {\n return createAsyncAdapter(\n { ...layerOptions, resource: firstStyle.resource.id },\n webMap,\n connector,\n );\n }\n}\n\nexport async function createAsyncAdapter(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n let adapter: ClassAdapter | undefined;\n let item: ResourceItem | undefined;\n const adapterType = options.adapter;\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n if (resourceId) {\n const resourceOptions = options as NgwLayerOptions;\n const itemFromResOpt = resourceOptions.resource as ResourceItem;\n if (\n itemFromResOpt &&\n itemFromResOpt.resource &&\n itemFromResOpt.resource.id !== undefined\n ) {\n item = itemFromResOpt;\n } else {\n item = await connector.getResource(resourceId);\n }\n if (item) {\n const cls = item.resource.cls;\n const layerOptions: NgwLayerOptions = {\n ...options,\n resource: resourceId,\n };\n\n const adapterOptions: GetClassAdapterOptions = {\n layerOptions,\n connector,\n webMap,\n item,\n };\n\n if (supportCls.indexOf(cls) !== -1) {\n if (cls === 'webmap') {\n adapter = createWebMapAdapter(adapterOptions);\n } else if (cls === 'vector_layer' || cls === 'postgis_layer') {\n const type =\n item.vector_layer &&\n vectorLayerGeomToPaintTypeAlias[item.vector_layer.geometry_type];\n const adapterOptions_ =\n adapterOptions.layerOptions.adapterOptions || {};\n adapterOptions_.type = adapterOptions_.type || type;\n adapterOptions.layerOptions.adapterOptions = adapterOptions_;\n options.adapterOptions = adapterOptions;\n if (adapterType !== undefined && adapterType !== 'GEOJSON') {\n if (adapterType === 'MVT') {\n adapter = createRasterAdapter(adapterOptions);\n } else {\n return createAdapterFromFirstStyle(adapterOptions);\n }\n } else {\n adapter = createGeoJsonAdapter(adapterOptions);\n }\n } else if (cls === 'raster_layer') {\n return createAdapterFromFirstStyle(adapterOptions);\n } else if (cls === 'basemap_layer') {\n adapter = createBasemapLayerAdapter(adapterOptions);\n } else {\n if (adapterType === 'GEOJSON') {\n const parentItem = await connector.getResource(\n item.resource.parent.id,\n );\n if (parentItem) {\n const parentOptions: NgwLayerOptions = {\n ...options,\n resource: item.resource.parent.id,\n };\n adapter = createGeoJsonAdapter({\n ...adapterOptions,\n item: parentItem,\n layerOptions: parentOptions,\n });\n }\n } else {\n adapter = createRasterAdapter(adapterOptions);\n }\n }\n } else if (classAdapters[cls]) {\n const getClassAdapter = classAdapters[cls];\n let classAdapter: GetClassAdapterCallback | undefined;\n if (adapterType && typeof classAdapter !== 'function') {\n classAdapter = (getClassAdapter as GetClassAdapterByType)[\n adapterType\n ];\n } else {\n classAdapter = getClassAdapter as GetClassAdapterCallback;\n }\n if (classAdapter) {\n adapter = classAdapter(adapterOptions);\n }\n } else {\n throw `Resource class '${cls}' not yet supported.`;\n }\n } else {\n throw 'Resource item is not found';\n }\n }\n\n if (adapter) {\n return adapter.then((x) => {\n if (x) {\n const resourceAdapter = x as Type<ResourceAdapter>;\n if (item) {\n resourceAdapter.prototype.item = item;\n resourceAdapter.prototype.resourceId = item.resource.id;\n resourceAdapter.prototype.connector = connector;\n }\n\n applyMixins(resourceAdapter, [NgwResource], { replace: false });\n return resourceAdapter;\n }\n });\n }\n}\n","import { NgwWebmapLayerAdapter } from '../NgwWebmapLayerAdapter';\nimport { createAsyncAdapter } from '../adapters/createAsyncAdapter';\n\nimport type {\n NgwLayerOptions,\n NgwWebmapAdapterOptions,\n ResourceAdapter,\n} from '../interfaces';\nimport type { GeometryType } from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { VectorAdapterLayerType, WebMap } from '@nextgis/webmap';\n\nexport function updateImageParams(\n params: Record<string, any>,\n resourceId: number | number[],\n): Record<string, any> {\n const { bbox, width, height, nd } = params;\n return {\n resource: Array.isArray(resourceId) ? resourceId.join(',') : resourceId,\n extent: bbox,\n size: width + ',' + height,\n timestamp: Date.now(),\n nd: nd ?? 200,\n };\n}\n\nexport const vectorLayerGeomToPaintTypeAlias: Record<\n GeometryType,\n VectorAdapterLayerType\n> = {\n POINT: 'point',\n LINESTRING: 'line',\n POLYGON: 'polygon',\n MULTIPOINT: 'point',\n MULTILINESTRING: 'line',\n MULTIPOLYGON: 'polygon',\n POINTZ: 'point',\n LINESTRINGZ: 'line',\n POLYGONZ: 'polygon',\n MULTIPOINTZ: 'point',\n MULTILINESTRINGZ: 'line',\n MULTIPOLYGONZ: 'polygon',\n};\n\nexport function createNgwLayerAdapter(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n const headers = connector.getAuthorizationHeaders();\n if (headers) {\n options.headers = headers;\n }\n if (connector.withCredentials !== undefined) {\n options.withCredentials = connector.withCredentials;\n }\n\n return createAsyncAdapter(options, webMap, connector);\n}\n\n/** @deprecated use {@link createNgwLayerAdapter} instead */\nexport function addNgwLayer(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n return createNgwLayerAdapter(options, webMap, connector);\n}\n\nexport interface ExtendNgwWebmapLayerAdapterOptions {\n webMap: WebMap;\n connector: NgwConnector;\n baseUrl?: string;\n}\n\nexport function extendNgwWebmapLayerAdapter(\n opt: ExtendNgwWebmapLayerAdapterOptions,\n): Type<NgwWebmapLayerAdapter> {\n class A extends NgwWebmapLayerAdapter {\n constructor(map: any, options: NgwWebmapAdapterOptions) {\n options = { ...opt, ...options };\n super(map, options);\n }\n }\n return A;\n}\n\nlet _pixelsInMeter: number;\n\nexport function pixelsInMeterWidth(): number {\n if (_pixelsInMeter === undefined) {\n const div = document.createElement('div');\n div.style.cssText =\n 'position: absolute; left: -100%; top: -100%; width: 100cm;';\n document.body.appendChild(div);\n const px = div.offsetWidth;\n document.body.removeChild(div);\n _pixelsInMeter = px;\n }\n return _pixelsInMeter;\n}\n\n// Returns width of map in meters on specified latitude.\nexport function getMapWidthForLanInMeters(lat: number): number {\n return 6378137 * 2 * Math.PI * Math.cos((lat * Math.PI) / 180);\n}\n\nexport function getZoomFromScale(scale: number): number {\n return Math.log(scale / 256) / Math.LN2;\n}\n\nexport function setScaleRatio(scale: number, lat = 0): number {\n // TODO: get real center\n // webmap does not contain center yet\n // const center = [104, 45]; // this.webMap.getCenter();\n\n const centerLat = lat;\n const crsScale =\n (pixelsInMeterWidth() * getMapWidthForLanInMeters(centerLat)) / scale;\n const zoom = getZoomFromScale(crsScale);\n return zoom;\n\n // return Math.round(Math.log(591657550.5 / (scale / 2)) / Math.log(2));\n}\n","import { EventEmitter } from 'events';\n\nimport { Item } from '@nextgis/item';\nimport { treeSome } from '@nextgis/tree';\n\nimport { WebmapLayerOpacityPropertyHandler } from './utils/WebmapLayerOpacityPropertyHandler';\nimport { setScaleRatio } from './utils/utils';\n\nimport type { TreeGroup, TreeItem, TreeLayer } from './interfaces';\nimport type { ItemOptions } from '@nextgis/item';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type {\n GetLegendOptions,\n ImageAdapterOptions,\n LayerAdapter,\n LayerAdapterDefinition,\n LayerLegend,\n VectorAdapterOptions,\n WebMap,\n} from '@nextgis/webmap';\n\nexport class NgwWebmapItem extends Item<ItemOptions> {\n static GetAdapterFromLayerType: {\n [layerType: string]: (\n item: TreeItem,\n options: any,\n webMap: WebMap,\n connector?: NgwConnector,\n ) => LayerAdapterDefinition;\n } = {};\n\n static options: ItemOptions = {\n properties: [\n {\n type: 'boolean',\n name: 'visibility',\n getProperty(item?: NgwWebmapItem): boolean {\n if (item) {\n if (\n item.item.item_type === 'group' ||\n item.item.item_type === 'root'\n ) {\n return treeSome<TreeGroup | TreeLayer>(\n item.item,\n (i) => ('layer_enabled' in i ? i.layer_enabled : false),\n (i) => (i as TreeGroup).children,\n );\n } else if (item.item.item_type === 'layer') {\n return item.item.layer_enabled;\n }\n // else if (item.item.item_type === 'root') {\n // return true;\n // }\n }\n return false;\n },\n onSet(\n value: boolean,\n options?: Record<string, any>,\n item?: NgwWebmapItem,\n ): void {\n if (item && item.item.item_type === 'layer') {\n if (item.layer) {\n if (value) {\n item.webMap.showLayer(item.layer);\n } else {\n item.webMap.hideLayer(item.layer);\n }\n }\n item.item['layer_enabled'] = value;\n }\n },\n },\n {\n name: 'opacity',\n handler: WebmapLayerOpacityPropertyHandler,\n },\n ],\n };\n\n item: TreeGroup | TreeLayer;\n connector?: NgwConnector;\n layer?: LayerAdapter;\n readonly emitter = new EventEmitter();\n\n protected _rootDescendantsCount = 0;\n\n constructor(\n public webMap: WebMap,\n item: TreeGroup | TreeLayer,\n options?: ItemOptions,\n connector?: NgwConnector,\n parent?: NgwWebmapItem,\n noInit?: boolean,\n ) {\n super({ ...NgwWebmapItem.options, ...options });\n if (connector) {\n this.connector = connector;\n }\n if (parent) {\n this.tree.setParent(parent);\n }\n this.item = item;\n if (this.item.item_type === 'root') {\n this._rootDescendantsCount = this._sumUp(this.item.children);\n } else {\n const root = this.tree.getRoot<this>();\n if (root) {\n this._rootDescendantsCount = root._rootDescendantsCount;\n }\n }\n this.initProperties();\n if (!noInit) {\n this._init(item);\n }\n }\n\n static async create(\n webMap: WebMap,\n item: TreeGroup | TreeLayer,\n options?: ItemOptions,\n connector?: NgwConnector,\n parent?: NgwWebmapItem,\n ): Promise<NgwWebmapItem> {\n const ngwWebmapItem = new NgwWebmapItem(\n webMap,\n item,\n options,\n connector,\n parent,\n true,\n );\n await ngwWebmapItem._init(item);\n return ngwWebmapItem;\n }\n\n initItem(item: TreeGroup | TreeLayer): Promise<void> {\n if (item.item_type === 'group' || item.item_type === 'root') {\n return this.initGroupItem(item as TreeGroup);\n } else {\n return this.initLayerItem(item as TreeLayer);\n }\n }\n\n bringToFront(): void {\n //\n }\n\n fit(): void {\n if (this.item.item_type === 'layer') {\n // console.log(this.item);\n }\n }\n\n getLayer() {\n return this.layer;\n }\n\n async getLegend(options?: GetLegendOptions): Promise<LayerLegend[]> {\n const id = this.layer?.id;\n if (id !== undefined) {\n const connector = this.connector;\n if (connector) {\n const ngwLegend = await connector.get('render.legend_symbols', {\n params: { id: this.item.resourceId },\n ...options,\n });\n const legend: LayerLegend = {\n layerId: id,\n legend: ngwLegend.map(({ display_name, icon }) => ({\n name: display_name,\n symbol: icon,\n })),\n };\n return [legend];\n }\n }\n\n return [];\n }\n\n protected getItemOptions(item: TreeGroup | TreeLayer): Record<string, any> {\n const transparency = item.item_type === 'layer' && item.layer_transparency;\n const opacity =\n typeof transparency === 'number' ? (100 - transparency) / 100 : undefined;\n const options: Partial<ImageAdapterOptions> &\n Pick<VectorAdapterOptions, 'popupOptions'> = {\n visibility: false,\n name: item.display_name,\n ...this.options,\n params: { resource: this.item.resourceId, item: this.item },\n };\n if (this.options.order) {\n const subOrder =\n this.options.drawOrderEnabled && 'draw_order_position' in item\n ? this._rootDescendantsCount - item.draw_order_position\n : this.id;\n\n // 9 > 0009, 11 > 0011\n // TODO: find better way to set order in sub level, not limit by 1000 layer in group\n const subLevel = String(subOrder).padStart(4, '0');\n options.order = Number((this.options.order | 0) + '.' + subLevel);\n }\n if (this.options.popupOptions) {\n options.popupOptions = this.options.popupOptions;\n }\n if (item.item_type === 'layer') {\n const { maxZoom, minZoom } = this._getZoomRange(item);\n\n Object.assign(options, {\n updateWmsParams: item.updateWmsParams,\n ...this.options,\n url: item.url,\n maxZoom,\n minZoom,\n minScale: item.layer_min_scale_denom,\n maxScale: item.layer_max_scale_denom,\n interactive: item.layer_identifiable,\n });\n }\n if (opacity !== undefined) {\n options.opacity = opacity;\n }\n return options;\n }\n\n protected getChildren(item: TreeGroup): (TreeGroup | TreeLayer)[] {\n return [...item.children].reverse();\n }\n\n private _mapScaleToZoomLevel(scale: number) {\n return setScaleRatio(scale);\n }\n\n private initGroupItem(group: TreeGroup): Promise<void> {\n if (group.children && group.children.length) {\n const children = this.getChildren(group);\n for (const child of children) {\n const childItem = new (this.constructor as typeof NgwWebmapItem)(\n this.webMap,\n child,\n this.options,\n this.connector,\n this,\n );\n this.tree.addChild(childItem);\n }\n }\n return Promise.resolve();\n }\n\n private initLayerItem(layer: TreeLayer): Promise<void> {\n const options: Partial<ImageAdapterOptions> = this.getItemOptions(layer);\n const setNewLayer = (l: LayerAdapter) => {\n layer._layer = l;\n this.layer = l;\n const enabled = this.properties.get('visibility');\n if (enabled) {\n this.properties.set('visibility', true);\n }\n\n if (options.opacity !== undefined) {\n this.webMap.setLayerOpacity(l, options.opacity);\n }\n };\n\n let adapter: LayerAdapterDefinition | undefined;\n if (layer.item_type === 'layer') {\n adapter = layer.adapter || layer.layer_adapter.toUpperCase();\n } else if (NgwWebmapItem.GetAdapterFromLayerType[layer.item_type]) {\n const getAdapter = NgwWebmapItem.GetAdapterFromLayerType[layer.item_type];\n adapter = getAdapter(layer, options, this.webMap, this.connector);\n }\n\n if (adapter) {\n return this.webMap.addLayer(adapter, options).then((newLayer) => {\n setNewLayer(newLayer);\n });\n }\n\n if (layer._layer) {\n return Promise.resolve(setNewLayer(layer._layer));\n }\n\n return Promise.reject('No layer added');\n }\n\n private _getZoomRange(item: TreeLayer) {\n const minZoomWebmap = this.options.minZoom;\n const maxZoomWebmap = this.options.maxZoom;\n\n const minZoomLayer = item.layer_min_scale_denom\n ? this._mapScaleToZoomLevel(item.layer_min_scale_denom)\n : undefined;\n const maxZoomLayer = item.layer_max_scale_denom\n ? this._mapScaleToZoomLevel(item.layer_max_scale_denom)\n : undefined;\n\n const minZooms = [minZoomWebmap, minZoomLayer].filter(Boolean) as number[];\n const maxZooms = [maxZoomWebmap, maxZoomLayer].filter(Boolean) as number[];\n const minZoom = minZooms.length ? Math.max(...minZooms) : undefined;\n const maxZoom = maxZooms.length ? Math.min(...maxZooms) : undefined;\n return { minZoom, maxZoom };\n }\n\n private _init(item: TreeGroup | TreeLayer) {\n this.initItem(item).then(() => {\n this.emitter.emit('init');\n });\n }\n\n private _sumUp(children: Array<TreeGroup | TreeLayer>, totalValue = 0) {\n for (const child of children) {\n if (child.item_type === 'layer') {\n totalValue += 1;\n child.draw_order_position = child.draw_order_position || totalValue;\n } else if (child.item_type === 'group') {\n totalValue = this._sumUp(child.children, totalValue);\n }\n }\n return totalValue;\n }\n}\n","import type { Type } from '@nextgis/utils';\nimport type { AdapterOptions, MainLayerAdapter, WebMap } from '@nextgis/webmap';\n\ninterface CreateOnFirstShowAdapterOptions {\n webMap: WebMap;\n adapterOptions?: Record<string, any>;\n onLayerAdded?: <L extends MainLayerAdapter = MainLayerAdapter>(\n layer: L,\n ) => void;\n createAdapter: (\n firstShowAdapter: FirstShowAdapter,\n ) => Promise<Type<MainLayerAdapter> | undefined>;\n}\n\ninterface FirstShowAdapter extends MainLayerAdapter {\n loadLayer: () => Promise<MainLayerAdapter[]>;\n destroyed: () => boolean;\n}\n\nexport async function createOnFirstShowAdapter({\n webMap,\n adapterOptions = {},\n onLayerAdded,\n createAdapter,\n}: CreateOnFirstShowAdapterOptions): Promise<Type<FirstShowAdapter>> {\n class OnFirstShowAdapter implements MainLayerAdapter {\n options: AdapterOptions = {};\n layer: MainLayerAdapter[] = [];\n _removed = false;\n _creatingInProgress = false;\n\n addLayer() {\n return this.layer;\n }\n\n removeLayer() {\n this._removed = true;\n for (const l of this.layer) {\n webMap.removeLayer(l);\n }\n }\n\n destroyed() {\n return this._removed;\n }\n\n async showLayer() {\n this.options.visibility = true;\n if (this.layer.length) {\n for (const x of this.layer) {\n await webMap.showLayer(x);\n }\n } else {\n await this.loadLayer();\n }\n }\n\n async hideLayer() {\n this.options.visibility = false;\n if (this.layer) {\n for (const x of this.layer) {\n await webMap.hideLayer(x);\n }\n }\n }\n\n async loadLayer() {\n if (!this.layer.length && !this._creatingInProgress) {\n this._creatingInProgress = true;\n const Adapter = await createAdapter(this);\n if (Adapter) {\n const adapter = new Adapter(webMap.mapAdapter.map, {\n ...adapterOptions,\n });\n const realLayer: MainLayerAdapter = await adapter.addLayer({\n order: this.options.order,\n headers: this.options.headers,\n baselayer: this.options.baselayer,\n });\n if (onLayerAdded) {\n onLayerAdded(adapter);\n }\n Object.assign(adapter.options, adapterOptions);\n adapter.layer = realLayer;\n if (this._removed) {\n webMap.removeLayer(adapter);\n }\n this.layer.push(adapter);\n if (this.options.visibility) {\n await webMap.showLayer(adapter);\n }\n this._creatingInProgress = false;\n }\n }\n return this.layer;\n }\n }\n return OnFirstShowAdapter;\n}\n","import { createAsyncAdapter } from './createAsyncAdapter';\nimport { createOnFirstShowAdapter } from './createOnFirstShowAdapter';\n\nimport type { BasemapWebmapItem } from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, WebMap } from '@nextgis/webmap';\n\ninterface CreateOnFirstShowAdapterOptions {\n webMap: WebMap;\n connector: NgwConnector;\n item: BasemapWebmapItem;\n adapterOptions?: Record<string, any>;\n idPrefix?: string;\n}\n\nexport async function createOnFirstShowNgwAdapter({\n webMap,\n connector,\n item,\n adapterOptions = {},\n idPrefix = 'first-show-adapter',\n}: CreateOnFirstShowAdapterOptions): Promise<Type<MainLayerAdapter>> {\n const createAdapter = () => {\n return createAsyncAdapter(\n {\n resource: item.resource_id,\n adapterOptions: {\n name: item.display_name,\n opacity: item.opacity,\n },\n },\n webMap,\n connector,\n );\n };\n const onLayerAdded = (adapter: MainLayerAdapter) => {\n adapter.options.baselayer = false;\n adapter.id = idPrefix + '-' + item.resource_id;\n };\n\n const OnFirstNgwShowAdapter = createOnFirstShowAdapter({\n webMap,\n adapterOptions,\n onLayerAdded,\n createAdapter,\n });\n\n return OnFirstNgwShowAdapter;\n}\n","export const WEBMAP_BASELAYER_ID_PREFIX = 'webmap-baselayer';\n","import { EventEmitter } from 'events';\n\nimport { fixUrlStr } from '@nextgis/utils';\n\nimport { BookmarkItem } from './BookmarkItem';\nimport { NgwWebmapItem } from './NgwWebmapItem';\nimport { createOnFirstShowNgwAdapter } from './adapters/createOnFirstShowNgwAdapter';\nimport { WEBMAP_BASELAYER_ID_PREFIX } from './constants';\nimport { getNgwWebmapExtent } from './utils/fetchNgwExtent';\nimport { fetchNgwLayerItems } from './utils/fetchNgwLayerItems';\nimport { ngwApiToAdapterOptions } from './utils/ngwApiToAdapterOptions';\nimport { updateImageParams } from './utils/utils';\n\nimport type {\n NgwLayerAdapterType,\n NgwWebmapAdapterOptions,\n NgwWebmapLayerAdapterEvents,\n ResourceAdapter,\n TreeGroup,\n TreeLayer,\n} from './interfaces';\nimport type { ItemOptions } from '@nextgis/item';\nimport type {\n BaseRequestOptions,\n BasemapWebmap,\n ResourceItem,\n WebmapResource,\n} from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray, Type } from '@nextgis/utils';\nimport type { LayerLegend } from '@nextgis/webmap';\nimport type { RasterAdapterOptions, WebMap } from '@nextgis/webmap';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nexport class NgwWebmapLayerAdapter<M = any> implements ResourceAdapter<M> {\n layer?: NgwWebmapItem;\n\n NgwWebmapItem: Type<NgwWebmapItem> = NgwWebmapItem;\n /**\n * Radius for searching objects in pixels\n */\n pixelRadius = 10; // webmapSettings.identify_radius,\n resourceId!: number;\n webmapClassName = 'webmap';\n readonly emitter: StrictEventEmitter<\n EventEmitter,\n NgwWebmapLayerAdapterEvents\n > = new EventEmitter();\n protected _extent?: LngLatBoundsArray;\n\n private response?: ResourceItem;\n private _webmapLayersIds?: number[];\n private _webmapBaselayersIds: string[] = [];\n private _lastActiveBaselayer?: string;\n\n constructor(\n public map: M,\n public options: NgwWebmapAdapterOptions,\n ) {\n const r = options.resourceId;\n\n if (Array.isArray(r)) {\n this.resourceId = r[0];\n this.options.id = r[1];\n } else {\n this.resourceId = r;\n }\n\n if (!this.resourceId) {\n throw new Error('NGW `resourceId` is not defined');\n }\n }\n\n async addLayer(options: NgwWebmapAdapterOptions): Promise<any> {\n this.options = { ...this.options, ...options };\n this.layer = await this._getWebMapLayerItem();\n const extentConstrained = this.response?.webmap?.extent_constrained;\n if (\n this.options.useExtentConstrained &&\n this._extent &&\n extentConstrained\n ) {\n this.options.webMap.setView({ maxBounds: this._extent });\n }\n return this.layer;\n }\n\n removeLayer(): void {\n const mapAdapter = this.options.webMap.mapAdapter;\n\n this.getDependLayers().forEach((x) => {\n if (!('layer' in x)) return;\n // @ts-ignore Update x interface\n mapAdapter.removeLayer(x.layer.layer);\n });\n\n if (this._webmapBaselayersIds.length) {\n for (const b of this._webmapBaselayersIds) {\n this.options.webMap.removeLayer(b);\n }\n if (this._lastActiveBaselayer) {\n this.options.webMap.showLayer(this._lastActiveBaselayer);\n }\n }\n\n if (this.options.useExtentConstrained && this._extent) {\n this.options.webMap.setView({ maxBounds: null });\n }\n\n delete this.layer;\n delete this.response;\n delete this._webmapLayersIds;\n }\n\n async showLayer(): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('visibility').set(true);\n }\n }\n\n async hideLayer(): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('visibility').set(false);\n }\n }\n\n async setOpacity(val: number): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('opacity').set(val);\n }\n }\n\n /** @deprecated use {@link NgwWebmapLayerAdapter.getBounds} instead */\n getExtent(): LngLatBoundsArray | undefined {\n return this.getBounds();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n const webmap = this.response && this.response.webmap;\n if (webmap) {\n return getNgwWebmapExtent(webmap);\n }\n }\n\n getDependLayers(): Array<NgwWebmapItem> {\n return (this.layer && this.layer.tree.getDescendants()) || [];\n }\n\n getBookmarksResourceId(): number | undefined {\n const webmap = this.response && this.response.webmap;\n if (webmap) {\n return webmap.bookmark_resource.id;\n }\n }\n\n fetchBookmarks(options: BaseRequestOptions): Promise<BookmarkItem[]> {\n const bookmarkResId = this.getBookmarksResourceId();\n const connector = this.options.connector;\n if (bookmarkResId) {\n return connector\n .getResourceOrFail(bookmarkResId, options)\n .then((item) => {\n const labelField = item.feature_layer?.fields.find(\n (x) => x.label_field,\n );\n const keyname = labelField && labelField.keyname;\n return fetchNgwLayerItems({\n connector,\n resourceId: bookmarkResId,\n geom: false,\n fields: keyname ? [keyname] : undefined,\n ...options,\n }).then((items) => {\n const bookmarks: BookmarkItem[] = [];\n for (const i of items) {\n const bookmark = new BookmarkItem({\n item: i,\n resourceId: bookmarkResId,\n labelField: keyname,\n connector,\n });\n bookmarks.push(bookmark);\n }\n return bookmarks;\n });\n });\n }\n throw new Error(\n 'Webmap was not loaded correctly, it is impossible to extract bookmarks',\n );\n }\n\n async getLegend(options?: BaseRequestOptions): Promise<LayerLegend[]> {\n const legends: LayerLegend[] = [];\n\n let deps = this.getDependLayers();\n deps = deps.sort((a, b) => b.id - a.id);\n for (const d of deps) {\n const layerLegend = await d.getLegend(options);\n legends.push(...layerLegend);\n }\n\n return legends;\n }\n\n async getIdentificationIds(options?: BaseRequestOptions): Promise<number[]> {\n const visibleLayers: number[] = [];\n let ids = this._webmapLayersIds;\n if (!ids) {\n ids = await this._getWebMapIds(options);\n this._webmapLayersIds = ids;\n }\n if (ids && ids.length) {\n let deps = this.getDependLayers();\n deps = deps.sort((a, b) => b.id - a.id);\n deps.forEach((x) => {\n const item = x.item;\n const parentId = item.parentId;\n if (\n parentId !== undefined &&\n item.item_type === 'layer' &&\n item.layer_identifiable\n ) {\n const visible = x.properties.property('visibility');\n const isVisible = visible.get() && !visible.isBlocked();\n if (isVisible) {\n visibleLayers.push(parentId);\n }\n }\n });\n }\n return visibleLayers;\n }\n\n protected async _getWebMapLayerItem(): Promise<NgwWebmapItem | undefined> {\n if (!this.resourceId) {\n return undefined;\n }\n\n const webmap = await this.getWebMapConfig(this.resourceId);\n if (!webmap || !webmap.root_item) {\n return undefined;\n }\n\n return new Promise<NgwWebmapItem>((resolve) => {\n const connector = this.options.connector;\n const headers = connector?.options.auth\n ? connector.getAuthorizationHeaders()\n : undefined;\n const withCredentials = connector.withCredentials;\n\n const options: ItemOptions = {\n ...this.options,\n withCredentials,\n headers,\n drawOrderEnabled: webmap.draw_order_enabled,\n };\n\n const layer = new this.NgwWebmapItem(\n this.options.webMap,\n webmap.root_item,\n options,\n connector,\n );\n\n layer.emitter.on('init', () => {\n resolve(layer);\n });\n });\n }\n\n private async getWebMapConfig(id: number) {\n const data = await this.options.connector.getResource(id);\n if (data) {\n this.response = data;\n const webmap = data[\n this.webmapClassName as keyof ResourceItem\n ] as WebmapResource;\n this._setupBaselayers(data);\n if (webmap) {\n this._extent = [\n webmap.extent_left,\n webmap.extent_bottom,\n webmap.extent_right,\n webmap.extent_top,\n ];\n this._updateItemsParams(webmap.root_item, this.options.webMap, data);\n return webmap;\n } else {\n // TODO: resource is no webmap\n }\n }\n }\n\n private _setupBaselayers(data: ResourceItem) {\n const webMap = this.options.webMap;\n const basemap = this.options.useBasemap ?? true;\n if (basemap) {\n if (data.basemap_webmap && data.basemap_webmap.basemaps.length) {\n const activeBaselayer = webMap.getActiveBaseLayer();\n this._lastActiveBaselayer = activeBaselayer\n ? activeBaselayer.id\n : undefined;\n this._setBasemaps(data.basemap_webmap);\n } else if (this.options.defaultBasemap) {\n webMap.addBaseLayer('OSM', {\n id: 'webmap-default-baselayer',\n name: 'OpenStreetMap',\n });\n }\n }\n }\n\n private _setBasemaps(baseWebmap: BasemapWebmap) {\n const webMap = this.options.webMap;\n // to avoid set many basemaps on init\n let enabledAlreadySet = false;\n for (const x of baseWebmap.basemaps) {\n createOnFirstShowNgwAdapter({\n webMap,\n connector: this.options.connector,\n item: x,\n adapterOptions: { crossOrigin: this.options.crossOrigin },\n }).then((adapter) => {\n const visibility = enabledAlreadySet ? false : x.enabled;\n if (x.enabled) {\n enabledAlreadySet = true;\n }\n return webMap\n .addBaseLayer(adapter, {\n id: WEBMAP_BASELAYER_ID_PREFIX + x.resource_id,\n name: x.display_name,\n opacity: x.opacity,\n visibility,\n })\n .then((l) => {\n l.id && this._webmapBaselayersIds.push(l.id);\n });\n });\n }\n }\n\n private _updateItemsParams(\n item: TreeGroup | TreeLayer,\n webMap: WebMap,\n data: ResourceItem,\n ) {\n if (item) {\n if (item.item_type === 'group' || item.item_type === 'root') {\n if (item.children) {\n item.children = item.children.map((x) =>\n this._updateItemsParams(x, webMap, data),\n );\n }\n if (item.item_type === 'root') {\n item.display_name = data.resource.display_name;\n }\n } else if (item.item_type === 'layer') {\n const url = fixUrlStr(\n this.options.connector.options.baseUrl +\n '/api/component/render/image',\n );\n const resourceId = item.layer_style_id;\n item.url = url;\n item.resourceId = resourceId;\n item.updateWmsParams = (params) =>\n updateImageParams(params, resourceId);\n const adapter = item.layer_adapter.toUpperCase() as NgwLayerAdapterType;\n const layerAdapterOptions = ngwApiToAdapterOptions({\n options: {\n adapter,\n resource: resourceId,\n },\n webMap,\n baseUrl: this.options.connector.options.baseUrl || '',\n }) as RasterAdapterOptions;\n item = {\n ...item,\n ...layerAdapterOptions,\n };\n }\n }\n return item;\n }\n\n private async _getWebMapIds(\n options?: BaseRequestOptions,\n ): Promise<number[] | undefined> {\n const webMapItem = this.layer;\n if (webMapItem && webMapItem.item.item_type === 'root') {\n const layers = webMapItem.tree.getDescendants();\n const promises: Array<Promise<any>> = [];\n for (const x of layers) {\n const item = x.item;\n if (item.item_type === 'layer') {\n const id = item.layer_style_id;\n const promise = this.options.connector\n .getResource(id, options)\n .then((y) => {\n if (y) {\n const parentId = Number(y.resource.parent.id);\n item.parentId = parentId;\n return parentId;\n }\n });\n promises.push(promise);\n }\n }\n const ids = await Promise.all(promises);\n return ids.filter((x) => x !== undefined);\n }\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\n\nimport { NgwWebmapLayerAdapter } from './NgwWebmapLayerAdapter';\nimport { classAdapters } from './adapters/createAsyncAdapter';\nimport { extendNgwWebmapLayerAdapter } from './utils/utils';\n\nimport type {\n GetClassAdapter,\n NgwKitOptions,\n NgwWebmapAdapterOptions,\n} from './interfaces';\nimport type { Type } from '@nextgis/utils';\nimport type { LayerAdapterCreators, StarterKit, WebMap } from '@nextgis/webmap';\n\nexport class NgwKit implements StarterKit {\n url: string;\n connector: NgwConnector;\n webMap?: WebMap;\n\n constructor(public options: NgwKitOptions) {\n if (this.options.connector) {\n this.url = this.options.connector.options.baseUrl || '';\n this.connector = this.options.connector;\n } else {\n if (this.options.baseUrl) {\n this.url = this.options.baseUrl;\n } else {\n throw new Error('url is not defined');\n }\n this.connector = new NgwConnector({\n baseUrl: this.url,\n auth: this.options.auth,\n });\n }\n }\n\n static addClassAdapters(cls: string, adapter: GetClassAdapter): void {\n classAdapters[cls] = adapter;\n }\n\n async onLoadSync(webMap: WebMap): Promise<NgwWebmapLayerAdapter | undefined> {\n if (this.options.resourceId && this.url) {\n // TODO: resources from array\n const resourceIds = [this.options.resourceId];\n\n if (resourceIds.length) {\n for (const r of resourceIds) {\n const options: Partial<NgwWebmapAdapterOptions> = {\n resourceId: r,\n connector: this.connector,\n webMap,\n };\n const layer = (await webMap.addLayer(NgwWebmapLayerAdapter, {\n visibility: true,\n fit: true,\n pixelRadius: this.options.pixelRadius,\n ...options,\n })) as NgwWebmapLayerAdapter;\n return layer;\n }\n }\n }\n }\n\n getLayerAdapters(): Promise<LayerAdapterCreators[]> {\n return Promise.resolve([this._getLayerAdapter()]);\n }\n\n private _getLayerAdapter() {\n return {\n name: 'WEBMAP',\n createAdapter: (webmap: WebMap) =>\n Promise.resolve(this._createAdapter(webmap)),\n };\n }\n\n private _createAdapter(webMap: WebMap): Type<NgwWebmapLayerAdapter> {\n const connector = this.connector;\n const baseUrl = this.url;\n return extendNgwWebmapLayerAdapter({\n webMap,\n connector,\n baseUrl,\n });\n }\n}\n","import { fetchNgwLayerItem, fetchNgwLayerItemExtent } from '.';\n\nimport type { IdentifyItemOptions, NgwFeatureItemResponse } from '.';\nimport type { FetchNgwItemOptions } from './interfaces';\nimport type {\n FeatureItemExtensions,\n FeatureResource,\n LayerFeature,\n RequestOptions,\n VectorLayerResourceItem,\n} from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { FeatureProperties, LngLatBoundsArray } from '@nextgis/utils';\nimport type { Feature, GeoJsonObject, Geometry } from 'geojson';\n\nexport class IdentifyItem<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n> implements LayerFeature\n{\n readonly id: number;\n readonly label: string;\n readonly layerId: number;\n readonly parent: string;\n readonly fields: FeatureProperties;\n geom?: GeoJsonObject;\n extensions?: FeatureItemExtensions;\n\n private connector: NgwConnector;\n private _item?: NgwFeatureItemResponse<F, G>;\n private _geojson?: Feature<G, F>;\n private _resource?: VectorLayerResourceItem;\n private _extent?: LngLatBoundsArray;\n\n constructor(options: IdentifyItemOptions) {\n const f = options.feature;\n this.id = f.id;\n this.geom = f.geom;\n this.label = f.label;\n this.parent = f.parent;\n this.fields = f.fields;\n this.layerId = f.layerId;\n this.connector = options.connector;\n }\n\n identify(\n options: Partial<FetchNgwItemOptions<F>> = {},\n ): Promise<NgwFeatureItemResponse<F, G>> {\n if (this._item) {\n return Promise.resolve(this._item);\n }\n return fetchNgwLayerItem<G, F>({\n connector: this.connector,\n featureId: this.id,\n resourceId: this.layerId,\n fields: null,\n extensions: ['attachment', 'description'],\n ...options,\n }).then((resp) => {\n this._item = resp;\n this.geom = resp.geom;\n this.extensions = resp.extensions;\n return resp;\n });\n }\n\n resource(opt?: RequestOptions<'GET'>): Promise<FeatureResource> {\n if (this._resource) {\n return Promise.resolve(this._resource.feature_layer);\n }\n return this.connector.getResource(this.layerId, opt).then((resp) => {\n this._resource = resp as VectorLayerResourceItem;\n return this._resource.feature_layer;\n });\n }\n\n getBounds(\n opt?: Pick<RequestOptions<'GET'>, 'cache' | 'signal'>,\n ): Promise<LngLatBoundsArray | undefined> {\n if (this._extent) {\n return Promise.resolve(this._extent);\n }\n return fetchNgwLayerItemExtent({\n connector: this.connector,\n featureId: this.id,\n resourceId: this.layerId,\n ...opt,\n });\n }\n\n geojson(options: Partial<FetchNgwItemOptions<F>>): Promise<Feature<G, F>> {\n if (this._geojson) {\n return Promise.resolve(this._geojson);\n }\n return this.identify(options).then((resp) => {\n return resp.toGeojson().then((geojson) => {\n this._geojson = geojson;\n return geojson;\n });\n });\n }\n}\n","import { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerItem } from './fetchNgwLayerItem';\n\nimport type { FetchNgwItemOptions } from '../interfaces';\nimport type { Feature, Geometry } from 'geojson';\n\nexport async function fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends Record<string, any> = Record<string, any>,\n>(options: FetchNgwItemOptions<P>): Promise<Feature<G, P>> {\n const item = await fetchNgwLayerItem<G, P>(options);\n return createGeoJsonFeature<G, P>(item);\n}\n","import {\n degrees2meters,\n deprecatedMapClick,\n getCirclePolygonCoordinates,\n} from '@nextgis/utils';\n\nimport { IdentifyItem } from '../IdentifyItem';\n\nimport { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerFeature } from './fetchNgwLayerFeature';\nimport { fetchNgwLayerItem } from './fetchNgwLayerItem';\n\nimport type {\n FeatureIdentifyRequestOptions,\n FeatureLayerIdentifyOptions,\n GetIdentifyGeoJsonOptions,\n IdentifyItemOptions,\n IdentifyRequestOptions,\n NgwFeatureItemResponse,\n NgwIdentifyItem,\n} from '../interfaces';\nimport type {\n FeatureLayersIdentify,\n LayerFeature,\n} from '@nextgis/ngw-connector';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type { MapClickEvent } from '@nextgis/webmap';\nimport type { Feature, Geometry, Position } from 'geojson';\n\nexport function getIdentifyItems(\n identify: FeatureLayersIdentify & { resources?: number[] },\n multiple = false,\n): NgwIdentifyItem[] {\n const resources = [];\n const paramsList = [];\n for (const l in identify) {\n const id = Number(l);\n if (!isNaN(id)) {\n resources.push(id);\n }\n }\n const sortingArr = identify.resources;\n if (sortingArr) {\n resources.sort((a, b) => {\n return sortingArr.indexOf(a) - sortingArr.indexOf(b);\n });\n }\n\n for (let fry = 0; fry < resources.length; fry++) {\n const l = resources[fry];\n const identifyItem = identify[l];\n if ('features' in identifyItem) {\n const layerFeatures = identifyItem.features;\n const resourceId = Number(l);\n const featureParams: NgwIdentifyItem[] = createParamsFromFeatures(\n layerFeatures,\n resourceId,\n multiple,\n );\n if (featureParams.length) {\n paramsList.push(...featureParams);\n if (!multiple) {\n break;\n }\n }\n }\n }\n return paramsList;\n}\n\nfunction createParamsFromFeatures(\n features: LayerFeature[],\n resourceId: number,\n multiple: boolean,\n): NgwIdentifyItem[] {\n const featureParams: NgwIdentifyItem[] = [];\n for (const feature of features) {\n const params = {\n featureId: feature.id,\n resourceId,\n feature,\n };\n featureParams.push(params);\n if (!multiple) {\n break;\n }\n }\n return featureParams;\n}\n\nexport function fetchIdentifyGeoJson<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n>(options: GetIdentifyGeoJsonOptions): Promise<Feature<G, P> | undefined> {\n const { connector, identify, requestOptions } = options;\n for (const l in identify) {\n const id = Number(l);\n if (!isNaN(id)) {\n const item = identify[l];\n if ('features' in item) {\n const withGeom = item.features.find((x) => x.geom);\n\n if (withGeom && withGeom.geom) {\n const geom = withGeom.geom as Geometry;\n return Promise.resolve(\n createGeoJsonFeature({\n ...withGeom,\n geom,\n }),\n );\n }\n }\n }\n }\n\n const params = getIdentifyItems(identify);\n if (params && params.length) {\n return fetchNgwLayerFeature({ ...requestOptions, connector, ...params[0] });\n }\n return Promise.resolve(undefined);\n}\n\nexport function fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(\n options: GetIdentifyGeoJsonOptions<P>,\n): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const { connector, identify } = options;\n\n const params = getIdentifyItems(identify);\n if (params && params.length) {\n return fetchNgwLayerItem<G, P>({\n connector,\n ...options.requestOptions,\n ...params[0],\n });\n }\n return Promise.resolve(undefined);\n}\n\n/**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\nexport function getIdentifyGeoJson<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n>(options: GetIdentifyGeoJsonOptions): Promise<Feature<G, P> | undefined> {\n return fetchIdentifyGeoJson(options);\n}\n\nexport function featureLayerIdentify(\n options: FeatureLayerIdentifyOptions,\n): Promise<FeatureLayersIdentify> {\n const { geom, signal, cache, layers } = options;\n\n const wkt = typeof geom === 'string' ? geom : convertGeomToWKT(geom);\n\n if (!wkt) {\n throw new Error('Not valid geometry format to make intersection');\n }\n\n const data: FeatureIdentifyRequestOptions = {\n geom: wkt,\n srs: 3857,\n layers,\n };\n\n return options.connector.post('feature_layer.identify', {\n data,\n signal,\n cache,\n });\n}\n\nfunction convertGeomToWKT(\n geom: FeatureLayerIdentifyOptions['geom'],\n): string | null {\n const coordinates = getPolygonCoordinates(geom);\n if (!coordinates) return null;\n\n const polygonStr = coordinates.map(([lng, lat]) => {\n const [x, y] = degrees2meters(lng, lat);\n return `${x} ${y}`;\n });\n\n return `POLYGON((${polygonStr.join(',')}))`;\n}\n\nfunction getPolygonCoordinates(\n geom: FeatureLayerIdentifyOptions['geom'],\n): Position[] | null {\n if (Array.isArray(geom)) {\n return geom;\n }\n\n if (geom.type === 'Feature') {\n return geom.geometry?.coordinates[0];\n }\n\n if (geom.type === 'Polygon') {\n return geom.coordinates[0];\n }\n\n return null;\n}\n\nexport function sendIdentifyRequest(\n ev: MapClickEvent,\n options: IdentifyRequestOptions,\n): Promise<FeatureLayersIdentify> {\n deprecatedMapClick(ev);\n const [lng, lat] = ev.lngLat;\n const { geom, radius } = options;\n const geom_ = geom ?? getCirclePolygonCoordinates(lng, lat, radius);\n\n return featureLayerIdentify({ ...options, geom: geom_ });\n}\n\nexport function createIdentifyItem<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n>(opt: IdentifyItemOptions): IdentifyItem<F, G> {\n return new IdentifyItem<F, G>(opt);\n}\n","import type { CompanyLogoOptions } from '../interfaces';\nimport type NgwConnector from '@nextgis/ngw-connector';\n\nexport async function getCompanyLogo(\n connector: NgwConnector,\n options?: CompanyLogoOptions,\n): Promise<HTMLElement | undefined> {\n const settings = await connector.get('pyramid.settings', null, {\n component: 'pyramid',\n });\n if (settings && settings.company_logo && settings.company_logo.enabled) {\n const anchor = document.createElement('a');\n anchor.style.position = 'absolute';\n anchor.style.bottom = '0';\n anchor.style.right = '0';\n anchor.style.padding = options?.padding ?? '10px';\n anchor.className = 'ngw-map-logo';\n if (options && options.cssClass) {\n anchor.className += ' ' + options.cssClass;\n }\n const img = new Image();\n img.style.maxHeight = '100px';\n img.style.maxWidth = '100px';\n img.src = '';\n try {\n const src = await connector.get('pyramid.company_logo', {\n responseType: 'blob',\n });\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(src as any);\n img.src = imageUrl;\n } catch (er) {\n console.warn(er);\n }\n\n if (\n settings.company_logo.link !== null &&\n settings.company_logo.link.trim() !== ''\n ) {\n anchor.href = settings.company_logo.link;\n anchor.target = '_blank';\n if (settings.company_logo.link.search(/:\\/\\/nextgis/) !== -1) {\n img.alt = 'Get your own Web GIS at nextgis.com';\n }\n }\n anchor.appendChild(img);\n return anchor;\n }\n}\n","import type {\n GeometryPaint,\n GetPaintCallback,\n IconPaint,\n Paint,\n PropertiesPaint,\n VectorAdapterLayerPaint,\n} from './interfaces';\n\nexport function isPropertiesPaint(paint: Paint): paint is PropertiesPaint {\n if (Array.isArray(paint)) {\n return true;\n }\n return false;\n}\n\nexport function isPaint(paint: Paint): paint is VectorAdapterLayerPaint {\n if (Object.prototype.toString.call(paint) === '[object Object]') {\n return true;\n }\n return false;\n}\n\nexport function isBasePaint(paint: Paint): paint is GeometryPaint {\n if (isPaint(paint)) {\n if (paint.type === 'get-paint' || paint.type === 'icon') {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport function isPaintCallback(paint: Paint): paint is GetPaintCallback {\n if (typeof paint === 'function') {\n return true;\n }\n return false;\n}\n\nexport function isIcon(paint: IconPaint): paint is IconPaint {\n return paint.type === 'icon' || 'html' in paint;\n}\n","import type {\n ExpressionCbFunc,\n ExpressionFunc,\n MapToCallback,\n SimpleType,\n} from '../interfaces';\n\nexport default function evaluateArgs<\n T extends SimpleType[] = SimpleType[],\n R = T[0],\n>(cb: ExpressionFunc<T, R>): ExpressionCbFunc<T, R> {\n return (args: MapToCallback<T>, data) => {\n const unwrap = args.map((a) => a()) as T;\n return cb(unwrap, data);\n };\n}\n","import e from '../utils/evaluateArgs';\n\nimport type { DecisionExpressionName, ExpressionCbFunc } from '../interfaces';\n\nfunction not([expr]: [boolean]): boolean {\n return !expr;\n}\n\nfunction notEqual([a, b]: [value1: any, value2: any]): boolean {\n return a !== b;\n}\n\nfunction lessThan([left, right]: [value1: any, value2: any]): boolean {\n return left < right;\n}\n\nfunction lessThanOrEqual([left, right]: [value1: any, value2: any]): boolean {\n return left <= right;\n}\n\nfunction equal([left, right]: [value1: any, value2: any]): boolean {\n return left === right;\n}\n\nfunction greaterThan([left, right]: [value1: any, value2: any]): boolean {\n return left > right;\n}\n\nfunction greaterThanOrEqual([left, right]: [\n value1: any,\n value2: any,\n]): boolean {\n return left >= right;\n}\n\nconst coalesce: ExpressionCbFunc<any[], any> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (arg !== null && arg !== undefined) {\n return arg;\n }\n }\n return null;\n};\n\nconst all: ExpressionCbFunc<any[], boolean> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (!arg) {\n return false;\n }\n }\n return true;\n};\n\nconst any: ExpressionCbFunc<any[], boolean> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (arg) {\n return true;\n }\n }\n return false;\n};\n\nconst match: ExpressionCbFunc<any[]> = (args) => {\n const [lookupFn, ...cases] = args;\n const lookup = lookupFn();\n // remove last odd item from cases array\n const defValue = cases.splice(-1, cases.length % 2)[0];\n for (let fry = 0; fry < cases.length - 1; fry += 2) {\n const key = cases[fry]();\n if (key === lookup) {\n return cases[fry + 1]();\n }\n }\n return defValue();\n};\n\ntype OutputType = any;\nconst caseFunc: ExpressionCbFunc<\n [boolean, OutputType, ...Array<boolean | OutputType>],\n OutputType\n> = (args) => {\n if (args.length < 2) {\n throw new Error(\n 'The \"case\" function requires at least a condition and a corresponding output.',\n );\n }\n\n if (args.length % 2 === 0) {\n throw new Error(\n 'Missing a fallback value or unmatched condition-output pair.',\n );\n }\n for (let i = 0; i < args.length - 1; i += 2) {\n const condition = args[i]() as boolean;\n const value = args[i + 1]() as OutputType;\n if (condition) {\n return value;\n }\n }\n const fallback = args[args.length - 1];\n return fallback();\n};\n\nexport const decisionExpressions: Record<\n DecisionExpressionName,\n ExpressionCbFunc\n> = {\n '!': e(not),\n '!=': e(notEqual),\n '<': e(lessThan),\n '<=': e(lessThanOrEqual),\n '==': e(equal),\n '>': e(greaterThan),\n '>=': e(greaterThanOrEqual),\n coalesce,\n all,\n any,\n case: caseFunc,\n match,\n};\n","export const COLORS = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","import { COLORS } from '../constants/colors';\n\nexport type ColorArray = [r: number, g: number, b: number, a?: number];\n\nexport type ColorObject = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\nexport type Color = string | ColorObject;\n\nfunction isHex(hex: any): hex is string {\n return typeof hex === 'string' && /^#([A-Fa-f0-9]{3}){1,2}$/.test(hex);\n}\n\nfunction isRgb(hex: any): hex is string {\n const r =\n // eslint-disable-next-line max-len\n /^rgb(a?)\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)(?:\\s*,\\s*([01](?:\\.\\d+)?))?\\s*\\)$/;\n return typeof hex === 'string' && r.test(hex);\n}\n\nfunction isColorObj(obj: any): obj is ColorObject {\n if (typeof obj === 'object' && obj !== null) {\n const hasRgb = 'r' in obj && 'g' in obj && 'b' in obj;\n const hasValidAlpha =\n !('a' in obj) || (typeof obj.a === 'number' && obj.a >= 0 && obj.a <= 1);\n return hasRgb && hasValidAlpha;\n }\n return false;\n}\n\nfunction isColorName(name: any): name is keyof typeof COLORS {\n if (typeof name === 'string' && name in COLORS) {\n return true;\n }\n return false;\n}\n\nexport function isColor(value: any): value is Color {\n return [isColorName, isHex, isRgb, isColorObj].some((c) => c(value));\n}\n\nexport function toColor(value: Color): ColorArray {\n if (isHex(value)) {\n return hexToColor(value);\n } else if (isColorName(value)) {\n return colorNameToColor(value);\n } else if (isRgb(value)) {\n return rgbToColor(value);\n } else if (isColorObj(value)) {\n return colorObjectToColor(value);\n }\n throw new Error(`The '${value}' cannot be converted to color`);\n}\n\nfunction colorNameToColor(name: keyof typeof COLORS) {\n return hexToColor(COLORS[name]);\n}\n\nfunction hexToColor(hex: string): ColorArray {\n const shortRGB = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;\n const shortRGBA = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;\n const longRGB = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;\n const longRGBA =\n /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;\n\n let result;\n\n if ((result = shortRGB.exec(hex))) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n ];\n } else if ((result = shortRGBA.exec(hex))) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n parseInt(result[4] + result[4], 16) / 255,\n ];\n } else if ((result = longRGB.exec(hex))) {\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n ];\n } else if ((result = longRGBA.exec(hex))) {\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n parseInt(result[4], 16) / 255,\n ];\n }\n throw new Error(`The '${hex}' Is not valid hex`);\n}\n\nfunction rgbToColor(rgb: string): ColorArray {\n const rgbPattern = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/;\n const rgbaPattern = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)$/;\n\n let matches;\n\n if ((matches = rgb.match(rgbPattern))) {\n return [\n parseInt(matches[1], 10),\n parseInt(matches[2], 10),\n parseInt(matches[3], 10),\n ];\n } else if ((matches = rgb.match(rgbaPattern))) {\n return [\n parseInt(matches[1], 10),\n parseInt(matches[2], 10),\n parseInt(matches[3], 10),\n parseFloat(matches[4]),\n ];\n }\n\n throw new Error(`The '${rgb}' Is not valid rgb`);\n}\n\nexport function colorObjectToColor({ r, g, b, a }: ColorObject): ColorArray {\n return [r, g, b, ...(a !== undefined ? [a] : [])] as ColorArray;\n}\n\nexport function colorToRGB(array: ColorArray): string {\n return `rgb(${array.join(',')})`;\n}\n","import { type ColorArray, colorToRGB, toColor } from '../../utils/color';\n\nimport type { ExpressionCbFunc } from '../../interfaces';\n\ntype LinearInterpolation = ['linear'];\ntype ExponentialInterpolation = [name: 'exponential', base: number];\ntype CubicBezierInterpolation = [\n name: 'cubic-bezier',\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n];\ntype Interpolation =\n | LinearInterpolation\n | ExponentialInterpolation\n | CubicBezierInterpolation;\n\ntype OutputType = any;\n\ntype InterpolateArgs = [\n interpolation: Interpolation,\n input: number,\n ...stops: (number | OutputType)[],\n];\n\nfunction linearInterpolation(\n input: number,\n input1: number,\n output1: OutputType,\n input2: number,\n output2: OutputType,\n): OutputType {\n if (typeof output1 === 'number' && typeof output2 === 'number') {\n return (\n output1 + ((input - input1) / (input2 - input1)) * (output2 - output1)\n );\n }\n\n try {\n const outputColor1 = toColor(output1);\n const outputColor2 = toColor(output2);\n return colorToRGB(\n outputColor1.map((val, index) => {\n return Math.ceil(\n linearInterpolation(input, input1, val, input2, outputColor2[index]),\n );\n }) as ColorArray,\n );\n } catch (er) {\n console.log(er);\n }\n\n throw new Error('Unsupported output type for linear interpolation.');\n}\n\nexport const interpolate: ExpressionCbFunc<InterpolateArgs, OutputType> = ([\n interpolationFn,\n inputFn,\n ...stops\n]) => {\n if (stops.length < 2) {\n throw new Error('At least two stops are required');\n }\n if (stops.length < 2 || stops.length % 2 !== 0) {\n throw new Error('Invalid stops provided.');\n }\n const input = inputFn();\n\n if (typeof input !== 'number') {\n throw new Error('Input must be a number.');\n }\n const interpolation = interpolationFn();\n for (let i = 0; i < stops.length - 2; i += 2) {\n const stopInput1 = stops[i]() as number;\n const stopOutput1 = stops[i + 1]() as OutputType;\n const stopInput2 = stops[i + 2]() as number;\n const stopOutput2 = stops[i + 3]() as OutputType;\n\n if (input >= stopInput1 && input <= stopInput2) {\n if (interpolation[0] === 'linear') {\n return linearInterpolation(\n input,\n stopInput1,\n stopOutput1,\n stopInput2,\n stopOutput2,\n );\n }\n // else if (interpolation[0] === 'exponential') {\n // const base = interpolation[1];\n // return exponentialInterpolation(\n // input,\n // base,\n // stopInput1,\n // stopOutput1,\n // stopInput2,\n // stopOutput2,\n // );\n // }\n }\n }\n\n throw new Error('Invalid interpolation type.');\n};\n","import type { ExpressionCbFunc } from '../../interfaces';\n\ntype OutputType = number | string | boolean | null;\n\nexport const step: ExpressionCbFunc<(number | OutputType)[], OutputType> = (\n args,\n) => {\n const [inputFn, defaultValue, ...stops] = args;\n const input = inputFn();\n\n if (typeof input !== 'number') {\n return defaultValue() as OutputType;\n }\n\n for (let i = 0; i < stops.length - 2; i += 2) {\n const stopInput = stops[i]() as number;\n const stopOutput = stops[i + 1]() as OutputType;\n const nextStopInput = stops[i + 2]() as number;\n\n if (input >= stopInput && input < nextStopInput) {\n return stopOutput;\n }\n }\n\n if (input >= (stops[stops.length - 2]() as number)) {\n return stops[stops.length - 1]();\n }\n\n return defaultValue();\n};\n","import { interpolate } from './interpolate';\nimport { step } from './step';\n\nimport type {\n ExpressionFunc,\n InterpolationExpressionName,\n} from '../../interfaces';\n\nexport const interpolationExpressions: Record<\n InterpolationExpressionName,\n ExpressionFunc\n> = {\n step,\n interpolate,\n};\n","import e from '../utils/evaluateArgs';\n\nimport type {\n Data,\n ExpressionCbFunc,\n LookupExpressionName,\n SimpleType,\n} from '../interfaces';\n\ntype GetArg = [key: string] | [key: string, obj: Record<string, any>];\n\nfunction get([key, objExp]: GetArg, data: Data): SimpleType | null {\n const target = objExp || data;\n if (target && typeof target === 'object' && key in target) {\n return target[key];\n }\n return null;\n}\n\nfunction has([key, objExp]: GetArg, data: Data): boolean {\n const target = objExp || data;\n return !!(target && typeof target === 'object' && key in target);\n}\n\nfunction at([index, array]: [index: number, array: any[]]): SimpleType {\n return array[index];\n}\n\ntype InArgs = [keyword: string | boolean | number, input: string | any[]];\nfunction inFunc([keyword, input]: InArgs): boolean {\n if (typeof input === 'string') {\n return input.includes(String(keyword));\n } else if (Array.isArray(input)) {\n return input.includes(keyword);\n }\n throw new Error(\n `Invalid input type for 'in'. Expected string or array, got ${typeof input}.`,\n );\n}\n\nconst length = ([item]: [string | any[]]) => {\n if (typeof item === 'string' || Array.isArray(item)) {\n return item.length;\n }\n return undefined;\n};\n\ntype IndexOfArgs =\n | [keyword: string | boolean | number, input: string | any[]]\n | [keyword: string | boolean | number, input: string | any[], index: number];\nfunction indexOf([keyword, input, startIndex]: IndexOfArgs): number {\n if (typeof input === 'string') {\n return input.indexOf(String(keyword), startIndex);\n } else if (Array.isArray(input)) {\n return input.indexOf(keyword, startIndex);\n }\n\n throw new Error(\n `Invalid input type for 'index-of'. Expected string or array, got ${typeof input}.`,\n );\n}\n\ntype SliceArgs =\n | [input: string | any[], startIndex: number]\n | [input: string | any[], startIndex: number, endIndex: number];\n\nfunction slice(args: SliceArgs): string | any[] {\n const [input, startIndex, endIndex] = args;\n\n if (typeof input === 'string') {\n return input.slice(startIndex, endIndex);\n } else if (Array.isArray(input)) {\n return input.slice(startIndex, endIndex);\n }\n\n throw new Error(\n `Invalid input type for 'slice'. Expected string or array, got ${typeof input}.`,\n );\n}\n\nexport const lookupExpressions: Record<LookupExpressionName, ExpressionCbFunc> =\n {\n get: e(get),\n length: e(length),\n at: e(at),\n has: e(has),\n in: e(inFunc),\n 'index-of': e(indexOf),\n slice: e(slice),\n };\n","import e from '../utils/evaluateArgs';\n\nimport type { ExpressionCbFunc, MathExpressionName } from '../interfaces';\n\nexport const mathExpressions: Record<\n MathExpressionName,\n ExpressionCbFunc<number[], number>\n> = {\n '+': e((args) => args.reduce((a, b) => a + b, 0)),\n '-': e((args) => args.reduce((a, b) => a - b)),\n '*': e((args) => args.reduce((a, b) => a * b, 1)),\n '/': e((args) => args.reduce((a, b) => a / b)),\n '%': e((args) => args[0] % args[1]),\n '^': e((args) => Math.pow(args[0], args[1])),\n abs: e((args) => Math.abs(args[0])),\n acos: e((args) => Math.acos(args[0])),\n asin: e((args) => Math.asin(args[0])),\n atan: e((args) => Math.atan(args[0])),\n ceil: e((args) => Math.ceil(args[0])),\n cos: e((args) => Math.cos(args[0])),\n e: () => Math.E,\n floor: e((args) => Math.floor(args[0])),\n ln: e((args) => Math.log(args[0])),\n ln2: () => Math.LN2,\n log10: e((args) => Math.log10(args[0])),\n log2: e((args) => Math.log2(args[0])),\n max: e((args) => Math.max(...args)),\n min: e((args) => Math.min(...args)),\n pi: () => Math.PI,\n round: e((args) => Math.round(args[0])),\n sin: e((args) => Math.sin(args[0])),\n sqrt: e((args) => Math.sqrt(args[0])),\n tan: e((args) => Math.tan(args[0])),\n};\n","import e from '../utils/evaluateArgs';\n\nimport type { ExpressionCbFunc, StringExpressionName } from '../interfaces';\n\nexport const stringExpressions: Record<\n StringExpressionName,\n ExpressionCbFunc<string[], string>\n> = {\n concat: e((args) => args.reduce((a, b) => String(a) + String(b), '')),\n downcase: e((args) => String(args[0]).toLowerCase()),\n upcase: e((args) => String(args[0]).toUpperCase()),\n};\n","export const tryConvert = (\n converter: (arg: any, data: any) => any,\n arg: any,\n data: any,\n): any => {\n try {\n const result = converter(arg, data);\n if (result !== undefined) {\n return result;\n }\n } catch {\n // ignore errors\n }\n return undefined;\n};\n","import { tryConvert } from './tryConvert';\n\nimport type { ExpressionFunc, SimpleType } from '../interfaces';\n\nexport default function fallback<\n T extends SimpleType[] = SimpleType[],\n R = T[0],\n>(cb: ExpressionFunc<T, R | undefined>): ExpressionFunc<T[], R> {\n return (args: T[], data) => {\n for (const arg of args) {\n const result = tryConvert(cb, arg, data);\n if (result !== undefined) {\n return result;\n }\n }\n throw new Error(`Received a mismatched type`);\n };\n}\n","import e from '../utils/evaluateArgs';\nimport f from '../utils/fallback';\n\nimport type { ExpressionCbFunc, TypeExpressionName } from '../interfaces';\n\ntype ArrayType = 'string' | 'number' | 'boolean';\n\ntype ArrayArgs =\n | [value: any[]]\n | [type: ArrayType, value: any[]]\n | [type: ArrayType, n: number, value: any[]];\n\nconst array = (args: ArrayArgs): any[] => {\n const [firstArg, secondArg, thirdArg] = args;\n let requiredType: ArrayType | undefined = undefined;\n let requiredLength: number | undefined = undefined;\n let value: any[] | undefined;\n\n if (\n typeof firstArg === 'string' &&\n ['string', 'number', 'boolean'].includes(firstArg)\n ) {\n requiredType = firstArg;\n\n if (typeof secondArg === 'number') {\n requiredLength = secondArg;\n value = thirdArg;\n } else {\n value = secondArg;\n }\n } else if (Array.isArray(firstArg)) {\n value = firstArg;\n }\n if (!Array.isArray(value)) {\n throw new Error('Expected an array');\n }\n if (requiredType && !value.every((item) => typeof item === requiredType)) {\n throw new Error(\n `Expected all items in array to be of type ${requiredType}`,\n );\n }\n\n if (requiredLength && value.length !== requiredLength) {\n throw new Error(`Expected array of length ${requiredLength}`);\n }\n return value;\n};\n\nfunction typeOfValue(value: any): string {\n if (value === null) return 'null';\n switch (typeof value) {\n case 'string':\n return 'string';\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'object':\n if (Array.isArray(value)) {\n let arrayType = 'value';\n if (value.every((item) => typeof item === 'number')) {\n arrayType = 'number';\n } else if (value.every((item) => typeof item === 'string')) {\n arrayType = 'string';\n } else if (value.every((item) => typeof item === 'boolean')) {\n arrayType = 'boolean';\n }\n return `array<${arrayType}, ${value.length}>`;\n } else {\n return 'object';\n }\n default:\n return 'undefined';\n }\n}\n\nexport const typeExpressions: Record<TypeExpressionName, ExpressionCbFunc> = {\n array: e(array),\n boolean: e(\n f<boolean[]>((arg) => (typeof arg === 'boolean' ? arg : undefined)),\n ),\n literal: e(([arg]) => arg),\n number: e(f<number[]>((arg) => (typeof arg === 'number' ? arg : undefined))),\n object: e(\n f<Record<string, any>[]>((arg) =>\n arg !== null && typeof arg === 'object' && !Array.isArray(arg)\n ? arg\n : undefined,\n ),\n ),\n\n string: e(f((arg) => (typeof arg === 'string' ? arg : undefined))),\n 'to-boolean': e(f(Boolean)),\n 'to-number': e(f(Number)),\n 'to-string': e(f(String)),\n typeof: e(([arg]) => typeOfValue(arg)),\n};\n","import { decisionExpressions } from './expressions/decisionExpressions';\nimport { interpolationExpressions } from './expressions/interpolationExpressions';\nimport { lookupExpressions } from './expressions/lookupExpressions';\nimport { mathExpressions } from './expressions/mathExpressions';\nimport { stringExpressions } from './expressions/stringExpressions';\nimport { typeExpressions } from './expressions/typeExpressions';\n\nimport type {\n Data,\n Expression,\n ExpressionFunc,\n ExpressionName,\n SimpleType,\n} from './interfaces';\n\nexport function isExpression(value: any): value is Expression {\n if (Array.isArray(value)) {\n const [lookup, ...cases] = value;\n const l = lookup as ExpressionName;\n return (\n typeof l === 'string' &&\n l !== 'literal' &&\n l in expressions &&\n cases.length > 0\n );\n }\n return false;\n}\n\nconst expressions: { [key in ExpressionName]: ExpressionFunc } = {\n ...mathExpressions,\n ...typeExpressions,\n ...stringExpressions,\n ...lookupExpressions,\n ...decisionExpressions,\n ...interpolationExpressions,\n};\n\nexport function evaluate<T extends SimpleType[] = SimpleType[], R = T[0]>(\n expression: Expression,\n data: Data = {},\n): R {\n const [name, ...args] = expression;\n const expressionFun = expressions[name];\n if (expressionFun) {\n return expressionFun(\n args.map((arg) => () => (isExpression(arg) ? evaluate(arg, data) : arg)),\n data,\n );\n }\n throw new Error(`Expression \"${name}\" is not supported.`);\n}\n","import { type Expression, evaluate, isExpression } from '@nextgis/expression';\n\nimport type { GetPaintCallback, VectorAdapterLayerPaint } from './interfaces';\nimport type { Feature } from 'geojson';\n\ntype PropertyExpressionCb = (feature: Feature) => ReturnType<typeof evaluate>;\n\nfunction createPropertyExpressionCb(\n expression: Expression,\n): PropertyExpressionCb {\n return (feature: Feature) => {\n const properties = feature.properties;\n if (properties) {\n return evaluate(expression, properties);\n }\n return false;\n };\n}\n\nconst excludeExpressionList = ['iconSize', 'iconAnchor'];\n\nexport function createExpressionCallback(\n paint: Record<string, any>,\n): GetPaintCallback | undefined {\n let withExpression = false;\n const expressions: {\n [key: string]: PropertyExpressionCb;\n } = {};\n for (const p in paint) {\n if (excludeExpressionList.indexOf(p) === -1) {\n const p_ = p as keyof VectorAdapterLayerPaint;\n const val = paint[p_];\n if (isExpression(val)) {\n withExpression = true;\n expressions[p_] = createPropertyExpressionCb(val);\n }\n }\n }\n if (withExpression) {\n return (feature: Feature) => {\n const fromCb: any = {};\n for (const p in expressions) {\n fromCb[p] = expressions[p](feature);\n }\n return { ...paint, ...fromCb };\n };\n }\n return;\n}\n","import { featureFilter } from '@nextgis/properties-filter';\n\nimport { createExpressionCallback } from './fromPaintExpression';\nimport { isPaintCallback, isPropertiesPaint } from './typeHelpers';\n\nimport type {\n GeometryPaint,\n GetCustomPaintOptions,\n GetPaintCallback,\n GetPaintFunction,\n Paint,\n PropertiesPaint,\n PropertyPaint,\n VectorAdapterLayerPaint,\n} from './interfaces';\nimport type { Feature } from 'geojson';\n\nfunction updatePaintOptionFromCallback(\n paint: GetCustomPaintOptions,\n getPaintFunctions?: { [name: string]: GetPaintFunction },\n): VectorAdapterLayerPaint | undefined {\n if (typeof paint.from === 'function') {\n return paint.from(paint.options);\n } else if (typeof paint.from === 'string' && getPaintFunctions) {\n const from = getPaintFunctions[paint.from];\n if (from) {\n return from(paint.options);\n }\n }\n}\n\nfunction createPropertiesPaint(\n propertiesPaint: PropertiesPaint,\n): GetPaintFunction {\n let mask: VectorAdapterLayerPaint = {};\n const paintsFilters: PropertyPaint[] = [];\n for (const p of propertiesPaint) {\n if (p) {\n if (Array.isArray(p)) {\n paintsFilters.push(p);\n } else {\n mask = p as VectorAdapterLayerPaint;\n }\n }\n }\n\n return (feature: Feature) => {\n const paint = paintsFilters.find((x) => featureFilter(feature, x[0]));\n if (paint) {\n return { ...mask, ...paint[1] };\n }\n return mask;\n };\n}\n\nfunction expressionCallback({\n paint,\n defaultPaint,\n}: PreparePaintOptions): Paint | VectorAdapterLayerPaint {\n const expressionCallback = createExpressionCallback(paint);\n if (expressionCallback) {\n const expressionPaintCb = (feature: Feature) => {\n return preparePaint({\n paint: expressionCallback(feature),\n defaultPaint,\n }) as VectorAdapterLayerPaint;\n };\n expressionPaintCb.paint = finalizePaint({ paint, defaultPaint });\n return expressionPaintCb as VectorAdapterLayerPaint;\n }\n return finalizePaint({ paint, defaultPaint });\n}\n\nfunction finalizePaint({ paint, defaultPaint }: PreparePaintOptions): Paint {\n let newPaint: Paint = { ...defaultPaint };\n newPaint = { ...newPaint, ...paint } as GeometryPaint;\n newPaint.fill = newPaint.fill ?? true;\n newPaint.stroke =\n newPaint.stroke !== undefined\n ? newPaint.stroke\n : !newPaint.fill || !!(newPaint.strokeColor || newPaint.strokeOpacity);\n return newPaint;\n}\n\nexport interface PreparePaintOptions {\n paint: Paint;\n defaultPaint?: GeometryPaint;\n getPaintFunctions?: { [name: string]: GetPaintFunction };\n}\n\nexport function preparePaint({\n paint,\n defaultPaint,\n getPaintFunctions,\n}: PreparePaintOptions): Paint {\n if (!paint) {\n throw new Error('paint is empty');\n }\n let newPaint: Paint = { ...defaultPaint };\n if (isPaintCallback(paint)) {\n const getPaintFunction: GetPaintCallback = (feature: Feature) => {\n const getPaint = preparePaint({\n paint: paint(feature),\n defaultPaint,\n getPaintFunctions,\n }) as VectorAdapterLayerPaint;\n getPaint.type = paint.type;\n return getPaint;\n };\n getPaintFunction.type = paint.type;\n return getPaintFunction;\n } else if (isPropertiesPaint(paint)) {\n return (feature: Feature) => {\n return preparePaint({\n paint: createPropertiesPaint(paint)(feature),\n defaultPaint,\n getPaintFunctions,\n }) as VectorAdapterLayerPaint;\n };\n } else if (paint.type === 'get-paint') {\n const getPaint = updatePaintOptionFromCallback(paint, getPaintFunctions);\n if (getPaint) {\n newPaint = preparePaint({\n paint: getPaint,\n defaultPaint,\n getPaintFunctions,\n });\n }\n } else if (paint.type === 'icon') {\n return paint;\n } else {\n newPaint = expressionCallback({ paint, defaultPaint });\n }\n\n if (isPaintCallback(newPaint)) {\n return newPaint;\n }\n\n if ('color' in newPaint) {\n if (!newPaint.strokeColor) {\n newPaint.strokeColor = newPaint.color;\n }\n if (!newPaint.fillColor) {\n newPaint.fillColor = newPaint.color;\n }\n }\n if ('opacity' in newPaint) {\n if (newPaint.strokeOpacity === undefined) {\n newPaint.strokeOpacity = newPaint.opacity;\n }\n if (newPaint.fillOpacity === undefined) {\n newPaint.fillOpacity = newPaint.opacity;\n }\n }\n\n return newPaint;\n}\n","export class KeyCodes {\n 'backspace' = 8;\n 'tab' = 9;\n 'enter' = 13;\n 'shift' = 16;\n 'ctrl' = 17;\n 'alt' = 18;\n 'pause/break' = 19;\n 'caps_lock' = 20;\n 'escape' = 27;\n 'page_up' = 33;\n 'page_down' = 34;\n 'end' = 35;\n 'home' = 36;\n 'left_arrow' = 37;\n 'up_arrow' = 38;\n 'right_arrow' = 39;\n 'down_arrow' = 40;\n 'insert' = 45;\n 'delete' = 46;\n 'left_window_key' = 91;\n 'right_window_key' = 92;\n 'select_key' = 93;\n 'numpad_0' = 96;\n 'numpad_1' = 97;\n 'numpad_2' = 98;\n 'numpad_3' = 99;\n 'numpad_4' = 100;\n 'numpad_5' = 101;\n 'numpad_6' = 102;\n 'numpad_7' = 103;\n 'numpad_8' = 104;\n 'numpad_9' = 105;\n 'multiply' = 106;\n 'add' = 107;\n 'subtract' = 109;\n 'decimal_point' = 110;\n 'divide' = 111;\n 'f1' = 112;\n 'f2' = 113;\n 'f3' = 114;\n 'f4' = 115;\n 'f5' = 116;\n 'f6' = 117;\n 'f7' = 118;\n 'f8' = 119;\n 'f9' = 120;\n 'f10' = 121;\n 'f11' = 122;\n 'f12' = 123;\n 'num_lock' = 144;\n 'scroll_lock' = 145;\n 'semi-colon' = 186;\n 'equal_sign' = 187;\n ',' = 188; // \"comma\";\n '-' = 189; // \"dash\";\n '.' = 190; // \"period\";\n '/' = 191; // \"forward slash\";\n '`' = 192; // \"grave accent\";\n '[' = 219; // \"open bracket\";\n '\\\\' = 220; // \"back slash\";\n ']' = 221; // \"close braket\";\n \"'\" = 222; // \"single quote\"\n}\n","import { KeyCodes } from './KeysCodes';\n\n/**\n * @param {string} key - key symbol\n * @param {string} func - action on key press\n * @param {number} [keyCode] - key code for special button like tab\n *\n * @export\n * @interface KeyControl\n */\nexport interface KeyControl {\n key?: string;\n keyCode?: number;\n func: () => void;\n}\n\nexport class Keys {\n keyCodeAlias = new KeyCodes();\n\n keys: { [keyCode: number]: boolean } = {};\n\n private _windowOnFocus: () => void;\n private _keysPressed: (e: KeyboardEvent) => void;\n private _keysReleased: (e: KeyboardEvent) => void;\n\n constructor() {\n this._windowOnFocus = this.windowOnFocus.bind(this);\n this._keysPressed = this.keysPressed.bind(this);\n this._keysReleased = this.keysReleased.bind(this);\n this.addKeyboardEventsListener();\n }\n\n pressed(keyName: keyof KeyCodes): boolean {\n const code = this.keyCodeAlias[keyName];\n return !!code && this.keys[code];\n }\n\n addKeyboardEventsListener(): void {\n if (typeof window !== 'undefined') {\n window.addEventListener('focus', this._windowOnFocus, false);\n window.addEventListener('keydown', this._keysPressed, false);\n window.addEventListener('keyup', this._keysReleased, false);\n }\n }\n\n removeKeyboardEventsListener(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('focus', this._windowOnFocus, false);\n window.removeEventListener('keydown', this._keysPressed, false);\n window.removeEventListener('keyup', this._keysReleased, false);\n }\n }\n\n private keysPressed(e: KeyboardEvent) {\n e.stopPropagation();\n if (!this.keys[e.keyCode]) {\n this.keys[e.keyCode] = true;\n }\n }\n\n private keysReleased(e: KeyboardEvent) {\n e.stopPropagation();\n this.keys[e.keyCode] = false;\n }\n\n private windowOnFocus() {\n this.keys = {};\n }\n}\n","import type { WebMap } from '../../WebMap';\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\nimport type { MapStateItem } from '../../interfaces/MapState';\n\nexport abstract class StateItem<V extends any | undefined = any | undefined>\n implements MapStateItem<V | undefined>\n{\n name!: keyof MapOptions;\n event!: keyof WebMapEvents;\n protected value?: V;\n\n constructor(\n protected webMap: WebMap,\n opt?: { name?: keyof MapOptions; event?: keyof WebMapEvents; value?: V },\n ) {\n if (opt) {\n if (opt.value) {\n this.setValue(opt.value);\n }\n if (opt.name) {\n this.name = opt.name;\n }\n if (opt.event) {\n this.event = opt.event;\n }\n }\n }\n\n getValue(): V | undefined {\n return this.value;\n }\n\n setValue(val: V): void {\n this.value = val;\n }\n\n abstract toString(data: unknown): string;\n abstract parse(str: string): V;\n}\n","import { StateItem } from './StateItem';\n\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\nimport type { LngLatArray } from '@nextgis/utils';\n\nexport class CenterState extends StateItem<LngLatArray> {\n name: keyof MapOptions = 'center';\n event: keyof WebMapEvents = 'moveend';\n\n getValue(): LngLatArray | undefined {\n return this.webMap.getCenter();\n }\n setValue(val: LngLatArray): void {\n this.webMap.setCenter(val);\n }\n toString(data: LngLatArray): string {\n const d = data.map((x) => x.toFixed(5));\n return d[0] + '_' + d[1];\n }\n parse(str: string): LngLatArray {\n const lngLat = str.split('_').map(Number) as LngLatArray;\n return lngLat;\n }\n}\n","import { StateItem } from './StateItem';\n\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\n\nexport class ZoomState extends StateItem<number> {\n name: keyof MapOptions = 'zoom';\n event: keyof WebMapEvents = 'zoomend';\n getValue(): number | undefined {\n const zoom = this.webMap.getZoom();\n return zoom !== undefined ? Math.round(zoom) : undefined;\n }\n setValue(val: number): void {\n this.webMap.setZoom(val);\n }\n toString(val: number): string {\n return String(val);\n }\n parse(str: string): number {\n return Number(str);\n }\n}\n","/**\n * @internal\n */\nexport function clearObject(obj: Record<any, any>): void {\n for (const member in obj) {\n delete obj[member];\n }\n}\n","import { EventEmitter } from 'events';\n\nimport {\n checkExtent,\n deepmerge,\n defined,\n getBoundsFeature,\n} from '@nextgis/utils';\nimport { deprecatedMapClick } from '@nextgis/utils';\n\nimport { Keys } from './components/keys/Keys';\nimport { CenterState } from './components/mapStates/CenterState';\nimport { ZoomState } from './components/mapStates/ZoomState';\nimport { clearObject } from './utils/clearObject';\n\nimport type { StateItem } from './components/mapStates/StateItem';\nimport type { Cursor } from './interfaces/BaseTypes';\nimport type { MainMapEvents, WebMapEvents } from './interfaces/Events';\nimport type { LayerAdapter } from './interfaces/LayerAdapter';\nimport type {\n FitOptions,\n Locate,\n LocateOptions,\n LocationEvents,\n MapAdapter,\n MapClickEvent,\n} from './interfaces/MapAdapter';\nimport type { MapOptions, ViewOptions } from './interfaces/MapOptions';\nimport type { RuntimeParams } from './interfaces/RuntimeParams';\nimport type { StarterKit } from './interfaces/StarterKit';\nimport type { GetPaintFunction } from '@nextgis/paint';\nimport type {\n LngLatArray,\n LngLatBoundsArray,\n TileJson,\n Type,\n} from '@nextgis/utils';\nimport type { Feature, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\ntype EmitStatusEventData = any;\n\nlet ID = 0;\n\nconst OPTIONS: MapOptions = {\n minZoom: 0,\n maxZoom: 22,\n paint: {\n color: '#0000ff', // blue\n opacity: 0.4,\n strokeOpacity: 1,\n stroke: true,\n radius: 8,\n weight: 1,\n },\n selectedPaint: {\n color: '#00008b', // darkblue\n opacity: 0.4,\n strokeOpacity: 1,\n stroke: true,\n radius: 12,\n weight: 1,\n },\n create: true,\n};\n\ninterface AddEventsListenersOptions {\n include: (keyof MainMapEvents)[];\n}\n\nexport class WebMapMain<\n M = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n> {\n static keys: Keys = new Keys();\n\n static getPaintFunctions: { [name: string]: GetPaintFunction };\n\n options: O = OPTIONS as O;\n // `WebMapEvents` must be `E` but its not work correct\n readonly emitter: StrictEventEmitter<EventEmitter, WebMapEvents> =\n new EventEmitter();\n readonly keys = WebMapMain.keys;\n\n readonly mapAdapter: MapAdapter<M>;\n readonly runtimeParams: RuntimeParams[] = [];\n\n getPaintFunctions = WebMapMain.getPaintFunctions;\n mapState: Type<StateItem>[] = [CenterState, ZoomState];\n id = ID++;\n\n /**\n * From runtime params\n */\n protected _initMapState: Record<string, any> = {};\n protected readonly _starterKits: StarterKit[];\n private _mapState: StateItem[] = [];\n private _extent?: LngLatBoundsArray;\n private readonly _eventsStatus: { [key in keyof E]?: boolean } = {};\n private _coordFromMapClickAbort?: () => void;\n\n private readonly _mapEvents: {\n [key in keyof MainMapEvents]?: (...args: any[]) => void;\n } = {};\n\n constructor(mapOptions: O) {\n this.mapAdapter = mapOptions.mapAdapter as MapAdapter<M>;\n this._starterKits = mapOptions.starterKits || [];\n if (mapOptions) {\n this.options = deepmerge((OPTIONS as O) || {}, mapOptions) as O;\n }\n if (this.options.runtimeParams) {\n this.runtimeParams = this.options.runtimeParams;\n }\n this._addEventsListeners();\n\n if (this.options.tileJson) {\n this._setTileJsonOptions(this.options.tileJson);\n }\n if (this.options.create) {\n this.create();\n }\n }\n\n getId(): number {\n return this.id;\n }\n\n /**\n * Manual way to create a map (If {@link MapOptions.create} is `false`).\n * @example\n * ```javascript\n * const webMap = new WebMap(options);\n * webMap.create().then(() => doSomething());\n * ```\n */\n async create(): Promise<this> {\n if (!this.getEventStatus('create')) {\n await this._setInitMapState(this.mapState);\n await this._setupMap();\n this._emitStatusEvent('create', this);\n }\n return this;\n }\n\n setRuntimeParams(params: RuntimeParams): void {\n this.runtimeParams.push(params);\n }\n\n /**\n * Destroys WebMap, MapAdapter, clears all layers and turn off all event listeners\n */\n destroy(): void {\n this._removeEventListeners();\n clearObject(this._emitStatusEvent);\n if (this.mapAdapter.destroy) {\n this.mapAdapter.destroy();\n }\n }\n\n getState(): Record<string, any> {\n const state: Record<string, any> = {};\n this._mapState.forEach((x) => {\n state[x.name] = x.getValue();\n });\n return state;\n }\n\n getRuntimeParams(): Record<string, any> {\n const state: Record<string, any> = {};\n this._mapState.forEach((x) => {\n for (const r of this.runtimeParams) {\n const val = r.get(x.name);\n if (val !== undefined) {\n state[x.name] = x.parse(val);\n break;\n }\n }\n });\n return state;\n }\n\n /**\n * Returns the HTML element that contains the map.\n * @returns The map's container\n */\n getContainer(): HTMLElement | undefined {\n if (this.mapAdapter.getContainer) {\n return this.mapAdapter.getContainer();\n } else if (this.options.target) {\n if (this.options.target instanceof HTMLElement) {\n return this.options.target;\n } else if (typeof this.options.target === 'string') {\n const element = document.getElementById(this.options.target);\n if (element) {\n return element;\n }\n }\n }\n }\n\n /**\n * Set the cursor icon to be displayed when hover icon on the map container.\n * @param cursor - Available cursor name from https://developer.mozilla.org/ru/docs/Web/CSS/cursor\n */\n setCursor(cursor: Cursor): void {\n if (this.mapAdapter.setCursor) {\n this.mapAdapter.setCursor(cursor);\n }\n }\n\n getCursor(): Cursor | undefined {\n if (this.mapAdapter.getCursor) {\n return this.mapAdapter.getCursor() as Cursor;\n }\n const container = this.getContainer();\n if (container) {\n return container.style.cursor as Cursor;\n }\n }\n\n /**\n * Set the center of the current view.\n * @param lngLat - Array of two numbers representing longitude and latitude of the center of the map view.\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.setCenter([86.925278, 27.988056]);\n * ```\n */\n setCenter(lngLat: LngLatArray): this {\n this.mapAdapter.setCenter(lngLat);\n return this;\n }\n\n /**\n * Returns the map's geographical centerpoint.\n * @returns lngLat Array of two numbers representing longitude and latitude of the center of the map view.\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.getCenter(); // [86.925278, 27.988056]\n * ```\n */\n getCenter(): LngLatArray | undefined {\n return this.mapAdapter.getCenter();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (this.mapAdapter.getBounds) {\n return this.mapAdapter.getBounds();\n }\n }\n\n getBoundsPolygon(): Feature<Polygon> | undefined {\n const bounds = this.getBounds();\n if (bounds) {\n const feature = getBoundsFeature(bounds);\n return feature;\n }\n }\n\n /**\n * Zoom to a specific zoom level.\n * @param zoom - The zoom level to set (0-24).\n */\n setZoom(zoom: number): this {\n this.mapAdapter.setZoom(zoom);\n return this;\n }\n\n /**\n * Returns the map's current zoom level.\n * @returns The map's current zoom level (0-24).\n */\n getZoom(): number | undefined {\n const zoom = this.mapAdapter.getZoom();\n if (typeof zoom === 'number') {\n return zoom;\n }\n // throw Error(\n // 'Unable to get zoom level. Perhaps the map is not have been initialized yet',\n // );\n }\n\n zoomIn(): void {\n if (this.mapAdapter.zoomIn) {\n this.mapAdapter.zoomIn();\n } else {\n const zoom = this.getZoom();\n if (zoom !== undefined) {\n const toZoom = zoom + 1;\n this.setZoom(toZoom);\n }\n }\n }\n\n zoomOut(): void {\n if (this.mapAdapter.zoomOut) {\n this.mapAdapter.zoomOut();\n } else {\n const zoom = this.getZoom();\n if (zoom !== undefined) {\n const toZoom = zoom - 1;\n this.setZoom(toZoom);\n }\n }\n }\n\n /**\n * Sets the view of the map geographical center and zoom\n * @param lngLat - Array of two numbers representing longitude and latitude of the center of the map view.\n * @param zoom - The zoom level to set (0-24).\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.setView([86.925278, 27.988056], 12)\n * ```\n */\n setView(lngLatOr: LngLatArray, zoom?: number): void;\n\n setView(options: ViewOptions): void;\n\n setView(lngLatOrOpt: LngLatArray | ViewOptions, zoom?: number): void {\n if (Array.isArray(lngLatOrOpt)) {\n const lngLat = lngLatOrOpt;\n if (this.mapAdapter.setView && lngLat && defined(zoom)) {\n this.mapAdapter.setView(lngLat, zoom);\n } else {\n if (lngLat) {\n this.mapAdapter.setCenter(lngLat);\n }\n if (defined(zoom)) {\n this.mapAdapter.setZoom(zoom);\n }\n }\n } else {\n const viewOpt = lngLatOrOpt;\n if (this.mapAdapter.setView) {\n this.mapAdapter.setView(viewOpt);\n }\n }\n }\n\n /**\n * Sets a map view that contains the given geographical bounds.\n * @param bounds - Array of coordinates, measured in degrees, in [west, south, east, north] order.\n *\n * @example\n * ```javascript\n * // Whole world\n * webMap.fitBounds([0, -90, 180, 90]);\n * ```\n */\n fitBounds(bounds: LngLatBoundsArray, options?: FitOptions): this {\n checkExtent(bounds);\n if (bounds.every((x) => defined(x))) {\n if (bounds[1] < -85.06) {\n bounds[1] = -85.06;\n }\n if (bounds[3] > 85.06) {\n bounds[3] = 85.06;\n }\n this.mapAdapter.fitBounds(bounds, options);\n }\n return this;\n }\n\n /**\n * Checking the status of any asynchronous operation\n * @param event - The name of the event whose status is checked\n *\n * @example\n * ```javascript\n * var webMap = new WebMap(options);\n * webMap.getEventStatus('create'); // false\n * webMap.emitter.on('create', function () {\n * webMap.getEventStatus('create'); // true\n * })\n * ```\n */\n getEventStatus(event: keyof E): boolean {\n // ugly hack to disable type checking error\n const _eventName = event as keyof WebMapEvents;\n const status = this._eventsStatus[_eventName];\n return status ?? false;\n }\n\n /**\n * helper method to wait for events to load. By default, card creation is tracked\n * @param event - The name of the event whose status is checked\n *\n * @example\n * ```javascript\n * var webMap = new WebMap(options);\n * webMap.onLoad().then(function () {\n * webMap.getEventStatus('create'); // true\n * })\n *\n * // use async/await syntax\n * async function () {\n * await webMap.onLoad();\n * doSomething();\n * }\n *\n * ```\n */\n onLoad(event: keyof WebMapEvents = 'create'): Promise<this> {\n return new Promise((res) => {\n if (this.getEventStatus(event)) {\n res(this);\n } else {\n this.emitter.once(event, () => {\n res(this);\n });\n }\n });\n }\n\n onMapLoad(cb?: (mapAdapter: MapAdapter) => void): Promise<MapAdapter> {\n return new Promise((res) => {\n const _resolve = () => {\n const mapAdapter = this.mapAdapter;\n if (cb) {\n cb(mapAdapter);\n }\n if (mapAdapter) {\n res(mapAdapter);\n }\n };\n const isLoaded = this.mapAdapter.isLoaded ?? true;\n if (this.mapAdapter.map && isLoaded) {\n _resolve();\n } else {\n this.mapAdapter.emitter.once('create', () => {\n _resolve();\n });\n }\n });\n }\n\n getLayerAdapters(): { [name: string]: Type<LayerAdapter> } {\n return this.mapAdapter.layerAdapters;\n }\n\n getLayerAdapter(name: string): Type<LayerAdapter> {\n const adapter = this.mapAdapter.layerAdapters[name];\n return adapter;\n }\n\n locate(opt: LocateOptions, events?: LocationEvents): Locate {\n if (this.mapAdapter && this.mapAdapter.locate) {\n return this.mapAdapter.locate(opt, events);\n }\n const stop = () => ({});\n return { stop };\n }\n\n stopGetCoordFromMapClick(): void {\n if (this._coordFromMapClickAbort) {\n this._coordFromMapClickAbort();\n this._coordFromMapClickAbort = undefined;\n }\n }\n\n getCoordFromMapClick(): Promise<LngLatArray> {\n if (!this._coordFromMapClickAbort) {\n return new Promise((resolve, reject) => {\n const cursor: Cursor = this.getCursor() || 'grab';\n this._removeEventListeners({ include: ['click'] });\n this.setCursor('crosshair');\n const onCancel_ = (): void => {\n this.setCursor(cursor);\n this._addEventsListeners({ include: ['click'] });\n this.mapAdapter.emitter.off('click', onMapClick);\n this._coordFromMapClickAbort = undefined;\n };\n const onMapClick = (e: MapClickEvent) => {\n onCancel_();\n deprecatedMapClick(e);\n resolve(e.lngLat);\n };\n this.mapAdapter.emitter.once('click', onMapClick);\n this._coordFromMapClickAbort = onCancel_;\n });\n } else {\n return this.getCoordFromMapClick();\n }\n }\n\n protected _emitStatusEvent(\n eventName: keyof E,\n data?: EmitStatusEventData,\n ): void {\n // ugly hack to disable type checking error\n const _eventName = eventName as keyof E;\n this._eventsStatus[_eventName] = true;\n this.emitter.emit(_eventName as keyof WebMapEvents, data);\n }\n\n protected async _addLayerProviders(): Promise<void> {\n //\n }\n\n protected async _onLoadSync(): Promise<void> {\n //\n }\n\n private async _setupMap(): Promise<this> {\n if (!this.mapAdapter) {\n throw new Error('WebMap `mapAdapter` option is not set');\n }\n await this.mapAdapter.create(this.options);\n this._zoomToInitialExtent();\n\n await this._addLayerProviders();\n await this._onLoadSync();\n\n this._emitStatusEvent('build-map', this.mapAdapter);\n return this;\n }\n\n private _setTileJsonOptions(tileJson: TileJson): void {\n if (tileJson.center) {\n this.options.center = tileJson.center;\n }\n if (tileJson.bounds) {\n this.options.bounds = tileJson.bounds;\n }\n if (defined(tileJson.maxzoom)) {\n // this.options.maxZoom = tileJson.maxzoom;\n this.options.zoom = tileJson.maxzoom;\n }\n if (defined(tileJson.minzoom)) {\n // this.options.minZoom = tileJson.minzoom;\n this.options.zoom = tileJson.minzoom;\n }\n if (defined(tileJson.maxzoom) && defined(tileJson.minzoom)) {\n this.options.zoom = (tileJson.maxzoom + tileJson.minzoom) / 2;\n }\n }\n\n private _zoomToInitialExtent(): void {\n const { center, zoom, bounds } = this.options;\n if (this._extent) {\n this.fitBounds(this._extent);\n } else if (center && zoom) {\n this.setView(center, zoom);\n } else if (bounds) {\n this.fitBounds(bounds);\n if (zoom !== undefined) {\n this.setZoom(zoom);\n }\n }\n }\n\n private _setInitMapState(states: Type<StateItem>[]): void {\n for (const X of states) {\n const state = new X(this);\n this._mapState.push(state);\n for (const r of this.runtimeParams) {\n const str = r.get(state.name);\n if (str !== undefined) {\n const val = state.parse(str);\n // state.setValue(val);\n this._initMapState[state.name] = val;\n Object.defineProperty(this.options, state.name, {\n value: val,\n configurable: true,\n enumerable: true,\n });\n break;\n }\n }\n }\n }\n\n private _addEventsListeners(opt?: AddEventsListenersOptions): void {\n let events: (keyof MainMapEvents)[] = [\n 'preclick',\n 'click',\n 'zoomstart',\n 'zoom',\n 'zoomend',\n 'movestart',\n 'move',\n 'moveend',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n ];\n\n if (opt && opt.include) {\n events = events.filter((x) => opt.include.includes(x));\n }\n events.forEach((x) => {\n this._mapEvents[x] = (data): void => {\n if (this.runtimeParams.length) {\n const mapStatusEvent = this._mapState.find((y) => y.event === x);\n if (mapStatusEvent) {\n const value = mapStatusEvent.toString(mapStatusEvent.getValue());\n this.runtimeParams.forEach((r) => {\n r.set(mapStatusEvent.name, value);\n });\n }\n }\n if (this._eventsStatus) {\n this.emitter.emit(x, data);\n }\n };\n const mapEvent = this._mapEvents[x];\n if (mapEvent) {\n this.mapAdapter.emitter.on(x, mapEvent);\n }\n });\n }\n\n private _removeEventListeners(opt?: AddEventsListenersOptions): void {\n let events = Object.entries(this._mapEvents) as [\n keyof MainMapEvents,\n ((...args: any[]) => void) | undefined,\n ][];\n if (opt && opt.include) {\n events = events.filter((x) => opt.include.includes(x[0]));\n }\n events.forEach(([x, event]) => {\n if (event) {\n this.mapAdapter.emitter.removeListener(x as keyof MainMapEvents, event);\n }\n });\n }\n}\n","import type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\n GeometryCollection,\n} from 'geojson';\n\n/**\n * @internal\n */\nexport function findMostFrequentGeomType(\n arr: GeoJsonGeometryTypes[],\n): GeoJsonGeometryTypes {\n const counts: { [x: string]: number } = {};\n for (let fry = 0; fry < arr.length; fry++) {\n counts[arr[fry]] = 1 + (counts[arr[fry]] || 0);\n }\n let maxName;\n for (const c in counts) {\n const count = maxName !== undefined ? counts[maxName] : 0;\n if (counts[c] > (count || 0)) {\n maxName = c;\n }\n }\n return maxName as GeoJsonGeometryTypes;\n}\n\n/**\n * @internal\n */\nexport function detectGeometryType(\n geojson: GeoJsonObject,\n): GeoJsonGeometryTypes {\n let geometry: GeoJsonGeometryTypes;\n if (geojson.type === 'FeatureCollection') {\n const featuresTypes = (geojson as FeatureCollection).features.map(\n (f) => f.geometry.type,\n );\n geometry = findMostFrequentGeomType(featuresTypes);\n } else if (geojson.type === 'GeometryCollection') {\n const geometryTypes = (geojson as GeometryCollection).geometries.map(\n (g) => g.type,\n );\n geometry = findMostFrequentGeomType(geometryTypes);\n } else if (geojson.type === 'Feature') {\n geometry = (geojson as Feature).geometry.type;\n } else {\n geometry = geojson.type;\n }\n return geometry;\n}\n","import { isPaint } from '@nextgis/paint';\n\nimport { detectGeometryType } from './geometryTypes';\n\nimport type {\n GeoJsonAdapterOptions,\n VectorAdapterLayerType,\n} from '../interfaces/LayerAdapter';\n\n/**\n * @internal\n */\nexport const paintTypeAlias: Record<VectorAdapterLayerType, any> = {\n polygon: 'path',\n line: 'path',\n point: 'circle',\n};\n\nexport const typeAlias: { [x: string]: VectorAdapterLayerType } = {\n Point: 'point',\n LineString: 'line',\n MultiPoint: 'point',\n Polygon: 'polygon',\n MultiLineString: 'line',\n MultiPolygon: 'polygon',\n};\n\n/**\n * @internal\n */\nexport function updateGeoJsonAdapterOptions<\n O extends GeoJsonAdapterOptions = GeoJsonAdapterOptions,\n>(opt: O): O {\n if (opt.data) {\n const geomType = typeAlias[detectGeometryType(opt.data)];\n const p = opt.paint;\n if (p && isPaint(p)) {\n // define parameter if not specified\n p.type = p.type\n ? p.type\n : geomType === 'polygon' || geomType === 'line'\n ? 'path'\n : 'html' in p || 'className' in p\n ? 'icon'\n : paintTypeAlias[geomType];\n }\n opt.type = opt.type || geomType;\n }\n return opt;\n}\n","import { preparePaint } from '@nextgis/paint';\nimport { propertiesFilter } from '@nextgis/properties-filter';\nimport { defined } from '@nextgis/utils';\n\nimport { WebMapMain } from './WebMapMain';\nimport { updateGeoJsonAdapterOptions } from './utils/updateGeoJsonAdapterOptions';\n\nimport type { LayerDef } from './interfaces/BaseTypes';\nimport type { WebMapEvents } from './interfaces/Events';\nimport type {\n AdapterConstructor,\n AdapterOptions,\n DataLayerFilter,\n FeatureLayerAdapter,\n FilterOptions,\n GeoJsonAdapterOptions,\n GetLegendOptions,\n ImageAdapterOptions,\n LayerAdapter,\n LayerAdapterDefinition,\n LayerAdapters,\n LayerAdaptersOptions,\n LayerDefinition,\n MainLayerAdapter,\n OnLayerMouseOptions,\n OnLayerSelectOptions,\n TileAdapterOptions,\n VectorLayerAdapter,\n} from './interfaces/LayerAdapter';\nimport type { LayerLegend } from './interfaces/LegendItem';\nimport type { FitOptions } from './interfaces/MapAdapter';\nimport type {\n GetAttributionsOptions,\n MapOptions,\n ToggleLayerOptions,\n} from './interfaces/MapOptions';\nimport type { Paint } from '@nextgis/paint';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { FeatureProperties, TileJson, Type } from '@nextgis/utils';\nimport type { Feature, GeoJsonObject, Geometry } from 'geojson';\n\ntype AddedLayers<M = any, L = any> = { [id: string]: LayerAdapter<M, L> };\n\nexport class WebMapLayers<\n M = any,\n L = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n> extends WebMapMain<M, E, O> {\n private _layersIdCounter = 1;\n private _layersOrderCounter = 1;\n private readonly _baselayers: string[] = [];\n private readonly _layers: AddedLayers<M, L> = {};\n private readonly _selectedLayers: string[] = [];\n\n constructor(mapOptions: O) {\n super(mapOptions);\n const tileJson = this.options.tileJson;\n if (tileJson) {\n this.emitter.once('build-map', () => this.addTileJsonLayer(tileJson));\n }\n }\n\n /**\n * Try to fit map view by given layer bounds.\n * But not all layers have borders\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n const layer = this.getLayer(layerDef);\n // TODO: remove backward compatibility for `getExtent`\n const getBounds = layer && (layer.getBounds || layer.getExtent);\n if (getBounds) {\n const extent = await getBounds.call(layer);\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n }\n\n /**\n * Check if given layer is baselayer\n */\n isBaseLayer(layerDef: LayerDef): boolean | undefined {\n const layer = this.getLayer(layerDef);\n if (layer && layer.id) {\n return this._baselayers.indexOf(layer.id) !== -1;\n }\n return undefined;\n }\n\n getBaseLayers(): LayerAdapter[] {\n const baselayers: LayerAdapter[] = [];\n this._baselayers.forEach((x) => {\n const baselayer = this._layers[x];\n if (baselayer) {\n baselayers.push(baselayer);\n }\n });\n return baselayers;\n }\n\n getBaseLayersIds(): string[] {\n return this._baselayers;\n }\n\n /**\n * Helper method to return added layer object by any definition type.\n */\n getLayer<LA extends LayerAdapter = LayerAdapter>(\n layerDef: LayerDef,\n ): LA | undefined {\n if (typeof layerDef === 'string') {\n return this._layers[layerDef] as LA;\n }\n return layerDef as LA;\n }\n\n /**\n * Helper method to return added layer identificator by any definition type.\n */\n getLayerId(layerDef: LayerDef): string | undefined {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.id) {\n return layer?.id;\n }\n if (layer && layer.options) {\n return layer.options.id;\n }\n }\n throw new Error('No id for layer');\n }\n\n /**\n * Return array of all added layer identifications.\n */\n getLayers(): string[] {\n return Object.keys(this._layers);\n }\n\n // TODO: rename to getLayers, getLayers rename to getLayersIds\n allLayers(): AddedLayers<M, L> {\n return this._layers;\n }\n\n orderedLayers<LA extends LayerAdapter<M, L> = LayerAdapter<M, L>>(): LA[] {\n return Object.values(this._layers).sort((a, b) =>\n a.order && b.order ? a.order - b.order : 0,\n ) as LA[];\n }\n\n findLayer<T extends LayerAdapter = LayerAdapter>(\n filter: (adapter: T) => boolean,\n ): T | undefined {\n for (const l in this._layers) {\n const layerAdapter = this._layers[l] as T;\n const isFit = filter(layerAdapter);\n if (isFit) {\n return layerAdapter;\n }\n }\n }\n\n /**\n * Check if the given layer on the map\n */\n isLayerVisible(layerDef: LayerDef): boolean {\n const layer = this.getLayer(layerDef);\n return layer && layer.options.visibility !== undefined\n ? layer.options.visibility\n : false;\n }\n\n /**\n * Shortcut method to create base layer\n */\n async addBaseLayer<\n K extends keyof LayerAdapters,\n O extends AdapterOptions = AdapterOptions,\n >(\n adapter: K | Type<LayerAdapters[K]>,\n options?: O | LayerAdaptersOptions[K],\n ): Promise<LayerAdapter> {\n const layer = await this.addLayer(\n adapter,\n {\n ...options,\n baselayer: true,\n },\n undefined,\n );\n\n return layer;\n }\n\n /**\n * Registration of map layer.\n *\n * @param adapter - The name of layer adapter from [MapAdapter.layerAdapters](webmap#MapAdapter.layerAdapters).\n * May be custom object or class implemented by [MainLayerAdapter](webmap#MainLayerAdapter).\n * @param options - Specific options for given adapter\n *\n * @example\n * ```javascript\n * webMap.addLayer('TILE', options).then((layer) => webMap.showLayer(layer));\n *\n * webMap.addLayer(CustomLayerAdapter, options);\n * ```\n */\n async addLayer<\n K extends keyof LayerAdapters,\n LO extends AdapterOptions = AdapterOptions,\n >(\n adapter: LayerAdapterDefinition<K>,\n options: LO | LayerAdaptersOptions[K] = {},\n order?: number,\n ): Promise<LayerAdapter> {\n const id = this._layersIdCounter++;\n const _order = defined(order)\n ? order\n : options.order !== undefined\n ? options.order\n : this.reserveOrder();\n let adapterEngine: Type<LayerAdapter<M, L, LO>> | undefined;\n if (typeof adapter === 'string') {\n adapterEngine = this.getLayerAdapter(adapter) as Type<\n LayerAdapter<M, L, LO>\n >;\n } else if (typeof adapter === 'function') {\n adapterEngine = adapter as Type<LayerAdapter<M, L, LO>>;\n } else if (\n 'then' in (adapter as Promise<Type<LayerAdapters[K]> | undefined>)\n ) {\n adapterEngine = (await adapter) as Type<LayerAdapter<M, L, LO>>;\n }\n\n const geoJsonOptions = options as GeoJsonAdapterOptions;\n\n this._updateGeoJsonOptions(geoJsonOptions);\n\n options = {\n id: String(id),\n order: _order,\n ...options,\n };\n\n // options.visibility is a layer global state\n const visibility = options.visibility ?? true;\n options.visibility = false;\n\n if (options.baselayer) {\n options.order = 0;\n }\n if (this.options.onBeforeAddLayer) {\n const modified = this.options.onBeforeAddLayer({\n options,\n adapter: adapterEngine,\n });\n if (modified) {\n if (modified.options) {\n options = modified.options;\n }\n if (modified.adapter) {\n adapterEngine = modified.adapter as Type<LayerAdapter<M, L, LO>>;\n }\n }\n }\n if (adapterEngine !== undefined) {\n const _adapter = new adapterEngine(this.mapAdapter.map, options);\n _adapter.options = { ...options, ..._adapter.options };\n\n if (_adapter.options.baselayer) {\n options.baselayer = true;\n options.order = 0;\n _adapter.options.order = 0;\n }\n\n let layerId: string | undefined;\n if (_adapter.options.id) {\n layerId = String(_adapter.options.id);\n\n this._layers[layerId] = _adapter;\n }\n this._emitLayerEvent('layer:preadd', layerId || '', _adapter);\n await this.onMapLoad();\n _adapter.map = this.mapAdapter.map;\n const layer = await _adapter.addLayer(_adapter.options);\n // checking that the original layer was inserted into the adapter anyway\n _adapter.layer = layer;\n // think about how to move `id` to the adapter's constructor,\n // but that it is not required in the options\n _adapter.id = _adapter.options.id || String(id);\n _adapter.options.id = _adapter.id;\n if (options.baselayer) {\n _adapter.options.order = 0;\n }\n _adapter.order = _adapter.options.order ?? _order;\n if (layerId) {\n delete this._layers[layerId];\n }\n layerId = String(_adapter.id);\n if (this._layers[layerId]) {\n throw Error(`layer with id '${layerId}' already exist`);\n }\n if (layerId) {\n this._layers[layerId] = _adapter;\n\n if (geoJsonOptions.filter) {\n this.filterLayer(_adapter, geoJsonOptions.filter);\n }\n if (options.baselayer) {\n this._baselayers.push(layerId);\n }\n\n if (visibility) {\n await this.showLayer(layerId);\n }\n }\n const opacity = options.opacity;\n if (opacity !== undefined && opacity <= 1) {\n this.setLayerOpacity(_adapter, opacity);\n }\n // TODO: remove backward compatibility for `getExtent`\n const getBounds = layer && (_adapter.getBounds || _adapter.getExtent);\n if (options.fit && getBounds) {\n const extent = await getBounds.call(_adapter);\n if (extent) {\n await this.fitBounds(extent);\n }\n }\n if (options.onAdded) {\n options.onAdded(_adapter);\n }\n this._emitLayerEvent('layer:add', layerId, _adapter);\n return _adapter;\n }\n return Promise.reject('No adapter');\n }\n\n async addLayerFromAsyncAdapter<\n K extends keyof LayerAdapters,\n O extends AdapterOptions = AdapterOptions,\n >(\n adapter: AdapterConstructor,\n options: O | LayerAdaptersOptions[K],\n order?: number,\n ): Promise<LayerAdapter> {\n const _order =\n order || options.order !== undefined\n ? options.order\n : 0 || this.reserveOrder();\n const adapterConstructor = adapter as AdapterConstructor;\n const adapterConstructorPromise = adapterConstructor();\n const adapterEngine = await adapterConstructorPromise;\n if (adapterEngine) {\n return this.addLayer(adapterEngine, options, _order);\n }\n return Promise.reject('No adapter');\n }\n\n /**\n * Remove all layer from map and memory.\n */\n removeLayers(\n allowCb?: (layer: string, adapter: LayerAdapter) => boolean,\n ): void {\n for (const l in this._layers) {\n let allow = true;\n if (allowCb) {\n allow = allowCb(l, this._layers[l]);\n }\n if (allow) {\n this.removeLayer(l);\n delete this._layers[l];\n }\n }\n }\n\n async getLegend(options?: GetLegendOptions): Promise<LayerLegend[]> {\n const promises: Promise<LayerLegend[]>[] = [];\n for (const l of this.orderedLayers()) {\n if (l.getLegend) {\n promises.push(l.getLegend(options));\n }\n }\n return (await Promise.all(promises)).flat();\n }\n\n reserveOrder(): number {\n return this._layersOrderCounter++;\n }\n\n /**\n * Remove all layers but not remove basemap.\n */\n removeOverlays(): void {\n this.removeLayers((layerId, layer) => {\n if (layer && layer.options && layer.options.baselayer) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Remove specific layer from map and memory by its definition.\n */\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n const layerId = layer && this.getLayerId(layer);\n if (layer && layerId) {\n this.emitter.emit('layer:preremove', layer);\n if (layer.beforeRemove) {\n layer.beforeRemove();\n }\n if (layer.removeLayer) {\n layer.removeLayer();\n } else {\n this.mapAdapter.removeLayer(layer.layer);\n }\n if (layer.options && layer.options.baselayer) {\n const index = this._baselayers.indexOf(layerId);\n if (index) {\n this._baselayers.splice(index, 1);\n }\n }\n delete this._layers[layerId];\n this.emitter.emit('layer:remove', layer);\n }\n }\n\n /**\n * Create layer from GeoJson data. Set style and behavior for selection.\n *\n * @example\n * ```javascript\n * // Add simple layer\n * webMap.addGeoJsonLayer({ data: geojson, paint: { color: 'red' } });\n *\n * // Add styled by feature property layer with selection behavior\n * webMap.addGeoJsonLayer({\n * data: geojson,\n * paint: function (feature) {\n * return { color: feature.properties.color, opacity: 0.5 }\n * },\n * selectedPaint: function (feature) {\n * return { color: feature.properties.selcolor, opacity: 1 }\n * },\n * selectable: true,\n * multiselect: true\n * });\n *\n * // Add marker layer styled with use [Icons](icons)\n * webMap.addGeoJsonLayer({ data: geojson, paint: webMap.getIcon({ color: 'orange' })});\n *\n * // work with added layer\n * const layer = webMap.addGeoJsonLayer({ data: geojson, id: 'my_layer_name'});\n * // access layer by id\n * webMap.showLayer('my_layer_name');\n * // or access layer by instance\n * webMap.showLayer(layer);\n * ```\n */\n addGeoJsonLayer<\n K extends keyof LayerAdapters = keyof LayerAdapters,\n O extends GeoJsonAdapterOptions<any, any> = GeoJsonAdapterOptions,\n >(\n opt: O = {} as O,\n adapter?: LayerAdapterDefinition<K>,\n ): Promise<VectorLayerAdapter<any, any, any>> {\n opt = opt || ({} as O);\n opt.multiselect = opt.multiselect !== undefined ? opt.multiselect : false;\n opt.unselectOnSecondClick =\n opt.unselectOnSecondClick !== undefined\n ? opt.unselectOnSecondClick\n : true;\n if (!adapter) {\n opt = updateGeoJsonAdapterOptions(opt);\n }\n opt.paint = opt.paint || {};\n return this.addLayer(adapter || 'GEOJSON', opt);\n }\n\n /** Shortcut for {@link WebMapLayers.addGeoJsonLayer} to create GeoJson adapter with generic types for working in typescript */\n addFeatureLayer<\n P extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n O extends GeoJsonAdapterOptions<Feature<G, P>> = GeoJsonAdapterOptions<\n Feature<G, P>\n >,\n >(options = {} as O): Promise<FeatureLayerAdapter<P, G>> {\n return this.addGeoJsonLayer<'GEOJSON', O>(options) as Promise<\n FeatureLayerAdapter<P, G>\n >;\n }\n\n /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */\n addTileLayer(\n url: string,\n options: Omit<TileAdapterOptions, 'url'> = {},\n ): Promise<MainLayerAdapter<M, L, TileAdapterOptions>> {\n return this.addLayer('TILE', { ...options, url }) as Promise<\n MainLayerAdapter<M, L, TileAdapterOptions>\n >;\n }\n\n /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */\n addImageLayer(\n url: string,\n options: Omit<ImageAdapterOptions, 'url'>,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>>;\n addImageLayer(\n options: ImageAdapterOptions,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>>;\n addImageLayer(\n urlOrOptions: string | ImageAdapterOptions,\n options?: Omit<ImageAdapterOptions, 'url'>,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>> {\n let url;\n if (typeof urlOrOptions === 'string') {\n url = urlOrOptions;\n } else {\n url = urlOrOptions.url;\n options = urlOrOptions;\n }\n\n return this.addLayer('IMAGE', { ...options, url }) as Promise<\n MainLayerAdapter<M, L, ImageAdapterOptions>\n >;\n }\n\n /**\n * Show added layer on the map by it definition.\n */\n showLayer(\n layerDef: LayerDef,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n return this.toggleLayer(layerDef, true, options);\n }\n\n /**\n * Hide added layer on the map by it definition.\n */\n hideLayer(\n layerDef: LayerDef,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n return this.toggleLayer(layerDef, false, options);\n }\n\n /**\n * Change added layer visibility on the map by given status or inverse current status.\n *\n * @example\n * ```javascript\n * webMap.addLayer('TILE', {id: 'my_layer', url: ''}).then((layer) => {\n * webMap.toggleLayer(layer, true);\n * webMap.toggleLayer('my_layer', false);\n * webMap.toggleLayer('my_layer');\n * webMap.isLayerVisible(layer); // true\n * });\n * ```\n */\n toggleLayer(\n layerDef: LayerDef,\n status?: boolean,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n const layer = this.getLayer(layerDef);\n\n const onMap = layer && layer.options.visibility;\n const toStatus = status !== undefined ? status : !onMap;\n const silent = options.silent !== undefined ? options.silent : false;\n const action = async (l: LayerAdapter) => {\n const id = String(l.id);\n const preEventName = toStatus ? 'layer:preshow' : 'layer:prehide';\n const eventName = toStatus ? 'layer:show' : 'layer:hide';\n if (!silent) {\n this._emitLayerEvent(preEventName, id, l);\n this._emitLayerEvent('layer:pretoggle', id, l);\n }\n if (toStatus && this.mapAdapter) {\n const order = l.options.baselayer ? 0 : l.options.order;\n\n // do not show baselayer if another on the map\n if (l.options.baselayer && this._baselayers.length) {\n const anotherVisibleBaselayers = this._baselayers.filter((x) => {\n return x !== l.id && this.isLayerVisible(x);\n });\n for (const bl of anotherVisibleBaselayers) {\n await this.hideLayer(bl);\n }\n }\n if (l.showLayer) {\n await l.showLayer.call(l, l.layer);\n } else if (l.layer !== undefined) {\n await this.mapAdapter.showLayer(l.layer);\n }\n if (order !== undefined) {\n this.mapAdapter.setLayerOrder(l.layer, order, this._layers);\n }\n } else {\n if (l.hideLayer) {\n await l.hideLayer.call(l, l.layer);\n } else if (l.layer !== undefined) {\n await this.mapAdapter.hideLayer(l.layer);\n }\n }\n l.options.visibility = toStatus;\n if (!silent) {\n this._emitLayerEvent(eventName, id, l);\n this._emitLayerEvent('layer:toggle', id, l);\n }\n };\n if (layer) {\n return this.onMapLoad().then(() => action(layer));\n }\n return Promise.resolve();\n }\n\n updateLayer(layerDef: LayerDef): Promise<void> {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.updateLayer) {\n return Promise.resolve(layer.updateLayer());\n } else if (this.isLayerVisible(layer)) {\n return this.hideLayer(layer, { silent: true }).then(() => {\n return this.showLayer(layer, { silent: true });\n });\n }\n }\n return Promise.resolve();\n }\n\n /**\n * Set transparency for a given layer by number from 0 to 1\n */\n setLayerOpacity(layerDef: LayerDef, value: number): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.setOpacity) {\n layer.setOpacity(value);\n } else if (this.mapAdapter.setLayerOpacity) {\n this.mapAdapter.setLayerOpacity(layer.layer, value);\n }\n }\n }\n\n isLayerLabelVisible(layerDef: LayerDef): boolean | undefined {\n const layer = this.getLayer(layerDef) as VectorLayerAdapter;\n if (layer.isLabelVisible) {\n return layer.isLabelVisible();\n }\n return layer.options.labelVisibility ?? true;\n }\n\n showLayerLabel(layerDef: LayerDef): void {\n this.toggleLayerLabel(layerDef, true);\n }\n\n hideLayerLabel(layerDef: LayerDef): void {\n this.toggleLayerLabel(layerDef, false);\n }\n\n toggleLayerLabel(layerDef: LayerDef, status?: boolean): boolean {\n const layer = this.getLayer(layerDef) as VectorLayerAdapter;\n status = status ?? !this.isLayerLabelVisible(layerDef);\n if (layer) {\n if (status) {\n if (layer.showLabel) {\n layer.options.labelVisibility = true;\n layer.showLabel();\n }\n } else {\n if (layer.hideLabel) {\n layer.options.labelVisibility = false;\n layer.hideLabel();\n }\n }\n if (layer.id) {\n this._emitLayerEvent('layer:label:toggle', layer.id, layer);\n }\n }\n return status;\n }\n\n /**\n * Mark the layer as selected.\n * If the adapter is a vector layer and supports data selection,\n * you can pass a callback function to specify which data will be selected.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.selectLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n\n */\n selectLayer(layerDef: LayerDef, findFeatureFun?: DataLayerFilter): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer as VectorLayerAdapter;\n if (adapter && adapter.select) {\n adapter.select(findFeatureFun);\n }\n const layerId = this.getLayerId(layer);\n if (layerId) {\n this._selectedLayers.push(layerId);\n }\n }\n }\n\n /**\n * Unselect the given layer.\n * If the adapter is a vector layer and supports data selection,\n * you can pass a callback function to specify which data will be unselected.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.unSelectLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n *\n */\n unSelectLayer(layerDef: LayerDef, findFeatureFun?: DataLayerFilter): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer && (layer as VectorLayerAdapter);\n if (adapter.unselect) {\n adapter.unselect(findFeatureFun);\n }\n const layerId = this.getLayerId(layer);\n if (layerId) {\n const index = this._selectedLayers.indexOf(layerId);\n if (index !== -1) {\n this._selectedLayers.splice(index, 1);\n }\n }\n }\n }\n /** Remove selection from any selected selectable layer */\n unSelectLayers(): void {\n const layers = Object.values(this.allLayers());\n let l: VectorLayerAdapter;\n for (l of layers) {\n if (l.unselect) {\n l.unselect();\n }\n }\n }\n\n /**\n * Hide features from a vector layer using a callback function.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.filterLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n *\n */\n filterLayer(\n layerDef: LayerDef,\n filter: DataLayerFilter<Feature, L>,\n ): LayerDefinition<Feature, L>[] {\n const layer = this.getLayer(layerDef);\n const adapter = layer as VectorLayerAdapter;\n if (adapter.filter) {\n return adapter.filter(filter);\n }\n return [];\n }\n\n propertiesFilter(\n layerDef: LayerDef,\n filters: PropertiesFilter,\n options?: FilterOptions,\n ): Promise<void> {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer as VectorLayerAdapter;\n if (adapter.propertiesFilter) {\n return adapter.propertiesFilter(filters, options);\n } else if (adapter.filter) {\n this.filterLayer(adapter, (e) => {\n if (e.feature && e.feature.properties) {\n return propertiesFilter(e.feature.properties, filters);\n }\n return true;\n });\n }\n }\n return Promise.resolve();\n }\n\n removeLayerFilter(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n const adapter = layer as VectorLayerAdapter;\n if (adapter.removeFilter) {\n adapter.removeFilter();\n } else if (adapter.filter) {\n adapter.filter(() => {\n return true;\n });\n }\n }\n\n /**\n * Sets the GeoJSON data for given vector layer.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON').then((layer) => {\n * webMap.setLayerData(layer, geojson);\n * });\n * ```\n */\n setLayerData(layerDef: LayerDef, data: GeoJsonObject): void | Promise<void> {\n const vectorAdapter = this.getLayer(layerDef);\n const adapter = vectorAdapter as VectorLayerAdapter;\n if (adapter) {\n if (adapter.setData) {\n return adapter.setData(data);\n } else if (adapter.clearLayer && adapter.addData) {\n adapter.clearLayer();\n return adapter.addData(data);\n }\n }\n return Promise.resolve();\n }\n\n /**\n * Push new the GeoJSON features into given vector layer.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson_features_5}).then((layer) => {\n * console.log(layer.getLayers().length) // > 5;\n * webMap.addLayerData(layer, geojson_features_3);\n * console.log(layer.getLayers().length) // > 8;\n * });\n * ```\n */\n addLayerData(layerDef: LayerDef, data: GeoJsonObject): void {\n const layerMem = this.getLayer(layerDef);\n const adapter = layerMem as VectorLayerAdapter;\n if (adapter.addData) {\n adapter.addData(data);\n }\n }\n\n /**\n * Remove from vector layer all features.\n * it is possible to remove only some objects if you specify a callback function.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.clearLayerData(layer, (feture) => feture.id === 42);\n * webMap.clearLayerData(layer);\n * });\n * ```\n */\n clearLayerData(layerDef: LayerDef, cb?: (feature: Feature) => boolean): void {\n const layerMem = this.getLayer(layerDef);\n const adapter = layerMem as VectorLayerAdapter;\n if (adapter && adapter.clearLayer) {\n adapter.clearLayer(cb);\n }\n }\n\n setLayerPaint(layerDef: LayerDef, paint?: Paint | null): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.setPaint) {\n layer.setPaint(paint);\n }\n }\n setLayerSelectedPaint(layerDef: LayerDef, paint?: Paint | null): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.setSelectedPaint) {\n layer.setSelectedPaint(paint);\n }\n }\n updateLayerPaint(layerDef: LayerDef, paint: Partial<Paint>): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.updatePaint) {\n layer.updatePaint(paint);\n }\n }\n updateLayerSelectedPaint(layerDef: LayerDef, paint: Partial<Paint>): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.updateSelectedPaint) {\n layer.updateSelectedPaint(paint);\n }\n }\n\n getAttributions(options: GetAttributionsOptions): string[] {\n const attributions: string[] = [];\n for (const l in this._layers) {\n const layerCache = this._layers[l];\n const onlyVisible =\n options.onlyVisible !== undefined ? options.onlyVisible : true;\n let useLayerAttr = onlyVisible ? layerCache.options.visibility : true;\n if (useLayerAttr && options.onlyBaselayer) {\n useLayerAttr = this._baselayers.includes(l);\n }\n if (useLayerAttr) {\n const attr = layerCache.options && layerCache.options.attribution;\n if (attr) {\n attributions.push(attr);\n }\n }\n }\n\n return attributions;\n }\n\n getActiveBaseLayer(): MainLayerAdapter<M, any, AdapterOptions> | undefined {\n const visibleLayerBaseLayer = this.getBaseLayers().find((x) => {\n return this.isLayerVisible(x);\n });\n if (visibleLayerBaseLayer) {\n return this.getLayer(visibleLayerBaseLayer);\n }\n }\n\n addTileJsonLayer(\n tileJson: TileJson,\n ): Promise<MainLayerAdapter<M, any, TileAdapterOptions>> {\n // if (this.mapAdapter.createTileJsonlayer) {\n // } else {\n\n const url = tileJson.tiles[0];\n return this.addLayer('TILE', {\n url,\n maxZoom: tileJson.maxzoom,\n minZoom: tileJson.minzoom,\n subdomains: tileJson.scheme,\n attribution: tileJson.attribution,\n }) as Promise<MainLayerAdapter<M, any, TileAdapterOptions>>;\n }\n\n /** @internal */\n _emitLayerEvent(name: keyof E, id: string, options?: unknown) {\n const name_ = String(name);\n if (defined(id) && name_.startsWith('layer:')) {\n const specificLayerName = name_.replace('layer:', 'layer-' + id + ':');\n // @ts-ignore can't paste template literal key for interface\n this.emitter.emit(specificLayerName, options);\n }\n // @ts-ignore\n this.emitter.emit(name, options);\n }\n\n private async _onLayerClick(options: OnLayerMouseOptions) {\n const id = options.layer.id;\n this._emitLayerEvent('layer:click', id || '', options);\n return Promise.resolve(options);\n }\n private async _onLayerDoubleClick(options: OnLayerMouseOptions) {\n const id = options.layer.id;\n this._emitLayerEvent('layer:dblclick', id || '', options);\n return Promise.resolve(options);\n }\n\n private async _onLayerSelect(options: OnLayerSelectOptions) {\n this._emitLayerEvent('layer:select', options.layer.id || '', options);\n return Promise.resolve(options);\n }\n\n private _updateGeoJsonOptions(options: GeoJsonAdapterOptions) {\n const {\n onSelect,\n onLayerSelect,\n onClick,\n onDoubleClick,\n onLayerClick,\n onMouseOut,\n onMouseOver,\n } = options;\n const onLayerClickFromOpt = onClick || onLayerClick;\n const onLayerDblClickFromOpt = onDoubleClick || onLayerClick;\n options.onClick = (e) => {\n if (onLayerClickFromOpt) {\n onLayerClickFromOpt(e);\n }\n return this._onLayerClick(e);\n };\n options.onDoubleClick = (e) => {\n if (onLayerDblClickFromOpt) {\n onLayerDblClickFromOpt(e);\n }\n return this._onLayerDoubleClick(e);\n };\n\n options.onMouseOut = (e) => {\n const id = e.layer.id;\n onMouseOut && onMouseOut(e);\n if (defined(id)) {\n this._emitLayerEvent(`layer:mouseout`, id, e);\n }\n };\n\n options.onMouseOver = (e) => {\n const id = e.layer.id;\n onMouseOver && onMouseOver(e);\n if (defined(id)) {\n this._emitLayerEvent(`layer:mouseover`, id, e);\n }\n };\n\n // TODO: remove backward compatibility for onLayerSelect\n const onLayerSelectFromOpt = onSelect || onLayerSelect;\n options.onSelect = (e) => {\n if (onLayerSelectFromOpt) {\n onLayerSelectFromOpt(e);\n }\n return this._onLayerSelect(e);\n };\n\n if (!options.nativePaint) {\n if (this.options.paint) {\n options.paint = preparePaint({\n paint: options.paint || {},\n defaultPaint: this.options.paint,\n getPaintFunctions: this.getPaintFunctions,\n });\n }\n if (options.selectedPaint && this.options.selectedPaint) {\n options.selectedPaint = preparePaint({\n paint: options.selectedPaint,\n defaultPaint: this.options.selectedPaint,\n getPaintFunctions: this.getPaintFunctions,\n });\n }\n }\n }\n}\n","import type {\n ButtonControlOptions,\n ToggleControl,\n ToggleControlOptions,\n} from '../../interfaces/MapControl';\n\n/**\n * The toggle is a button with status.\n * @internal\n */\nexport function createToggleControl<C = any>(\n createButtonControl: (options: ButtonControlOptions) => C,\n options: ToggleControlOptions,\n): C & ToggleControl {\n const link = document.createElement('div');\n\n let status = false;\n if (options.getStatus) {\n status = options.getStatus();\n } else if (options.status) {\n status = options.status;\n }\n\n const title = options.title || '';\n const html = options.html;\n\n function setTitle() {\n if (title) {\n if (typeof title === 'string') {\n link.title = title;\n } else {\n link.title = status ? title.on : title.off;\n }\n link.setAttribute('aria-label', link.title);\n }\n }\n setTitle();\n\n // DomEvent.disableClickPropagation(link);\n // DomEvent.on(link, 'click', DomEvent.stop);\n\n function _setHtml(htmlDef: string | HTMLElement) {\n if (htmlDef instanceof HTMLElement) {\n link.innerHTML = '';\n link.appendChild(htmlDef);\n } else if (typeof htmlDef === 'string') {\n link.innerHTML = htmlDef;\n }\n }\n function setHtml() {\n if (html) {\n if (typeof html === 'string' || html instanceof HTMLElement) {\n _setHtml(html);\n } else {\n _setHtml(status ? html.on : html.off);\n }\n link.setAttribute('aria-label', link.title);\n }\n }\n setHtml();\n\n function _setClass(addClass: string, impact: boolean) {\n addClass.split(' ').forEach((x) => {\n if (impact) {\n link.classList.add(x);\n } else {\n link.classList.remove(x);\n }\n });\n }\n\n function setClass() {\n if (options.addClassOn) {\n _setClass(options.addClassOn, status);\n }\n if (options.addClassOff) {\n _setClass(options.addClassOff, !status);\n }\n }\n\n if (options.addClass) {\n _setClass(options.addClass, true);\n }\n setClass();\n\n const changeStatus = (status_?: boolean) => {\n if (status_ !== undefined) {\n status = status_;\n }\n setHtml();\n setTitle();\n setClass();\n };\n\n const onClick = (status_?: boolean) => {\n status = status_ !== undefined ? status_ : !status;\n if (options.onClick) {\n const afterClick = options.onClick(status);\n Promise.resolve(afterClick)\n .then(() => changeStatus())\n .catch(() => (status = !status));\n } else {\n changeStatus();\n }\n };\n\n const buttonControl = createButtonControl({\n html: link,\n onClick,\n }) as C & ToggleControl;\n buttonControl.onClick = onClick;\n buttonControl.changeStatus = changeStatus;\n return buttonControl;\n}\n","import { WebMapLayers } from './WebMapLayers';\nimport { createToggleControl } from './components/controls/createToggleControl';\n\nimport type { WebMapMain } from './WebMapMain';\nimport type { WebMapEvents } from './interfaces/Events';\nimport type { ControlPosition } from './interfaces/MapAdapter';\nimport type {\n ButtonControlOptions,\n CreateControlOptions,\n MapControl,\n MapControls,\n ToggleControl,\n ToggleControlOptions,\n} from './interfaces/MapControl';\nimport type { MapOptions } from './interfaces/MapOptions';\n\n/**\n * Collection of methods for managing map controls\n */\nexport class WebMapControls<\n M = any,\n L = any,\n C extends object = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n >\n extends WebMapLayers<M, L, E, O>\n implements WebMapLayers, WebMapMain\n{\n static controls: {\n [name: string]: (webMap: WebMapControls, options?: any) => any;\n } = {\n CONTROL: (\n webMap: WebMapControls,\n options: {\n control: MapControl;\n options?: CreateControlOptions;\n },\n ) => {\n return webMap.createControl(options.control, options.options);\n },\n BUTTON: (webMap: WebMapControls, options: ButtonControlOptions) => {\n return webMap.createButtonControl(options);\n },\n TOGGLE: (webMap: WebMapControls, options: ToggleControlOptions) => {\n return webMap.createToggleControl(options);\n },\n };\n\n private _loadControlQueue: {\n [key in ControlPosition]: (() => Promise<any>)[];\n } = {\n 'top-right': [],\n 'bottom-right': [],\n 'top-left': [],\n 'bottom-left': [],\n };\n private _isControlLoading: { [key in ControlPosition]: boolean } = {\n 'top-right': false,\n 'bottom-right': false,\n 'top-left': false,\n 'bottom-left': false,\n };\n\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n let control: C | undefined;\n position = position ?? 'top-left';\n if (typeof controlDef === 'string') {\n control = this.getControl(controlDef, options);\n } else {\n control = controlDef as C;\n }\n if (control) {\n return new Promise<() => Promise<any>>((resolve) => {\n const promise = async () => {\n const _control = await control;\n const c = this.mapAdapter.addControl(_control, position);\n resolve(c);\n };\n this._setControlQueue(position, promise);\n });\n }\n }\n\n /**\n * Creating a universal map layout control element. Can be used with any map adapter.\n *\n * @example\n * ```javascript\n * const control = webMap.createControl({\n * onAdd() {\n * return document.createElement('div');\n * }\n * });\n * ```\n */\n async createControl(\n control: MapControl,\n options?: CreateControlOptions,\n ): Promise<C | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createControl) {\n return this.mapAdapter.createControl(control, options);\n }\n }\n\n async createButtonControl(\n options: ButtonControlOptions,\n ): Promise<C | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createButtonControl) {\n return this.mapAdapter.createButtonControl(options);\n }\n }\n\n /**\n * Create any toggler control button\n * @param options - Options for control layout customization and assigning a callback function\n *\n * @example\n * ```javascript\n * const toggleControl = ngwMap.createToggleControl({\n * getStatus: () => webMap.isLayerVisible('any-layer-id'),\n * onClick: (status) => ngwMap.toggleLayer('webmap', status),\n * html: {\n * on: 'ON',\n * off: 'OFF'\n * },\n * title: 'Toggle layer visibility'\n * });\n * webMap.addControl(toggleControl, 'top-right');\n * ```\n * {@link http://code.nextgis.com/demo-examples-toggle-control | Toggle button control example}\n */\n async createToggleControl(\n options: ToggleControlOptions,\n ): Promise<(C & ToggleControl) | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createToggleControl) {\n return this.mapAdapter.createToggleControl(options);\n } else {\n if (this.mapAdapter.createButtonControl) {\n return createToggleControl<C>(\n this.mapAdapter.createButtonControl,\n options,\n );\n }\n }\n }\n\n /**\n *\n * @param control - Instance of WEB-GIS framework control.\n * What is returned by the {@link createControl | create} method\n */\n removeControl(control: C): void {\n if ('remove' in control) {\n // @ts-ignore TODO: ugly code, rewrite\n control.remove();\n } else if (this.mapAdapter.removeControl) {\n Promise.resolve(control).then((c) => {\n this.mapAdapter.removeControl(c);\n });\n }\n }\n\n /**\n * Get instance of registered control\n * @param control - Any registered control string name\n * @param options - Custom control options\n */\n getControl<K extends keyof MapControls>(\n control: K,\n options?: MapControls[K],\n ): C | undefined {\n const engine = this.mapAdapter.controlAdapters[control];\n if (engine) {\n return new engine(options);\n } else {\n const createFun = WebMapControls.controls[control];\n if (createFun) {\n return createFun(this, options);\n }\n }\n }\n\n getControlContainer(): HTMLElement | undefined {\n if (this.mapAdapter.getControlContainer) {\n return this.mapAdapter.getControlContainer();\n }\n }\n\n private _setControlQueue(position: ControlPosition, cb: () => Promise<any>) {\n this._loadControlQueue[position].push(cb);\n if (!this._isControlLoading[position]) {\n this._applyControls(position);\n }\n }\n\n private async _applyControls(position: ControlPosition) {\n if (this._loadControlQueue[position].length) {\n this._isControlLoading[position] = true;\n const controlCb = this._loadControlQueue[position][0];\n await controlCb();\n this._loadControlQueue[position].splice(0, 1);\n this._applyControls(position);\n } else {\n this._isControlLoading[position] = false;\n }\n }\n}\n","import type { WebMap } from './WebMap';\n\nconst WEB_MAP_CONTAINER: Record<number, any> = {};\n\nexport function getWebMap<T extends WebMap = WebMap>(id: number): T {\n return WEB_MAP_CONTAINER[id];\n}\n\nexport function setWebMap(id: number, webMap: WebMap) {\n WEB_MAP_CONTAINER[id] = webMap;\n}\n","/**\n * @privateRemarks\n * Since it was not possible to split the code through mixins, inheritance was used.\n * The `ts-mixin` plugin worked fine, but led to errors in IE.\n *\n * Now inheritance is as follow:\n * BaseWebMap \\> WebMapLayers \\> WebMap\n *\n * Will need to be done this way:\n * ```javascript\n * class WebMap extend mixin(WebMapLayers, WebMapControls) {}\n * ```\n *\n * This approach can also be considered\n * ```javascript\n * class WebMap {\n * layers: WebMapLayers;\n * controls WebMapControls\n * }\n * ```\n * and then\n *\n * const webMap = new WebMap(...);\n * webMap.layers.addLayer(...)\n *\n * looks good, but will add difficulty in inheriting from WebMap\n *\n * old:\n * ```javascript\n * class NgwMap extends WebMap {\n * addLayer(...) {\n * super.addLayer(...)\n * }\n * }\n * ```\n * new:\n * ```javascript\n * class NgwLayers extends WebMapLayers {\n * addLayer(...) {\n * super.addLayer(...)\n * }\n * }\n *\n * class NgwMap extends WebMap {\n * layersClass = NgwLayers\n * }\n * ```\n * ...and there will be compatibility issues\n */\n\nimport { WebMapControls } from './WebMapControls';\nimport { getWebMap, setWebMap } from './container';\n\nimport type { WebMapLayers } from './WebMapLayers';\nimport type { WebMapMain } from './WebMapMain';\nimport type { WebMapEvents } from './interfaces/Events';\nimport type { ControlOptions } from './interfaces/MapControl';\nimport type { MapOptions } from './interfaces/MapOptions';\n\n/**\n * The core component for managing map adapters.\n * It contains methods for adding and manipulation with\n * {@link WebMapMain | map}, {@link WebMapLayers | layers} and {@link WebMapControls | controls}.\n *\n * @example\n * ```javascript\n * import { WebMap } from '@nextgis/webmap';\n * import MapAdapter from '@nextgis/ol-map-adapter';\n *\n * const webMap = new WebMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * });\n * ```\n *\n * @typeParam M - Interactive Map used in the adapter\n * @typeParam L - Layer\n * @typeParam C - Control\n * @typeParam E - Events\n *\n */\nexport class WebMap<\n M = any,\n L = any,\n C extends object = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n >\n extends WebMapControls<M, L, C, E, O>\n implements WebMapControls, WebMapLayers, WebMapMain\n{\n constructor(mapOptions: O) {\n super(mapOptions);\n this._addControls();\n setWebMap(this.id, this);\n }\n\n static get<T extends WebMap = WebMap>(id: number): T {\n return getWebMap<T>(id);\n }\n\n /**\n * @internal\n */\n protected async _addLayerProviders(): Promise<void> {\n for await (const kit of this._starterKits) {\n if (kit.getLayerAdapters) {\n const adapters = await kit.getLayerAdapters.call(kit);\n if (adapters) {\n for await (const adapter of adapters) {\n const newAdapter = await adapter.createAdapter(this);\n if (newAdapter) {\n this.mapAdapter.layerAdapters[adapter.name] = newAdapter;\n }\n }\n }\n }\n }\n }\n\n /**\n * @internal\n */\n protected async _onLoadSync(): Promise<void> {\n for await (const kit of this._starterKits) {\n if (kit.onLoadSync) {\n try {\n await kit.onLoadSync.call(kit, this);\n } catch (er) {\n console.error(er);\n }\n }\n }\n }\n\n private _addControls(): void {\n if (this.options.controls) {\n this.options.controls.forEach((x) => {\n let controlAdapterName = x;\n let controlOptions: ControlOptions = {};\n if (typeof x === 'string' && this.options.controlsOptions) {\n if (this.options.controlsOptions[x]) {\n controlOptions = this.options.controlsOptions[x];\n if (controlOptions.control !== undefined) {\n controlAdapterName = controlOptions.control;\n }\n }\n }\n const { position, ...options } = controlOptions;\n this.addControl(controlAdapterName, position || 'top-left', options);\n });\n }\n this._emitStatusEvent('controls:create');\n }\n}\n","export function getDefaultControls(): string[] {\n return ['ZOOM', 'ATTRIBUTION'];\n}\n","import { WebMap } from './WebMap';\n\nimport type { MapOptions } from './interfaces/MapOptions';\n\nexport * from './components/controls/createToggleControl';\n\nexport * from './utils/geometryTypes';\nexport * from './utils/getDefaultControls';\nexport * from './utils/updateGeoJsonAdapterOptions';\n\nexport * from './container';\n\nexport * from './WebMapLayers';\nexport * from './WebMapControls';\nexport * from './WebMapMain';\n\nexport * from './interfaces/Events';\nexport * from './interfaces/BaseTypes';\nexport * from './interfaces/MapOptions';\nexport * from './interfaces/MapAdapter';\nexport * from './interfaces/MapControl';\nexport * from './interfaces/LegendItem';\nexport * from './interfaces/StarterKit';\nexport * from './interfaces/LayerAdapter';\nexport * from './interfaces/RuntimeParams';\n\nexport { WebMap };\n\nexport async function createWebMap(options: MapOptions): Promise<WebMap> {\n const webMap = new WebMap(options);\n return webMap.onLoad();\n}\n","import type { NgwResourceDefinition } from '../interfaces';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\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 { NgwMapOptions } from '../interfaces';\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\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 { EventEmitter } from 'events';\n\nimport { getIcon } from '@nextgis/icons';\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';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceItem,\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 { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\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-ignore for backward compatibility\n const { keyname, resourceId } = 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 if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\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 = false,\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\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 x.item && x.item.parentId === id;\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: ResourceItem | 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 fetchNgwExtent({\n resourceId: item.resource.id,\n connector: this.connector,\n }).then((extent) => {\n if (extent) {\n this.fitBounds(extent, options);\n }\n });\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\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 promises.push(identFunc.call(layer));\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);\n promise.catch(removeFromGroup);\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 '@nextgis/webmap';\n\nexport * from './interfaces';\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":["isObject","__publicField","__spreadValues","__async","ID","__objRest","__spreadProps","filters","url","__superGet","_a","NgwWebmapLayerAdapter","NWLayerAdapter","e","f","expressionCallback","OPTIONS","iter","more","temp","error"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.esm-browser.js","sources":["../../icons/src/index.ts","../../utils/src/applyMixins.ts","../../utils/src/debounce.ts","../../utils/src/debug/debugLog.ts","../../utils/src/deepmerge.ts","../../utils/src/defined.ts","../../utils/src/deprecated/deprecatedMapClick.ts","../../utils/src/deprecated/deprecatedWarn.ts","../../utils/src/geom/checkExtent.ts","../../utils/src/geom/constants.ts","../../utils/src/geom/coordTransform.ts","../../utils/src/geom/getBoundsPolygon.ts","../../utils/src/geom/getCirclePolygon.ts","../../utils/src/geom/getIdentifyRadius.ts","../../utils/src/geom/isLngLatBoundsArray.ts","../../utils/src/number/round.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/typeHelpers/index.ts","../../utils/src/url.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/utils/apiRequest.ts","../../cache/src/Cache.ts","../../ngw-connector/src/errors/AbortError.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/errors/NetworksResponseError.ts","../../ngw-connector/src/errors/extractError.ts","../../ngw-connector/src/errors/isError.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/route/error.ts","../../ngw-connector/src/route/request.ts","../../ngw-connector/src/route/route.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/NgwConnector.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/NgwConnectorExtended.ts","../../ngw-kit/src/utils/fetchNgwExtent.ts","../../ngw-kit/src/NgwResource.ts","../../ngw-kit/src/utils/resourceIdFromLayerOptions.ts","../../ngw-kit/src/adapters/createOnFirstShowAdapter.ts","../../ngw-kit/src/adapters/createOnFirstShowNgwAdapter.ts","../../properties-filter/src/propertiesFilter.ts","../../ngw-kit/src/utils/featureLayerUtils.ts","../../ngw-kit/src/utils/prepareNgwFieldsToPropertiesFilter.ts","../../ngw-kit/src/utils/fetchNgwLayerItems.ts","../../ngw-kit/src/utils/ngwApiToAdapterOptions.ts","../../ngw-kit/src/utils/fetchNgwLayerItem.ts","../../ngw-kit/src/BookmarkItem.ts","../../ngw-kit/src/constants.ts","../../item/src/properties/BaseProperty.ts","../../item/src/properties/CheckProperty.ts","../../item/src/properties/ItemProperties.ts","../../tree/src/treeFilter.ts","../../item/src/TreeHelper.ts","../../item/src/Item.ts","../../ngw-kit/src/utils/WebmapLayerOpacityPropertyHandler.ts","../../ngw-kit/src/utils/createLayerSymbolParam.ts","../../ngw-kit/src/Legend.ts","../../ngw-kit/src/NgwWebmapItem.ts","../../ngw-kit/src/NgwWebmapLayerAdapter.ts","../../ngw-kit/src/utils/utils.ts","../../qms-kit/src/utils/getSubmodulesFromOriginUrl.ts","../../qms-kit/src/utils/loadJson.ts","../../qms-kit/src/utils/updateQmsOptions.ts","../../qms-kit/src/utils/createQmsAdapter.ts","../../qms-kit/src/QmsKit.ts","../../ngw-kit/src/adapters/createBasemapLayerAdapter.ts","../../ngw-kit/src/utils/createPopupContent.ts","../../ngw-kit/src/utils/fetchNgwLayerCount.ts","../../ngw-kit/src/utils/fetchNgwLayerFeatures.ts","../../ngw-kit/src/utils/fetchNgwLayerFeatureCollection.ts","../../ngw-kit/src/utils/getLayerFilterOptions.ts","../../ngw-kit/src/adapters/createGeoJsonAdapter.ts","../../ngw-kit/src/adapters/createNgwWebmapAdapter.ts","../../ngw-kit/src/adapters/createRasterAdapter.ts","../../ngw-kit/src/adapters/createAsyncAdapter.ts","../../ngw-kit/src/NgwKit.ts","../../ngw-kit/src/IdentifyItem.ts","../../ngw-kit/src/utils/fetchNgwLayerFeature.ts","../../ngw-kit/src/utils/getCompanyLogo.ts","../../ngw-kit/src/utils/identifyUtils.ts","../../webmap/src/container.ts","../../webmap/src/components/controls/createToggleControl.ts","../../expression/src/utils/evaluateArgs.ts","../../expression/src/expressions/decisionExpressions.ts","../../expression/src/constants/colors.ts","../../expression/src/utils/color.ts","../../expression/src/expressions/interpolationExpressions/interpolate.ts","../../expression/src/expressions/interpolationExpressions/step.ts","../../expression/src/expressions/interpolationExpressions/index.ts","../../expression/src/expressions/lookupExpressions.ts","../../expression/src/expressions/mathExpressions.ts","../../expression/src/expressions/stringExpressions.ts","../../expression/src/utils/tryConvert.ts","../../expression/src/utils/fallback.ts","../../expression/src/expressions/typeExpressions.ts","../../expression/src/expression.ts","../../paint/src/fromPaintExpression.ts","../../paint/src/typeHelpers.ts","../../paint/src/preparePaint.ts","../../webmap/src/utils/geometryTypes.ts","../../webmap/src/utils/updateGeoJsonAdapterOptions.ts","../../webmap/src/components/keys/KeysCodes.ts","../../webmap/src/components/keys/Keys.ts","../../webmap/src/components/mapStates/StateItem.ts","../../webmap/src/components/mapStates/BoundState.ts","../../webmap/src/components/mapStates/CenterState.ts","../../webmap/src/components/mapStates/ZoomState.ts","../../webmap/src/utils/clearObject.ts","../../webmap/src/WebMapMain.ts","../../webmap/src/WebMapLayers.ts","../../webmap/src/WebMapControls.ts","../../webmap/src/WebMap.ts","../../webmap/src/utils/getDefaultControls.ts","../../webmap/src/index.ts","../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { IconPaint } from '@nextgis/paint';\n\nconst svgPath: { [name: string]: string | GetPathCallback } = {\n brill: '<path d=\"m6 0-5 6 5 6 5-6z\"/>',\n circle: '<circle cx=\"6\" cy=\"6\" r=\"6\"/>',\n rect: '<rect width=\"12\" height=\"12\"/>',\n marker:\n '<path d=\"m6 0c-1.85 0-4 1.19-4 4.22 0 2.05 3.08 6.59 4 7.78 0.821-1.19 4-5.62 4-7.78 0-3.03-2.15-4.22-4-4.22z\"/>',\n cross:\n '<path d=\"M 2.4,12 6,8.4 9.6,12 12,9.6 8.4,6 12,2.4 9.6,0 6,3.6 2.4,0 0,2.4 3.6,6 0,9.6 Z\"/>',\n star: '<path d=\"m6 0.25 1.71 4.18 4.29-1.04e-4 -3.43 3.14 0.857 4.18-3.43-3.14-3.43 3.14 0.857-4.18-3.43-3.14 4.29-0.209z\"/>',\n triangle: '<path d=\"m12 11.7h-12l6-11.2z\"/>',\n plus: '<path d=\"m7.5 12v-4.5h4.5v-3h-4.5v-4.5h-3v4.5h-4.5v3h4.5v4.5z\"/>',\n minus: '<path d=\"m12 7.5v-3h-12v3z\"/>',\n asterisk:\n '<path d=\"m7.59 12v-3.27l2.83 1.64 1.58-2.74-2.85-1.64 2.83-1.64-1.56-2.74-2.83 1.64v-3.24h-3.17v3.24l-2.85-1.64-1.57 2.74 2.84 1.64-2.84 1.64 1.57 2.74 2.85-1.64v3.27z\"/>',\n};\n\nexport interface IconOptions {\n svg?: string;\n /** Svg path */\n p?: string;\n shape?:\n | 'rect'\n | 'star'\n | 'plus'\n | 'minus'\n | 'brill'\n | 'circle'\n | 'marker'\n | 'triangle'\n | 'asterisk';\n color?: string;\n size?: number;\n stroke?: number;\n strokeColor?: string;\n rotate?: number;\n anchor?: [number, number];\n}\n\ninterface GenerateSvgOptions {\n width: number;\n height: number;\n stroke?: number;\n content?: string;\n}\n\nconst VIEW_BOX = 12;\nconst STROKE = 0.8;\n\nfunction generateSvg({\n width,\n height,\n stroke = 0,\n content,\n}: GenerateSvgOptions) {\n const s = stroke / 2;\n const svg = `<svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"${width}\"\n height=\"${height}\"\n viewBox=\"-${s} -${s} ${VIEW_BOX + stroke} ${VIEW_BOX + stroke}\"\n >${content}</svg>`;\n return svg;\n}\n\nfunction insertSvg(svg: string) {\n const oParser = new DOMParser();\n const oDOM = oParser.parseFromString(svg, 'image/svg+xml');\n return oDOM.documentElement;\n}\n\ntype GetPathCallback = (opt?: IconOptions) => string;\n\n/**\n * Retrieves an icon with the provided options.\n * @function\n * @param {IconOptions} [opt={}] - Options for the icon.\n * @returns {IconPaint} Icon paint object.\n */\nexport function getIcon(opt: IconOptions = {}): IconPaint {\n // Default values\n const shape = opt.shape ?? 'circle';\n const color = opt.color ?? 'blue';\n const strokeColor = opt.strokeColor ?? 'white';\n const size = opt.size ?? VIEW_BOX;\n\n const rotate = opt.rotate ?? 0;\n\n const anchor = opt.anchor ?? [size / 2, size / 2];\n\n const stroke = opt.stroke !== undefined ? Number(opt.stroke) : STROKE;\n\n const pathAlias = opt.p || svgPath[shape] || 'circle';\n\n const path = typeof pathAlias === 'string' ? pathAlias : pathAlias(opt);\n const svg = insertSvg(\n opt.svg ||\n generateSvg({\n width: size,\n height: size,\n stroke,\n content: path,\n }),\n );\n\n svg.setAttribute('width', String(size));\n svg.setAttribute('height', String(size));\n\n svg.setAttribute('fill', color);\n if (stroke) {\n svg.setAttribute('stroke', strokeColor);\n svg.setAttribute('stroke-width', String(stroke));\n }\n const s = new XMLSerializer();\n\n return {\n type: 'icon',\n iconSize: [size, size],\n iconAnchor: anchor,\n html: s.serializeToString(svg),\n rotate,\n svg,\n };\n}\n","export interface ApplyMixinOptions {\n replace?: boolean;\n}\n\ntype Ctor = any;\n\nexport function applyMixins(\n derivedCtor: Ctor,\n baseCtors: Ctor[],\n opt: ApplyMixinOptions = {},\n): void {\n const derivedProperties = allProperties(derivedCtor.prototype);\n const replace = opt.replace !== undefined ? opt.replace : true;\n baseCtors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const isSomeProp = derivedProperties.indexOf(name) !== -1;\n if ((!replace && !isSomeProp) || replace) {\n const descriptor = Object.getOwnPropertyDescriptor(\n baseCtor.prototype,\n name,\n );\n if (descriptor) {\n Object.defineProperty(derivedCtor.prototype, name, descriptor);\n }\n }\n });\n });\n}\n\nexport function allProperties(obj: Record<string, unknown>): string[] {\n return _allProperties(obj);\n}\n\nfunction _allProperties(\n obj: Record<string, unknown>,\n _props: string[] = [],\n): string[] {\n for (; obj !== null; obj = Object.getPrototypeOf(obj)) {\n const op = Object.getOwnPropertyNames(obj);\n for (let i = 0; i < op.length; i++) {\n if (_props.indexOf(op[i]) == -1) {\n _props.push(op[i]);\n }\n }\n }\n return _props;\n}\n\nexport function mixinProperties(\n derivedCtor: Ctor,\n baseCtor: Ctor,\n properties: string[],\n): void {\n properties.forEach((name) => {\n const descriptor = Object.getOwnPropertyDescriptor(\n baseCtor.prototype,\n name,\n );\n if (descriptor) {\n Object.defineProperty(derivedCtor.prototype, name, descriptor);\n }\n });\n}\n","// based on https://github.com/bvaughn/debounce-decorator\n\nexport function debounce<T extends (...args: any[]) => void>(\n cb: T,\n wait = 10,\n): T & { clear: () => void } {\n let timeoutId: any;\n\n function wrapper(this: any, ...args: any[]) {\n wrapper.clear();\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n cb.apply(this, args);\n }, wait);\n }\n\n wrapper.clear = function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return wrapper as T & { clear: () => void };\n}\n\nexport function DebounceDecorator(wait = 10) {\n return function (\n _target: unknown,\n key: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: debounce(descriptor.value, wait),\n });\n\n return this[key as keyof PropertyDescriptor];\n },\n };\n };\n}\n","export function debugLog(message?: string): boolean {\n if (__DEV__) {\n console.trace('DEBUG: ' + message);\n return true;\n }\n return false;\n}\n","export function deepmerge<T>(\n x: Partial<T>,\n y: Partial<T>,\n mergeArray?: boolean,\n): T;\nexport function deepmerge<T1, T2>(\n target: Partial<T1>,\n src: Partial<T2>,\n mergeArray = false,\n): T1 & T2 {\n let target_ = target as any;\n const src_ = src as any;\n const array = Array.isArray(src_);\n let dst: any = (array && []) || {};\n\n if (array && Array.isArray(src_)) {\n if (mergeArray) {\n target_ = target_ || [];\n dst = dst.concat(target_);\n src_.forEach((e: any, i: number) => {\n if (typeof dst[i] === 'undefined') {\n dst[i] = e;\n } else if (typeof e === 'object') {\n dst[i] = deepmerge(target_[i], e, mergeArray);\n } else {\n if (target_.indexOf(e) === -1) {\n dst.push(e);\n }\n }\n });\n } else {\n // Replace array. Do not merge by default\n dst = src_;\n }\n } else {\n if (target_ && typeof target_ === 'object') {\n Object.keys(target_).forEach(function (key) {\n dst[key] = target_[key];\n });\n }\n Object.keys(src_).forEach(function (key) {\n if (typeof src_[key] !== 'object' || !src_[key]) {\n dst[key] = src_[key];\n } else {\n if (typeof target_[key] === 'object' && typeof src_[key] === 'object') {\n dst[key] = deepmerge(target_[key], src_[key], mergeArray);\n } else {\n dst[key] = src_[key];\n }\n }\n });\n }\n return dst;\n}\n","/**\n * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js\n *\n * @param val - The object.\n * @returns Returns true if the object is defined, returns false otherwise.\n *\n * @example\n * ```javascript\n * if (defined(positions)) {\n * doSomething();\n * } else {\n * doSomethingElse();\n * }\n * ```\n */\nexport function defined<T>(val: T): val is Exclude<T, null | undefined> {\n return val !== undefined && val !== null;\n}\n\n/**\n * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js\n *\n * @param val - The object.\n * @returns Returns true if the object is defined and not empty string, returns false otherwise.\n *\n * @example\n * ```javascript\n * full('foo') // true\n * full('') // false\n * full(undefined) // false\n * full(0) // true\n * ```\n */\nexport function full<T>(val: T): val is Exclude<T, null | undefined> {\n return typeof val === 'string' ? !!val : defined(val);\n}\n","import { debugLog } from '../debug/debugLog';\n\nimport type { LatLng } from '../geom/interfaces';\nimport type { LngLatArray } from '../geom/interfaces';\n\ninterface DeprecatedMapClickEvent {\n lngLat: LngLatArray;\n latLng?: LatLng;\n}\n\n/**\n * @internal\n */\nexport function deprecatedMapClick<\n T extends DeprecatedMapClickEvent = DeprecatedMapClickEvent,\n>(ev: T): T {\n if (!ev.lngLat && ev.latLng) {\n debugLog('deprecated use of latLng in MapClickEvent, use lngLat instead');\n const lat = ev.latLng.lat;\n const lng = ev.latLng.lng;\n ev.lngLat = [lng, lat];\n }\n return ev;\n}\n","/** @internal */\nexport function deprecatedWarn(message: string): void {\n console.warn(`DEPRECATED WARN: ${message}`);\n}\n","import type { LngLatBoundsArray } from './interfaces';\n\nexport function checkExtent(extent: number[]): extent is LngLatBoundsArray {\n const [minLon, minLat, maxLon, maxLat] = extent;\n\n // Check if coordinates are in the correct order\n const isOrderValid = minLon < maxLon && minLat < maxLat;\n\n if (!isOrderValid) {\n console.log('Error: The extent coordinates are not in the correct order.');\n console.log(\n `Received extent: [${minLon}, ${minLat}, ${maxLon}, ${maxLat}]`,\n );\n\n // Create a valid array with corrected order\n const correctedExtent = [\n Math.min(minLon, maxLon),\n Math.min(minLat, maxLat),\n Math.max(minLon, maxLon),\n Math.max(maxLat, minLat),\n ];\n\n console.log(`Expected order: [${correctedExtent.join(', ')}]`);\n }\n\n // Check if the coordinates are within valid ranges\n const isValidLon = minLon >= -180 && maxLon <= 180;\n const isValidLat = minLat >= -90 && maxLat <= 90;\n\n if (!isValidLon || !isValidLat) {\n console.log(\n 'Warning: The coordinates may not be within valid geographic ranges.',\n );\n }\n\n // Return true only if all checks pass\n return isOrderValid && isValidLon && isValidLat;\n}\n","/**\n * Radius of the earth in kilometers\n */\nexport const EARTHS_RADIUS = 6371;\n","import type { LngLatArray } from './interfaces';\n\nexport function degrees2meters(lng: number, lat: number): [number, number] {\n lat = lat > 85.06 ? 85.06 : lat < -85.06 ? -85.06 : lat;\n\n const x = (lng * 20037508.34) / 180;\n let y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360)) / (Math.PI / 180);\n y = (y * 20037508.34) / 180;\n return [x, y];\n}\n\nexport function meters2degrees(x: number, y: number): LngLatArray {\n const lon = (x * 180) / 20037508.34;\n const lat =\n (Math.atan(Math.exp((y * Math.PI) / 20037508.34)) * 360) / Math.PI - 90;\n return [lon, lat];\n}\n\nexport function degrees2Radian(deg: number): number {\n return (deg * Math.PI) / 180;\n}\n\n// export function degrees2meters2(lon: number, lat: number): [number, number] {\n// const radius = 6378137.0;\n// const x = (radius * lon * Math.PI) / 180.0;\n// const y =\n// radius * Math.log(Math.tan(Math.PI / 4.0 + (lat * Math.PI) / 360.0));\n// return [x, y];\n// }\n\n// export function meters2degress2(x: number, y: number): LngLatArray {\n// const radius = 6378137.0;\n// const lon = (180 / Math.PI) * (x / radius);\n// const lat = (360 / Math.PI) * (Math.atan(Math.exp(y / radius)) - Math.PI / 4);\n// return [lon, lat];\n// }\n\n// const lon = -77.035974;\n// const lat = 38.898717;\n\n// console.log(degrees2meters(lon, lat), degrees2meters2(lon, lat));\n\n// const x = -8575605.398443861;\n// const y = 4707174.018280405;\n\n// console.log(meters2degress(x, y), meters2degress2(x, y));\n","import type { Feature, Polygon } from 'geojson';\n\nimport type { LngLatBoundsArray } from './interfaces';\n\nexport function getBoundsPolygon(b: LngLatBoundsArray): Polygon {\n const polygon: Polygon = {\n type: 'Polygon',\n coordinates: [getBoundsCoordinates(b)],\n };\n return polygon;\n}\n\nexport function getBoundsCoordinates(b: LngLatBoundsArray): number[][] {\n const westNorth = [b[0], b[1]];\n const eastNorth = [b[2], b[1]];\n const eastSouth = [b[2], b[3]];\n const westSouth = [b[0], b[3]];\n\n return [westNorth, eastNorth, eastSouth, westSouth, westNorth];\n}\n\nexport function getBoundsFeature(b: LngLatBoundsArray): Feature<Polygon> {\n const feature: Feature<Polygon> = {\n type: 'Feature',\n properties: {},\n geometry: getBoundsPolygon(b),\n };\n return feature;\n}\n","import { EARTHS_RADIUS } from './constants';\n\nimport type { Feature, Polygon, Position } from 'geojson';\n\nconst d2r = Math.PI / 180; // degrees to radians\nconst r2d = 180 / Math.PI; // radians to degrees\n\nexport function getCirclePolygonCoordinates(\n lng: number,\n lat: number,\n /** In kilometers */\n radius = 10,\n points = 6,\n): Position[] {\n // find the radius in lat/lon\n const rlat = (radius / EARTHS_RADIUS) * r2d;\n const rlng = rlat / Math.cos(lat * d2r);\n\n const extp = [];\n for (let i = 0; i < points + 1; i++) {\n // one extra here makes sure we connect the\n\n const theta = Math.PI * (i / (points / 2));\n const ex = lng + rlng * Math.cos(theta); // center a + radius x * cos(theta)\n const ey = lat + rlat * Math.sin(theta); // center b + radius y * sin(theta)\n extp.push([ex, ey]);\n }\n\n return extp;\n}\n\nexport function getCircleFeature(\n lng: number,\n lat: number,\n radius = 10,\n points = 6,\n): Feature<Polygon> {\n const polygon = getCirclePolygonCoordinates(lng, lat, radius, points);\n const feature: Feature<Polygon> = {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Polygon',\n coordinates: [polygon],\n },\n };\n return feature;\n}\n","import type { LngLatArray } from '@nextgis/utils';\n\nexport function getIdentifyRadius(\n center: LngLatArray,\n zoom: number,\n pixelRadius: number,\n): number {\n pixelRadius = pixelRadius ?? 10;\n const metresPerPixel =\n (40075016.686 * Math.abs(Math.cos((center[1] * 180) / Math.PI))) /\n Math.pow(2, zoom + 8);\n const radius = pixelRadius * metresPerPixel * 0.0005;\n return radius;\n}\n","import type { LngLatBoundsArray } from '@nextgis/utils';\n\nexport function isLngLatBoundsArray(\n array: unknown,\n): array is LngLatBoundsArray {\n return (\n Array.isArray(array) &&\n array.length === 4 &&\n array.every((x) => typeof x === 'number')\n );\n}\n","export function round(val: number, toFixed?: number): number {\n const n = toFixed ? Number('1e+' + toFixed) : 1;\n return Math.round((val + Number.EPSILON) * n) / n;\n}\n","function isEqual(a: unknown, b: unknown, o: unknown, p: unknown): boolean {\n if (a instanceof Array) {\n if (!(b instanceof Array)) return false;\n //if (compareObjects(oVal, pVal === false) return false\n //would work, too, and perhaps is a better fit, still, this is easy, too\n return b.sort().join('') === a.sort().join('');\n } else if (a instanceof Date) {\n if (!(b instanceof Date)) return false;\n return '' + a === '' + b;\n } else if (a instanceof Function) {\n if (!(b instanceof Function)) return false;\n //ignore functions, or check them regardless?\n } else if (a instanceof Object) {\n if (!(b instanceof Object)) return false;\n if (a === o) {\n return b === p;\n } else {\n return objectDeepEqual(a, b);\n }\n }\n return a === b;\n}\n\n// based on https://stackoverflow.com/a/13143059\nexport function objectDeepEqual<\n T extends Record<string, any> = Record<string, any>,\n>(o: T, p: T): boolean {\n const keysO = Object.keys(o).sort();\n const keysP = Object.keys(p).sort();\n if (keysO.length !== keysP.length) return false;\n if (keysO.join('') !== keysP.join('')) return false;\n for (let i = 0; i < keysO.length; i++) {\n const oVal = o[keysO[i]];\n const pVal = p[keysP[i]];\n if (!isEqual(oVal, pVal, o, p)) {\n return false;\n }\n }\n return true;\n}\n","type NoUndefinedField<T> = {\n [P in keyof T]: Exclude<T[P], undefined>;\n};\n\nexport function objectRemoveEmpty<T extends Record<any, any>>(\n obj: T,\n): NoUndefinedField<T> {\n const newObj: Record<any, any> = {};\n Object.keys(obj).forEach((key) => {\n if (!(obj[key] instanceof Array) && obj[key] === Object(obj[key])) {\n newObj[key] = objectRemoveEmpty(obj[key]);\n } else if (obj[key] !== undefined) {\n newObj[key] = obj[key];\n }\n });\n return newObj as NoUndefinedField<T>;\n}\n","export * from './DeepPartial';\nexport * from './isObjKey';\nexport * from './Json';\nexport * from './Type';\n\nexport function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\nexport function isArray(val: unknown): val is [] {\n return Object.prototype.toString.call(val) === '[object Array]';\n}\n","export function fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n\nexport function updateUrlParams(\n urlStr: string,\n params: Record<string, string | undefined>,\n) {\n const url = new URL(urlStr);\n const searchParams = new URLSearchParams(url.search);\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined) {\n searchParams.delete(key);\n } else {\n searchParams.set(key, value);\n }\n });\n\n searchParams.set('timestamp', String(new Date().getTime()));\n\n const newSearch = [...searchParams.entries()]\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n return `${url.origin}${url.pathname}?${newSearch}`;\n}\n","// https://github.com/Leaflet/Leaflet/blob/b507e21c510b53cd704fb8d3f89bb46ea925c8eb/src/core/Util.js#L165\nconst templateRe = /\\{ *([\\w_-]+) *\\}/g;\n\nexport function template(str: string, data: { [param: string]: any }): string {\n return str.replace(templateRe, (s, key) => {\n let value = data[key];\n\n if (value === undefined) {\n throw new Error('No value provided for letiable ' + s);\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return value;\n });\n}\n","import { template } from './template';\n\nimport type {\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n} from '../interfaces';\nimport type { NgwConnector } from '../NgwConnector';\nimport type { RequestItemsParamsMap } from '../types/RequestItemsParamsMap';\n\ninterface ApiRequestOptions<K extends keyof RequestItemsParamsMap> {\n name: string;\n connector: NgwConnector;\n params: RequestItemsParams<K>;\n requestOptions: RequestOptions;\n}\n\nexport async function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): Promise<P[K]> {\n const { params, name, connector, requestOptions } = opt;\n\n const apiItems = await connector.connect();\n let apiItem = apiItems && apiItems[name];\n\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift(); // Extract the base URL\n\n if (apiItem.length) {\n const replaceParams: { [num: number]: string } = {};\n\n // Prepare URL template parameters described in apiItem\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = `{${arg}}`;\n\n // Check if each required by apiItem parameter is provided in params\n if (params[arg] === undefined) {\n throw new Error(`\\`${arg}\\` URL API argument is not specified`);\n }\n }\n\n // Replace URL template parameters with actual values\n if (url) {\n url = template(url, replaceParams);\n }\n }\n\n if (params) {\n const paramArray: string[] = [];\n const paramList = params.paramList;\n\n // Handle paramList if present: transform it into query string format\n if (Array.isArray(paramList)) {\n paramList.forEach(([key, value]) => {\n paramArray.push(`${key}=${value}`);\n });\n }\n\n // Append other parameters to the URL, excluding those already used in the template\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n\n // If there are any query parameters, append them to the URL\n if (paramArray.length) {\n url = `${url}?${paramArray.join('&')}`;\n }\n }\n\n if (url) {\n return connector.makeQuery(url, params, {\n cacheName: name,\n ...requestOptions,\n });\n } else {\n throw new Error('Request URL is not set');\n }\n } else {\n // Return undefined if API item is not found\n return undefined as P[K];\n }\n}\n","import { full, objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheMatchProps<T> = {\n [P in keyof T]?: T[P];\n};\n\ninterface CacheItem<T = any, O = any> {\n key: string;\n value: CacheValue<T>;\n props?: CacheMatchProps<O>;\n expirationTime?: number;\n}\n\nexport interface CacheOptions {\n /**\n * Cache Scope Separator\n * @defaultValue 'default'\n */\n namespace?: string;\n}\n\nexport interface AddOptions<O> {\n props?: CacheMatchProps<O>;\n onlyFull?: boolean;\n /** life time in ms */\n expirationTime?: number;\n}\n\n/**\n * @example\n * ```javascript\n * const cache1 = new Cache();\n * cache1.add('foo', 'value');\n *\n * const cache2 = new Cache();\n * cache2.match('foo'); // value\n *\n * const cache3 = new Cache({ namespace: 'foo' });\n * cache3.match('foo'); // undefined\n * ```\n *\n * @example\n * ```javascript\n * let COUNTER = 0;\n * const createPromise = () => new Promise((res) => {\n * COUNTER++;\n * setTimeout(() => res('Ok'), 300);\n * });\n *\n * const cache = new Cache();\n * for (let i = 0; i < 10; i++) {\n * cache.add('foo', createPromise).then((data) => {\n * console.log(data); // 'Ok'\n * });\n * }\n * console.log(COUNTER); // 1\n * ```\n */\nexport class Cache<\n V = any,\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n private static instance: Record<\n string,\n Cache<unknown, Record<string, unknown>>\n > = {};\n private readonly cache: CacheItem<V, O>[] = [];\n\n constructor(options: CacheOptions = {}) {\n const namespace = options.namespace ?? 'default';\n if (Cache.instance[namespace]) {\n return Cache.instance[namespace] as Cache<V, O>;\n }\n Cache.instance[namespace] = this;\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<V, O>[] {\n return this.cache;\n }\n\n /**\n * Caching only a non-empty value.\n *\n * Useful for get or create strategy\n * @example\n * ```javascript\n * const cache = new Cache();\n * const getItemFunc = () => fetch(url).then((data) => {\n * return data.json(); // undefined\n * });\n * const item = await cache.addFull('foo', getItemFunc);\n * if (!item) {\n * await createItem(); // 'New item'\n * }\n *\n * // somewhere else in the code\n * const item = await cache.addFull('foo', getItemFunc).then((resp) => {\n * console.log(resp); // 'New item'\n * });\n * ```\n */\n addFull(\n key: string,\n valueToSet: CacheValue<V> | (() => CacheValue<V>),\n propsOrOptions?: CacheMatchProps<O> | AddOptions<O>,\n expirationTime?: number,\n ): CacheValue<V> {\n if (\n typeof propsOrOptions === 'object' &&\n 'valueToSet' in (propsOrOptions as AddOptions<O>)\n ) {\n (propsOrOptions as AddOptions<O>).onlyFull = true;\n }\n return this.add(key, valueToSet, propsOrOptions, true, expirationTime);\n }\n\n add(\n key: string,\n valueToSet: CacheValue<V> | (() => CacheValue<V>),\n propsOrOptions?: CacheMatchProps<O> | AddOptions<O>,\n onlyFull?: boolean,\n expirationTime?: number,\n ): CacheValue<V> {\n let opt: AddOptions<O>;\n let props: CacheMatchProps<O> | undefined;\n if (\n typeof propsOrOptions === 'object' &&\n 'valueToSet' in (propsOrOptions as AddOptions<O>)\n ) {\n opt = propsOrOptions as AddOptions<O>;\n onlyFull = opt.onlyFull;\n expirationTime = opt.expirationTime;\n props = opt.props;\n } else {\n props = propsOrOptions as CacheMatchProps<O>;\n }\n\n const exist = this._find(key, props);\n if (!exist) {\n let value: CacheValue<V>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const nonEmptyProps =\n props && JSON.parse(JSON.stringify(objectRemoveEmpty(props)));\n\n expirationTime = expirationTime ? Date.now() + expirationTime : undefined;\n\n const cacheItem: CacheItem<V, O> = {\n key,\n value,\n props: nonEmptyProps,\n expirationTime,\n };\n if (onlyFull && !full(value)) {\n return value;\n }\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch(() => {\n this.delete(key, props);\n });\n if (onlyFull) {\n value.then((x) => {\n if (!full(x)) {\n this.delete(key, props);\n }\n return x;\n });\n }\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, props?: CacheMatchProps<O>): CacheValue<V> | undefined {\n const cacheRecord = this._find(key, props);\n if (\n cacheRecord &&\n cacheRecord.expirationTime &&\n Date.now() > cacheRecord.expirationTime\n ) {\n this.delete(cacheRecord);\n return undefined;\n }\n return cacheRecord?.value;\n }\n\n matchAll(key?: string, props?: CacheMatchProps<O>): CacheValue<V>[] {\n const now = Date.now();\n this.cache.forEach((item) => {\n if (item.expirationTime && now > item.expirationTime) {\n this.delete(item);\n }\n });\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, props))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(item: CacheItem): void;\n delete(key: string, props?: CacheMatchProps<O>): void;\n delete(keyOrItem: string | CacheItem, props?: CacheMatchProps<O>): void {\n const itemsToDelete =\n typeof keyOrItem === 'string'\n ? this.cache.filter((x) => this._filter(x, keyOrItem, props))\n : [keyOrItem];\n\n for (const item of itemsToDelete) {\n const index = this.cache.indexOf(item);\n if (index !== -1) {\n this.cache.splice(index, 1);\n }\n }\n }\n\n private _find(\n key: string,\n props?: CacheMatchProps<O>,\n ): CacheItem<V> | undefined {\n return this.cache.find((x) => this._filter(x, key, props));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n props?: CacheMatchProps<O>,\n ): boolean {\n if (item.key !== key) return false;\n if (!props) return true;\n\n const itemProps = item.props;\n return objectDeepEqual(itemProps || {}, objectRemoveEmpty(props));\n }\n}\n","export class AbortError extends Error {\n constructor(message = 'AbortError') {\n super(message);\n this.name = 'AbortError';\n }\n}\n","import type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when...\n */\nexport class NgwError extends Error {\n name = 'NgwError';\n\n title!: string;\n message!: string;\n detail!: string;\n exception!: NgwExceptions;\n status_code!: number | 404 | 500;\n data?: Record<string, any>;\n guru_meditation!: string;\n\n constructor(er?: Partial<NgwError>) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class InsufficientPermissionsError extends NgwError {\n name = 'InsufficientPermissionsError';\n exception: NgwExceptions =\n 'nextgisweb.core.exception.InsufficientPermissions';\n\n constructor(obj: InsufficientPermissionsError) {\n super(obj);\n Object.setPrototypeOf(this, InsufficientPermissionsError.prototype);\n }\n}\n","import { NgwError } from './NgwError';\n\n/**\n * Thrown when ...\n */\nexport class NetworksResponseError extends NgwError {\n message =\n 'There is no response from the server or problem connecting to server.';\n title = 'Network error';\n detail = 'Check network connectivity and try again later.';\n\n constructor(obj?: Partial<NetworksResponseError>) {\n super(obj);\n Object.setPrototypeOf(this, NetworksResponseError.prototype);\n }\n}\n","import { isObject } from '@nextgis/utils';\n\nimport { NetworksResponseError } from './NetworksResponseError';\n\nexport function extractError(error: unknown) {\n if (isObject(error)) {\n if (error.name && error.message && error.title) {\n return {\n title: error.title,\n message: error.message,\n detail: error.detail || null,\n data: error.data && error.data.data ? error.data.data : null,\n };\n } else if (error.exception) {\n if (\n error.status === undefined ||\n error.status === 0 ||\n error.data === undefined\n ) {\n return new NetworksResponseError({\n title: error.title,\n status_code: error.status_code,\n exception: error.exception,\n });\n }\n }\n\n return {\n title: typeof error.title === 'string' ? error.title : 'Unexpected error',\n message:\n typeof error.message === 'string'\n ? error.message\n : 'Something went wrong.',\n };\n }\n}\n","import { isObject } from '@nextgis/utils';\n\nexport function isError(error: unknown): error is Error {\n if (isObject(error)) {\n return error.status_code && error.exception && error.title;\n }\n return false;\n}\n","/**\n * Thrown when...\n */\nexport class NetworkError extends Error {\n name = 'NetworkError';\n\n constructor(url: string) {\n super();\n Object.setPrototypeOf(this, NetworkError.prototype);\n this.message = `Unable to request ${url}.\n Possibly invalid NGW URL entered or CORS not configured to get request from ${location.origin}`; // /control-panel/cors\n }\n}\n","import { NgwError } from './NgwError';\n\nimport type { NgwExceptions } from '../interfaces';\n\n/**\n * Thrown when ...\n */\nexport class ResourceNotFoundError extends NgwError {\n name = 'ResourceNotFoundError';\n exception: NgwExceptions = 'nextgisweb.resource.exception.ResourceNotFound';\n\n constructor(obj?: ResourceNotFoundError) {\n super(obj);\n Object.setPrototypeOf(this, ResourceNotFoundError.prototype);\n }\n}\n","import type { LunkwillData } from './type';\n\nexport class BaseAPIError extends Error {\n title: string;\n\n constructor(message: string) {\n super(message || 'Something went wrong.');\n this.name = 'BaseAPIError';\n this.title = 'Unknown API error';\n // Maintains proper stack trace for where the error was thrown (V8-specific)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BaseAPIError);\n }\n }\n}\n\nexport class NetworksResponseError extends BaseAPIError {\n readonly detail: string;\n\n // prettier-ignore\n constructor(message?: string) {\n super(message || \"There is no response from the server or problem connecting to server.\");\n this.title = \"Network error\";\n this.detail = \"Check network connectivity and try again later.\";\n }\n}\n\nexport class InvalidResponseError extends BaseAPIError {\n constructor(message?: string) {\n super(message || 'Something went wrong.');\n this.title = 'Unexpected server response';\n }\n}\n\nexport interface ServerResponseErrorData {\n message: string;\n title?: string;\n detail?: string;\n exception?: string;\n}\n\nexport class ServerResponseError extends BaseAPIError {\n readonly detail: string | null;\n readonly data: ServerResponseErrorData;\n\n constructor(data: ServerResponseErrorData) {\n super(data.message);\n this.title = data.title || this.title;\n this.detail = data.detail || null;\n this.data = data;\n }\n}\n\nexport class LunkwillError extends Error {\n readonly title: string;\n readonly data: LunkwillData;\n\n // prettier-ignore\n constructor(message?: string, data: LunkwillData = {}) {\n super(message || \"Unexpected error while processing long-running request.\");\n this.name = \"LunkwillError\";\n this.title = \"Long-running request error\";\n this.data = data;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, LunkwillError);\n }\n }\n}\n\nexport class LunkwillRequestCancelled extends LunkwillError {\n constructor(data: LunkwillData) {\n super('Long-running request was cancelled.', data);\n }\n}\n\nexport class LunkwillRequestFailed extends LunkwillError {\n constructor(data: LunkwillData) {\n super(undefined, data);\n }\n}\n","import { objectRemoveEmpty } from '@nextgis/utils';\n\nimport {\n InvalidResponseError,\n LunkwillError,\n LunkwillRequestCancelled,\n LunkwillRequestFailed,\n NetworksResponseError,\n ServerResponseError,\n} from './error';\n\nimport type Cache from '@nextgis/cache';\n\nimport type { ServerResponseErrorData } from './error';\nimport type {\n LunkwillData,\n ResponseType,\n RouteRequestOptions,\n ToReturn,\n} from './type';\n\nfunction lunkwillCheckResponse(lwResp: Response) {\n const ct = lwResp.headers.get('content-type');\n return (\n ct !== undefined &&\n ct !== null &&\n ct.includes('application/vnd.lunkwill.request-summary+json')\n );\n}\n\nasync function responseJson(response: Response) {\n try {\n return response.json();\n } catch {\n throw new Error();\n }\n}\n\nasync function lunkwillResponseUrl(lwResp: Response) {\n const lwData = await responseJson(lwResp);\n let delay = lwData.delay_ms;\n const retry = lwData.retry_ms !== undefined ? lwData.retry_ms : 2000;\n const sum = `/api/lunkwill/${lwData.id}/summary`;\n const res = `/api/lunkwill/${lwData.id}/response`;\n\n const sleep = (msec: number) =>\n new Promise((resolve) => setTimeout(resolve, msec));\n\n let failed = false;\n let ready = false;\n while (!ready) {\n await sleep(failed ? retry : delay);\n failed = false;\n\n let lwResp: Response;\n let lwData: LunkwillData;\n try {\n lwResp = await fetch(sum, { credentials: 'same-origin' });\n lwData = await lwResp.json();\n } catch {\n failed = true;\n continue;\n }\n\n switch (lwData.status) {\n case undefined:\n throw new LunkwillError(undefined, lwData);\n case 'ready':\n ready = true;\n break;\n case 'cancelled':\n throw new LunkwillRequestCancelled(lwData);\n case 'failed':\n throw new LunkwillRequestFailed(lwData);\n case 'spooled':\n case 'processing':\n case 'buffering':\n delay = lwData.delay_ms;\n break;\n default:\n throw new LunkwillError(undefined, lwData);\n }\n }\n\n return res;\n}\n\nasync function lunkwillFetch(lwRespUrl: string) {\n try {\n return await window.fetch(lwRespUrl, { credentials: 'same-origin' });\n } catch {\n throw new NetworksResponseError();\n }\n}\n\nconst mediaContentTypes = [\n 'application/pdf',\n 'image/png',\n 'image/jpeg',\n 'image/tiff',\n 'text/csv',\n];\nconst mediaContentTypesRegex = new RegExp(mediaContentTypes.join('|'));\n\nfunction isMediaContentType(contentType: string): boolean {\n return mediaContentTypesRegex.test(contentType);\n}\n\ntype QueryScalar = string | number | boolean;\ntype QueryList = QueryScalar[];\ntype QueryRecord = Record<string, QueryScalar | QueryList>;\n\nexport function encodeQueryParams(\n value: Record<string, QueryScalar | QueryList | QueryRecord>,\n): string {\n const result = [];\n for (const [k, v] of Object.entries(value)) {\n if (\n typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean'\n ) {\n result.push(`${k}=${encodeURIComponent(v)}`);\n } else if (Array.isArray(v)) {\n result.push(`${k}=${v.map(encodeURIComponent).join(',')}`);\n } else {\n for (const [sk, sv] of Object.entries(v)) {\n const ske = `${k}[${encodeURIComponent(sk)}]`;\n if (\n typeof sv === 'string' ||\n typeof sv === 'number' ||\n typeof sv === 'boolean'\n ) {\n result.push(`${ske}=${encodeURIComponent(sv)}`);\n } else if (Array.isArray(sv)) {\n const sve = sv.map(encodeURIComponent);\n result.push(`${ske}=${sve.join(',')}`);\n }\n }\n }\n }\n return result.join('&');\n}\n\nexport function generateUrl(\n path: string,\n query?: Record<string, QueryScalar | QueryList | QueryRecord>,\n): string {\n let urlParams = '';\n if (query !== undefined) {\n urlParams = '?' + encodeQueryParams(query);\n }\n return path + urlParams;\n}\n\nexport async function request<\n T = unknown,\n RT extends ResponseType = 'json',\n ReturnUrl extends boolean = false,\n>(\n path: string,\n options?: RouteRequestOptions<RT, ReturnUrl>,\n cacheEngine?: Cache<Promise<ToReturn<T, RT, ReturnUrl>>>,\n): Promise<ToReturn<T, RT, ReturnUrl>> {\n const defaults: RouteRequestOptions<RT, ReturnUrl> = {\n method: 'GET',\n credentials: 'same-origin',\n headers: {},\n };\n const {\n withCredentials,\n responseType,\n cacheProps,\n cacheName,\n lunkwill,\n cache,\n query,\n json,\n ...opt\n } = {\n ...defaults,\n ...options,\n };\n opt.method = opt.method?.toUpperCase();\n\n if (withCredentials) {\n opt.credentials = 'include';\n }\n\n let useLunkwill = false;\n if (lunkwill !== undefined) {\n lunkwill.toHeaders(opt.headers || {});\n useLunkwill = true;\n }\n\n const lunkwillReturnUrl = !!opt.lunkwillReturnUrl;\n delete opt.lunkwillReturnUrl;\n\n if (json !== undefined) {\n opt.body = JSON.stringify(json);\n const headers = opt.headers || {};\n headers['Content-Type'] = 'application/json';\n opt.headers = headers;\n }\n\n const url = generateUrl(path, query);\n\n const makeRequest = async (): Promise<ToReturn<T, RT, ReturnUrl>> => {\n let response: Response;\n try {\n response = await fetch(url, opt);\n } catch (e) {\n if (opt.signal && opt.signal.aborted) {\n throw e;\n }\n throw new NetworksResponseError();\n }\n\n if (useLunkwill && lunkwillCheckResponse(response)) {\n const lwRespUrl = await lunkwillResponseUrl(response);\n if (lunkwillReturnUrl) {\n return lwRespUrl as ToReturn<T, RT, ReturnUrl>;\n }\n response = await lunkwillFetch(lwRespUrl);\n }\n\n const respCType = response.headers.get('content-type');\n const respJSON =\n respCType &&\n (respCType.includes('application/json') ||\n respCType.includes('application/vnd.lunkwill.request-summary+json'));\n\n let body: T | ServerResponseErrorData;\n\n try {\n const respMedia = respCType && isMediaContentType(respCType);\n\n if (responseType === 'blob' || respMedia) {\n body = (await response.blob()) as T;\n } else if (respJSON) {\n body = await response.json();\n } else {\n throw new InvalidResponseError();\n }\n } catch (e) {\n if (\n (e as Error).name === 'AbortError' ||\n e instanceof InvalidResponseError\n ) {\n throw e;\n }\n\n throw new InvalidResponseError();\n }\n\n if (400 <= response.status && response.status <= 599) {\n throw new ServerResponseError(body as ServerResponseErrorData);\n }\n return body as ToReturn<T, RT, ReturnUrl>;\n };\n if (cacheEngine) {\n if (opt.method?.toUpperCase() === 'GET') {\n if (cache !== false) {\n const props = cacheProps\n ? cacheProps\n : {\n ...objectRemoveEmpty({\n withCredentials,\n responseType,\n }),\n };\n return cacheEngine.add(cacheName || url, makeRequest, {\n props,\n expirationTime: cache ? undefined : 500,\n });\n }\n } else {\n // Special check for requests that do not require cache clearing.\n const ignoredForClean = ['api/feature_layer/identify'];\n if (ignoredForClean.every((part) => !path.includes(part))) {\n cacheEngine.clean();\n }\n }\n }\n\n return makeRequest();\n}\n","import { fixUrlStr, objectRemoveEmpty } from '@nextgis/utils';\n\nimport { AbortError } from '../errors';\n\nimport { generateUrl, request } from './request';\n\nimport type { NgwConnector } from '../NgwConnector';\n\nimport type {\n RequestMethod,\n ResponseType,\n RouteName,\n RouteParameters,\n RouteQuery,\n RouteRequestOptions,\n RouteResp,\n RouteResults,\n ToReturn,\n} from './type';\n\nfunction routeURL<N extends RouteName>(\n name: N,\n baseUrl: string,\n routeData: Record<string, string[]>,\n ...rest: RouteParameters[N]\n): string {\n const [template, ...params] = routeData[name];\n const first = rest[0];\n\n let sub: string[];\n if (first === undefined) {\n sub = [];\n } else if (typeof first === 'object' && first !== null) {\n if (rest.length > 1) {\n throw new Error('Too many arguments for route(name, object)!');\n }\n sub = [];\n for (const [p, v] of Object.entries(first)) {\n sub[params.indexOf(p)] = String(v);\n }\n } else {\n sub = rest.map((v) => String(v));\n }\n\n return fixUrlStr(\n baseUrl +\n template.replace(/\\{(\\w+)\\}/g, function (m, a) {\n const idx = parseInt(a);\n const value = sub[idx];\n if (value === undefined) {\n const msg = `Undefined parameter ${idx} in \"${template}\".`;\n throw new Error(msg);\n }\n return String(value);\n }),\n );\n}\n\nexport function route<N extends RouteName>(\n name: N,\n connector: NgwConnector,\n ...rest: RouteParameters[N]\n): RouteResults<N> {\n const result = {\n url: async (\n opt?: Pick<\n RouteRequestOptions<ResponseType, false, RouteQuery<N, 'get'>>,\n 'query'\n >,\n ) => {\n const routeData = await connector.connect();\n const template = routeURL(\n name,\n connector.options.baseUrl ?? '',\n routeData,\n ...rest,\n );\n return generateUrl(template, opt?.query);\n },\n } as RouteResults<N>;\n const methods: RequestMethod[] = ['get', 'post', 'put', 'delete', 'patch'];\n for (const method of methods) {\n const methodResp = <\n T = RouteResp<N, typeof method>,\n RT extends ResponseType = 'json',\n RU extends boolean = false,\n >(\n requestOptions?: RouteRequestOptions<\n RT,\n RU,\n RouteQuery<N, typeof method>\n >,\n ): Promise<ToReturn<T, RT, RU>> => {\n const { headers: optHeaders, ...restOpt } = requestOptions || {};\n if (requestOptions?.signal?.aborted) {\n throw new AbortError();\n }\n\n return connector.connect().then((routeData) => {\n const template = routeURL(\n name,\n connector.options.baseUrl ?? '',\n routeData,\n ...rest,\n );\n const headers = objectRemoveEmpty({\n ...connector.getAuthorizationHeaders(),\n ...(optHeaders ?? {}),\n });\n\n return request<T, RT, RU>(\n template,\n {\n headers,\n ...restOpt,\n method,\n },\n connector.cache,\n );\n });\n };\n // Using 'unknown' for type assertion because all methods are actually written to 'result'\n (result[method] as unknown) = methodResp;\n }\n return result;\n}\n","export function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { isError } from '../errors/isError';\nimport { NetworkError } from '../errors/NetworkError';\nimport { NgwError } from '../errors/NgwError';\n\nimport { isObject } from './isObject';\n\nimport type {\n RequestMethods,\n RequestOptions as NgwRequestOptions,\n} from '../interfaces';\n\n// readyState\n// Holds the status of the XMLHttpRequest.\n// 0: request not initialized\n// 1: server connection established\n// 2: request received\n// 3: processing request\n// 4: request finished and response is ready\n\n// status\n// 200: \"OK\"\n// 201 \"Created\"\tThe request has been fulfilled, and a new resource is created\n// 403: \"Forbidden\"\n// 404: \"Page not found\"\n// 500: \"Internal Server Error\"\n// For a complete list go to the Http Messages Reference\n\ntype LoadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> | undefined,\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n) => void;\n\nlet loadData: LoadData;\n\nif (__BROWSER__) {\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): void => {\n options.method = options.method || 'GET';\n\n const xhr = new XMLHttpRequest();\n xhr.open(options.method || 'GET', url, true); // true for asynchronous\n\n if (options.responseType === 'blob') {\n xhr.responseType = options.responseType;\n }\n const getResponseText = () => {\n try {\n return JSON.parse(xhr.responseText);\n } catch {\n return xhr.responseText;\n }\n };\n const processingResponse = (forError = false) => {\n const cb = forError ? error : callback;\n if (options.responseType === 'blob') {\n cb(xhr.response);\n } else {\n if (xhr.responseText) {\n cb(getResponseText());\n } else {\n error({ message: '' });\n }\n }\n };\n xhr.onload = () => {\n if ([401, 403, 404, 422, 500].indexOf(xhr.status) !== -1) {\n error(new NgwError(getResponseText()));\n }\n processingResponse();\n };\n\n xhr.onerror = (er) => {\n if (xhr.status === 0) {\n error(new NetworkError(url));\n } else {\n error(er);\n }\n };\n\n xhr.upload.onprogress = function (e) {\n if (e.lengthComputable) {\n const percentComplete = (e.loaded / e.total) * 100;\n if (options.onProgress) {\n options.onProgress(percentComplete, e);\n }\n // console.log(percentComplete + '% uploaded');\n }\n };\n\n const headers = options.headers;\n if (headers) {\n for (const h in headers) {\n const header = headers[h];\n if (typeof header === 'string') {\n xhr.setRequestHeader(h, header);\n }\n }\n }\n if (options.withCredentials !== undefined) {\n xhr.withCredentials = options.withCredentials;\n }\n\n let data: FormData | any;\n if (options.file) {\n data = new FormData();\n data.append('file', options.file);\n if (options.data) {\n for (const d in options.data) {\n data.append(d, data[d]);\n }\n }\n } else {\n data = options.data\n ? typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data)\n : null;\n }\n if (onCancel) {\n onCancel(() => {\n xhr.abort();\n });\n }\n xhr.send(data);\n };\n} else {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const url = require('url');\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const http = require('http');\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const https = require('https');\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const FormData = require('form-data');\n\n const adapterFor = (inputUrl: string) => {\n const adapters: Record<string, any> = {\n 'http:': http,\n 'https:': https,\n };\n const protocol = url.parse(inputUrl).protocol || 'https:';\n return adapters[protocol];\n };\n\n loadData = (\n url: string,\n callback: (...args: any[]) => any,\n options: NgwRequestOptions<RequestMethods> = {},\n error: (reason?: any) => void,\n onCancel: (cancelHandler: () => void) => void,\n ): Promise<unknown> => {\n const { file, headers, method, data, responseType } = options;\n\n const request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: headers || {},\n method,\n };\n const body = typeof data === 'string' ? data : JSON.stringify(data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n let form;\n let uploadedFile = file;\n if (file) {\n const fileMeta = {};\n if (\n isObject(file) &&\n 'file' in file &&\n ('filename' in file || 'name' in file)\n ) {\n const {\n file: file_,\n name,\n ...fileMeta_\n } = file as Record<string, any>;\n if (name && !fileMeta_.filename) {\n fileMeta_.filename = name;\n }\n Object.assign(fileMeta, fileMeta_);\n uploadedFile = file_ as File;\n }\n form = new FormData();\n form.append('file', uploadedFile, fileMeta);\n if (data) {\n for (const d in data) {\n form.append(d, data[d]);\n }\n }\n Object.assign(requestOpt.headers, {\n // 'content-length': form.getLengthSync(),\n ...form.getHeaders(),\n });\n }\n\n if (body !== undefined) {\n Object.assign(requestOpt.headers, {\n 'content-type': 'application/json',\n 'content-length': Buffer.byteLength(body),\n });\n }\n const req = adapter.request(url, requestOpt, (resp: any) => {\n let data = '';\n resp.on('data', (chunk: any) => {\n data += chunk;\n });\n resp.on('end', () => {\n if (data) {\n if (responseType === 'blob') {\n resolve(data);\n } else {\n let json: Record<string, any> | undefined;\n try {\n json = JSON.parse(data);\n if (json && json.status_code && json.status_code) {\n reject(json.message);\n }\n } catch (er) {\n reject(er);\n }\n if (json !== undefined) {\n if (isError(json)) {\n reject('extractError(json)');\n } else {\n resolve(json);\n }\n }\n }\n }\n reject('no data');\n });\n });\n if (form) {\n form.pipe(req);\n }\n req.on('error', (err: any) => {\n reject(err);\n });\n if (body) {\n req.write(body);\n }\n onCancel(() => {\n req.abort();\n });\n req.end();\n } else {\n throw new Error(`Given URL '${url}' is not correct`);\n }\n });\n return request\n .then((data) => {\n if (callback) {\n callback(data);\n }\n return data;\n })\n .catch((er) => {\n if (error) {\n error(er);\n } else {\n throw new Error(er);\n }\n });\n };\n}\n\nexport { loadData };\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { NgwConnectorOptions } from './interfaces';\nimport type { NgwConnector } from './NgwConnector';\n\nexport const CONNECTORS: NgwConnector[] = [];\n\nexport function addConnector(connector: NgwConnector): void {\n CONNECTORS.push(connector);\n}\n\nexport function findConnector(\n options: NgwConnectorOptions,\n): NgwConnector | undefined {\n return CONNECTORS.find((x) => {\n if (x.options.baseUrl === options.baseUrl) {\n if (options.auth) {\n if (x.options.auth) {\n return objectDeepEqual(x.options.auth, options.auth);\n }\n } else {\n // if auth not in find options; use first connector with same url\n return true;\n }\n }\n });\n}\n\nexport function removeConnector(connector: NgwConnector): void {\n const index = CONNECTORS.indexOf(connector);\n if (index !== -1) {\n CONNECTORS.splice(index, 1);\n }\n}\n\nexport function findAndRemoveConnector(options: NgwConnectorOptions): void {\n const exist = findConnector(options);\n if (exist) {\n removeConnector(exist);\n }\n}\n","import Cache from '@nextgis/cache';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\nimport { EventEmitter } from 'events';\n\nimport pkg from '../package.json';\n\nimport { AbortError } from './errors/AbortError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport { route } from './route/route';\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport * as errors from './errors';\n\nimport type { RouteName, RouteParameters } from './route/type';\nimport type {\n Credentials,\n NgwConnectorOptions,\n Params,\n PyramidRoute,\n RequestHeaders,\n RequestOptions,\n RequestTransformFunction,\n UserInfo,\n} from './interfaces';\n\nlet ID = 0;\nlet REQUEST_ID = 0;\n\nexport class NgwConnector {\n static errors = errors;\n id = ID++;\n emitter = new EventEmitter();\n user?: UserInfo;\n\n cache: Cache;\n withCredentials?: boolean = undefined;\n\n // Dedicated cache for route requests, as these are executed before any other requests.\n // This cache does not need to be cleared during the session.\n private readonly routeCache: Cache;\n private client = `NextGIS-NGW-Connector/${pkg.version}`;\n private routeStr = '/api/component/pyramid/route';\n private activeRequests: {\n [requestId: number]: AbortController;\n } = {};\n private requestTransform?: RequestTransformFunction | null;\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n this.cache = new Cache({ namespace: options.cacheId });\n this.routeCache = new Cache({ namespace: 'routecache' });\n if (exist) {\n return exist;\n } else {\n const { route, requestTransform, withCredentials } = this.options;\n if (route) {\n this.routeStr = route;\n }\n if (requestTransform) {\n this.requestTransform = requestTransform;\n }\n if (withCredentials !== undefined) {\n this.withCredentials = withCredentials;\n }\n addConnector(this);\n }\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clean();\n }\n\n setRequestTransform(\n requestTransform: RequestTransformFunction | undefined | null,\n ) {\n this.requestTransform = requestTransform;\n }\n\n /**\n * Fast way to specify the connection address to NextGIS Web.\n * The current connection will be severed.\n * @param baseUrl - NGW url\n */\n setNgw(baseUrl: string): void {\n this.logout();\n this.options.baseUrl = baseUrl;\n addConnector(this);\n }\n\n /**\n * Establishing a connection with NextGIS Web to fulfill all other requests.\n * @remarks\n * This method need not be called manually as it is used when forming a request in {@link apiRequest | apiRequest}.\n * Can be used to check connection.\n * @example\n * ```javascript\n * const connector = new NgwConnector({ baseUrl: 'https://demo.nextgis.com' });\n * connector.connect()\n * .then(() => console.log('Ok'))\n * .catch((er) => console.log('Connection problem', er));\n * ```\n */\n async connect({\n signal,\n }: Pick<RequestOptions, 'signal'> = {}): Promise<PyramidRoute> {\n const auth = this.options.auth;\n\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n await this._login({ login, password });\n }\n }\n const routeUrl = `${this.routeStr}?client=${this.client}`;\n return this.routeCache.add(this.options.baseUrl || String(this.id), () =>\n this.makeQuery<PyramidRoute>(routeUrl, null, { signal, cache: false }),\n );\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials, options?: RequestOptions): Promise<UserInfo> {\n this.logout();\n addConnector(this);\n return this._login(credentials, options);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n this.abort();\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.routeCache.clean();\n this.clearCache();\n this.emitter.emit('logout');\n }\n\n async getUserInfo(\n credentials?: Credentials,\n options?: RequestOptions,\n ): Promise<UserInfo> {\n if (this.user && this.user.id) {\n return this.user;\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options_: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n cache: true,\n ...options,\n };\n\n // Do not use apiRequest('auth.current_user') to avoid circular-references\n return this.makeQuery<UserInfo>(\n '/api/component/auth/current_user',\n {},\n options_,\n );\n }\n\n /**\n * Obtaining the required Headers for authentication of requests in the NGW.\n */\n getAuthorizationHeaders(credentials?: Credentials): RequestHeaders {\n const client = this.makeClientId(credentials);\n if (client) {\n return {\n Authorization: `Basic ${client}`,\n };\n }\n return {};\n }\n\n makeClientId(credentials?: Credentials): string | undefined {\n credentials = credentials || this.options.auth;\n if (credentials) {\n const { login, password } = credentials;\n const encodedStr = [login, password].map(encodeURIComponent).join(':');\n\n if (__BROWSER__) {\n return window.btoa(encodedStr);\n } else {\n return Buffer.from(encodedStr).toString('base64');\n }\n }\n }\n\n /** Stop all api requests */\n abort() {\n for (const abortController of Object.values(this.activeRequests)) {\n abortController.abort();\n }\n this.activeRequests = {};\n }\n\n getActiveApiRequests() {\n return { ...this.activeRequests };\n }\n\n route<N extends RouteName>(name: N, ...rest: RouteParameters[N]) {\n return route(name, this, ...rest);\n }\n\n /**\n * Send request to NGW.\n * @param url - URL address to NGW\n * @param params - Query params\n * @param options - Request options\n */\n async makeQuery<R = unknown>(\n url: string,\n params?: Params | null,\n options: RequestOptions = {},\n ): Promise<R> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (!url) {\n throw new Error('Empty `url` not allowed');\n }\n\n if (params) {\n const { paramList, ...restParams } = params;\n url = template(url, restParams);\n }\n url = encodeURI(fixUrlStr(url));\n\n options = { withCredentials: this.withCredentials, ...options };\n\n const {\n cache,\n signal: externalSignal,\n method = 'GET',\n headers,\n cacheName,\n cacheProps,\n responseType,\n withCredentials,\n } = options;\n\n const internalAbortController = new AbortController();\n const internalSignal = internalAbortController.signal;\n\n // If the external signal aborts, also abort the internal signal\n if (externalSignal) {\n if (externalSignal.aborted) {\n throw new AbortError();\n }\n externalSignal.addEventListener('abort', () => {\n internalAbortController.abort();\n });\n }\n\n options.signal = internalSignal;\n\n const createPromise = async () => {\n const id = REQUEST_ID++;\n this.activeRequests[id] = internalAbortController;\n try {\n return this._loadData<R>(url, options);\n } finally {\n this._cleanActiveRequest(id);\n }\n };\n\n if (method === 'GET' && cache !== false) {\n const cacheOptions = cacheProps\n ? cacheProps\n : {\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n userId: this.user?.id,\n }),\n params,\n };\n return this.cache.add(cacheName || url, createPromise, {\n props: cacheOptions,\n expirationTime: cache ? undefined : 500,\n });\n }\n\n return createPromise();\n }\n\n protected _loadData<R = unknown>(\n url: string,\n options: RequestOptions,\n ): Promise<R> {\n options.responseType = options.responseType || 'json';\n\n return new Promise<R>((resolve, reject) => {\n if (this.user) {\n options = options || {};\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n\n if (this.requestTransform) {\n const [transUrl, transOptions] = this.requestTransform(url, options);\n url = transUrl;\n options = transOptions;\n }\n\n let runOnAbort: (() => void) | undefined = undefined;\n\n loadData(url, resolve, options, reject, (handler: () => void) => {\n runOnAbort = handler;\n });\n\n options.signal?.addEventListener('abort', () => {\n if (runOnAbort !== undefined) {\n runOnAbort();\n }\n reject(new AbortError());\n });\n }).catch((httpError) => {\n if (httpError.name !== 'AbortError') {\n if (__DEV__) {\n console.warn('DEV WARN', httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n throw httpError;\n });\n }\n\n private async _login(\n credentials: Credentials,\n options?: RequestOptions,\n ): Promise<UserInfo> {\n try {\n const data = await this.getUserInfo(credentials, options);\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n } catch (er) {\n this.emitter.emit('login:error', er);\n throw er;\n }\n }\n\n private _cleanActiveRequest(requestId: number) {\n delete this.activeRequests[requestId];\n }\n\n private _handleHttpError(er: Error) {\n if (er) {\n if (er instanceof errors.NgwError) {\n if (er.exception === 'nextgisweb.resource.exception.ResourceNotFound') {\n throw new errors.ResourceNotFoundError(er);\n } else if (\n er.exception === 'nextgisweb.core.exception.InsufficientPermissions'\n ) {\n throw new InsufficientPermissionsError(er);\n }\n }\n }\n return er;\n }\n}\n","import { objectDeepEqual } from '@nextgis/utils';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { ResourceRead } from '@nextgisweb/resource/type/api';\n\nexport function resourceCompare(\n res1: DeepPartial<ResourceRead>,\n res2: DeepPartial<ResourceRead>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { defined } from '@nextgis/utils';\n\nimport { isObject } from './isObject';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { ResourceRead } from '@nextgisweb/resource/type/api';\n\nconst exclude = ['description'];\n\n/**\n * @remarks\n * https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#search-resources\n *\n * ```\n * { keyname, owner_user: { id }} > { keyname, owner_user__id }\n * ```\n *\n * @param resource - Any property from NGW resource item\n */\nexport function resourceToQuery(\n resource: DeepPartial<ResourceRead>,\n prefix = '',\n): Record<string, unknown> {\n prefix = prefix ? prefix + '__' : '';\n const query: Record<string, any> = {};\n for (const [key, value] of Object.entries(resource)) {\n if (exclude.indexOf(key) === -1) {\n if (isObject(value)) {\n if (key === 'owner_user') {\n const children = resourceToQuery(\n value as DeepPartial<ResourceRead>,\n key,\n );\n Object.assign(query, children);\n } else if (key === 'parent' && 'id' in value) {\n query.parent_id = value.id;\n }\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n }\n }\n return query;\n}\n","import Cache from '@nextgis/cache';\nimport { defined } from '@nextgis/utils';\n\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { isObject } from './utils/isObject';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { resourceToQuery } from './utils/resourceToQuery';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n CompositeRead,\n ResourceRead,\n} from '@nextgisweb/resource/type/api';\n\nimport type { GetRequestOptions } from './route/type';\nimport type { GetChildrenOfOptions, ResourceDefinition } from './interfaces';\nimport type { NgwConnectorExtended } from './NgwConnectorExtended';\n\nexport class ResourcesControl {\n cache: Cache<Promise<CompositeRead | undefined>, { id?: number | string }>;\n connector: NgwConnectorExtended;\n\n constructor({\n connector,\n cacheId,\n }: {\n connector: NgwConnectorExtended;\n cacheId?: string;\n }) {\n this.connector = connector;\n this.cache = new Cache({ namespace: cacheId });\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * Receive resource from NGW by id, keyname or search-object parameter.\n * @param resource - Resource id, keyname or search-object\n *\n * @remarks\n * Fetching resource would be cached to speed up next call\n */\n getOne(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n const forCache: { keyname?: string; display_name?: string; id?: number } =\n {};\n const opt = { ...requestOptions };\n if (typeof resource === 'string') {\n forCache.keyname = resource;\n } else if (typeof resource === 'number') {\n forCache.id = resource;\n } else if (isObject(resource)) {\n if (resource.id !== undefined) {\n forCache.id = resource.id;\n } else {\n if (resource.keyname) {\n forCache.keyname = resource.keyname;\n }\n if (resource.display_name) {\n forCache.display_name = resource.display_name;\n }\n }\n }\n\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, opt);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, opt);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, opt);\n }\n return Promise.resolve(undefined);\n }\n\n getOneOrFail(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead> {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res;\n }\n throw new ResourceNotFoundError();\n });\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * There are situations when exactly the resource id is needed\n * (for example, to compose the correct request to the api)\n * then this method will come in handy to facilitate the extraction of the identifier\n * if the resource is specified through a keyname or other parameters.\n */\n getId(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<number | undefined> {\n if (typeof resource === 'number') {\n return Promise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource, requestOptions).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return Promise.resolve(undefined);\n }\n\n /**\n * A fast way to retrieve resource ID for any resource definition.\n * @param resource - Any available resource definition\n *\n * @remarks\n * Similar with {@link NgwConnector.getResourceId | getResourceId} but rise error if resource is not exist.\n * To not make one more checks if the resource is definitely exists\n */\n getIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<number> {\n return this.getId(resource, requestOptions).then((resp) => {\n if (resp === undefined) {\n throw new Error();\n }\n return resp;\n });\n }\n\n getMany(\n resource: DeepPartial<ResourceRead>,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead[]> {\n return this._resourceCacheFilter(resource).then((items) => {\n if (!items.length) {\n const query: Record<string, unknown> = {};\n if (resource.keyname) {\n query.keyname = resource.keyname;\n } else {\n Object.assign(query, resourceToQuery(resource));\n }\n return this.connector\n .route('resource.search')\n .get({\n ...requestOptions,\n query: {\n serialization: 'full',\n ...query,\n },\n })\n .then((resources) => {\n if (requestOptions?.cache && resources) {\n for (const x of resources) {\n this.cache.add('resource.item', Promise.resolve(x), {\n id: x.resource.id,\n });\n }\n }\n return resources;\n });\n }\n return items;\n });\n }\n\n getParent(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n return this.getOne(resource, requestOptions).then((child) => {\n if (child?.resource?.parent?.id) {\n return this.getOne(child.resource.parent.id, requestOptions);\n }\n return Promise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): Promise<CompositeRead[]> {\n return this.getIdOrFail(resource).then((parent) =>\n this._getChildrenOf(parent, requestOptions),\n );\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<CompositeRead>,\n ): Promise<CompositeRead | undefined> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.put('resource.item', { data }, { id });\n }\n });\n }\n\n /**\n * Fast way to delete resource from NGW and clean cache.\n * @param resource - Resource definition\n */\n delete(resource: ResourceDefinition): Promise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this._cleanResourceItemCache(id);\n return undefined;\n });\n }\n });\n }\n\n private async _getChildrenOf(\n parentDef: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n _items: CompositeRead[] = [],\n ): Promise<CompositeRead[]> {\n let parent: number | undefined = undefined;\n if (typeof parentDef === 'string') {\n parent = await this.getId(parentDef, requestOptions);\n } else if (typeof parentDef === 'object') {\n parent = parentDef.id;\n } else {\n parent = parentDef;\n }\n\n const items = await this.connector.route('resource.collection').get({\n ...requestOptions,\n query: {\n parent: parent,\n },\n });\n\n const recursivePromises = [];\n for (const item of items) {\n if (requestOptions?.cache) {\n this.cache.add('resource.item', Promise.resolve(item), {\n id: item.resource.id,\n });\n }\n _items.push(item);\n if (requestOptions?.recursive && item.resource.children) {\n recursivePromises.push(\n this._getChildrenOf(item.resource.id, requestOptions, _items),\n );\n }\n }\n if (recursivePromises.length) {\n return Promise.all(recursivePromises).then(() => {\n return _items;\n });\n }\n return _items;\n }\n\n private async _cleanResourceItemCache(id: number) {\n const all = this.cache.all();\n const toDelete: typeof all = [];\n for (const c of all) {\n const cid = c.props?.id;\n if (['resource.item', 'resource'].includes(c.key) && cid !== undefined) {\n if (typeof cid === 'number') {\n if (cid === id) {\n toDelete.push(c);\n }\n } else {\n const rid = await this.getId(cid);\n if (rid === id) {\n toDelete.push(c);\n }\n }\n }\n }\n for (const d of toDelete) {\n this.cache.delete(d);\n }\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n return this.connector.route('resource.item', { id }).get(requestOptions);\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<ResourceRead>,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n return this.getMany(resource, requestOptions).then((resources) => {\n return resources[0];\n });\n }\n\n private _resourceCacheFilter(\n resource: DeepPartial<ResourceRead>,\n ): Promise<CompositeRead[]> {\n return Promise.all(this.cache.matchAll('resource.item')).then(\n (resources) => {\n const items: CompositeRead[] = [];\n resources.filter((x) => {\n if (x) {\n // identical by uniq props\n if (resource.keyname && x.resource.keyname) {\n return resource.keyname === x.resource.keyname;\n }\n if (defined(resource.id) && defined(x.resource.id)) {\n return resource.id === x.resource.id;\n }\n return resourceCompare(resource, x.resource);\n }\n });\n return items;\n },\n );\n }\n}\n","import { objectRemoveEmpty } from '@nextgis/utils';\n\nimport { apiRequest } from './utils/apiRequest';\nimport { NgwConnector } from './NgwConnector';\nimport { ResourcesControl } from './ResourcesControl';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n CompositeRead,\n ResourceRead,\n} from '@nextgisweb/resource/type/api';\n\nimport type { GetRequestOptions } from './route/type';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type {\n DeleteRequestItemsResponseMap,\n GetChildrenOfOptions,\n GetRequestItemsResponseMap,\n NgwConnectorOptions,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n RequestItemKeys,\n RequestItemsParams,\n RequestOptions,\n ResourceDefinition,\n ResourceIdKeynameDef,\n} from './interfaces';\n\nexport class NgwConnectorExtended extends NgwConnector {\n resources!: ResourcesControl;\n\n constructor(options: NgwConnectorOptions) {\n super(options);\n this.resources = new ResourcesControl({\n connector: this,\n cacheId: options.cacheId,\n });\n }\n\n static create(options: NgwConnectorOptions): NgwConnectorExtended {\n return new this(options);\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n super.clearCache();\n this.resources.cache.clean();\n }\n\n /**\n * Send request to NGW api router.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param params - Request item params or query params\n * @param requestOptions - Request options\n *\n * @example\n * ```javascript\n *\n * // there is such an NGW route item\n * // \"feature_layer.feature.item\": [\n * // \"/api/resource/{0}/feature/{1}\",\n * // \"id\",\n * // \"fid\"\n * // ],\n *\n * const connector = new NgwConnector({ baseUrl: 'https://example.nextgis.com' });\n * connector.apiRequest('feature_layer.feature.item', {\n * // request params for {0} and {1}\n * 'id': 2011,\n * 'fid': 101,\n * // query params\n * 'srs': 4326,\n * 'geom_format': 'geojson',\n * }, { method: 'GET' });\n * // send get-request to 'https://example.nextgis.com/api/resource/2011/feature/101?srs=4326&geom_format=geojson'\n *\n * ```\n */\n apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n >(\n name: K,\n params_: RequestItemsParams<K> = {},\n requestOptions: RequestOptions = {},\n ): Promise<P[K]> {\n params_ = requestOptions.params ?? params_;\n const params = objectRemoveEmpty(params_);\n return apiRequest({ name, params, requestOptions, connector: this });\n }\n\n /**\n * Shortcut method for send POST request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n *\n * @example\n * ```javascript\n * connector.post('resource.collection', { data: POST_PAYLOAD })\n * .then((newResource) => console.log(newResource))\n * .catch((error) => console.warn(error));\n * ```\n */\n post<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'POST', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PostRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'POST';\n return this.apiRequest<K, PostRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send GET request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n get<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'GET', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): Promise<GetRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'GET';\n return this.apiRequest<K, GetRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PATCH request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n patch<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PATCH', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PatchRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PATCH';\n return this.apiRequest<K, PatchRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send PUT request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n put<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'PUT', K>,\n params?: RequestItemsParams<K>,\n ): Promise<PutRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'PUT';\n return this.apiRequest<K, PutRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n /**\n * Shortcut method for send DELETE request to NGW.\n * @param name - NGW route name from {@link https://docs.nextgis.com/docs_ngweb_dev/doc/developer/resource.html#routes | routes}\n * @param options - Request options\n * @param params - Request item params or query params\n */\n delete<K extends keyof RequestItemsParamsMap>(\n name: K,\n options?: RequestOptions<'DELETE', K> | undefined | null,\n params?: RequestItemsParams<K>,\n ): Promise<DeleteRequestItemsResponseMap[K]> {\n options = options || {};\n options.method = 'DELETE';\n return this.apiRequest<K, DeleteRequestItemsResponseMap>(\n name,\n params,\n options,\n );\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@link ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n return this.resources.getOne(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead> {\n return this.resources.getOneOrFail(resource, requestOptions);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceBy(\n resource: DeepPartial<ResourceRead>,\n ): Promise<CompositeRead | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceByKeyname(keyname: string): Promise<CompositeRead | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link getResource}\n */\n getResourceById(id: number): Promise<CompositeRead | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@link ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<number | undefined> {\n return this.resources.getId(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<number> {\n return this.resources.getIdOrFail(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<ResourceRead>,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead[]> {\n return this.resources.getMany(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n requestOptions?: GetRequestOptions,\n ): Promise<CompositeRead | undefined> {\n return this.resources.getParent(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n requestOptions?: GetChildrenOfOptions,\n ): Promise<CompositeRead[]> {\n return this.resources.getChildrenOf(resource, requestOptions);\n }\n\n /**\n * {@link ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<CompositeRead>,\n ): Promise<CompositeRead | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@link ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): Promise<void> {\n return this.resources.delete(resource);\n }\n}\n","import type NgwConnector from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { WebMapRead } from '@nextgisweb/webmap/type/api';\n\nimport type {\n FetchNgwLayerExtentOptions,\n FetchNgwLayerItemExtentOptions,\n} from '../interfaces';\n\nexport function getNgwWebmapExtent(\n webmap: WebMapRead,\n): LngLatBoundsArray | undefined {\n const bottom = webmap['extent_bottom'];\n const left = webmap['extent_left'];\n const top = webmap['extent_top'];\n const right = webmap['extent_right'];\n if (bottom && left && top && right) {\n const extent: LngLatBoundsArray = [left, bottom, right, top];\n if (extent[3] > 82) {\n extent[3] = 82;\n }\n if (extent[1] < -82) {\n extent[1] = -82;\n }\n return extent;\n }\n}\n\nexport function fetchNgwLayerExtent({\n resourceId,\n connector,\n cache = true,\n signal,\n}: FetchNgwLayerExtentOptions): Promise<LngLatBoundsArray | undefined> {\n return connector\n .route('layer.extent', { id: Number(resourceId) })\n .get({ cache, signal })\n .then((resp) => {\n if (resp) {\n const { maxLat, maxLon, minLat, minLon } = resp.extent;\n const extentArray: LngLatBoundsArray = [minLon, minLat, maxLon, maxLat];\n return extentArray;\n }\n });\n}\n\nexport function fetchNgwLayerItemExtent({\n resourceId,\n featureId,\n connector,\n cache = true,\n signal,\n}: FetchNgwLayerItemExtentOptions): Promise<LngLatBoundsArray | undefined> {\n return connector\n .route('feature_layer.feature.item_extent', {\n id: Number(resourceId),\n fid: featureId,\n })\n .get({ cache, signal })\n .then((resp) => {\n if (resp && resp.extent) {\n const { maxLat, maxLon, minLat, minLon } = resp.extent;\n const extentArray: LngLatBoundsArray = [minLon, minLat, maxLon, maxLat];\n return extentArray;\n }\n });\n}\n\nexport function fetchNgwExtent(\n options: FetchNgwLayerExtentOptions,\n): Promise<LngLatBoundsArray | undefined> {\n return options.connector\n .getResource(options.resourceId, {\n signal: options.signal,\n cache: options.cache,\n })\n .then((resource) => {\n if (resource) {\n return fetchNgwResourceExtent(resource, options.connector, options);\n }\n });\n}\n\n/** @deprecated use {@link fetchNgwExtent} instead */\nexport function fetchNgwResourceExtent(\n item: CompositeRead,\n connector: NgwConnector,\n options?: FetchNgwLayerExtentOptions,\n): Promise<LngLatBoundsArray | undefined> {\n if (item.webmap) {\n return Promise.resolve(getNgwWebmapExtent(item.webmap));\n } else {\n const resource = item.resource;\n if (\n resource.cls &&\n resource.parent &&\n resource.cls.indexOf('style') !== -1\n ) {\n return connector.getResource(resource.parent.id, options).then((res) => {\n if (res) {\n return fetchNgwLayerExtent({\n ...options,\n resourceId: res.resource.id,\n connector,\n });\n }\n });\n } else {\n return fetchNgwLayerExtent({\n ...options,\n resourceId: resource.id,\n connector,\n });\n }\n }\n}\n","import { fetchNgwResourceExtent } from './utils/fetchNgwExtent';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\n\nimport type { FetchNgwLayerExtentOptions } from './interfaces';\n\nexport class NgwResource {\n item!: CompositeRead;\n connector!: NgwConnector;\n\n protected _extent?: LngLatBoundsArray;\n\n /** @deprecated use {@link NgwResource.getBounds} instead */\n async getExtent(): Promise<LngLatBoundsArray | undefined> {\n return this.getBounds();\n }\n\n async getBounds(\n options?: FetchNgwLayerExtentOptions,\n ): Promise<LngLatBoundsArray | undefined> {\n if (this._extent) {\n return this._extent;\n }\n if (this.item) {\n this._extent = await fetchNgwResourceExtent(\n this.item,\n this.connector,\n options,\n );\n return this._extent;\n }\n }\n}\n","import type NgwConnector from '@nextgis/ngw-connector';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\n\nimport type { NgwLayerOptions } from '../interfaces';\n\nexport async function resourceIdFromLayerOptions(\n options: NgwLayerOptions,\n connector: NgwConnector,\n): Promise<number> {\n const resource = options.resource;\n const item = resource as CompositeRead;\n\n // @ts-expect-error @deprecated\n let { keyname, resourceId } = options;\n\n if (resource) {\n if (typeof resource === 'string') {\n keyname = resource;\n } else if (typeof resource === 'number') {\n resourceId = resource;\n } else if (\n item.resource &&\n item.resource !== undefined &&\n 'resource' in item\n ) {\n resourceId = (resource as CompositeRead).resource.id;\n } else {\n // TODO: safe remove this case\n resourceId = await resourceIdFromLayerOptions(resource as any, connector);\n }\n }\n if (!resourceId && keyname) {\n const resourceItem = await connector.getResource(keyname);\n if (resourceItem) {\n resourceId = resourceItem.resource.id;\n }\n }\n return resourceId;\n}\n","import type { Type } from '@nextgis/utils';\nimport type { AdapterOptions, MainLayerAdapter, WebMap } from '@nextgis/webmap';\n\ninterface CreateOnFirstShowAdapterOptions {\n webMap: WebMap;\n adapterOptions?: Record<string, any>;\n onLayerAdded?: <L extends MainLayerAdapter = MainLayerAdapter>(\n layer: L,\n ) => void;\n createAdapter: (\n firstShowAdapter: FirstShowAdapter,\n ) => Promise<Type<MainLayerAdapter> | undefined>;\n}\n\ninterface FirstShowAdapter extends MainLayerAdapter {\n loadLayer: () => Promise<MainLayerAdapter[]>;\n destroyed: () => boolean;\n}\n\nexport async function createOnFirstShowAdapter({\n webMap,\n adapterOptions = {},\n onLayerAdded,\n createAdapter,\n}: CreateOnFirstShowAdapterOptions): Promise<Type<FirstShowAdapter>> {\n class OnFirstShowAdapter implements MainLayerAdapter {\n options: AdapterOptions = {};\n layer: MainLayerAdapter[] = [];\n _removed = false;\n _creatingInProgress = false;\n\n addLayer() {\n return this.layer;\n }\n\n removeLayer() {\n this._removed = true;\n for (const l of this.layer) {\n webMap.removeLayer(l);\n }\n }\n\n destroyed() {\n return this._removed;\n }\n\n async showLayer() {\n this.options.visibility = true;\n if (this.layer.length) {\n for (const x of this.layer) {\n await webMap.showLayer(x);\n }\n } else {\n await this.loadLayer();\n }\n }\n\n async hideLayer() {\n this.options.visibility = false;\n if (this.layer) {\n for (const x of this.layer) {\n await webMap.hideLayer(x);\n }\n }\n }\n\n async loadLayer() {\n if (!this.layer.length && !this._creatingInProgress) {\n this._creatingInProgress = true;\n const Adapter = await createAdapter(this);\n if (Adapter) {\n const adapter = new Adapter(webMap.mapAdapter.map, {\n ...adapterOptions,\n });\n const realLayer: MainLayerAdapter = await adapter.addLayer({\n order: this.options.order,\n headers: this.options.headers,\n baselayer: this.options.baselayer,\n });\n if (onLayerAdded) {\n onLayerAdded(adapter);\n }\n Object.assign(adapter.options, adapterOptions);\n adapter.layer = realLayer;\n if (this._removed) {\n webMap.removeLayer(adapter);\n }\n this.layer.push(adapter);\n if (this.options.visibility) {\n await webMap.showLayer(adapter);\n }\n this._creatingInProgress = false;\n }\n }\n return this.layer;\n }\n }\n return OnFirstShowAdapter;\n}\n","import { createAsyncAdapter } from './createAsyncAdapter';\nimport { createOnFirstShowAdapter } from './createOnFirstShowAdapter';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, WebMap } from '@nextgis/webmap';\nimport type { BasemapWebMapItemRead } from '@nextgisweb/basemap/type/api';\n\ninterface CreateOnFirstShowAdapterOptions {\n webMap: WebMap;\n connector: NgwConnector;\n item: BasemapWebMapItemRead;\n adapterOptions?: Record<string, any>;\n idPrefix?: string;\n}\n\nexport async function createOnFirstShowNgwAdapter({\n webMap,\n connector,\n item,\n adapterOptions = {},\n idPrefix = 'first-show-adapter',\n}: CreateOnFirstShowAdapterOptions): Promise<Type<MainLayerAdapter>> {\n const createAdapter = () => {\n return createAsyncAdapter(\n {\n resource: item.resource_id,\n adapterOptions: {\n name: item.display_name,\n opacity: item.opacity,\n },\n },\n webMap,\n connector,\n );\n };\n const onLayerAdded = (adapter: MainLayerAdapter) => {\n adapter.options.baselayer = false;\n adapter.id = idPrefix + '-' + item.resource_id;\n };\n\n const OnFirstNgwShowAdapter = createOnFirstShowAdapter({\n webMap,\n adapterOptions,\n onLayerAdded,\n createAdapter,\n });\n\n return OnFirstNgwShowAdapter;\n}\n","import type { Feature } from 'geojson';\n\nimport type {\n Operation,\n Properties,\n PropertiesFilter,\n PropertyFilter,\n} from './interfaces';\n\nfunction reEscape(s: string): string {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction like(b: string, a: string, iLike?: boolean): boolean {\n a = String(a);\n b = String(b);\n if (a === b) return true;\n if (iLike && a.toUpperCase() === b.toUpperCase()) return true;\n const re = `^${reEscape(a)}$`.replace(/%/g, '.*').replace('_', '.');\n return new RegExp(re, iLike ? 'i' : '').exec(b) !== null;\n}\n\nexport const operationsAliases: {\n [key in Operation]: (a: any, b: any) => boolean;\n} = {\n // greater(>)\n gt: (a: any, b: any) => a > b,\n // lower(<)\n lt: (a: any, b: any) => a < b,\n // greater or equal(>=)\n ge: (a: any, b: any) => a >= b,\n // lower or equal(<=)\n le: (a: any, b: any) => a <= b,\n // equal(=)\n eq: (a: any, b: any) => a === b,\n // not equal(!=)\n ne: (a: any, b: any) => a !== b,\n\n in: (a: any, b: any[]) => b.indexOf(a) !== -1,\n notin: (a: any, b: any[]) => b.indexOf(a) === -1,\n // LIKE SQL statement(for strings compare)\n like: (a: string, b: string) => {\n return like(a, b);\n },\n // ILIKE SQL statement(for strings compare)\n ilike: (a: string, b: string) => {\n return like(a, b, true);\n },\n};\n\nexport function isPropertyFilter(\n filter: PropertyFilter | PropertiesFilter | string,\n): filter is PropertyFilter {\n const pf = filter as PropertyFilter;\n if (\n pf.length === 3 &&\n typeof pf[0] === 'string' &&\n typeof pf[1] === 'string'\n ) {\n return true;\n }\n return false;\n}\n\n/** @deprecated use {@link isPropertyFilter} instead */\nexport function checkIfPropertyFilter(\n filter: PropertyFilter | PropertiesFilter | string,\n): filter is PropertyFilter {\n return isPropertyFilter(filter);\n}\n\nexport function featureFilter(\n feature: Feature,\n filters: PropertiesFilter,\n): boolean {\n const properties: Properties = { ...feature.properties };\n if (properties) {\n // workaround to filter by feature id\n properties.$id = feature.id;\n return propertiesFilter(properties, filters);\n }\n return false;\n}\n\nexport function propertiesFilter<T extends Properties = Properties>(\n properties: T,\n filters: PropertiesFilter<T>,\n): boolean {\n const logic = typeof filters[0] === 'string' ? filters[0] : 'all';\n const filterFunction = (p: PropertyFilter | PropertiesFilter) => {\n if (isPropertyFilter(p)) {\n const [field, operation, value] = p;\n const operationExec = operationsAliases[operation];\n if (operationExec) {\n if (operation === 'like' || operation === 'ilike') {\n if (typeof field === 'string') {\n let prop = '';\n const value_ = field.replace(/^%?(\\w+)%?$/, (match, cleanField) => {\n prop = properties[cleanField];\n return field.replace(cleanField, value);\n });\n return operationExec(prop, value_);\n }\n }\n return operationExec(properties[field], value);\n }\n return false;\n } else {\n return propertiesFilter(properties, p);\n }\n };\n const filters_ = filters.filter((x) => Array.isArray(x)) as (\n | PropertyFilter\n | PropertiesFilter\n )[];\n return logic === 'any'\n ? filters_.some(filterFunction)\n : filters_.every(filterFunction);\n}\n","import { isPropertyFilter } from '@nextgis/properties-filter';\nimport {\n defined,\n degrees2meters,\n getBoundsCoordinates,\n isLngLatBoundsArray,\n round,\n} from '@nextgis/utils';\n\nimport type {\n FeatureItem,\n RequestItemAdditionalParams,\n} from '@nextgis/ngw-connector';\nimport type {\n PropertiesFilter,\n PropertyFilter,\n} from '@nextgis/properties-filter';\nimport type { FeatureProperties, LngLatArray } from '@nextgis/utils';\nimport type { Feature, Geometry } from 'geojson';\n\nimport type {\n FeatureRequestParams,\n FetchNgwItemsOptions,\n NgwFeatureRequestOptions,\n} from '../interfaces';\n\nexport const FEATURE_REQUEST_PARAMS: FeatureRequestParams = {\n srs: 4326,\n geom_format: 'geojson',\n dt_format: 'iso',\n};\n\nexport function createGeoJsonFeature<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(item: Pick<FeatureItem, 'id' | 'geom' | 'fields'>): Feature<G, P> {\n const geometry = item.geom as G;\n const feature: Feature<G, P> = {\n geometry,\n id: item.id,\n type: 'Feature',\n properties: item.fields as P,\n };\n return feature;\n}\n\nexport function updateItemRequestParam<\n P extends FeatureProperties = FeatureProperties,\n>(params: FeatureRequestParams, options: NgwFeatureRequestOptions<P>): void {\n const { extensions, geom, fields, srs, ilike, like } = options;\n // Empty extesions by default\n params.extensions = extensions ? extensions : [];\n\n if (fields) {\n params.fields = fields as string[];\n }\n if (geom !== undefined) {\n params.geom = geom;\n if (!geom) {\n delete params.srs;\n delete params.geom_format;\n }\n }\n if (defined(ilike)) {\n // @ts-expect-error check ngw typegen\n params.ilike = ilike;\n } else if (defined(like)) {\n // @ts-expect-error check ngw typegen\n params.like = like;\n }\n if (defined(srs)) {\n params.srs = srs;\n }\n}\n\nfunction paramListToQuery(paramList: [string, any][]): Record<string, any> {\n return paramList.reduce(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {} as Record<string, any>,\n );\n}\n\n// NGW REST API is not able to filtering by combined queries\n// therefore the filter is divided into several requests\nexport async function createFeatureFieldFilterQueries<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(\n opt: FetchNgwItemsOptions<P> &\n Required<Pick<FetchNgwItemsOptions, 'filters'>>,\n): Promise<FeatureItem<P, G>[]> {\n const queries: Promise<FeatureItem<P, G>[]>[] = getQueries<G, P>(opt);\n\n const itemsParts = await Promise.all(queries);\n // this list of ids used for optimization\n const ids: number[] = [];\n const items: FeatureItem<P, G>[] = [];\n for (const part of itemsParts) {\n for (const item of part) {\n if (!ids.includes(item.id)) {\n items.push(item);\n ids.push(item.id);\n }\n }\n }\n const offset = opt.offset !== undefined ? opt.offset : 0;\n const limit = opt.limit !== undefined ? opt.limit : items.length;\n if (opt.offset || opt.limit) {\n return items.splice(offset, limit);\n }\n return items;\n}\n\nfunction createParam(pf: PropertyFilter): [string, any] {\n const [field, operation, value] = pf;\n const isFldStr = field !== 'id' ? 'fld_' : '';\n let vStart = '';\n let vEnd = '';\n const field_ = String(field)\n .trim()\n .replace(/^(%?)(.+?)(%?)$/, (m, a, b, c) => {\n vStart = a;\n vEnd = c;\n return b;\n });\n const v = vStart + value + vEnd;\n return [`${isFldStr}${field_}__${operation}`, v];\n}\n\nfunction getQueries<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(\n opt: FetchNgwItemsOptions<P> &\n Required<Pick<FetchNgwItemsOptions, 'filters'>>,\n _queries: Promise<FeatureItem<P, G>[]>[] = [],\n _parentAllParams: [string, any][] = [],\n): Promise<FeatureItem<P, G>[]>[] {\n const { filters } = opt;\n const paramList = opt.paramList ?? [];\n\n const logic = typeof filters[0] === 'string' ? filters[0] : 'all';\n const filters_ = filters.filter((x) => Array.isArray(x)) as PropertyFilter[];\n\n if (logic === 'any') {\n for (const f of filters_) {\n if (isPropertyFilter(f)) {\n _queries.push(\n fetchNgwLayerItemsRequest<G, P>({\n ...opt,\n paramList: [..._parentAllParams, ...paramList, createParam(f)],\n }),\n );\n } else {\n getQueries({ ...opt, filters: f }, _queries, [..._parentAllParams]);\n }\n }\n } else if (logic === 'all') {\n const filters: [string, any][] = [];\n const propertiesFilterList: PropertiesFilter[] = [];\n for (const f of filters_) {\n if (isPropertyFilter(f)) {\n filters.push(createParam(f));\n } else {\n propertiesFilterList.push(f);\n }\n }\n\n if (propertiesFilterList.length) {\n for (const x of propertiesFilterList) {\n getQueries({ ...opt, filters: x }, _queries, [\n ..._parentAllParams,\n ...filters,\n ]);\n }\n } else {\n _queries.push(\n fetchNgwLayerItemsRequest<G, P>({\n ...opt,\n paramList: [..._parentAllParams, ...paramList, ...filters],\n }),\n );\n }\n }\n return _queries;\n}\n\nfunction createWktFromCoordArray(coord: LngLatArray[]): string {\n const polygon = coord.map(([lng, lat]) => {\n const [x, y] = degrees2meters(lng, lat).map((c) => round(c));\n return x + ' ' + y;\n });\n return `POLYGON((${polygon.join(', ')}))`;\n}\n\nexport function fetchNgwLayerItemsRequest<\n G extends Geometry = Geometry,\n P extends { [field: string]: any } = { [field: string]: any },\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureItem<P, G>[]> {\n const params: FeatureRequestParams & RequestItemAdditionalParams = {\n ...FEATURE_REQUEST_PARAMS,\n };\n const {\n limit,\n query,\n cache,\n signal,\n offset,\n orderBy,\n paramList,\n connector,\n geomFormat,\n intersects,\n resourceId,\n } = options;\n\n if (typeof limit === 'number' && limit !== Number.POSITIVE_INFINITY) {\n params.limit = limit;\n }\n\n if (offset) {\n params.offset = offset;\n }\n\n if (geomFormat) {\n params.geom_format = geomFormat;\n }\n\n updateItemRequestParam(params, options);\n\n if (orderBy) {\n params.order_by = orderBy.join(',');\n }\n\n if (Array.isArray(intersects)) {\n const coordinates = isLngLatBoundsArray(intersects)\n ? getBoundsCoordinates(intersects)\n : intersects;\n params.intersects = createWktFromCoordArray(coordinates);\n } else if (typeof intersects === 'string') {\n params.intersects = intersects;\n }\n\n if (paramList) {\n Object.assign(params, paramListToQuery(paramList));\n }\n\n return connector\n .route('feature_layer.feature.collection', { id: Number(resourceId) })\n .get({ query: { ...params, ...query }, cache, signal }) as Promise<\n FeatureItem<P, G>[]\n >;\n}\n","import { defined, isObject } from '@nextgis/utils';\n\nimport type { NgwDateFormat, NgwDateTimeFormat } from '@nextgis/ngw-connector';\n\nexport function prepareNgwFieldsToPropertiesFilter(\n fields: Record<string, any>,\n): Record<string, any> {\n let f: keyof typeof fields;\n for (f in fields) {\n const field = fields[f];\n if (isObject(field)) {\n const date = field as NgwDateFormat | NgwDateTimeFormat;\n if (defined(date.year) && defined(date.month) && defined(date.day)) {\n const dt: [number, number, number, number?, number?, number?] = [\n date.year,\n date.month - 1,\n date.day,\n ];\n if ('hour' in date) {\n [date.hour, date.minute, date.second].forEach((x) => {\n dt.push(x);\n });\n }\n fields[f] = new Date(...dt).toISOString();\n }\n } else if (f === 'id' && typeof field === 'string') {\n fields[f] = field.split(',').map(Number);\n }\n }\n return fields;\n}\n","import { propertiesFilter } from '@nextgis/properties-filter';\nimport { isArray } from '@nextgis/utils';\n\nimport {\n createFeatureFieldFilterQueries,\n fetchNgwLayerItemsRequest,\n} from './featureLayerUtils';\nimport { prepareNgwFieldsToPropertiesFilter } from './prepareNgwFieldsToPropertiesFilter';\n\nimport type { FeatureItem } from '@nextgis/ngw-connector';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { Geometry } from 'geojson';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\n\nexport async function fetchNgwLayerItems<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureItem<P, G>[]> {\n const filters = options.filters;\n if (filters) {\n let data = await createFeatureFieldFilterQueries({\n ...options,\n filters,\n });\n const clientFilterValidate =\n options.clientFilterValidate ?? isFilterWithAnyCase(filters);\n // Additional client-side filter check\n if (clientFilterValidate) {\n data = data.filter((y) => {\n const fields = prepareNgwFieldsToPropertiesFilter({\n ...y.fields,\n id: y.id,\n });\n const result = propertiesFilter(fields, filters);\n return result;\n });\n }\n return data as FeatureItem<P, G>[];\n } else {\n return fetchNgwLayerItemsRequest<G, P>(options);\n }\n}\n\nfunction isFilterWithAnyCase(filters: PropertiesFilter): boolean {\n if (filters[0] === 'any') {\n return true;\n }\n for (let i = 1; i < filters.length; i++) {\n const p = filters[i];\n if (isArray(p)) {\n const deep = isFilterWithAnyCase(p);\n if (deep) {\n return true;\n }\n }\n }\n return false;\n}\n","import { updateImageParams } from './utils';\n\nimport type {\n ImageAdapterOptions,\n MvtAdapterOptions,\n RasterAdapterOptions,\n WebMap,\n WmsAdapterOptions,\n} from '@nextgis/webmap';\n\nimport type { NgwLayerOptions, TileNoData } from '../interfaces';\n\nexport interface GetLayerAdapterOptions {\n options: NgwLayerOptions;\n webMap?: WebMap;\n baseUrl?: string;\n}\n\nexport interface GetImageAdapterOptionsParams {\n resourceId: number | number[];\n baseUrl?: string;\n nd?: TileNoData;\n headers: any;\n}\n\nexport function getImageAdapterOptions({\n resourceId,\n baseUrl,\n nd,\n headers,\n}: GetImageAdapterOptionsParams): ImageAdapterOptions {\n const url = baseUrl + '/api/component/render/image';\n const params: Record<string, any> = { resource: resourceId };\n if (nd) {\n params.nd = nd;\n }\n return {\n url,\n resourceId,\n headers,\n params,\n updateWmsParams: (params_: Record<string, any>) => {\n if (nd) {\n params_.nd = nd;\n }\n return updateImageParams(params_, resourceId);\n },\n } as ImageAdapterOptions;\n}\n\nexport function ngwApiToAdapterOptions({\n options,\n webMap,\n baseUrl,\n}: GetLayerAdapterOptions):\n | MvtAdapterOptions\n | RasterAdapterOptions\n | ImageAdapterOptions\n | undefined {\n let adapter = options.adapter || 'IMAGE';\n let url: string;\n const layerAdapters = webMap && webMap.getLayerAdapters();\n const isImageAllowed = layerAdapters ? layerAdapters.IMAGE : true;\n\n const resourceId = options.resource;\n const nd: TileNoData = options.tileNoData ? options.tileNoData : 200;\n\n if (typeof resourceId === 'number') {\n if (adapter === 'IMAGE') {\n if (isImageAllowed) {\n return getImageAdapterOptions({\n resourceId,\n headers: options.headers,\n nd,\n baseUrl,\n });\n } else {\n adapter = 'TILE';\n }\n }\n if (adapter === 'WMS') {\n url = `${baseUrl}/api/resource/${resourceId}/wms`;\n const adapterOptions = options.adapterOptions as WmsAdapterOptions;\n return {\n url,\n format: 'image/png',\n version: '1.1.1',\n layers: adapterOptions && adapterOptions.layers,\n headers: options.headers,\n };\n }\n if (adapter === 'MVT') {\n url =\n baseUrl +\n '/api/component/feature_layer/mvt?x={x}&y={y}&z={z}&' +\n 'resource=' +\n resourceId +\n '&simplification=' +\n (options.simplification ?? 6);\n // url = baseUrl + '/api/resource/' + options.resourceId + '/{z}/{x}/{y}.mvt';\n return {\n url,\n sourceLayer: 'ngw:' + resourceId,\n featureIdName: '$id',\n };\n }\n if (adapter === 'TERRAIN') {\n url = baseUrl + `/api/resource/${resourceId}/terrain_provider`;\n // `/api/resource/${resourceId}/terrain_provider/{z}/{x}/{y}.terrain`;\n return { url, adapter };\n }\n if (adapter === 'MODEL_3D') {\n url = baseUrl + `/api/component/model_3d/${resourceId}/data.glb`;\n return { url };\n }\n if (adapter === 'TILE') {\n url =\n baseUrl +\n '/api/component/render/tile?z={z}&x={x}&y={y}&resource=' +\n resourceId +\n '&nd=' +\n nd;\n return { url, adapter };\n }\n } else if (resourceId !== undefined) {\n throw new Error(\n 'Option `resource` must be number, not ' + typeof resourceId,\n );\n } else {\n console.log('Option `resource` not set');\n }\n}\n\n/** @deprecated use {@link ngwApiToAdapterOptions} instead */\nexport function getLayerAdapterOptions(\n options: NgwLayerOptions,\n webMap: WebMap,\n baseUrl: string,\n): RasterAdapterOptions | ImageAdapterOptions | undefined {\n return ngwApiToAdapterOptions({ options, webMap, baseUrl });\n}\n","import {\n createGeoJsonFeature,\n FEATURE_REQUEST_PARAMS,\n updateItemRequestParam,\n} from './featureLayerUtils';\n\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type Routes from '@nextgisweb/pyramid/type/route';\nimport type { Geometry } from 'geojson';\n\nimport type {\n FetchNgwItemOptions,\n NgwFeatureItemResponse,\n} from '../interfaces';\n\nexport async function fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemOptions<P>): Promise<NgwFeatureItemResponse<P, G>> {\n const params: Routes['feature_layer.feature.item']['get']['query'] = {\n ...FEATURE_REQUEST_PARAMS,\n };\n updateItemRequestParam(params, options);\n\n const resp = await options.connector\n .route('feature_layer.feature.item', {\n id: Number(options.resourceId),\n fid: options.featureId,\n })\n .get({ ...options, query: params });\n\n const toGeojson = async () => {\n if (resp.geom) {\n return createGeoJsonFeature<G, P>(resp);\n } else {\n const onlyGeomItem = await fetchNgwLayerItem({\n ...options,\n geom: true,\n fields: null,\n extensions: null,\n });\n const geom = onlyGeomItem.geom;\n return createGeoJsonFeature<G, P>({ ...resp, geom });\n }\n };\n\n return {\n ...resp,\n toGeojson,\n } as NgwFeatureItemResponse<P, G>;\n}\n","import { createGeoJsonFeature } from './utils/featureLayerUtils';\nimport { fetchNgwLayerItem } from './utils/fetchNgwLayerItem';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { FeatureItem, GetRequestOptions } from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { Feature, Point } from 'geojson';\n\ninterface BookmarkItemOptions {\n connector: NgwConnector;\n resourceId: number;\n item: FeatureItem;\n labelField?: string;\n}\n\nexport class BookmarkItem {\n readonly name: string;\n readonly resourceId: number;\n readonly item: FeatureItem;\n\n private _extent?: LngLatBoundsArray;\n\n constructor(private options: BookmarkItemOptions) {\n this.resourceId = options.resourceId;\n const item = options.item;\n this.item = item;\n if (options.labelField && item.fields) {\n this.name = item.fields[options.labelField];\n } else {\n this.name = String(item.id);\n }\n }\n\n extent(opt?: GetRequestOptions): Promise<LngLatBoundsArray | undefined> {\n if (this._extent) {\n return Promise.resolve(this._extent);\n }\n return this.options.connector\n .route('feature_layer.feature.item_extent', {\n id: this.resourceId,\n fid: this.item.id,\n })\n .get(opt)\n .then((resp) => {\n if (resp.extent) {\n const { minLat, minLon, maxLat, maxLon } = resp.extent;\n const lonLat = [minLon, minLat, maxLon, maxLat];\n this._extent = lonLat;\n return lonLat;\n }\n });\n }\n\n geoJson(\n opt?: Pick<GetRequestOptions, 'cache' | 'signal'>,\n ): Promise<Feature<Point, any>> {\n if (this.item.geom) {\n return Promise.resolve(createGeoJsonFeature(this.item));\n } else {\n return fetchNgwLayerItem({\n resourceId: this.resourceId,\n featureId: this.item.id,\n connector: this.options.connector,\n geom: true,\n fields: null,\n extensions: null,\n ...opt,\n }).then((onlyGeomItem) => {\n const geom = onlyGeomItem.geom;\n this.item.geom = geom;\n return createGeoJsonFeature(this.item);\n });\n }\n }\n}\n","export const WEBMAP_BASELAYER_ID_PREFIX = 'webmap-baselayer';\n","import { EventEmitter } from 'events';\n\nimport type { ItemBasePropertyOptions, ItemOptions } from '../interfaces';\nimport type { Item } from '../Item';\n\nexport abstract class BaseProperty<\n V = any,\n O extends ItemBasePropertyOptions<V> = ItemBasePropertyOptions<V>,\n I extends Item = Item,\n> {\n options: O;\n\n emitter = new EventEmitter();\n name: string;\n\n item: I;\n protected _blocked = false;\n protected _container?: HTMLElement;\n protected _value?: V;\n\n private _removeEventsListener?: () => void;\n\n constructor(name: string, item: I, options: O) {\n this.item = item;\n this.options = Object.assign({}, options);\n this.name = name;\n this._value = this.getProperty();\n }\n\n getProperty(): V | undefined {\n if (typeof this.options.getProperty === 'function') {\n return this.options.getProperty.call(this, this.item);\n }\n return this.options.value;\n }\n\n getParents(): Item[] {\n return this.item.tree.getParents() || [];\n }\n\n getParent(): Item<ItemOptions> | undefined {\n return this.item.tree.getParent();\n }\n\n getChildren(): Item<ItemOptions>[] {\n return this.item.tree.getChildren();\n }\n\n isGroup(): number {\n const children = this.item.tree.getDescendants();\n return children.length;\n }\n\n isBlocked(): boolean {\n if (this._blocked !== undefined) {\n return this._blocked;\n }\n\n const parents = this.item.tree.getParents();\n this._blocked = this._calculateBlockedStatus(parents);\n return this._blocked;\n }\n\n set(value?: V, options?: O): void {\n this._value = this._prepareValue(value);\n\n this.update(this._value, options);\n this._fireChangeEvent(this._value, options);\n }\n\n // shortcut for getValue\n get(): V | undefined {\n return this.getValue();\n }\n\n update(value?: V, options?: O): void {\n this._callOnSet(value, options);\n }\n\n getContainer(): HTMLElement | undefined {\n return this._container;\n }\n\n destroy(): void {\n if (this._container) {\n const parentNode = this._container.parentNode;\n if (parentNode) {\n parentNode.removeChild(this._container);\n }\n }\n if (this._removeEventsListener) {\n this._removeEventsListener();\n }\n }\n\n getValue(): V | undefined {\n return this._value !== undefined ? this._value : this.getProperty();\n }\n\n protected _prepareValue(value?: V): V | undefined {\n return value;\n }\n\n protected _callOnSet<W extends V = V>(value?: W, options?: O): void {\n if (this.options.onSet) {\n this.options.onSet.call(this, value, options, this.item);\n }\n }\n\n protected _fireChangeEvent(value?: V, options?: O): void {\n if (this.emitter) {\n value = value !== undefined ? value : this.getValue();\n this.emitter.emit('change', { value, options });\n const parents = this.item.tree.getParents();\n parents.forEach((x) => {\n const prop = x.properties && x.properties.property(this.name);\n if (prop) {\n prop.emitter.emit('change-tree', {\n value,\n options,\n item: this.item,\n });\n }\n });\n }\n }\n\n private _calculateBlockedStatus(parents: Item[]): boolean {\n const isBlocked = parents.some((parent: Item) => {\n const parentProp = parent.properties?.property(this.name);\n return parentProp ? !parentProp.get() : false;\n });\n\n return isBlocked;\n }\n}\n","import { BaseProperty } from './BaseProperty';\n\nimport type { CheckOptions } from '../interfaces';\nimport type { Item } from '../Item';\n\ntype VAL = boolean;\n\ntype PreparedValue = any;\n\nexport class CheckProperty<\n V extends VAL = VAL,\n O extends CheckOptions<VAL> = CheckOptions<VAL>,\n> extends BaseProperty<VAL, CheckOptions<VAL>> {\n static options: CheckOptions = {\n hierarchy: true,\n bubble: false,\n propagation: false,\n label: 'Toggle',\n // PropertyContainer: IndicatorContainer\n };\n\n constructor(name: string, item: Item, options: O) {\n super(name, item, { ...CheckProperty.options, ...options });\n this.set(this.get());\n }\n\n update(value?: V, options?: O): void {\n if (value) {\n const bubble = (options && options.bubble) || this.options.bubble;\n if (bubble) {\n this.unBlock(options);\n const parent = this.getParent();\n const property =\n parent && parent.properties && parent.properties.property(this.name);\n if (property) {\n property.set(\n value,\n Object.assign({}, options, { bubble: true, propagation: false }),\n );\n }\n }\n if (!this.isBlocked()) {\n this._turnOn(options);\n }\n } else {\n this._turnOff(options);\n }\n const propagation =\n (options && options.propagation) || this.options.propagation;\n if (propagation) {\n this._propagation(value, options);\n }\n }\n\n getHierarchyValue(): boolean | undefined {\n return (\n this.get() &&\n this.getParents().every((x) => {\n const property = x.properties && x.properties.get(this.name);\n return property && property.get();\n })\n );\n }\n\n block(options?: O): void {\n this._blocked = true;\n this._block(options);\n }\n\n unBlock(options?: O): void {\n this._blocked = false;\n if (this.getValue()) {\n this._unBlock(options);\n }\n }\n\n blockChild(options?: O): void {\n this.item.tree\n .getDescendants()\n .forEach((x) => this._blockChild(x, options));\n }\n\n unblockChild(options?: O): void {\n this.item.tree.getChildren().forEach((x) => this._unBlockChild(x, options));\n }\n\n protected _prepareValue(value?: PreparedValue): V | undefined {\n return value;\n }\n\n private _turnOff(options?: O): void {\n if (this.options.turnOff) {\n this.options.turnOff.call(this, options);\n }\n this._callOnSet(false, options);\n if (this.options.hierarchy && this.isGroup()) {\n this.blockChild(options);\n }\n }\n\n private _turnOn(options?: O): void {\n if (this.options.turnOn) {\n this.options.turnOn.call(this, options);\n }\n this._callOnSet(true, options);\n if (this.options.hierarchy && this.isGroup()) {\n this.unblockChild(options);\n }\n }\n\n private _block(options?: O): void {\n this._turnOff(options);\n }\n\n private _unBlock(options?: O): void {\n this._turnOn(options);\n }\n\n private _blockChild(item: Item, options?: O): void {\n const prop =\n item.properties &&\n (item.properties.property(this.name) as CheckProperty<V, O>);\n if (prop && prop.block) {\n prop.block(options);\n }\n }\n\n private _unBlockChild(item: Item, options?: O): void {\n const prop =\n item.properties &&\n (item.properties.property(this.name) as CheckProperty<V, O>);\n if (prop && prop.unBlock) {\n prop.unBlock(options);\n }\n }\n\n private _propagation(value?: V, options?: O): void {\n if (this.isGroup()) {\n const children = this.item.tree.getChildren();\n for (let fry = 0; fry < children.length; fry++) {\n const child = children[fry];\n const property =\n child.properties &&\n (child.properties.property(this.name) as CheckProperty<V, O>);\n if (property) {\n property.set(value, {\n ...options,\n ...{\n propagation: true,\n bubble: false,\n },\n });\n }\n }\n }\n }\n}\n","import { CheckProperty } from './CheckProperty';\n\nimport type {\n ItemBasePropertyOptions,\n ItemPropertyConfig,\n ItemPropertyTypes,\n Type,\n} from '../interfaces';\nimport type { Item } from '../Item';\n\nimport type { BaseProperty } from './BaseProperty';\n\n// Constants for property types\nconst BOOLEAN_TYPE = 'boolean';\nconst STRING_TYPE = 'string';\n\nexport class ItemProperties {\n static handlers: Record<string, Type<BaseProperty>> = {\n CheckProperty,\n };\n\n options: Record<string, any> = {};\n\n private _properties: Record<string, BaseProperty> = {};\n private _propertiesList: string[] = [];\n\n constructor(\n public item: Item,\n propertiesList?: ItemPropertyConfig<keyof ItemPropertyTypes>[],\n ) {\n if (propertiesList) {\n propertiesList.forEach(this._setPropertyHandler.bind(this));\n }\n }\n\n add(propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>): void {\n this._setPropertyHandler(propOpt);\n }\n\n update(): void {\n this.list().forEach((x) => x.update());\n }\n\n get(name: string): any {\n const prop = this.property(name);\n return prop ? prop.get() : undefined;\n }\n\n set<K extends keyof ItemPropertyTypes>(\n name: string,\n value: ItemPropertyTypes[K],\n options?: ItemBasePropertyOptions<ItemPropertyTypes[K]>,\n ): void {\n const prop = this.property(name);\n if (prop && prop.getValue() !== value) {\n prop.set(value, options);\n }\n }\n\n property(name: string): BaseProperty<any, ItemBasePropertyOptions<any>> {\n return this._properties[name];\n }\n\n list(): BaseProperty<any, ItemBasePropertyOptions<any>>[] {\n return this._propertiesList.map((name) => this._properties[name]);\n }\n\n destroy(): void {\n for (const name in this._properties) {\n const prop = this.property(name);\n if (prop && prop.destroy) {\n prop.destroy();\n }\n }\n this._properties = {};\n this._propertiesList = [];\n }\n\n private _setPropertyHandler(\n propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>,\n ): void {\n const Handler = this._getHandler(propOpt);\n if (Handler && propOpt.name) {\n const options = { ...propOpt };\n this._properties[propOpt.name] = new Handler(\n propOpt.name,\n this.item,\n options,\n );\n this._propertiesList.push(propOpt.name);\n }\n }\n\n private _getHandler(\n propOpt: ItemPropertyConfig<keyof ItemPropertyTypes>,\n ): Type<BaseProperty> | undefined {\n const Handler = propOpt.handler;\n if (!Handler && propOpt.type) {\n switch (propOpt.type) {\n case BOOLEAN_TYPE:\n return ItemProperties.handlers.CheckProperty;\n case STRING_TYPE:\n default:\n return ItemProperties.handlers.BaseProperty;\n }\n }\n return Handler;\n }\n}\n","import { propertiesFilter } from '@nextgis/properties-filter';\n\nimport type { PropertyFilter } from '@nextgis/properties-filter';\n\nimport type {\n DefaultTreeItem,\n RelationFunction,\n SelfFilter,\n TreeRelation,\n} from './interfaces';\n\ntype D = DefaultTreeItem;\n\ntype TreeFunction<X extends D> = (\n item: X | X[],\n filter: SelfFilter<X>,\n relation: TreeRelation<X>,\n) => X | X[] | boolean | undefined;\n\ntype ItemPrepareFunction<F extends D> = (item: D) => F;\n\nexport function treeEvery<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): boolean {\n return !!treeWrapper<F>(item, filter, relation, treeEvery_, itemPrepare);\n}\n\nexport function treeSome<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): boolean {\n return !!treeWrapper<F>(item, filter, relation, treeFind_, itemPrepare);\n}\n\nexport function treeFind<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F | undefined {\n return treeWrapper<F>(item, filter, relation, treeFind_, itemPrepare) as F;\n}\n\nexport function treeFilter<F extends D = D>(\n item: F | F[],\n filter?: PropertyFilter | SelfFilter<F>,\n relation?: TreeRelation<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F[] {\n return treeWrapper<F>(\n item,\n filter,\n relation,\n treeFilter_,\n itemPrepare,\n ) as F[];\n}\n\nexport function getChildren<F extends D = D>(\n item: F,\n relation: TreeRelation<F> = 'children',\n): F[] | undefined {\n let children: F[] = [];\n const relationFunction: RelationFunction<F> =\n typeof relation === 'function' ? relation : (i): F[] => i[relation];\n const relChild = relationFunction(item);\n if (relChild) {\n if (Array.isArray(relChild)) {\n children = relChild;\n } else {\n children.push(relChild);\n }\n }\n return relChild ? children : undefined;\n}\n\nfunction treeWrapper<F extends D = D>(\n item: F | F[],\n filter: PropertyFilter | SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F> = 'children',\n treeFunction: TreeFunction<F>,\n itemPrepare?: ItemPrepareFunction<F>,\n): F[] | F | boolean | undefined {\n const filterFunction: SelfFilter<F> =\n typeof filter === 'function'\n ? filter\n : (i: F): boolean => propertiesFilter(i, filter);\n if (itemPrepare) {\n return treeFunction(\n item,\n (i: F): boolean => filterFunction(itemPrepare(i)),\n relation,\n );\n }\n return treeFunction(item, filterFunction, relation);\n}\n\nfunction treeFind_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): F | undefined {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (filter) {\n return item;\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n const result = treeFind_(children[fry], filterFunc, relation, _filtered);\n if (result) {\n return result;\n }\n }\n }\n}\n\nfunction treeFilter_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): F[] {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (filter) {\n _filtered.push(item);\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n treeFilter_(children[fry], filterFunc, relation, _filtered);\n }\n }\n\n return _filtered;\n}\n\nfunction treeEvery_<F extends D = D>(\n item: F | F[],\n filterFunc: SelfFilter<F> = (x: F): boolean => !!x,\n relation: TreeRelation<F>,\n _filtered: F[] = [],\n): boolean {\n let children: F[] = [];\n if (Array.isArray(item)) {\n children = item;\n } else {\n const filter = filterFunc(item);\n if (!filter) {\n return false;\n }\n const relChildren = getChildren(item, relation);\n if (relChildren) {\n children = relChildren;\n }\n }\n\n for (let fry = 0; fry < children.length; fry++) {\n if (children[fry]) {\n const res = treeEvery_(children[fry], filterFunc, relation, _filtered);\n if (!res) {\n return false;\n }\n }\n }\n\n return true;\n}\n","import { treeEvery, treeFilter, treeFind, treeSome } from '@nextgis/tree';\n\nimport type { ItemOptions } from './interfaces';\nimport type { Item as BaseItem } from './Item';\n\nexport class TreeHelper<Item extends BaseItem = BaseItem> {\n item: Item;\n\n private _children: Item[] = [];\n private _parent?: Item;\n\n constructor(item: Item) {\n this.item = item;\n }\n\n setParent(parent: Item): void {\n this._parent = parent;\n }\n\n addChild(child: Item): void {\n this._children.push(child);\n }\n\n getParent(): Item | undefined {\n return this._parent;\n }\n\n getParents<I extends Item = Item>(filterFunc?: (item: I) => boolean): I[] {\n const parent = this.getParent() as I;\n if (parent) {\n return treeFilter<I>(\n parent,\n filterFunc,\n (x: I) => x.tree.getParent() as I,\n );\n }\n return [];\n }\n\n getRoot<I extends Item = Item>(): I | undefined {\n let parent = this.getParent() as I;\n let toReturn = parent;\n while (parent) {\n parent = parent.tree.getParent() as I;\n if (parent) {\n toReturn = parent;\n }\n }\n return toReturn;\n }\n\n find(\n filterFunc?: (item: Item) => boolean,\n ): BaseItem<ItemOptions> | undefined {\n return treeFind(this._children, filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n every<I extends Item = Item>(filterFunc?: (item: I) => boolean): boolean {\n return treeEvery(this._children as I[], filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n some<I extends Item = Item>(filterFunc?: (item: I) => boolean): boolean {\n return treeSome(this._children as I[], filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n // getDescendants shortcut\n all(filterFunc?: (item: Item) => boolean): Item[] {\n return this.getDescendants(filterFunc);\n }\n\n getDescendants(filterFunc?: (item: Item) => boolean): Item[] {\n return treeFilter(this._children, filterFunc, (x) => {\n return x.tree.getChildren();\n });\n }\n\n getChildren<T extends Item = Item>(): T[] {\n return [...this._children] as T[];\n }\n}\n","import { ItemProperties } from './properties/ItemProperties';\nimport { TreeHelper } from './TreeHelper';\n\nimport type { ItemOptions } from './interfaces';\n\nlet ID = 0;\nexport class Item<O extends ItemOptions = ItemOptions> {\n options: O = {} as O;\n\n properties!: ItemProperties;\n tree: TreeHelper<this>;\n id = ID;\n\n constructor(options?: O) {\n ID += 1;\n this.options = { ...options } as O;\n this.tree = new TreeHelper(this);\n }\n\n initProperties(): void {\n this.properties = new ItemProperties(this, this.options.properties);\n }\n}\n","import { BaseProperty } from '@nextgis/item';\n\nimport type { ItemBasePropertyOptions } from '../../../item/src/interfaces';\nimport type { NgwWebmapItem } from '../NgwWebmapItem';\n\ntype VAL = number;\n\nexport class WebmapLayerOpacityPropertyHandler<\n V extends VAL = VAL,\n> extends BaseProperty<VAL, ItemBasePropertyOptions<VAL>, NgwWebmapItem> {\n getProperty(): number {\n const layer = this.item.layer;\n if (layer) {\n return layer &&\n layer.options &&\n layer.options.opacity !== undefined &&\n layer.options.opacity !== null\n ? layer.options.opacity\n : 1;\n }\n return 1;\n }\n\n update(value: V, options?: ItemBasePropertyOptions<VAL>): void {\n options = options || {};\n\n if (this.isGroup()) {\n this._value = this._prepareValue(value, options);\n const children = this.getChildren();\n for (const child of children) {\n const property = child.properties.property(this.name);\n if (property) {\n if (options.propagation) {\n property.set(value, options);\n } else {\n property.update(property.get(), options);\n }\n }\n }\n }\n const layer = this.item.layer;\n if (layer) {\n const parents = this.getParents();\n const coef = parents.reduce((s, x) => {\n const prop = x.properties.property(this.name);\n const multiplier = prop ? prop.getValue() : 1;\n return s * multiplier;\n }, 1);\n const val = value * coef;\n this.item.webMap.setLayerOpacity(layer, this._prepareValue(val));\n }\n }\n\n protected _prepareValue(\n value: number,\n options?: ItemBasePropertyOptions<VAL>,\n ): number {\n if (options && options.propagation && this.isGroup()) {\n return 1;\n }\n // value = Number(value);\n // return value < 0.1 ? 0.1 : value;\n return Number(value);\n }\n}\n","export function createLayerSymbolParam(\n resourceId: number,\n intervals: (string | number)[],\n) {\n return { [`symbols[${resourceId}]`]: intervals.join(',') || undefined };\n}\n","import { createLayerSymbolParam } from './utils/createLayerSymbolParam';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { GetRequestOptions, LayerLegend } from '@nextgis/ngw-connector';\nimport type { LayerAdapter, WebMap } from '@nextgis/webmap';\nimport type { LegendSymbol } from '@nextgisweb/render/type/api';\nimport type { LegendSymbolsEnum } from '@nextgisweb/webmap/type/api';\n\nexport class Legend implements LayerLegend {\n layerId: string;\n layer: LayerAdapter;\n resourceId: number;\n legendSymbols: LegendSymbolsEnum = 'expand';\n\n legend?: LegendSymbol[];\n\n // private blocked: boolean = false;\n private layerVisibility: boolean = true;\n // private symbolRenderIndexes?: number[];\n\n private readonly onSymbolRenderChange?: (indexes: number[]) => void;\n private readonly webMap: WebMap;\n private readonly connector?: NgwConnector;\n\n constructor({\n legendSymbols,\n resourceId,\n connector,\n layerId,\n legend,\n webMap,\n layer,\n onSymbolRenderChange,\n }: LayerLegend & {\n layer: LayerAdapter;\n webMap: WebMap;\n resourceId: number;\n connector?: NgwConnector;\n onSymbolRenderChange?: (indexes: number[]) => void;\n }) {\n if (legendSymbols) {\n this.legendSymbols = legendSymbols;\n }\n this.connector = connector;\n this.layer = layer;\n this.layerId = layerId;\n if (legend) {\n this.legend = this.createLegend(legend);\n }\n this.resourceId = resourceId;\n this.webMap = webMap;\n this.onSymbolRenderChange = onSymbolRenderChange;\n }\n\n attachLayer(layer: LayerAdapter) {\n this.layerId = String(layer.id);\n this.layer = layer;\n }\n\n async create(\n options: GetRequestOptions = {},\n ): Promise<LegendSymbol[] | undefined> {\n if (this.connector) {\n const ngwLegend = await this.connector\n .route('render.legend_symbols', {\n id: this.resourceId,\n })\n .get({\n ...options,\n });\n this.legend = ngwLegend;\n return this.createLegend(ngwLegend);\n }\n }\n\n createLegend(items: LegendSymbol[]): LegendSymbol[] {\n return items.map((params) => ({\n ...params,\n /** @deprecated use display_name instead */\n name: params.display_name,\n /** @deprecated use icon instead */\n symbol: params.icon,\n }));\n }\n\n setSymbolRender(symbolIndex: number, status: boolean): void {\n if (this.legend) {\n const legendItem = this.legend.find((l) => l.index === symbolIndex);\n if (legendItem) {\n const render = legendItem.render;\n if (render !== status) {\n legendItem.render = status;\n const newSymbols = this.legend\n .filter((l) => l.render)\n .map((l) => l.index);\n this.setLegendSymbol(newSymbols);\n if (this.onSymbolRenderChange) {\n this.onSymbolRenderChange(newSymbols);\n }\n }\n }\n }\n }\n\n setLegendSymbol(symbolRenderIndexes: number[]): void {\n // this.symbolRenderIndexes = symbolRenderIndexes;\n\n const intervals = this._consolidateIntervals(symbolRenderIndexes);\n\n if (!intervals.length) {\n this._hideLayer();\n // this.blocked = true;\n }\n if (this.layer.updateLayer) {\n this.layer.updateLayer({\n params: {\n ...createLayerSymbolParam(this.resourceId, intervals),\n },\n });\n }\n if (intervals.length) {\n // this.blocked = false;\n this._showLayer();\n }\n }\n\n private _hideLayer(): void {\n if (this.layer.options.id) {\n this.webMap.mapAdapter.hideLayer(this.layer.layer);\n }\n }\n\n private _showLayer(): void {\n if (this.layer.options.id) {\n if (this.layerVisibility) {\n this.webMap.showLayer(this.layer.options.id, { silent: true });\n }\n }\n }\n\n private _consolidateIntervals(symbols: number[]): string[] {\n const sortedSymbols = symbols.slice().sort((a, b) => a - b);\n const intervals: string[] = [];\n let start = sortedSymbols[0];\n let end = start;\n\n for (let i = 1; i <= sortedSymbols.length; i++) {\n if (sortedSymbols[i] === end + 1) {\n end = sortedSymbols[i];\n } else {\n intervals.push(start === end ? `${start}` : `${start}-${end}`);\n start = sortedSymbols[i];\n end = start;\n }\n }\n\n return intervals;\n }\n}\n","import { Item } from '@nextgis/item';\nimport { treeSome } from '@nextgis/tree';\nimport { EventEmitter } from 'events';\n\nimport { setScaleRatio } from './utils/utils';\nimport { WebmapLayerOpacityPropertyHandler } from './utils/WebmapLayerOpacityPropertyHandler';\nimport { Legend } from './Legend';\n\nimport type { ItemOptions } from '@nextgis/item';\nimport type { LayerLegend } from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type {\n GetLegendOptions,\n ImageAdapterOptions,\n LayerAdapter,\n LayerAdapterDefinition,\n VectorAdapterOptions,\n WebMap,\n} from '@nextgis/webmap';\n\nimport type { TreeGroup, TreeItem, TreeLayer, TreeRoot } from './interfaces';\n\nexport interface NgwWebmapItemOptions {\n webMap: WebMap;\n item: TreeGroup | TreeLayer | TreeRoot;\n options?: ItemOptions;\n connector?: NgwConnector;\n parent?: NgwWebmapItem;\n noInit?: boolean;\n}\n\nexport class NgwWebmapItem extends Item<ItemOptions> {\n static GetAdapterFromLayerType: {\n [layerType: string]: (\n item: TreeItem,\n options: any,\n webMap: WebMap,\n connector?: NgwConnector,\n ) => LayerAdapterDefinition;\n } = {};\n\n static options: ItemOptions = {\n properties: [\n {\n type: 'boolean',\n name: 'visibility',\n getProperty(item?: NgwWebmapItem): boolean {\n if (item) {\n if (\n item.item.item_type === 'group' ||\n item.item.item_type === 'root'\n ) {\n return treeSome<TreeGroup | TreeLayer | TreeRoot>(\n item.item,\n (i) => ('layer_enabled' in i ? i.layer_enabled : false),\n (i) => (i as TreeGroup).children,\n );\n } else if (item.item.item_type === 'layer') {\n return item.item.layer_enabled;\n }\n // else if (item.item.item_type === 'root') {\n // return true;\n // }\n }\n return false;\n },\n onSet(\n value: boolean,\n options?: Record<string, any>,\n item?: NgwWebmapItem,\n ): void {\n if (item && item.item.item_type === 'layer') {\n if (item.layer) {\n if (value) {\n item.webMap.showLayer(item.layer);\n } else {\n item.webMap.hideLayer(item.layer);\n }\n }\n item.item['layer_enabled'] = value;\n }\n },\n },\n {\n name: 'opacity',\n handler: WebmapLayerOpacityPropertyHandler,\n },\n ],\n };\n\n item: TreeGroup | TreeLayer | TreeRoot;\n readonly webMap: WebMap;\n connector?: NgwConnector;\n layer?: LayerAdapter;\n legend?: LayerLegend;\n readonly emitter = new EventEmitter();\n\n protected _rootDescendantsCount = 0;\n\n constructor({\n webMap,\n item,\n options,\n connector,\n parent,\n noInit,\n }: NgwWebmapItemOptions) {\n super({ ...NgwWebmapItem.options, ...options });\n this.webMap = webMap;\n\n if (connector) {\n this.connector = connector;\n }\n if (parent) {\n this.tree.setParent(parent as typeof this);\n }\n this.item = item;\n if (this.item.item_type === 'root') {\n this._rootDescendantsCount = this._sumUp(this.item.children);\n } else {\n const root = this.tree.getRoot<this>();\n if (root) {\n this._rootDescendantsCount = root._rootDescendantsCount;\n }\n }\n this.initProperties();\n if (!noInit) {\n this._init(item);\n }\n }\n\n static async create(\n webMap: WebMap,\n item: TreeGroup | TreeLayer,\n options?: ItemOptions,\n connector?: NgwConnector,\n parent?: NgwWebmapItem,\n ): Promise<NgwWebmapItem> {\n const ngwWebmapItem = new NgwWebmapItem({\n webMap,\n item,\n options,\n connector,\n parent,\n noInit: true,\n });\n await ngwWebmapItem._init(item);\n return ngwWebmapItem;\n }\n\n initItem(item: TreeGroup | TreeLayer | TreeRoot): Promise<void> {\n if (item.item_type === 'group' || item.item_type === 'root') {\n return this.initGroupItem(item as TreeGroup);\n } else {\n return this.initLayerItem(item as TreeLayer);\n }\n }\n\n bringToFront(): void {\n //\n }\n\n fit(): void {\n if (this.item.item_type === 'layer') {\n // console.log(this.item);\n }\n }\n\n getLayer() {\n return this.layer;\n }\n\n async getLegend(options?: GetLegendOptions): Promise<LayerLegend[]> {\n const id = this.layer?.id;\n if (id !== undefined) {\n const connector = this.connector;\n if (connector && 'resourceId' in this.item) {\n const resourceId = Number(this.item.resourceId);\n if (this.item.item_type === 'layer') {\n if (this.layer) {\n const legend = new Legend({\n connector: this.connector,\n layerId: id,\n layer: this.layer,\n resourceId,\n webMap: this.webMap,\n legendSymbols: this.item.legend_symbols ?? undefined,\n onSymbolRenderChange: (indexes) => {\n this.webMap.emitter.emit('event-symbol-render:change', {\n layerId: id,\n resourceId,\n indexes,\n });\n },\n });\n await legend.create(options);\n return [legend];\n }\n }\n return [];\n }\n }\n\n return [];\n }\n\n protected getItemOptions(item: TreeGroup | TreeLayer): Record<string, any> {\n const transparency = item.item_type === 'layer' && item.layer_transparency;\n const opacity =\n typeof transparency === 'number' ? (100 - transparency) / 100 : undefined;\n\n const options: Partial<ImageAdapterOptions> &\n Pick<VectorAdapterOptions, 'popupOptions'> = {\n visibility: false,\n name: item.display_name,\n ...this.options,\n params: {\n resource: 'resourceId' in this.item ? this.item.resourceId : undefined,\n item: this.item,\n },\n };\n delete options.id;\n if (this.options.order) {\n const subOrder =\n this.options.drawOrderEnabled &&\n 'draw_order_position' in item &&\n item.draw_order_position !== undefined &&\n item.draw_order_position !== null\n ? this._rootDescendantsCount - item.draw_order_position\n : this.id;\n\n // 9 > 0009, 11 > 0011\n // TODO: find better way to set order in sub level, not limit by 1000 layer in group\n const subLevel = String(subOrder).padStart(4, '0');\n options.order = Number((this.options.order | 0) + '.' + subLevel);\n }\n if (this.options.popupOptions) {\n options.popupOptions = this.options.popupOptions;\n }\n if (item.item_type === 'layer') {\n const { maxZoom, minZoom } = this._getZoomRange(item);\n\n Object.assign(options, {\n updateWmsParams: item.updateWmsParams,\n ...options,\n url: item.url,\n maxZoom,\n minZoom,\n minScale: item.layer_min_scale_denom,\n maxScale: item.layer_max_scale_denom,\n interactive: item.layer_identifiable,\n });\n }\n if (opacity !== undefined) {\n options.opacity = opacity;\n }\n return options;\n }\n\n protected getChildren(item: TreeGroup): (TreeGroup | TreeLayer)[] {\n return [...item.children].reverse();\n }\n\n private _mapScaleToZoomLevel(scale: number) {\n return setScaleRatio(scale);\n }\n\n private initGroupItem(group: TreeGroup): Promise<void> {\n if (group.children && group.children.length) {\n const children = this.getChildren(group);\n for (const child of children) {\n const childItem = new (this.constructor as typeof NgwWebmapItem)({\n webMap: this.webMap,\n item: child,\n options: this.options,\n connector: this.connector,\n parent: this,\n });\n this.tree.addChild(childItem as typeof this);\n }\n }\n return Promise.resolve();\n }\n\n private initLayerItem(layer: TreeLayer): Promise<void> {\n const options: Partial<ImageAdapterOptions> = this.getItemOptions(layer);\n const setNewLayer = (l: LayerAdapter) => {\n layer._layer = l;\n this.layer = l;\n const enabled = this.properties.get('visibility');\n if (enabled) {\n this.properties.set('visibility', true);\n }\n\n if (options.opacity !== undefined && options.opacity !== null) {\n this.webMap.setLayerOpacity(l, options.opacity);\n }\n };\n\n let adapter: LayerAdapterDefinition | undefined;\n if (layer.item_type === 'layer') {\n adapter = layer.adapter || layer.layer_adapter.toUpperCase();\n } else if (NgwWebmapItem.GetAdapterFromLayerType[layer.item_type]) {\n const getAdapter = NgwWebmapItem.GetAdapterFromLayerType[layer.item_type];\n adapter = getAdapter(layer, options, this.webMap, this.connector);\n }\n\n if (adapter) {\n return this.webMap.addLayer(adapter, options).then((newLayer) => {\n this.webMap.emitter.on(`layer-${newLayer.id}:toggle`, (e) => {\n const enabled = this.properties.get('visibility');\n const mapVisible = this.webMap.isLayerVisible(newLayer);\n if (enabled !== mapVisible) {\n this.properties.set('visibility', mapVisible);\n }\n });\n\n setNewLayer(newLayer);\n });\n }\n\n if (layer._layer) {\n return Promise.resolve(setNewLayer(layer._layer));\n }\n\n return Promise.reject('No layer added');\n }\n\n private _getZoomRange(item: TreeLayer) {\n const minZoomWebmap = this.options.minZoom;\n const maxZoomWebmap = this.options.maxZoom;\n\n const minZoomLayer = item.layer_min_scale_denom\n ? this._mapScaleToZoomLevel(item.layer_min_scale_denom)\n : undefined;\n const maxZoomLayer = item.layer_max_scale_denom\n ? this._mapScaleToZoomLevel(item.layer_max_scale_denom)\n : undefined;\n\n const minZooms = [minZoomWebmap, minZoomLayer].filter(Boolean) as number[];\n const maxZooms = [maxZoomWebmap, maxZoomLayer].filter(Boolean) as number[];\n const minZoom = minZooms.length ? Math.max(...minZooms) : undefined;\n const maxZoom = maxZooms.length ? Math.min(...maxZooms) : undefined;\n return { minZoom, maxZoom };\n }\n\n private _init(item: TreeGroup | TreeLayer | TreeRoot) {\n this.initItem(item).then(() => {\n this.emitter.emit('init');\n });\n }\n\n private _sumUp(children: Array<TreeGroup | TreeLayer>, totalValue = 0) {\n for (const child of children) {\n if (child.item_type === 'layer') {\n totalValue += 1;\n child.draw_order_position = child.draw_order_position || totalValue;\n } else if (child.item_type === 'group') {\n totalValue = this._sumUp(child.children, totalValue);\n }\n }\n return totalValue;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport { EventEmitter } from 'events';\n\nimport { createOnFirstShowNgwAdapter } from './adapters/createOnFirstShowNgwAdapter';\nimport { getNgwWebmapExtent } from './utils/fetchNgwExtent';\nimport { fetchNgwLayerItems } from './utils/fetchNgwLayerItems';\nimport { ngwApiToAdapterOptions } from './utils/ngwApiToAdapterOptions';\nimport { updateImageParams } from './utils/utils';\nimport { BookmarkItem } from './BookmarkItem';\nimport { WEBMAP_BASELAYER_ID_PREFIX } from './constants';\nimport { NgwWebmapItem } from './NgwWebmapItem';\n\nimport type { ItemOptions } from '@nextgis/item';\nimport type { BaseRequestOptions, LayerLegend } from '@nextgis/ngw-connector';\nimport type { LngLatBoundsArray } from '@nextgis/utils';\nimport type { RasterAdapterOptions, WebMap } from '@nextgis/webmap';\nimport type { BasemapWebMapRead } from '@nextgisweb/basemap/type/api';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { WebMapRead } from '@nextgisweb/webmap/type/api';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwLayerAdapterType,\n NgwWebmapAdapterOptions,\n NgwWebmapLayerAdapterEvents,\n ResourceAdapter,\n TreeChildItem,\n TreeItem,\n TreeLayer,\n} from './interfaces';\nimport type { NgwWebmapItemOptions } from './NgwWebmapItem';\n\nexport class NgwWebmapLayerAdapter<M = any> implements ResourceAdapter<M> {\n layer?: NgwWebmapItem;\n\n NgwWebmapItem: new (options: NgwWebmapItemOptions) => NgwWebmapItem =\n NgwWebmapItem;\n /**\n * Radius for searching objects in pixels\n */\n pixelRadius = 10; // webmapSettings.identify_radius,\n resourceId!: number;\n webmapClassName = 'webmap';\n readonly emitter: StrictEventEmitter<\n EventEmitter,\n NgwWebmapLayerAdapterEvents\n > = new EventEmitter();\n protected _extent?: LngLatBoundsArray;\n\n private webmapResource?: WebMapRead;\n\n private _webmapBaselayersIds: string[] = [];\n private _lastActiveBaselayer?: string;\n\n constructor(\n public map: M,\n public options: NgwWebmapAdapterOptions,\n ) {\n const r = options.resourceId;\n\n if (Array.isArray(r)) {\n this.resourceId = r[0];\n this.options.id = r[1];\n } else {\n this.resourceId = r;\n }\n\n if (!this.resourceId) {\n throw new Error('NGW `resourceId` is not defined');\n }\n }\n\n async addLayer(options: NgwWebmapAdapterOptions): Promise<any> {\n this.options = { ...this.options, ...options };\n this.layer = await this._getWebMapLayerItem();\n const extentConstrained = this.webmapResource?.constraining_extent;\n if (\n this.options.useExtentConstrained &&\n this._extent &&\n extentConstrained\n ) {\n this.options.webMap.setView({ maxBounds: this._extent });\n }\n return this.layer;\n }\n\n removeLayer(): void {\n const mapAdapter = this.options.webMap.mapAdapter;\n\n this.getDependLayers().forEach((x) => {\n if (!('layer' in x)) return;\n // @ts-expect-error Update x interface\n mapAdapter.removeLayer(x.layer.layer);\n });\n\n if (this._webmapBaselayersIds.length) {\n for (const b of this._webmapBaselayersIds) {\n this.options.webMap.removeLayer(b);\n }\n if (this._lastActiveBaselayer) {\n this.options.webMap.showLayer(this._lastActiveBaselayer);\n }\n }\n\n if (this.options.useExtentConstrained && this._extent) {\n this.options.webMap.setView({ maxBounds: null });\n }\n\n delete this.layer;\n delete this.webmapResource;\n }\n\n async showLayer(): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('visibility').set(true);\n }\n }\n\n async hideLayer(): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('visibility').set(false);\n }\n }\n\n async setOpacity(val: number): Promise<void> {\n if (this.layer && this.layer.properties) {\n return this.layer.properties.property('opacity').set(val);\n }\n }\n\n /** @deprecated use {@link NgwWebmapLayerAdapter.getBounds} instead */\n getExtent(): LngLatBoundsArray | undefined {\n return this.getBounds();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n const webmap = this.webmapResource;\n if (webmap) {\n return getNgwWebmapExtent(webmap);\n }\n }\n\n getDependLayers(): Array<NgwWebmapItem> {\n return (this.layer && this.layer.tree.getDescendants()) || [];\n }\n\n getBookmarksResourceId(): number | undefined {\n const webmap = this.webmapResource;\n if (webmap && webmap.bookmark_resource) {\n return webmap.bookmark_resource.id;\n }\n }\n\n fetchBookmarks(options: BaseRequestOptions): Promise<BookmarkItem[]> {\n const bookmarkResId = this.getBookmarksResourceId();\n const connector = this.options.connector;\n if (bookmarkResId) {\n return connector\n .getResourceOrFail(bookmarkResId, options)\n .then((item) => {\n const labelField = item.feature_layer?.fields.find(\n (x) => x.label_field,\n );\n const keyname = labelField && labelField.keyname;\n return fetchNgwLayerItems({\n connector,\n resourceId: bookmarkResId,\n geom: false,\n fields: keyname ? [keyname] : undefined,\n ...options,\n }).then((items) => {\n const bookmarks: BookmarkItem[] = [];\n for (const i of items) {\n const bookmark = new BookmarkItem({\n item: i,\n resourceId: bookmarkResId,\n labelField: keyname,\n connector,\n });\n bookmarks.push(bookmark);\n }\n return bookmarks;\n });\n });\n }\n throw new Error(\n 'Webmap was not loaded correctly, it is impossible to extract bookmarks',\n );\n }\n\n async getLegend(options?: BaseRequestOptions): Promise<LayerLegend[]> {\n const legends: LayerLegend[] = [];\n\n let deps = this.getDependLayers();\n deps = deps.sort((a, b) => b.id - a.id);\n for (const d of deps) {\n const layerLegend = await d.getLegend(options);\n legends.push(...layerLegend);\n }\n\n return legends;\n }\n\n async getIdentificationIds(options?: BaseRequestOptions): Promise<number[]> {\n const visibleLayers: number[] = [];\n\n let deps = this.getDependLayers();\n deps = deps.sort((a, b) => b.id - a.id);\n deps.forEach((x) => {\n const item = x.item;\n const parentId =\n 'style_parent_id' in item ? item.style_parent_id : undefined;\n if (\n parentId !== undefined &&\n parentId !== null &&\n item.item_type === 'layer' &&\n item.layer_identifiable\n ) {\n const visible = x.properties.property('visibility');\n const isVisible = visible.get() && !visible.isBlocked();\n if (isVisible) {\n visibleLayers.push(parentId);\n }\n }\n });\n\n return visibleLayers;\n }\n\n protected async _getWebMapLayerItem(): Promise<NgwWebmapItem | undefined> {\n if (!this.resourceId) {\n return undefined;\n }\n\n const webmap = await this.getWebMapConfig(this.resourceId);\n if (!webmap || !webmap.root_item) {\n return undefined;\n }\n\n return new Promise<NgwWebmapItem>((resolve) => {\n const connector = this.options.connector;\n const headers = connector?.options.auth\n ? connector.getAuthorizationHeaders()\n : undefined;\n const withCredentials = connector.withCredentials;\n\n const options: ItemOptions = {\n ...this.options,\n withCredentials,\n headers,\n drawOrderEnabled: webmap.draw_order_enabled ?? false,\n };\n\n const layer = new this.NgwWebmapItem({\n webMap: this.options.webMap,\n item: webmap.root_item,\n options,\n connector,\n });\n\n layer.emitter.on('init', () => {\n resolve(layer);\n });\n });\n }\n\n private async getWebMapConfig(id: number) {\n const data = await this.options.connector.getResource(id);\n if (data) {\n const webmap = data[\n this.webmapClassName as keyof CompositeRead\n ] as WebMapRead;\n this.webmapResource = webmap;\n this._setupBaselayers(data);\n if (webmap) {\n this._extent = webmap.initial_extent ?? undefined;\n this._updateItemsParams(webmap.root_item, this.options.webMap, data);\n return webmap;\n } else {\n // TODO: resource is no webmap\n }\n }\n }\n\n private _setupBaselayers(data: CompositeRead) {\n const webMap = this.options.webMap;\n const basemap = this.options.useBasemap ?? true;\n if (basemap) {\n if (data.basemap_webmap && data.basemap_webmap.basemaps.length) {\n const activeBaselayer = webMap.getActiveBaseLayer();\n this._lastActiveBaselayer = activeBaselayer\n ? activeBaselayer.id\n : undefined;\n this._setBasemaps(data.basemap_webmap);\n } else if (this.options.defaultBasemap) {\n webMap.addBaseLayer('OSM', {\n id: 'webmap-default-baselayer',\n name: 'OpenStreetMap',\n });\n }\n }\n }\n\n private _setBasemaps(baseWebmap: BasemapWebMapRead) {\n const webMap = this.options.webMap;\n // to avoid set many basemaps on init\n let enabledAlreadySet = false;\n for (const x of baseWebmap.basemaps) {\n createOnFirstShowNgwAdapter({\n webMap,\n connector: this.options.connector,\n item: x,\n adapterOptions: { crossOrigin: this.options.crossOrigin },\n }).then((adapter) => {\n const visibility = enabledAlreadySet ? false : x.enabled;\n if (x.enabled) {\n enabledAlreadySet = true;\n }\n return webMap\n .addBaseLayer(adapter, {\n id: WEBMAP_BASELAYER_ID_PREFIX + x.resource_id,\n name: x.display_name,\n opacity: x.opacity,\n visibility,\n })\n .then((l) => {\n if (l.id) this._webmapBaselayersIds.push(l.id);\n });\n });\n }\n }\n\n private _updateItemsParams(\n item: TreeItem,\n webMap: WebMap,\n data: CompositeRead,\n ) {\n if (item) {\n if (item.item_type === 'group' || item.item_type === 'root') {\n if ('children' in item && item.children) {\n const children = item.children.map((x) =>\n this._updateItemsParams(x, webMap, data),\n );\n item.children = children as TreeChildItem[];\n }\n if (item.item_type === 'root') {\n item.display_name = data.resource.display_name;\n }\n } else if (item.item_type === 'layer') {\n const layerItem = item as TreeLayer;\n\n const url = fixUrlStr(\n this.options.connector.options.baseUrl +\n '/api/component/render/image',\n );\n const resourceId = layerItem.layer_style_id;\n layerItem.url = url;\n layerItem.resourceId = resourceId;\n layerItem.updateWmsParams = (params) =>\n updateImageParams(params, resourceId);\n const adapter =\n layerItem.layer_adapter.toUpperCase() as NgwLayerAdapterType;\n const layerAdapterOptions = ngwApiToAdapterOptions({\n options: {\n adapter,\n resource: resourceId,\n },\n webMap,\n baseUrl: this.options.connector.options.baseUrl || '',\n }) as RasterAdapterOptions;\n item = {\n ...layerItem,\n ...layerAdapterOptions,\n };\n }\n }\n\n if (typeof this.options.nativeOptions?.beforeItemCreated === 'function') {\n item = this.options.nativeOptions.beforeItemCreated(item);\n }\n\n return item;\n }\n}\n","import { createAsyncAdapter } from '../adapters/createAsyncAdapter';\nimport { NgwWebmapLayerAdapter } from '../NgwWebmapLayerAdapter';\n\nimport type { GeometryType } from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { VectorAdapterLayerType, WebMap } from '@nextgis/webmap';\n\nimport type {\n NgwLayerOptions,\n NgwWebmapAdapterOptions,\n ResourceAdapter,\n} from '../interfaces';\n\nexport function updateImageParams(\n params: Record<string, any>,\n resourceId: number | number[],\n): Record<string, any> {\n const { bbox, width, height, nd, ...rest } = params;\n return {\n ...rest,\n resource: Array.isArray(resourceId) ? resourceId.join(',') : resourceId,\n extent: bbox,\n size: width + ',' + height,\n timestamp: Date.now(),\n nd: nd ?? 200,\n };\n}\n\nexport const vectorLayerGeomToPaintTypeAlias: Record<\n GeometryType,\n VectorAdapterLayerType\n> = {\n POINT: 'point',\n LINESTRING: 'line',\n POLYGON: 'polygon',\n MULTIPOINT: 'point',\n MULTILINESTRING: 'line',\n MULTIPOLYGON: 'polygon',\n POINTZ: 'point',\n LINESTRINGZ: 'line',\n POLYGONZ: 'polygon',\n MULTIPOINTZ: 'point',\n MULTILINESTRINGZ: 'line',\n MULTIPOLYGONZ: 'polygon',\n};\n\nexport function createNgwLayerAdapter(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n const headers = connector.getAuthorizationHeaders();\n if (headers) {\n options.headers = headers;\n }\n if (connector.withCredentials !== undefined) {\n options.withCredentials = connector.withCredentials;\n }\n\n return createAsyncAdapter(options, webMap, connector);\n}\n\n/** @deprecated use {@link createNgwLayerAdapter} instead */\nexport function addNgwLayer(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n return createNgwLayerAdapter(options, webMap, connector);\n}\n\nexport interface ExtendNgwWebmapLayerAdapterOptions {\n webMap: WebMap;\n connector: NgwConnector;\n baseUrl?: string;\n}\n\nexport function extendNgwWebmapLayerAdapter(\n opt: ExtendNgwWebmapLayerAdapterOptions,\n): Type<NgwWebmapLayerAdapter> {\n class A extends NgwWebmapLayerAdapter {\n constructor(map: any, options: NgwWebmapAdapterOptions) {\n options = { ...opt, ...options };\n super(map, options);\n }\n }\n return A;\n}\n\nlet _pixelsInMeter: number;\n\nexport function pixelsInMeterWidth(): number {\n if (_pixelsInMeter === undefined) {\n const div = document.createElement('div');\n div.style.cssText =\n 'position: absolute; left: -100%; top: -100%; width: 100cm;';\n document.body.appendChild(div);\n const px = div.offsetWidth;\n document.body.removeChild(div);\n _pixelsInMeter = px;\n }\n return _pixelsInMeter;\n}\n\n// Returns width of map in meters on specified latitude.\nexport function getMapWidthForLanInMeters(lat: number): number {\n return 6378137 * 2 * Math.PI * Math.cos((lat * Math.PI) / 180);\n}\n\nexport function getZoomFromScale(scale: number): number {\n return Math.log(scale / 256) / Math.LN2;\n}\n\nexport function setScaleRatio(scale: number, lat = 0): number {\n // TODO: get real center\n // webmap does not contain center yet\n // const center = [104, 45]; // this.webMap.getCenter();\n\n const centerLat = lat;\n const crsScale =\n (pixelsInMeterWidth() * getMapWidthForLanInMeters(centerLat)) / scale;\n const zoom = getZoomFromScale(crsScale);\n return zoom;\n\n // return Math.round(Math.log(591657550.5 / (scale / 2)) / Math.log(2));\n}\n","export function getSubdomainsOriginUrl(originUrl: string): [string, string[]] {\n const submodules: string[] = [];\n originUrl = originUrl.replace(/{switch:(.*?)}/, (m, group) => {\n if (typeof group === 'string') {\n group.split(',').forEach((s) => submodules.push(s));\n }\n return '{s}';\n });\n return [originUrl, submodules];\n}\n","import { fixUrlStr } from '@nextgis/utils';\n\nexport function loadJson<T = any>(url: string): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const xmlHttp = new XMLHttpRequest();\n xmlHttp.onreadystatechange = () => {\n if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {\n if (xmlHttp.responseText) {\n try {\n resolve(JSON.parse(xmlHttp.responseText));\n } catch (er) {\n reject(er);\n }\n }\n }\n };\n xmlHttp.open('GET', fixUrlStr(url), true); // true for asynchronous\n xmlHttp.send();\n });\n}\n","import type { AdapterOptions, LayerAdaptersOptions } from '@nextgis/webmap';\n\nimport type { QmsBasemap, QmsLayerType } from '../interfaces';\n\nexport const alias: { [key in QmsLayerType]: keyof LayerAdaptersOptions } = {\n tms: 'TILE',\n};\n\nexport function updateQmsOptions(\n qms: QmsBasemap,\n): AdapterOptions & { url: string } {\n const protocol = (location.protocol === 'https:' ? 'https' : 'http') + '://';\n let serviceUrl = qms.url.replace(/^(https?|ftp):\\/\\//, protocol);\n if (!qms.y_origin_top) {\n serviceUrl = serviceUrl.replace('{y}', '{-y}');\n }\n return {\n url: serviceUrl,\n name: qms.name,\n attribution: qms.copyright_text,\n maxZoom: qms.z_max,\n minZoom: qms.z_min,\n };\n}\n","import { mixinProperties } from '@nextgis/utils';\n\nimport { getSubdomainsOriginUrl } from './getSubmodulesFromOriginUrl';\nimport { loadJson } from './loadJson';\nimport { alias, updateQmsOptions } from './updateQmsOptions';\n\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, WebMap } from '@nextgis/webmap';\n\nimport type {\n CreateQmsAdapterOptions,\n QmsAdapter as QA,\n QmsAdapterOptions,\n QmsBasemap,\n} from '../interfaces';\n\nconst URL = 'https://qms.nextgis.com';\n\nexport function createQmsAdapter(\n options: CreateQmsAdapterOptions,\n): Type<MainLayerAdapter>;\nexport function createQmsAdapter(\n webMap: WebMap,\n url?: string,\n createOpt?: Partial<QmsAdapterOptions>,\n): Type<MainLayerAdapter>;\nexport function createQmsAdapter(\n webMapOrOptions: WebMap | CreateQmsAdapterOptions,\n url = URL,\n createOpt: Partial<QmsAdapterOptions> = {},\n): Type<MainLayerAdapter> {\n let webMap: WebMap;\n if ('webMap' in webMapOrOptions) {\n const { webMap: webMap_, url: url_, ...adapterOptions } = webMapOrOptions;\n webMap = webMap_;\n if (url_) {\n url = url_;\n }\n if (adapterOptions) {\n createOpt = adapterOptions;\n }\n } else {\n webMap = webMapOrOptions;\n }\n\n if (!url) {\n url = URL;\n }\n class QmsAdapter<M = any> implements MainLayerAdapter<M>, QA {\n qms?: QmsBasemap;\n\n options: QmsAdapterOptions;\n map: M;\n\n constructor(map: M, options: QmsAdapterOptions) {\n this.map = map;\n const opt = { ...createOpt, ...options };\n this.options = opt;\n this.options.baselayer = true;\n if (opt.qms) {\n this.qms = opt.qms;\n }\n }\n\n async addLayer(options: QmsAdapterOptions): Promise<any> {\n // qmsId for request, id for store\n if (!this.qms && options.qmsId) {\n try {\n this.qms = await loadJson<QmsBasemap>(\n url + '/api/v1/geoservices/' + options.qmsId,\n );\n } catch (er) {\n console.error(er);\n }\n }\n const qms = this.qms;\n if (qms) {\n const type = alias[qms.type || 'tms'];\n const WebMapAdapter = webMap.mapAdapter.layerAdapters[type];\n if (WebMapAdapter) {\n mixinProperties(QmsAdapter, WebMapAdapter, [\n 'showLayer',\n 'hideLayer',\n ]);\n if (type === 'TILE') {\n options = {\n order: 0,\n maxZoom: webMap.options.maxZoom,\n minZoom: webMap.options.minZoom,\n ...this.options,\n ...updateQmsOptions(qms),\n };\n if (qms.origin_url) {\n const [url, subdomains] = getSubdomainsOriginUrl(qms.origin_url);\n if (subdomains.length) {\n options.subdomains = subdomains;\n options.url = url;\n }\n }\n this.options = options;\n const adapter = new WebMapAdapter(this.map, options);\n return adapter.addLayer(options);\n }\n }\n }\n }\n }\n return QmsAdapter;\n}\n","import { createQmsAdapter } from './utils/createQmsAdapter';\n\nimport type { Type } from '@nextgis/utils';\nimport type {\n LayerAdapterCreators,\n MainLayerAdapter,\n StarterKit,\n WebMap,\n} from '@nextgis/webmap';\n\nimport type { QmsOptions } from './interfaces';\n\nexport class QmsKit implements StarterKit {\n static utils = {\n createQmsAdapter,\n };\n\n options: QmsOptions = {\n url: 'https://qms.nextgis.com',\n };\n\n url: string;\n\n constructor(options?: QmsOptions) {\n this.options = { ...this.options, ...options };\n this.url = this.options.url;\n }\n\n getLayerAdapters(): Promise<LayerAdapterCreators[]> {\n return Promise.resolve([\n {\n name: 'QMS',\n createAdapter: (webmap: WebMap) =>\n Promise.resolve(this._createAdapter(webmap)),\n },\n ]);\n }\n\n private _createAdapter(webMap: WebMap): Type<MainLayerAdapter> {\n return createQmsAdapter({ webMap, url: this.url });\n }\n}\n","import { QmsKit } from '@nextgis/qms-kit';\n\nimport type { Type } from '@nextgis/utils';\nimport type { MainLayerAdapter, TileAdapterOptions } from '@nextgis/webmap';\n\nimport type { GetClassAdapterOptions } from '../interfaces';\n\nexport async function createBasemapLayerAdapter({\n webMap,\n item,\n}: GetClassAdapterOptions): Promise<Type<MainLayerAdapter> | undefined> {\n if (item.basemap_layer) {\n const qms = item.basemap_layer.qms;\n const url = item.basemap_layer.url;\n if (qms) {\n const qms_ = JSON.parse(qms);\n const adapter = Promise.resolve(\n QmsKit.utils.createQmsAdapter(webMap, undefined, {\n qms: qms_,\n baselayer: true,\n }),\n );\n return adapter;\n } else if (url) {\n const TileAdapter = webMap.mapAdapter.layerAdapters.TILE as Type<\n MainLayerAdapter<any, any, TileAdapterOptions>\n >;\n if (TileAdapter) {\n class BasemapTileAdapter extends TileAdapter {\n async addLayer(opt: TileAdapterOptions) {\n if (url) {\n return super.addLayer({ ...opt, url });\n }\n }\n }\n return BasemapTileAdapter;\n }\n }\n }\n}\n","import type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature } from 'geojson';\n\nexport function createPopupContent(\n feature: Feature,\n item?: CompositeRead,\n): HTMLElement | string {\n if (__BROWSER__) {\n const element = document.createElement('div');\n if (item && item.feature_layer) {\n item.feature_layer.fields.forEach((x) => {\n if (x.grid_visibility) {\n const value = feature.properties && feature.properties[x.keyname];\n if (value) {\n const propElem = document.createElement('div');\n element.appendChild(propElem);\n propElem.innerHTML = `<span>${x.display_name}</span>: ${value}<span></span>`;\n }\n }\n });\n } else if (feature.properties) {\n for (const p in feature.properties) {\n const propElem = document.createElement('div');\n element.appendChild(propElem);\n propElem.innerHTML = `<span>${p}</span>: ${feature.properties[p]}<span></span>`;\n }\n }\n return element;\n } else {\n return '';\n }\n}\n","import type { FetchNgwLayerCountOptions } from '../interfaces';\n\nexport function fetchNgwLayerCount({\n connector,\n resourceId,\n cache = true,\n signal,\n}: FetchNgwLayerCountOptions): Promise<number> {\n return connector\n .route('feature_layer.feature.count', {\n id: resourceId,\n })\n .get({ cache, signal })\n .then((resp) => {\n return resp.total_count;\n });\n}\n","import { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerItems } from './fetchNgwLayerItems';\n\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { Feature, Geometry } from 'geojson';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\n\nexport async function fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<Feature<G, P>[]> {\n const x = await fetchNgwLayerItems(options);\n const features: Array<Feature<G, P>> = [];\n x.forEach((y) => {\n features.push(createGeoJsonFeature(y));\n });\n return features;\n}\n","import { fetchNgwLayerFeatures } from './fetchNgwLayerFeatures';\n\nimport type { FeatureProperties } from '@nextgis/utils';\nimport type { FeatureCollection, Geometry } from 'geojson';\n\nimport type { FetchNgwItemsOptions } from '../interfaces';\n\nexport function fetchNgwLayerFeatureCollection<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatures<G, P>(options).then((features) => {\n const featureCollection: FeatureCollection<G, P> = {\n type: 'FeatureCollection',\n features,\n };\n return featureCollection;\n });\n}\n","import type { FilterOptions, GeoJsonAdapterOptions } from '@nextgis/webmap';\n\nconst filterOptionsKeys: (keyof FilterOptions)[] = [\n 'fields',\n 'intersects',\n 'limit',\n 'orderBy',\n 'strategy',\n];\n\nexport function getLayerFilterOptions(\n options: GeoJsonAdapterOptions,\n): FilterOptions {\n const filterOptions: Record<string, any> = {};\n filterOptionsKeys.forEach((x) => {\n const opt = options[x];\n if (opt !== undefined) {\n filterOptions[x] = opt;\n }\n });\n return filterOptions as FilterOptions;\n}\n","import { propertiesFilter } from '@nextgis/properties-filter';\nimport { debounce } from '@nextgis/utils';\nimport { EventEmitter } from 'events';\n\nimport { createPopupContent } from '../utils/createPopupContent';\nimport { fetchNgwExtent } from '../utils/fetchNgwExtent';\nimport { fetchNgwLayerCount } from '../utils/fetchNgwLayerCount';\nimport { fetchNgwLayerFeatureCollection } from '../utils/fetchNgwLayerFeatureCollection';\nimport { getLayerFilterOptions } from '../utils/getLayerFilterOptions';\nimport { prepareNgwFieldsToPropertiesFilter } from '../utils/prepareNgwFieldsToPropertiesFilter';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\nimport { vectorLayerGeomToPaintTypeAlias } from '../utils/utils';\n\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { LngLatBoundsArray, Type } from '@nextgis/utils';\nimport type {\n FilterOptions,\n GeoJsonAdapterOptions,\n LayerAdapter,\n UpdateLayerAdapterOptions,\n VectorLayerAdapter,\n} from '@nextgis/webmap';\nimport type { FeatureCollection } from 'geojson';\n\nimport type {\n GetClassAdapterOptions,\n NgwFeatureRequestOptions,\n NgwLayerOptions,\n} from '../interfaces';\n\nexport async function createGeoJsonAdapter(\n props: GetClassAdapterOptions,\n): Promise<Type<VectorLayerAdapter>> {\n const {\n item,\n webMap,\n Adapter,\n connector,\n layerOptions,\n addLayerOptionsPriority: alop,\n } = props;\n const addLayerOptionsPriority = alop ?? true;\n const options = layerOptions as NgwLayerOptions<'GEOJSON'>;\n const GeoJsonAdapter: Type<VectorLayerAdapter> =\n Adapter || layerOptions.Adapter || webMap.mapAdapter.layerAdapters.GEOJSON;\n\n const _loadedIds: string[] = [];\n let _fullDataLoad = false;\n let _lastFilterArgs: UpdateLayerAdapterOptions | undefined;\n let internalAbortController: AbortController | undefined;\n\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n\n if (options.adapterOptions?.popupOptions?.fromProperties) {\n options.adapterOptions.popupOptions.createPopupContent = ({ feature }) => {\n return feature && createPopupContent(feature, item);\n };\n }\n\n const getData = async (\n filters?: PropertiesFilter,\n filterOpt?: NgwFeatureRequestOptions,\n ) => {\n abort();\n\n internalAbortController = new AbortController();\n const internalSignal = internalAbortController.signal;\n\n if (filterOpt?.signal) {\n filterOpt.signal.addEventListener('abort', internalAbortController.abort);\n }\n filterOpt = filterOpt || {};\n filterOpt.signal = internalSignal;\n\n _lastFilterArgs = { filters, options: filterOpt };\n return fetchNgwLayerFeatureCollection({\n resourceId,\n filters,\n connector,\n cache: true,\n ...filterOpt,\n });\n };\n let removed = false;\n const abort = () => {\n if (internalAbortController) {\n internalAbortController.abort();\n internalAbortController = undefined;\n }\n };\n\n class NgwGeoJsonAdapter extends GeoJsonAdapter {\n emitter = new EventEmitter();\n __onMapMove?: () => void;\n __onMapMoveStart?: () => void;\n __enableMapMoveListener?: (e: LayerAdapter) => void;\n __disableMapMoveListener?: (e: LayerAdapter) => void;\n\n async addLayer(opt: GeoJsonAdapterOptions) {\n let needUpdate = !opt.data;\n const waitFullLoad =\n opt.waitFullLoad !== undefined ? opt.waitFullLoad : true;\n if (options.id !== undefined) {\n opt.id = options.id;\n }\n if (item && item.vector_layer) {\n opt.type =\n vectorLayerGeomToPaintTypeAlias[item.vector_layer.geometry_type];\n }\n if (options.adapterOptions) {\n // TODO: remove addLayerOptionsPriority options/\n // in some cases, addLayer options must be used,\n // but in others factory method options needs first\n if (addLayerOptionsPriority) {\n opt = {\n ...options.adapterOptions,\n ...opt,\n };\n } else {\n opt = {\n ...opt,\n ...options.adapterOptions,\n };\n }\n }\n if (opt.data && Object.keys(opt.data).length === 0) {\n opt.data = undefined;\n needUpdate = false;\n }\n const strategy = opt.strategy || undefined;\n this.options.strategy = strategy;\n\n const layer = super.addLayer(opt);\n _lastFilterArgs = {\n filters: opt.propertiesFilter,\n options: getLayerFilterOptions(opt),\n };\n let updatePromise: Promise<any> | undefined;\n if (needUpdate) {\n updatePromise = this.updateLayer();\n }\n if (waitFullLoad && updatePromise) {\n await updatePromise;\n }\n if (strategy && strategy.startsWith('BBOX') && !_fullDataLoad) {\n this._addBboxEventListener();\n }\n return layer;\n }\n\n /** @deprecated use {@link NgwGeoJsonAdapter.getBounds} instead */\n getExtent(): Promise<LngLatBoundsArray | undefined> {\n return this.getBounds();\n }\n\n async getBounds(): Promise<LngLatBoundsArray | undefined> {\n const hasData = this.getLayers && this.getLayers().length;\n const strategy = this.options.strategy;\n if (strategy?.startsWith('BBOX') || hasData) {\n return fetchNgwExtent({ connector, resourceId: item.resource.id });\n } else {\n if (super.getBounds) {\n return super.getBounds();\n }\n }\n }\n\n beforeRemove() {\n removed = true;\n this._removeMoveEventListener();\n this._removeBboxEventListener();\n this.__disableMapMoveListener = undefined;\n this.__enableMapMoveListener = undefined;\n this.__onMapMove = undefined;\n this.__onMapMoveStart = undefined;\n abort();\n }\n\n getCount() {\n return fetchNgwLayerCount({ connector, resourceId, cache: true });\n }\n\n async updateLayer(opt?: UpdateLayerAdapterOptions) {\n const filterArgs = opt || _lastFilterArgs || {};\n if (this.options.strategy?.startsWith('BBOX')) {\n await webMap.onLoad('create');\n filterArgs.options = filterArgs.options || {};\n filterArgs.options.intersects = webMap.getBounds();\n const { minZoom, maxZoom } = this.options;\n const zoom = webMap.getZoom();\n if (zoom !== undefined) {\n if (minZoom !== undefined && zoom < minZoom) {\n return;\n }\n if (maxZoom !== undefined && zoom > maxZoom) {\n return;\n }\n if (_fullDataLoad) {\n return;\n }\n }\n }\n if (removed) {\n return;\n }\n try {\n this.emitter.emit('preupdate', filterArgs);\n webMap._emitLayerEvent('layer:preupdate', options.id || '', filterArgs);\n\n const data = await getData(filterArgs.filters, {\n ...filterArgs.options,\n srs: this.options.srs,\n });\n let newData: FeatureCollection = data;\n const count = await this.getCount();\n\n if (this.options.strategy === 'BBOX+') {\n newData = {\n type: 'FeatureCollection',\n features: [],\n };\n for (const f of data.features) {\n if (_loadedIds.indexOf(String(f.id)) === -1) {\n _loadedIds.push(String(f.id));\n newData.features.push(f);\n }\n }\n _fullDataLoad = count !== undefined && _loadedIds.length >= count;\n await webMap.addLayerData(this, newData);\n } else {\n _fullDataLoad = count !== undefined && data.features.length >= count;\n await webMap.setLayerData(this, data);\n }\n this.emitter.emit('updated', data);\n webMap._emitLayerEvent('layer:updated', options.id || '', {\n data,\n newData,\n isFull: _fullDataLoad,\n });\n } catch (er) {\n if (er instanceof Error && er.name !== 'AbortError') {\n throw er;\n }\n }\n if (super.updateLayer) {\n super.updateLayer();\n }\n }\n\n async propertiesFilter(\n filters: PropertiesFilter,\n opt?: FilterOptions,\n ): Promise<void> {\n abort();\n if (this.filter && _fullDataLoad) {\n this.filter((e) => {\n const props_ =\n e.feature &&\n e.feature.properties &&\n prepareNgwFieldsToPropertiesFilter({ ...e.feature.properties });\n if (props_) {\n return propertiesFilter(props_, filters);\n }\n return true;\n });\n } else if (this.setData) {\n if (this.clearLayer) {\n this.clearLayer();\n }\n const data = await getData(filters, {\n ...opt,\n srs: this.options.srs,\n });\n this.setData(data);\n }\n }\n\n removeFilter() {\n _lastFilterArgs = undefined;\n this.propertiesFilter([]);\n if (this.filter) {\n this.filter(() => {\n return true;\n });\n }\n }\n\n private _addBboxEventListener() {\n this.__enableMapMoveListener = (e: LayerAdapter) => {\n if (e === this) {\n this._removeMoveEventListener();\n this.updateLayer();\n this._addMoveEventListener();\n }\n };\n this.__disableMapMoveListener = (e: LayerAdapter) => {\n if (e === this) {\n this._removeMoveEventListener();\n }\n };\n webMap.emitter.on('layer:show', this.__enableMapMoveListener);\n webMap.emitter.on('layer:hide', this.__disableMapMoveListener);\n this.__enableMapMoveListener(this);\n }\n\n private _removeBboxEventListener() {\n if (this.__enableMapMoveListener) {\n webMap.emitter.on('layer:show', this.__enableMapMoveListener);\n }\n if (this.__disableMapMoveListener) {\n webMap.emitter.on('layer:hide', this.__disableMapMoveListener);\n }\n }\n\n private _addMoveEventListener() {\n this.__onMapMove = debounce(() => this.updateLayer());\n this.__onMapMoveStart = abort;\n webMap.emitter.on('movestart', this.__onMapMoveStart);\n webMap.emitter.on('moveend', this.__onMapMove);\n }\n\n private _removeMoveEventListener() {\n if (this.__onMapMove) {\n webMap.emitter.removeListener('moveend', this.__onMapMove);\n }\n if (this.__onMapMoveStart) {\n webMap.emitter.removeListener('movestart', this.__onMapMoveStart);\n }\n }\n }\n\n return NgwGeoJsonAdapter;\n}\n","import { NgwWebmapLayerAdapter as NWLayerAdapter } from '../NgwWebmapLayerAdapter';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\n\nimport type { Type } from '@nextgis/utils';\n\nimport type { GetClassAdapterOptions } from '../interfaces';\n\nexport async function createWebMapAdapter({\n layerOptions: options,\n webMap,\n connector,\n}: GetClassAdapterOptions): Promise<Type<NWLayerAdapter>> {\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n return class NgwWebmapLayerAdapter extends NWLayerAdapter {\n constructor(map: any) {\n super(map, {\n url: '',\n webMap,\n resourceId,\n connector,\n });\n }\n };\n}\n","import { defined } from '@nextgis/utils';\n\nimport { Legend } from '../Legend';\nimport { ngwApiToAdapterOptions } from '../utils/ngwApiToAdapterOptions';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\n\nimport type { Type } from '@nextgis/utils';\nimport type {\n GetLegendOptions,\n ImageAdapterOptions,\n MainLayerAdapter,\n} from '@nextgis/webmap';\nimport type { CompositeRead, ResourceCls } from '@nextgisweb/resource/type/api';\n\nimport type {\n GetClassAdapterOptions,\n NgwLayerAdapterType,\n ResourceAdapter,\n} from '../interfaces';\n\nexport type LegendSymbols = {\n [symbolIndex: number]: boolean | null;\n};\n\nexport async function createRasterAdapter({\n layerOptions,\n connector,\n webMap,\n item,\n}: GetClassAdapterOptions): Promise<Type<MainLayerAdapter> | undefined> {\n const resourceCls = item.resource.cls;\n const clsAdapterAlias: { [key in ResourceCls]?: NgwLayerAdapterType } = {\n wmsserver_service: 'WMS',\n tmsclient_layer: 'IMAGE',\n };\n let adapter =\n layerOptions.adapter ||\n (resourceCls && clsAdapterAlias[resourceCls]) ||\n 'IMAGE';\n if (adapter !== undefined) {\n layerOptions.adapter = adapter;\n }\n if (adapter === 'IMAGE') {\n const layerAdapters = webMap.getLayerAdapters();\n const isImageAllowed = layerAdapters ? layerAdapters.IMAGE : true;\n if (!isImageAllowed) {\n adapter = 'TILE';\n }\n }\n\n const AdapterClass = webMap.mapAdapter.layerAdapters[\n adapter\n ] as Type<MainLayerAdapter>;\n if (AdapterClass) {\n const resourceId = await resourceIdFromLayerOptions(\n layerOptions,\n connector,\n );\n return class RasterAdapter extends AdapterClass implements ResourceAdapter {\n item?: CompositeRead = item;\n resourceId = resourceId;\n\n blocked = false;\n layerVisibility?: boolean;\n\n constructor(\n public map: any,\n _options: any,\n ) {\n super(map, _options);\n const opt = ngwApiToAdapterOptions({\n options: layerOptions,\n webMap,\n baseUrl: connector.options.baseUrl || '',\n });\n if (opt) {\n const layerAdapterOptions: ImageAdapterOptions = {\n ...opt,\n ...layerOptions.adapterOptions,\n params: { resource: resourceId },\n layers: opt.layers || String(resourceId),\n resourceId,\n };\n if (\n layerOptions.adapterOptions &&\n defined(layerOptions.adapterOptions.setViewDelay)\n ) {\n layerAdapterOptions.setViewDelay =\n layerOptions.adapterOptions.setViewDelay;\n }\n this.options = { ...this.options, ...layerAdapterOptions };\n }\n }\n\n addLayer(addOptions: any) {\n return super.addLayer({ ...this.options, ...addOptions });\n }\n\n async getIdentificationIds(): Promise<number[]> {\n if (this.item) {\n if (adapter === 'MVT') {\n return [this.item.resource.id];\n }\n if (this.item.resource.parent) {\n const id = this.item.resource.parent.id;\n if (defined(id)) {\n return [id];\n }\n }\n }\n return [];\n }\n\n async getLegend(options?: GetLegendOptions): Promise<Legend[]> {\n const id = this.options.id;\n if (id !== undefined) {\n const ngwLegend = await connector\n .route('render.legend_symbols', { id: resourceId })\n .get({\n cache: true,\n ...options,\n });\n const legend = new Legend({\n layerId: id,\n layer: this,\n resourceId,\n webMap,\n legend: ngwLegend,\n });\n return [legend];\n }\n return [];\n }\n };\n } else {\n throw new Error(adapter + ' not supported yet. Only TILE');\n }\n}\n","import { applyMixins } from '@nextgis/utils';\n\nimport { NgwResource } from '../NgwResource';\nimport { resourceIdFromLayerOptions } from '../utils/resourceIdFromLayerOptions';\nimport { vectorLayerGeomToPaintTypeAlias } from '../utils/utils';\n\nimport { createBasemapLayerAdapter } from './createBasemapLayerAdapter';\nimport { createGeoJsonAdapter } from './createGeoJsonAdapter';\nimport { createWebMapAdapter } from './createNgwWebmapAdapter';\nimport { createRasterAdapter } from './createRasterAdapter';\n\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { Type } from '@nextgis/utils';\nimport type { WebMap } from '@nextgis/webmap';\nimport type { CompositeRead, ResourceCls } from '@nextgisweb/resource/type/api';\n\nimport type {\n ClassAdapter,\n GetClassAdapter,\n GetClassAdapterByType,\n GetClassAdapterCallback,\n GetClassAdapterOptions,\n NgwLayerOptions,\n ResourceAdapter,\n} from '../interfaces';\n\nexport const classAdapters: Record<string, GetClassAdapter> = {};\n\nconst supportCls: ResourceCls[] = [\n 'mapserver_style',\n 'qgis_vector_style',\n 'qgis_raster_style',\n 'wmsserver_service',\n 'raster_style',\n 'basemap_layer',\n 'vector_layer',\n 'raster_layer',\n 'postgis_layer',\n 'webmap',\n // in tms branch\n 'tmsclient_layer',\n];\n\nasync function createAdapterFromFirstStyle({\n layerOptions,\n webMap,\n connector,\n item,\n}: GetClassAdapterOptions) {\n const parent = item.resource.id;\n const childrenStyles = await connector.getResourceChildren(parent);\n const firstStyle = childrenStyles && childrenStyles[0];\n if (firstStyle) {\n return createAsyncAdapter(\n { ...layerOptions, resource: firstStyle.resource.id },\n webMap,\n connector,\n );\n }\n}\n\nexport async function createAsyncAdapter(\n options: NgwLayerOptions,\n webMap: WebMap,\n connector: NgwConnector,\n): Promise<Type<ResourceAdapter> | undefined> {\n let adapter: ClassAdapter | undefined;\n let item: CompositeRead | undefined;\n const adapterType = options.adapter;\n const resourceId = await resourceIdFromLayerOptions(options, connector);\n if (resourceId) {\n const resourceOptions = options as NgwLayerOptions;\n const itemFromResOpt = resourceOptions.resource as CompositeRead;\n if (\n itemFromResOpt &&\n itemFromResOpt.resource &&\n itemFromResOpt.resource.id !== undefined\n ) {\n item = itemFromResOpt;\n } else {\n item = await connector.getResource(resourceId);\n }\n if (item) {\n const cls = item.resource.cls;\n const layerOptions: NgwLayerOptions = {\n ...options,\n resource: resourceId,\n };\n\n const adapterOptions: GetClassAdapterOptions = {\n layerOptions,\n connector,\n webMap,\n item,\n };\n\n if (supportCls.indexOf(cls) !== -1) {\n if (cls === 'webmap') {\n adapter = createWebMapAdapter(adapterOptions);\n } else if (cls === 'vector_layer' || cls === 'postgis_layer') {\n const type =\n item.vector_layer &&\n vectorLayerGeomToPaintTypeAlias[item.vector_layer.geometry_type];\n const adapterOptions_ =\n adapterOptions.layerOptions.adapterOptions || {};\n adapterOptions_.type = adapterOptions_.type || type;\n adapterOptions.layerOptions.adapterOptions = adapterOptions_;\n options.adapterOptions = adapterOptions;\n if (adapterType !== undefined && adapterType !== 'GEOJSON') {\n if (adapterType === 'MVT') {\n adapter = createRasterAdapter(adapterOptions);\n } else {\n return createAdapterFromFirstStyle(adapterOptions);\n }\n } else {\n adapter = createGeoJsonAdapter(adapterOptions);\n }\n } else if (cls === 'raster_layer') {\n return createAdapterFromFirstStyle(adapterOptions);\n } else if (cls === 'basemap_layer') {\n adapter = createBasemapLayerAdapter(adapterOptions);\n } else {\n if (adapterType === 'GEOJSON' && item.resource.parent) {\n const parentItem = await connector.getResource(\n item.resource.parent.id,\n );\n if (parentItem) {\n const parentOptions: NgwLayerOptions = {\n ...options,\n resource: item.resource.parent.id,\n };\n adapter = createGeoJsonAdapter({\n ...adapterOptions,\n item: parentItem,\n layerOptions: parentOptions,\n });\n }\n } else {\n adapter = createRasterAdapter(adapterOptions);\n }\n }\n } else if (classAdapters[cls]) {\n const getClassAdapter = classAdapters[cls];\n let classAdapter: GetClassAdapterCallback | undefined;\n if (adapterType && typeof classAdapter !== 'function') {\n classAdapter = (getClassAdapter as GetClassAdapterByType)[\n adapterType\n ];\n } else {\n classAdapter = getClassAdapter as GetClassAdapterCallback;\n }\n if (classAdapter) {\n adapter = classAdapter(adapterOptions);\n }\n } else {\n throw `Resource class '${cls}' not yet supported.`;\n }\n } else {\n throw 'Resource item is not found';\n }\n }\n\n if (adapter) {\n return adapter.then((x) => {\n if (x) {\n const resourceAdapter = x as Type<ResourceAdapter>;\n if (item) {\n resourceAdapter.prototype.item = item;\n resourceAdapter.prototype.resourceId = item.resource.id;\n resourceAdapter.prototype.connector = connector;\n }\n\n applyMixins(resourceAdapter, [NgwResource], { replace: false });\n return resourceAdapter;\n }\n });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\n\nimport { classAdapters } from './adapters/createAsyncAdapter';\nimport { extendNgwWebmapLayerAdapter } from './utils/utils';\nimport { NgwWebmapLayerAdapter } from './NgwWebmapLayerAdapter';\n\nimport type { Type } from '@nextgis/utils';\nimport type { LayerAdapterCreators, StarterKit, WebMap } from '@nextgis/webmap';\n\nimport type {\n GetClassAdapter,\n NgwKitOptions,\n NgwWebmapAdapterOptions,\n} from './interfaces';\n\nexport class NgwKit implements StarterKit {\n url: string;\n connector: NgwConnector;\n webMap?: WebMap;\n\n constructor(public options: NgwKitOptions) {\n if (this.options.connector) {\n this.url = this.options.connector.options.baseUrl || '';\n this.connector = this.options.connector;\n } else {\n if (this.options.baseUrl) {\n this.url = this.options.baseUrl;\n } else {\n throw new Error('url is not defined');\n }\n this.connector = new NgwConnector({\n baseUrl: this.url,\n auth: this.options.auth,\n });\n }\n }\n\n static addClassAdapters(cls: string, adapter: GetClassAdapter): void {\n classAdapters[cls] = adapter;\n }\n\n async onLoadSync(webMap: WebMap): Promise<NgwWebmapLayerAdapter | undefined> {\n if (this.options.resourceId && this.url) {\n // TODO: resources from array\n const resourceIds = [this.options.resourceId];\n\n if (resourceIds.length) {\n for (const r of resourceIds) {\n const options: Partial<NgwWebmapAdapterOptions> = {\n resourceId: r,\n connector: this.connector,\n webMap,\n };\n const layer = (await webMap.addLayer(NgwWebmapLayerAdapter, {\n visibility: true,\n fit: true,\n pixelRadius: this.options.pixelRadius,\n ...options,\n })) as NgwWebmapLayerAdapter;\n return layer;\n }\n }\n }\n }\n\n getLayerAdapters(): Promise<LayerAdapterCreators[]> {\n return Promise.resolve([this._getLayerAdapter()]);\n }\n\n private _getLayerAdapter() {\n return {\n name: 'WEBMAP',\n createAdapter: (webmap: WebMap) =>\n Promise.resolve(this._createAdapter(webmap)),\n };\n }\n\n private _createAdapter(webMap: WebMap): Type<NgwWebmapLayerAdapter> {\n const connector = this.connector;\n const baseUrl = this.url;\n return extendNgwWebmapLayerAdapter({\n webMap,\n connector,\n baseUrl,\n });\n }\n}\n","import { fetchNgwLayerItem, fetchNgwLayerItemExtent } from '.';\n\nimport type {\n CompositeFor,\n FeatureItemExtensions,\n GetRequestOptions,\n LayerFeature,\n} from '@nextgis/ngw-connector';\nimport type NgwConnector from '@nextgis/ngw-connector';\nimport type { FeatureProperties, LngLatBoundsArray } from '@nextgis/utils';\nimport type { FeatureLayerRead } from '@nextgisweb/feature-layer/type/api';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, GeoJsonObject, Geometry } from 'geojson';\n\nimport type { IdentifyItemOptions, NgwFeatureItemResponse } from '.';\nimport type { FetchNgwItemOptions } from './interfaces';\n\nexport class IdentifyItem<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n> implements LayerFeature\n{\n readonly id: number;\n readonly label: string;\n readonly layerId: number;\n readonly parent: string;\n readonly fields: FeatureProperties;\n geom?: GeoJsonObject;\n extensions?: FeatureItemExtensions;\n\n private connector: NgwConnector;\n private _item?: NgwFeatureItemResponse<F, G>;\n private _geojson?: Feature<G, F>;\n private _resource?: CompositeRead;\n private _extent?: LngLatBoundsArray;\n\n constructor(options: IdentifyItemOptions) {\n const f = options.feature;\n this.id = f.id;\n this.geom = f.geom;\n this.label = f.label;\n this.parent = f.parent;\n this.fields = f.fields;\n this.layerId = f.layerId;\n this.connector = options.connector;\n }\n\n identify(\n options: Partial<FetchNgwItemOptions<F>> = {},\n ): Promise<NgwFeatureItemResponse<F, G>> {\n if (this._item) {\n return Promise.resolve(this._item);\n }\n return fetchNgwLayerItem<G, F>({\n connector: this.connector,\n featureId: this.id,\n resourceId: this.layerId,\n fields: null,\n extensions: ['attachment', 'description'],\n ...options,\n }).then((resp) => {\n this._item = resp;\n this.geom = resp.geom;\n this.extensions = resp.extensions;\n return resp;\n });\n }\n\n async resource(opt?: GetRequestOptions): Promise<FeatureLayerRead> {\n const composite = await this.composite(opt);\n\n return composite.feature_layer;\n }\n async composite(\n opt?: GetRequestOptions,\n ): Promise<CompositeFor<'feature_layer'>> {\n if (this._resource && this._resource.feature_layer) {\n return this._resource as CompositeFor<'feature_layer'>;\n }\n const resp = await this.connector.getResource(this.layerId, opt);\n\n if (!resp) {\n throw new Error('Resource does not exist');\n }\n if (!resp.feature_layer) {\n throw new Error('Resource is not a vector layer');\n }\n\n this._resource = resp;\n return resp as CompositeFor<'feature_layer'>;\n }\n\n getBounds(\n opt?: Pick<GetRequestOptions, 'cache' | 'signal'>,\n ): Promise<LngLatBoundsArray | undefined> {\n if (this._extent) {\n return Promise.resolve(this._extent);\n }\n return fetchNgwLayerItemExtent({\n connector: this.connector,\n featureId: this.id,\n resourceId: this.layerId,\n ...opt,\n });\n }\n\n geojson(\n options: Partial<FetchNgwItemOptions<F>> = {},\n ): Promise<Feature<G, F>> {\n if (this._geojson) {\n return Promise.resolve(this._geojson);\n }\n return this.identify(options).then((resp) => {\n return resp.toGeojson().then((geojson) => {\n this._geojson = geojson;\n return geojson;\n });\n });\n }\n}\n","import { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerItem } from './fetchNgwLayerItem';\n\nimport type { Feature, Geometry } from 'geojson';\n\nimport type { FetchNgwItemOptions } from '../interfaces';\n\nexport async function fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends Record<string, any> = Record<string, any>,\n>(options: FetchNgwItemOptions<P>): Promise<Feature<G, P>> {\n const item = await fetchNgwLayerItem<G, P>(options);\n return createGeoJsonFeature<G, P>(item);\n}\n","import type NgwConnector from '@nextgis/ngw-connector';\n\nimport type { CompanyLogoOptions } from '../interfaces';\n\nexport async function getCompanyLogo(\n connector: NgwConnector,\n options?: CompanyLogoOptions,\n): Promise<HTMLElement | undefined> {\n const settings = await connector.route('pyramid.settings').get({\n query: {\n component: 'pyramid',\n },\n });\n if (settings && settings.company_logo && settings.company_logo.enabled) {\n const anchor = document.createElement('a');\n anchor.style.position = 'absolute';\n anchor.style.bottom = '0';\n anchor.style.right = '0';\n anchor.style.padding = options?.padding ?? '10px';\n anchor.className = 'ngw-map-logo';\n if (options && options.cssClass) {\n anchor.className += ' ' + options.cssClass;\n }\n const img = new Image();\n img.style.maxHeight = '100px';\n img.style.maxWidth = '100px';\n img.src = '';\n\n const resp = await connector.route('pyramid.csettings').get({\n query: {\n pyramid: ['header_logo'],\n },\n });\n const logo = resp.pyramid?.header_logo;\n if (logo) {\n const [mimeType, base64Data] = logo;\n\n const byteCharacters = atob(base64Data);\n const byteNumbers = new Array(byteCharacters.length);\n\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: mimeType });\n\n const urlCreator = window.URL || window.webkitURL;\n const imageUrl = urlCreator.createObjectURL(blob);\n img.src = imageUrl;\n } else {\n return;\n }\n\n if (\n settings.company_logo.link !== null &&\n settings.company_logo.link.trim() !== ''\n ) {\n anchor.href = settings.company_logo.link;\n anchor.target = '_blank';\n if (settings.company_logo.link.search(/:\\/\\/nextgis/) !== -1) {\n img.alt = 'Get your own Web GIS at nextgis.com';\n }\n }\n anchor.appendChild(img);\n return anchor;\n }\n}\n","import {\n degrees2meters,\n deprecatedMapClick,\n getCirclePolygonCoordinates,\n} from '@nextgis/utils';\n\nimport { IdentifyItem } from '../IdentifyItem';\n\nimport { createGeoJsonFeature } from './featureLayerUtils';\nimport { fetchNgwLayerFeature } from './fetchNgwLayerFeature';\nimport { fetchNgwLayerItem } from './fetchNgwLayerItem';\n\nimport type {\n FeatureLayersIdentify,\n LayerFeature,\n} from '@nextgis/ngw-connector';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type { MapClickEvent } from '@nextgis/webmap';\nimport type { Feature, Geometry, Position } from 'geojson';\n\nimport type {\n FeatureIdentifyRequestOptions,\n FeatureLayerIdentifyOptions,\n GetIdentifyGeoJsonOptions,\n IdentifyItemOptions,\n IdentifyRequestOptions,\n NgwFeatureItemResponse,\n NgwIdentifyItem,\n} from '../interfaces';\n\nexport function getIdentifyItems(\n identify: FeatureLayersIdentify & { resources?: number[] },\n multiple = false,\n): NgwIdentifyItem[] {\n const resources = [];\n const paramsList = [];\n for (const l in identify) {\n const id = Number(l);\n if (!isNaN(id)) {\n resources.push(id);\n }\n }\n const sortingArr = identify.resources;\n if (sortingArr) {\n resources.sort((a, b) => {\n return sortingArr.indexOf(a) - sortingArr.indexOf(b);\n });\n }\n\n for (let fry = 0; fry < resources.length; fry++) {\n const l = resources[fry];\n const identifyItem = identify[l];\n if ('features' in identifyItem) {\n const layerFeatures = identifyItem.features;\n const resourceId = Number(l);\n const featureParams: NgwIdentifyItem[] = createParamsFromFeatures(\n layerFeatures,\n resourceId,\n multiple,\n );\n if (featureParams.length) {\n paramsList.push(...featureParams);\n if (!multiple) {\n break;\n }\n }\n }\n }\n return paramsList;\n}\n\nfunction createParamsFromFeatures(\n features: LayerFeature[],\n resourceId: number,\n multiple: boolean,\n): NgwIdentifyItem[] {\n const featureParams: NgwIdentifyItem[] = [];\n for (const feature of features) {\n const params = {\n featureId: feature.id,\n resourceId,\n feature,\n };\n featureParams.push(params);\n if (!multiple) {\n break;\n }\n }\n return featureParams;\n}\n\nexport function fetchIdentifyGeoJson<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n>(options: GetIdentifyGeoJsonOptions): Promise<Feature<G, P> | undefined> {\n const { connector, identify, requestOptions } = options;\n for (const l in identify) {\n const id = Number(l);\n if (!isNaN(id)) {\n const item = identify[l];\n if ('features' in item) {\n const withGeom = item.features.find((x) => x.geom);\n\n if (withGeom && withGeom.geom) {\n const geom = withGeom.geom as Geometry;\n return Promise.resolve(\n createGeoJsonFeature({\n ...withGeom,\n geom,\n }),\n );\n }\n }\n }\n }\n\n const params = getIdentifyItems(identify);\n if (params && params.length) {\n return fetchNgwLayerFeature({ ...requestOptions, connector, ...params[0] });\n }\n return Promise.resolve(undefined);\n}\n\nexport function fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n>(\n options: GetIdentifyGeoJsonOptions<P>,\n): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const { connector, identify } = options;\n\n const params = getIdentifyItems(identify);\n if (params && params.length) {\n return fetchNgwLayerItem<G, P>({\n connector,\n ...options.requestOptions,\n ...params[0],\n });\n }\n return Promise.resolve(undefined);\n}\n\n/**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\nexport function getIdentifyGeoJson<\n G extends Geometry = Geometry,\n P extends JsonMap = JsonMap,\n>(options: GetIdentifyGeoJsonOptions): Promise<Feature<G, P> | undefined> {\n return fetchIdentifyGeoJson(options);\n}\n\nexport function featureLayerIdentify(\n options: FeatureLayerIdentifyOptions,\n): Promise<FeatureLayersIdentify> {\n const { geom, signal, cache, layers } = options;\n\n const wkt = typeof geom === 'string' ? geom : convertGeomToWKT(geom);\n\n if (!wkt) {\n throw new Error('Not valid geometry format to make intersection');\n }\n\n const json: FeatureIdentifyRequestOptions = {\n geom: wkt,\n srs: 3857,\n layers,\n };\n\n return options.connector.route('feature_layer.identify').post({\n json,\n signal,\n cache,\n });\n}\n\nfunction convertGeomToWKT(\n geom: FeatureLayerIdentifyOptions['geom'],\n): string | null {\n const coordinates = getPolygonCoordinates(geom);\n if (!coordinates) return null;\n\n const polygonStr = coordinates.map(([lng, lat]) => {\n const [x, y] = degrees2meters(lng, lat);\n return `${x} ${y}`;\n });\n\n return `POLYGON((${polygonStr.join(',')}))`;\n}\n\nfunction getPolygonCoordinates(\n geom: FeatureLayerIdentifyOptions['geom'],\n): Position[] | null {\n if (Array.isArray(geom)) {\n return geom;\n }\n\n if (geom.type === 'Feature') {\n return geom.geometry?.coordinates[0];\n }\n\n if (geom.type === 'Polygon') {\n return geom.coordinates[0];\n }\n\n return null;\n}\n\nexport function sendIdentifyRequest(\n ev: MapClickEvent,\n options: IdentifyRequestOptions,\n): Promise<FeatureLayersIdentify> {\n deprecatedMapClick(ev);\n const [lng, lat] = ev.lngLat;\n const { geom, radius } = options;\n const geom_ = geom ?? getCirclePolygonCoordinates(lng, lat, radius);\n\n return featureLayerIdentify({ ...options, geom: geom_ });\n}\n\nexport function createIdentifyItem<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n>(opt: IdentifyItemOptions): IdentifyItem<F, G> {\n return new IdentifyItem<F, G>(opt);\n}\n","import type { WebMap } from './WebMap';\n\nconst WEB_MAP_CONTAINER: Record<number, any> = {};\n\nexport function getWebMap<T extends WebMap = WebMap>(id: number): T {\n return WEB_MAP_CONTAINER[id];\n}\n\nexport function setWebMap(id: number, webMap: WebMap) {\n WEB_MAP_CONTAINER[id] = webMap;\n}\n","import type {\n ButtonControlOptions,\n ToggleControl,\n ToggleControlOptions,\n} from '../../interfaces/MapControl';\n\n/**\n * The toggle is a button with status.\n * @internal\n */\nexport function createToggleControl<C = any>(\n createButtonControl: (options: ButtonControlOptions) => C,\n options: ToggleControlOptions,\n): C & ToggleControl {\n const link = document.createElement('div');\n\n let status = false;\n if (options.getStatus) {\n status = options.getStatus();\n } else if (options.status) {\n status = options.status;\n }\n\n const title = options.title || '';\n const html = options.html;\n\n function setTitle() {\n if (title) {\n if (typeof title === 'string') {\n link.title = title;\n } else {\n link.title = status ? title.on : title.off;\n }\n link.setAttribute('aria-label', link.title);\n }\n }\n setTitle();\n\n // DomEvent.disableClickPropagation(link);\n // DomEvent.on(link, 'click', DomEvent.stop);\n\n function _setHtml(htmlDef: string | HTMLElement) {\n if (htmlDef instanceof HTMLElement) {\n link.innerHTML = '';\n link.appendChild(htmlDef);\n } else if (typeof htmlDef === 'string') {\n link.innerHTML = htmlDef;\n }\n }\n function setHtml() {\n if (html) {\n if (typeof html === 'string' || html instanceof HTMLElement) {\n _setHtml(html);\n } else {\n _setHtml(status ? html.on : html.off);\n }\n link.setAttribute('aria-label', link.title);\n }\n }\n setHtml();\n\n function _setClass(addClass: string, impact: boolean) {\n addClass.split(' ').forEach((x) => {\n if (impact) {\n link.classList.add(x);\n } else {\n link.classList.remove(x);\n }\n });\n }\n\n function setClass() {\n if (options.addClassOn) {\n _setClass(options.addClassOn, status);\n }\n if (options.addClassOff) {\n _setClass(options.addClassOff, !status);\n }\n }\n\n if (options.addClass) {\n _setClass(options.addClass, true);\n }\n setClass();\n\n const changeStatus = (status_?: boolean) => {\n if (status_ !== undefined) {\n status = status_;\n }\n setHtml();\n setTitle();\n setClass();\n };\n\n const onClick = (status_?: boolean) => {\n status = status_ !== undefined ? status_ : !status;\n if (options.onClick) {\n const afterClick = options.onClick(status);\n Promise.resolve(afterClick)\n .then(() => changeStatus())\n .catch(() => (status = !status));\n } else {\n changeStatus();\n }\n };\n\n const buttonControl = createButtonControl({\n html: link,\n onClick,\n }) as C & ToggleControl;\n buttonControl.onClick = onClick;\n buttonControl.changeStatus = changeStatus;\n return buttonControl;\n}\n","import type {\n ExpressionCbFunc,\n ExpressionFunc,\n MapToCallback,\n SimpleType,\n} from '../interfaces';\n\nexport default function evaluateArgs<\n T extends SimpleType[] = SimpleType[],\n R = T[0],\n>(cb: ExpressionFunc<T, R>): ExpressionCbFunc<T, R> {\n return (args: MapToCallback<T>, data) => {\n const unwrap = args.map((a) => a()) as T;\n return cb(unwrap, data);\n };\n}\n","import e from '../utils/evaluateArgs';\n\nimport type { DecisionExpressionName, ExpressionCbFunc } from '../interfaces';\n\nfunction not([expr]: [boolean]): boolean {\n return !expr;\n}\n\nfunction notEqual([a, b]: [value1: any, value2: any]): boolean {\n return a !== b;\n}\n\nfunction lessThan([left, right]: [value1: any, value2: any]): boolean {\n return left < right;\n}\n\nfunction lessThanOrEqual([left, right]: [value1: any, value2: any]): boolean {\n return left <= right;\n}\n\nfunction equal([left, right]: [value1: any, value2: any]): boolean {\n return left === right;\n}\n\nfunction greaterThan([left, right]: [value1: any, value2: any]): boolean {\n return left > right;\n}\n\nfunction greaterThanOrEqual([left, right]: [\n value1: any,\n value2: any,\n]): boolean {\n return left >= right;\n}\n\nconst coalesce: ExpressionCbFunc<any[], any> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (arg !== null && arg !== undefined) {\n return arg;\n }\n }\n return null;\n};\n\nconst all: ExpressionCbFunc<any[], boolean> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (!arg) {\n return false;\n }\n }\n return true;\n};\n\nconst any: ExpressionCbFunc<any[], boolean> = (args) => {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]();\n if (arg) {\n return true;\n }\n }\n return false;\n};\n\nconst match: ExpressionCbFunc<any[]> = (args) => {\n const [lookupFn, ...cases] = args;\n const lookup = lookupFn();\n // remove last odd item from cases array\n const defValue = cases.splice(-1, cases.length % 2)[0];\n for (let fry = 0; fry < cases.length - 1; fry += 2) {\n const key = cases[fry]();\n if (key === lookup) {\n return cases[fry + 1]();\n }\n }\n return defValue();\n};\n\ntype OutputType = any;\nconst caseFunc: ExpressionCbFunc<\n [boolean, OutputType, ...Array<boolean | OutputType>],\n OutputType\n> = (args) => {\n if (args.length < 2) {\n throw new Error(\n 'The \"case\" function requires at least a condition and a corresponding output.',\n );\n }\n\n if (args.length % 2 === 0) {\n throw new Error(\n 'Missing a fallback value or unmatched condition-output pair.',\n );\n }\n for (let i = 0; i < args.length - 1; i += 2) {\n const condition = args[i]() as boolean;\n const value = args[i + 1]() as OutputType;\n if (condition) {\n return value;\n }\n }\n const fallback = args[args.length - 1];\n return fallback();\n};\n\nexport const decisionExpressions: Record<\n DecisionExpressionName,\n ExpressionCbFunc\n> = {\n '!': e(not),\n '!=': e(notEqual),\n '<': e(lessThan),\n '<=': e(lessThanOrEqual),\n '==': e(equal),\n '>': e(greaterThan),\n '>=': e(greaterThanOrEqual),\n coalesce,\n all,\n any,\n case: caseFunc,\n match,\n};\n","export const COLORS = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n 'indianred ': '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","import { COLORS } from '../constants/colors';\n\nexport type ColorArray = [r: number, g: number, b: number, a?: number];\n\nexport type ColorObject = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\nexport type Color = string | ColorObject;\n\nfunction isHex(hex: any): hex is string {\n return typeof hex === 'string' && /^#([A-Fa-f0-9]{3}){1,2}$/.test(hex);\n}\n\nfunction isRgb(hex: any): hex is string {\n const r =\n // eslint-disable-next-line max-len\n /^rgb(a?)\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)(?:\\s*,\\s*([01](?:\\.\\d+)?))?\\s*\\)$/;\n return typeof hex === 'string' && r.test(hex);\n}\n\nfunction isColorObj(obj: any): obj is ColorObject {\n if (typeof obj === 'object' && obj !== null) {\n const hasRgb = 'r' in obj && 'g' in obj && 'b' in obj;\n const hasValidAlpha =\n !('a' in obj) || (typeof obj.a === 'number' && obj.a >= 0 && obj.a <= 1);\n return hasRgb && hasValidAlpha;\n }\n return false;\n}\n\nfunction isColorName(name: any): name is keyof typeof COLORS {\n if (typeof name === 'string' && name in COLORS) {\n return true;\n }\n return false;\n}\n\nexport function isColor(value: any): value is Color {\n return [isColorName, isHex, isRgb, isColorObj].some((c) => c(value));\n}\n\nexport function toColor(value: Color): ColorArray {\n if (isHex(value)) {\n return hexToColor(value);\n } else if (isColorName(value)) {\n return colorNameToColor(value);\n } else if (isRgb(value)) {\n return rgbToColor(value);\n } else if (isColorObj(value)) {\n return colorObjectToColor(value);\n }\n throw new Error(`The '${value}' cannot be converted to color`);\n}\n\nfunction colorNameToColor(name: keyof typeof COLORS) {\n return hexToColor(COLORS[name]);\n}\n\nfunction hexToColor(hex: string): ColorArray {\n const shortRGB = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;\n const shortRGBA = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;\n const longRGB = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;\n const longRGBA =\n /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;\n\n let result;\n\n if ((result = shortRGB.exec(hex))) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n ];\n } else if ((result = shortRGBA.exec(hex))) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n parseInt(result[4] + result[4], 16) / 255,\n ];\n } else if ((result = longRGB.exec(hex))) {\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n ];\n } else if ((result = longRGBA.exec(hex))) {\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n parseInt(result[4], 16) / 255,\n ];\n }\n throw new Error(`The '${hex}' Is not valid hex`);\n}\n\nfunction rgbToColor(rgb: string): ColorArray {\n const rgbPattern = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/;\n const rgbaPattern = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)$/;\n\n let matches;\n\n if ((matches = rgb.match(rgbPattern))) {\n return [\n parseInt(matches[1], 10),\n parseInt(matches[2], 10),\n parseInt(matches[3], 10),\n ];\n } else if ((matches = rgb.match(rgbaPattern))) {\n return [\n parseInt(matches[1], 10),\n parseInt(matches[2], 10),\n parseInt(matches[3], 10),\n parseFloat(matches[4]),\n ];\n }\n\n throw new Error(`The '${rgb}' Is not valid rgb`);\n}\n\nexport function colorObjectToColor({ r, g, b, a }: ColorObject): ColorArray {\n return [r, g, b, ...(a !== undefined ? [a] : [])] as ColorArray;\n}\n\nexport function colorToRGB(array: ColorArray): string {\n return `rgb(${array.join(',')})`;\n}\n","import { type ColorArray, colorToRGB, toColor } from '../../utils/color';\n\nimport type { ExpressionCbFunc } from '../../interfaces';\n\ntype LinearInterpolation = ['linear'];\ntype ExponentialInterpolation = [name: 'exponential', base: number];\ntype CubicBezierInterpolation = [\n name: 'cubic-bezier',\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n];\ntype Interpolation =\n | LinearInterpolation\n | ExponentialInterpolation\n | CubicBezierInterpolation;\n\ntype OutputType = any;\n\ntype InterpolateArgs = [\n interpolation: Interpolation,\n input: number,\n ...stops: (number | OutputType)[],\n];\n\nfunction linearInterpolation(\n input: number,\n input1: number,\n output1: OutputType,\n input2: number,\n output2: OutputType,\n): OutputType {\n if (typeof output1 === 'number' && typeof output2 === 'number') {\n return (\n output1 + ((input - input1) / (input2 - input1)) * (output2 - output1)\n );\n }\n\n try {\n const outputColor1 = toColor(output1);\n const outputColor2 = toColor(output2);\n return colorToRGB(\n outputColor1.map((val, index) => {\n return Math.ceil(\n linearInterpolation(input, input1, val, input2, outputColor2[index]),\n );\n }) as ColorArray,\n );\n } catch (er) {\n console.log(er);\n }\n\n throw new Error('Unsupported output type for linear interpolation.');\n}\n\nexport const interpolate: ExpressionCbFunc<InterpolateArgs, OutputType> = ([\n interpolationFn,\n inputFn,\n ...stops\n]) => {\n if (stops.length < 2) {\n throw new Error('At least two stops are required');\n }\n if (stops.length < 2 || stops.length % 2 !== 0) {\n throw new Error('Invalid stops provided.');\n }\n const input = inputFn();\n\n if (typeof input !== 'number') {\n throw new Error('Input must be a number.');\n }\n const interpolation = interpolationFn();\n for (let i = 0; i < stops.length - 2; i += 2) {\n const stopInput1 = stops[i]() as number;\n const stopOutput1 = stops[i + 1]() as OutputType;\n const stopInput2 = stops[i + 2]() as number;\n const stopOutput2 = stops[i + 3]() as OutputType;\n\n if (input >= stopInput1 && input <= stopInput2) {\n if (interpolation[0] === 'linear') {\n return linearInterpolation(\n input,\n stopInput1,\n stopOutput1,\n stopInput2,\n stopOutput2,\n );\n }\n // else if (interpolation[0] === 'exponential') {\n // const base = interpolation[1];\n // return exponentialInterpolation(\n // input,\n // base,\n // stopInput1,\n // stopOutput1,\n // stopInput2,\n // stopOutput2,\n // );\n // }\n }\n }\n\n throw new Error('Invalid interpolation type.');\n};\n","import type { ExpressionCbFunc } from '../../interfaces';\n\ntype OutputType = number | string | boolean | null;\n\nexport const step: ExpressionCbFunc<(number | OutputType)[], OutputType> = (\n args,\n) => {\n const [inputFn, defaultValue, ...stops] = args;\n const input = inputFn();\n\n if (typeof input !== 'number') {\n return defaultValue() as OutputType;\n }\n\n for (let i = 0; i < stops.length - 2; i += 2) {\n const stopInput = stops[i]() as number;\n const stopOutput = stops[i + 1]() as OutputType;\n const nextStopInput = stops[i + 2]() as number;\n\n if (input >= stopInput && input < nextStopInput) {\n return stopOutput;\n }\n }\n\n if (input >= (stops[stops.length - 2]() as number)) {\n return stops[stops.length - 1]();\n }\n\n return defaultValue();\n};\n","import { interpolate } from './interpolate';\nimport { step } from './step';\n\nimport type {\n ExpressionFunc,\n InterpolationExpressionName,\n} from '../../interfaces';\n\nexport const interpolationExpressions: Record<\n InterpolationExpressionName,\n ExpressionFunc\n> = {\n step,\n interpolate,\n};\n","import e from '../utils/evaluateArgs';\n\nimport type {\n Data,\n ExpressionCbFunc,\n LookupExpressionName,\n SimpleType,\n} from '../interfaces';\n\ntype GetArg = [key: string] | [key: string, obj: Record<string, any>];\n\nfunction get([key, objExp]: GetArg, data: Data): SimpleType | null {\n const target = objExp || data;\n if (target && typeof target === 'object' && key in target) {\n return target[key];\n }\n return null;\n}\n\nfunction has([key, objExp]: GetArg, data: Data): boolean {\n const target = objExp || data;\n return !!(target && typeof target === 'object' && key in target);\n}\n\nfunction at([index, array]: [index: number, array: any[]]): SimpleType {\n return array[index];\n}\n\ntype InArgs = [keyword: string | boolean | number, input: string | any[]];\nfunction inFunc([keyword, input]: InArgs): boolean {\n if (typeof input === 'string') {\n return input.includes(String(keyword));\n } else if (Array.isArray(input)) {\n return input.includes(keyword);\n }\n throw new Error(\n `Invalid input type for 'in'. Expected string or array, got ${typeof input}.`,\n );\n}\n\nconst length = ([item]: [string | any[]]) => {\n if (typeof item === 'string' || Array.isArray(item)) {\n return item.length;\n }\n return undefined;\n};\n\ntype IndexOfArgs =\n | [keyword: string | boolean | number, input: string | any[]]\n | [keyword: string | boolean | number, input: string | any[], index: number];\nfunction indexOf([keyword, input, startIndex]: IndexOfArgs): number {\n if (typeof input === 'string') {\n return input.indexOf(String(keyword), startIndex);\n } else if (Array.isArray(input)) {\n return input.indexOf(keyword, startIndex);\n }\n\n throw new Error(\n `Invalid input type for 'index-of'. Expected string or array, got ${typeof input}.`,\n );\n}\n\ntype SliceArgs =\n | [input: string | any[], startIndex: number]\n | [input: string | any[], startIndex: number, endIndex: number];\n\nfunction slice(args: SliceArgs): string | any[] {\n const [input, startIndex, endIndex] = args;\n\n if (typeof input === 'string') {\n return input.slice(startIndex, endIndex);\n } else if (Array.isArray(input)) {\n return input.slice(startIndex, endIndex);\n }\n\n throw new Error(\n `Invalid input type for 'slice'. Expected string or array, got ${typeof input}.`,\n );\n}\n\nexport const lookupExpressions: Record<LookupExpressionName, ExpressionCbFunc> =\n {\n get: e(get),\n length: e(length),\n at: e(at),\n has: e(has),\n in: e(inFunc),\n 'index-of': e(indexOf),\n slice: e(slice),\n };\n","import e from '../utils/evaluateArgs';\n\nimport type { ExpressionCbFunc, MathExpressionName } from '../interfaces';\n\nexport const mathExpressions: Record<\n MathExpressionName,\n ExpressionCbFunc<number[], number>\n> = {\n '+': e((args) => args.reduce((a, b) => a + b, 0)),\n '-': e((args) => args.reduce((a, b) => a - b)),\n '*': e((args) => args.reduce((a, b) => a * b, 1)),\n '/': e((args) => args.reduce((a, b) => a / b)),\n '%': e((args) => args[0] % args[1]),\n '^': e((args) => Math.pow(args[0], args[1])),\n abs: e((args) => Math.abs(args[0])),\n acos: e((args) => Math.acos(args[0])),\n asin: e((args) => Math.asin(args[0])),\n atan: e((args) => Math.atan(args[0])),\n ceil: e((args) => Math.ceil(args[0])),\n cos: e((args) => Math.cos(args[0])),\n e: () => Math.E,\n floor: e((args) => Math.floor(args[0])),\n ln: e((args) => Math.log(args[0])),\n ln2: () => Math.LN2,\n log10: e((args) => Math.log10(args[0])),\n log2: e((args) => Math.log2(args[0])),\n max: e((args) => Math.max(...args)),\n min: e((args) => Math.min(...args)),\n pi: () => Math.PI,\n round: e((args) => Math.round(args[0])),\n sin: e((args) => Math.sin(args[0])),\n sqrt: e((args) => Math.sqrt(args[0])),\n tan: e((args) => Math.tan(args[0])),\n};\n","import e from '../utils/evaluateArgs';\n\nimport type { ExpressionCbFunc, StringExpressionName } from '../interfaces';\n\nexport const stringExpressions: Record<\n StringExpressionName,\n ExpressionCbFunc<string[], string>\n> = {\n concat: e((args) => args.reduce((a, b) => String(a) + String(b), '')),\n downcase: e((args) => String(args[0]).toLowerCase()),\n upcase: e((args) => String(args[0]).toUpperCase()),\n};\n","export const tryConvert = (\n converter: (arg: any, data: any) => any,\n arg: any,\n data: any,\n): any => {\n try {\n const result = converter(arg, data);\n if (result !== undefined) {\n return result;\n }\n } catch {\n // ignore errors\n }\n return undefined;\n};\n","import { tryConvert } from './tryConvert';\n\nimport type { ExpressionFunc, SimpleType } from '../interfaces';\n\nexport default function fallback<\n T extends SimpleType[] = SimpleType[],\n R = T[0],\n>(cb: ExpressionFunc<T, R | undefined>): ExpressionFunc<T[], R> {\n return (args: T[], data) => {\n for (const arg of args) {\n const result = tryConvert(cb, arg, data);\n if (result !== undefined) {\n return result;\n }\n }\n throw new Error(`Received a mismatched type`);\n };\n}\n","import e from '../utils/evaluateArgs';\nimport f from '../utils/fallback';\n\nimport type { ExpressionCbFunc, TypeExpressionName } from '../interfaces';\n\ntype ArrayType = 'string' | 'number' | 'boolean';\n\ntype ArrayArgs =\n | [value: any[]]\n | [type: ArrayType, value: any[]]\n | [type: ArrayType, n: number, value: any[]];\n\nconst array = (args: ArrayArgs): any[] => {\n const [firstArg, secondArg, thirdArg] = args;\n let requiredType: ArrayType | undefined = undefined;\n let requiredLength: number | undefined = undefined;\n let value: any[] | undefined;\n\n if (\n typeof firstArg === 'string' &&\n ['string', 'number', 'boolean'].includes(firstArg)\n ) {\n requiredType = firstArg;\n\n if (typeof secondArg === 'number') {\n requiredLength = secondArg;\n value = thirdArg;\n } else {\n value = secondArg;\n }\n } else if (Array.isArray(firstArg)) {\n value = firstArg;\n }\n if (!Array.isArray(value)) {\n throw new Error('Expected an array');\n }\n if (requiredType && !value.every((item) => typeof item === requiredType)) {\n throw new Error(\n `Expected all items in array to be of type ${requiredType}`,\n );\n }\n\n if (requiredLength && value.length !== requiredLength) {\n throw new Error(`Expected array of length ${requiredLength}`);\n }\n return value;\n};\n\nfunction typeOfValue(value: any): string {\n if (value === null) return 'null';\n switch (typeof value) {\n case 'string':\n return 'string';\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'object':\n if (Array.isArray(value)) {\n let arrayType = 'value';\n if (value.every((item) => typeof item === 'number')) {\n arrayType = 'number';\n } else if (value.every((item) => typeof item === 'string')) {\n arrayType = 'string';\n } else if (value.every((item) => typeof item === 'boolean')) {\n arrayType = 'boolean';\n }\n return `array<${arrayType}, ${value.length}>`;\n } else {\n return 'object';\n }\n default:\n return 'undefined';\n }\n}\n\nexport const typeExpressions: Record<TypeExpressionName, ExpressionCbFunc> = {\n array: e(array),\n boolean: e(\n f<boolean[]>((arg) => (typeof arg === 'boolean' ? arg : undefined)),\n ),\n literal: e(([arg]) => arg),\n number: e(f<number[]>((arg) => (typeof arg === 'number' ? arg : undefined))),\n object: e(\n f<Record<string, any>[]>((arg) =>\n arg !== null && typeof arg === 'object' && !Array.isArray(arg)\n ? arg\n : undefined,\n ),\n ),\n\n string: e(f((arg) => (typeof arg === 'string' ? arg : undefined))),\n 'to-boolean': e(f(Boolean)),\n 'to-number': e(f(Number)),\n 'to-string': e(f(String)),\n typeof: e(([arg]) => typeOfValue(arg)),\n};\n","import { decisionExpressions } from './expressions/decisionExpressions';\nimport { interpolationExpressions } from './expressions/interpolationExpressions';\nimport { lookupExpressions } from './expressions/lookupExpressions';\nimport { mathExpressions } from './expressions/mathExpressions';\nimport { stringExpressions } from './expressions/stringExpressions';\nimport { typeExpressions } from './expressions/typeExpressions';\n\nimport type {\n Data,\n Expression,\n ExpressionFunc,\n ExpressionName,\n SimpleType,\n} from './interfaces';\n\nexport function isExpression(value: any): value is Expression {\n if (Array.isArray(value)) {\n const [lookup, ...cases] = value;\n const l = lookup as ExpressionName;\n return (\n typeof l === 'string' &&\n l !== 'literal' &&\n l in expressions &&\n cases.length > 0\n );\n }\n return false;\n}\n\nconst expressions: { [key in ExpressionName]: ExpressionFunc } = {\n ...mathExpressions,\n ...typeExpressions,\n ...stringExpressions,\n ...lookupExpressions,\n ...decisionExpressions,\n ...interpolationExpressions,\n};\n\nexport function evaluate<T extends SimpleType[] = SimpleType[], R = T[0]>(\n expression: Expression,\n data: Data = {},\n): R {\n const [name, ...args] = expression;\n const expressionFun = expressions[name];\n if (expressionFun) {\n return expressionFun(\n args.map((arg) => () => (isExpression(arg) ? evaluate(arg, data) : arg)),\n data,\n );\n }\n throw new Error(`Expression \"${name}\" is not supported.`);\n}\n","import { evaluate, type Expression, isExpression } from '@nextgis/expression';\n\nimport type { Feature } from 'geojson';\n\nimport type { GetPaintCallback, VectorAdapterLayerPaint } from './interfaces';\n\ntype PropertyExpressionCb = (feature: Feature) => ReturnType<typeof evaluate>;\n\nfunction createPropertyExpressionCb(\n expression: Expression,\n): PropertyExpressionCb {\n return (feature: Feature) => {\n const properties = feature.properties;\n if (properties) {\n return evaluate(expression, properties);\n }\n return false;\n };\n}\n\nconst excludeExpressionList = ['iconSize', 'iconAnchor'];\n\nexport function createExpressionCallback(\n paint: Record<string, any>,\n): GetPaintCallback | undefined {\n let withExpression = false;\n const expressions: {\n [key: string]: PropertyExpressionCb;\n } = {};\n for (const p in paint) {\n if (excludeExpressionList.indexOf(p) === -1) {\n const p_ = p as keyof VectorAdapterLayerPaint;\n const val = paint[p_];\n if (isExpression(val)) {\n withExpression = true;\n expressions[p_] = createPropertyExpressionCb(val);\n }\n }\n }\n if (withExpression) {\n return (feature: Feature) => {\n const fromCb: any = {};\n for (const p in expressions) {\n fromCb[p] = expressions[p](feature);\n }\n return { ...paint, ...fromCb };\n };\n }\n return;\n}\n","import type {\n GeometryPaint,\n GetPaintCallback,\n IconPaint,\n Paint,\n PropertiesPaint,\n VectorAdapterLayerPaint,\n} from './interfaces';\n\nexport function isPropertiesPaint(paint: Paint): paint is PropertiesPaint {\n if (Array.isArray(paint)) {\n return true;\n }\n return false;\n}\n\nexport function isPaint(paint: Paint): paint is VectorAdapterLayerPaint {\n if (Object.prototype.toString.call(paint) === '[object Object]') {\n return true;\n }\n return false;\n}\n\nexport function isBasePaint(paint: Paint): paint is GeometryPaint {\n if (isPaint(paint)) {\n if (paint.type === 'get-paint' || paint.type === 'icon') {\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport function isPaintCallback(paint: Paint): paint is GetPaintCallback {\n if (typeof paint === 'function') {\n return true;\n }\n return false;\n}\n\nexport function isIcon(paint: IconPaint): paint is IconPaint {\n return paint.type === 'icon' || 'html' in paint;\n}\n","import { featureFilter } from '@nextgis/properties-filter';\n\nimport { createExpressionCallback } from './fromPaintExpression';\nimport { isPaintCallback, isPropertiesPaint } from './typeHelpers';\n\nimport type { Feature } from 'geojson';\n\nimport type {\n GeometryPaint,\n GetCustomPaintOptions,\n GetPaintCallback,\n GetPaintFunction,\n Paint,\n PropertiesPaint,\n PropertyPaint,\n VectorAdapterLayerPaint,\n} from './interfaces';\n\nfunction updatePaintOptionFromCallback(\n paint: GetCustomPaintOptions,\n getPaintFunctions?: { [name: string]: GetPaintFunction },\n): VectorAdapterLayerPaint | undefined {\n if (typeof paint.from === 'function') {\n return paint.from(paint.options);\n } else if (typeof paint.from === 'string' && getPaintFunctions) {\n const from = getPaintFunctions[paint.from];\n if (from) {\n return from(paint.options);\n }\n }\n}\n\nfunction createPropertiesPaint(\n propertiesPaint: PropertiesPaint,\n): GetPaintFunction {\n let mask: VectorAdapterLayerPaint = {};\n const paintsFilters: PropertyPaint[] = [];\n for (const p of propertiesPaint) {\n if (p) {\n if (Array.isArray(p)) {\n paintsFilters.push(p);\n } else {\n mask = p as VectorAdapterLayerPaint;\n }\n }\n }\n\n return (feature: Feature) => {\n const paint = paintsFilters.find((x) => featureFilter(feature, x[0]));\n if (paint) {\n return { ...mask, ...paint[1] };\n }\n return mask;\n };\n}\n\nfunction expressionCallback({\n paint,\n defaultPaint,\n}: PreparePaintOptions): Paint | VectorAdapterLayerPaint {\n const expressionCallback = createExpressionCallback(paint);\n if (expressionCallback) {\n const expressionPaintCb = (feature: Feature) => {\n return preparePaint({\n paint: expressionCallback(feature),\n defaultPaint,\n }) as VectorAdapterLayerPaint;\n };\n expressionPaintCb.paint = finalizePaint({ paint, defaultPaint });\n return expressionPaintCb as VectorAdapterLayerPaint;\n }\n return finalizePaint({ paint, defaultPaint });\n}\n\nfunction finalizePaint({ paint, defaultPaint }: PreparePaintOptions): Paint {\n let newPaint: Paint = { ...defaultPaint };\n newPaint = { ...newPaint, ...paint } as GeometryPaint;\n newPaint.fill = newPaint.fill ?? true;\n newPaint.stroke =\n newPaint.stroke !== undefined\n ? newPaint.stroke\n : !newPaint.fill || !!(newPaint.strokeColor || newPaint.strokeOpacity);\n return newPaint;\n}\n\nexport interface PreparePaintOptions {\n paint: Paint;\n defaultPaint?: GeometryPaint;\n getPaintFunctions?: { [name: string]: GetPaintFunction };\n}\n\nexport function preparePaint({\n paint,\n defaultPaint,\n getPaintFunctions,\n}: PreparePaintOptions): Paint {\n if (!paint) {\n throw new Error('paint is empty');\n }\n let newPaint: Paint = { ...defaultPaint };\n if (isPaintCallback(paint)) {\n const getPaintFunction: GetPaintCallback = (feature: Feature) => {\n const getPaint = preparePaint({\n paint: paint(feature),\n defaultPaint,\n getPaintFunctions,\n }) as VectorAdapterLayerPaint;\n getPaint.type = paint.type;\n return getPaint;\n };\n getPaintFunction.type = paint.type;\n return getPaintFunction;\n } else if (isPropertiesPaint(paint)) {\n return (feature: Feature) => {\n return preparePaint({\n paint: createPropertiesPaint(paint)(feature),\n defaultPaint,\n getPaintFunctions,\n }) as VectorAdapterLayerPaint;\n };\n } else if (paint.type === 'get-paint') {\n const getPaint = updatePaintOptionFromCallback(paint, getPaintFunctions);\n if (getPaint) {\n newPaint = preparePaint({\n paint: getPaint,\n defaultPaint,\n getPaintFunctions,\n });\n }\n } else if (paint.type === 'icon') {\n return paint;\n } else {\n newPaint = expressionCallback({ paint, defaultPaint });\n }\n\n if (isPaintCallback(newPaint)) {\n return newPaint;\n }\n\n if ('color' in newPaint) {\n if (!newPaint.strokeColor) {\n newPaint.strokeColor = newPaint.color;\n }\n if (!newPaint.fillColor) {\n newPaint.fillColor = newPaint.color;\n }\n }\n if ('opacity' in newPaint) {\n if (newPaint.strokeOpacity === undefined) {\n newPaint.strokeOpacity = newPaint.opacity;\n }\n if (newPaint.fillOpacity === undefined) {\n newPaint.fillOpacity = newPaint.opacity;\n }\n }\n\n return newPaint;\n}\n","import type {\n Feature,\n FeatureCollection,\n GeoJsonGeometryTypes,\n GeoJsonObject,\n GeometryCollection,\n} from 'geojson';\n\n/**\n * @internal\n */\nexport function findMostFrequentGeomType(\n arr: GeoJsonGeometryTypes[],\n): GeoJsonGeometryTypes {\n const counts: { [x: string]: number } = {};\n for (let fry = 0; fry < arr.length; fry++) {\n counts[arr[fry]] = 1 + (counts[arr[fry]] || 0);\n }\n let maxName;\n for (const c in counts) {\n const count = maxName !== undefined ? counts[maxName] : 0;\n if (counts[c] > (count || 0)) {\n maxName = c;\n }\n }\n return maxName as GeoJsonGeometryTypes;\n}\n\n/**\n * @internal\n */\nexport function detectGeometryType(\n geojson: GeoJsonObject,\n): GeoJsonGeometryTypes {\n let geometry: GeoJsonGeometryTypes;\n if (geojson.type === 'FeatureCollection') {\n const featuresTypes = (geojson as FeatureCollection).features.map(\n (f) => f.geometry.type,\n );\n geometry = findMostFrequentGeomType(featuresTypes);\n } else if (geojson.type === 'GeometryCollection') {\n const geometryTypes = (geojson as GeometryCollection).geometries.map(\n (g) => g.type,\n );\n geometry = findMostFrequentGeomType(geometryTypes);\n } else if (geojson.type === 'Feature') {\n geometry = (geojson as Feature).geometry.type;\n } else {\n geometry = geojson.type;\n }\n return geometry;\n}\n","import { isPaint } from '@nextgis/paint';\n\nimport { detectGeometryType } from './geometryTypes';\n\nimport type {\n GeoJsonAdapterOptions,\n VectorAdapterLayerType,\n} from '../interfaces/LayerAdapter';\n\n/**\n * @internal\n */\nexport const paintTypeAlias: Record<VectorAdapterLayerType, any> = {\n polygon: 'path',\n line: 'path',\n point: 'circle',\n};\n\nexport const typeAlias: { [x: string]: VectorAdapterLayerType } = {\n Point: 'point',\n LineString: 'line',\n MultiPoint: 'point',\n Polygon: 'polygon',\n MultiLineString: 'line',\n MultiPolygon: 'polygon',\n};\n\n/**\n * @internal\n */\nexport function updateGeoJsonAdapterOptions<\n O extends GeoJsonAdapterOptions = GeoJsonAdapterOptions,\n>(opt: O): O {\n if (opt.data) {\n const geomType = typeAlias[detectGeometryType(opt.data)];\n const p = opt.paint;\n if (p && isPaint(p)) {\n // define parameter if not specified\n p.type = p.type\n ? p.type\n : geomType === 'polygon' || geomType === 'line'\n ? 'path'\n : 'html' in p || 'className' in p\n ? 'icon'\n : paintTypeAlias[geomType];\n }\n opt.type = opt.type || geomType;\n }\n return opt;\n}\n","export class KeyCodes {\n 'backspace' = 8;\n 'tab' = 9;\n 'enter' = 13;\n 'shift' = 16;\n 'ctrl' = 17;\n 'alt' = 18;\n 'pause/break' = 19;\n 'caps_lock' = 20;\n 'escape' = 27;\n 'page_up' = 33;\n 'page_down' = 34;\n 'end' = 35;\n 'home' = 36;\n 'left_arrow' = 37;\n 'up_arrow' = 38;\n 'right_arrow' = 39;\n 'down_arrow' = 40;\n 'insert' = 45;\n 'delete' = 46;\n 'left_window_key' = 91;\n 'right_window_key' = 92;\n 'select_key' = 93;\n 'numpad_0' = 96;\n 'numpad_1' = 97;\n 'numpad_2' = 98;\n 'numpad_3' = 99;\n 'numpad_4' = 100;\n 'numpad_5' = 101;\n 'numpad_6' = 102;\n 'numpad_7' = 103;\n 'numpad_8' = 104;\n 'numpad_9' = 105;\n 'multiply' = 106;\n 'add' = 107;\n 'subtract' = 109;\n 'decimal_point' = 110;\n 'divide' = 111;\n 'f1' = 112;\n 'f2' = 113;\n 'f3' = 114;\n 'f4' = 115;\n 'f5' = 116;\n 'f6' = 117;\n 'f7' = 118;\n 'f8' = 119;\n 'f9' = 120;\n 'f10' = 121;\n 'f11' = 122;\n 'f12' = 123;\n 'num_lock' = 144;\n 'scroll_lock' = 145;\n 'semi-colon' = 186;\n 'equal_sign' = 187;\n ',' = 188; // \"comma\";\n '-' = 189; // \"dash\";\n '.' = 190; // \"period\";\n '/' = 191; // \"forward slash\";\n '`' = 192; // \"grave accent\";\n '[' = 219; // \"open bracket\";\n '\\\\' = 220; // \"back slash\";\n ']' = 221; // \"close braket\";\n \"'\" = 222; // \"single quote\"\n}\n","import { KeyCodes } from './KeysCodes';\n\n/**\n * @param {string} key - key symbol\n * @param {string} func - action on key press\n * @param {number} [keyCode] - key code for special button like tab\n *\n * @export\n * @interface KeyControl\n */\nexport interface KeyControl {\n key?: string;\n keyCode?: number;\n func: () => void;\n}\n\nexport class Keys {\n keyCodeAlias = new KeyCodes();\n\n keys: { [keyCode: number]: boolean } = {};\n\n private _windowOnFocus: () => void;\n private _keysPressed: (e: KeyboardEvent) => void;\n private _keysReleased: (e: KeyboardEvent) => void;\n\n constructor() {\n this._windowOnFocus = this.windowOnFocus.bind(this);\n this._keysPressed = this.keysPressed.bind(this);\n this._keysReleased = this.keysReleased.bind(this);\n this.addKeyboardEventsListener();\n }\n\n pressed(keyName: keyof KeyCodes): boolean {\n const code = this.keyCodeAlias[keyName];\n return !!code && this.keys[code];\n }\n\n addKeyboardEventsListener(): void {\n if (typeof window !== 'undefined') {\n window.addEventListener('focus', this._windowOnFocus, false);\n window.addEventListener('keydown', this._keysPressed, false);\n window.addEventListener('keyup', this._keysReleased, false);\n }\n }\n\n removeKeyboardEventsListener(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('focus', this._windowOnFocus, false);\n window.removeEventListener('keydown', this._keysPressed, false);\n window.removeEventListener('keyup', this._keysReleased, false);\n }\n }\n\n private keysPressed(e: KeyboardEvent) {\n e.stopPropagation();\n if (!this.keys[e.keyCode]) {\n this.keys[e.keyCode] = true;\n }\n }\n\n private keysReleased(e: KeyboardEvent) {\n e.stopPropagation();\n this.keys[e.keyCode] = false;\n }\n\n private windowOnFocus() {\n this.keys = {};\n }\n}\n","import type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\nimport type { MapStateItem } from '../../interfaces/MapState';\nimport type { WebMap } from '../../WebMap';\n\nexport abstract class StateItem<V extends any | undefined = any | undefined>\n implements MapStateItem<V | undefined>\n{\n name!: keyof MapOptions;\n event!: (keyof WebMapEvents)[];\n protected value?: V;\n\n constructor(\n protected webMap: WebMap,\n opt?: {\n name?: keyof MapOptions;\n event?: (keyof WebMapEvents)[] | keyof WebMapEvents;\n value?: V;\n },\n ) {\n if (opt) {\n if (opt.value) {\n this.setValue(opt.value);\n }\n if (opt.name) {\n this.name = opt.name;\n }\n if (opt.event) {\n if (typeof opt.event === 'string') {\n this.event = [opt.event];\n } else {\n this.event = opt.event;\n }\n }\n }\n }\n\n getValue(): V | undefined {\n return this.value;\n }\n\n setValue(val: V): void {\n this.value = val;\n }\n\n abstract toString(): string | undefined;\n abstract parse(str: string): V;\n}\n","import { StateItem } from './StateItem';\n\nimport type { LngLatBoundsArray } from '@nextgis/utils';\n\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\n\nexport class BoundState extends StateItem<LngLatBoundsArray> {\n name: keyof MapOptions = 'bounds';\n event: (keyof WebMapEvents)[] = ['moveend'];\n\n getValue(): LngLatBoundsArray | undefined {\n return this.webMap.getBounds();\n }\n setValue(bounds: LngLatBoundsArray): void {\n this.webMap.setView({ bounds });\n }\n toString(): string | undefined {\n const data = this.getValue();\n if (data) {\n return data\n .slice(0, 4)\n .map((x) => x.toFixed(5))\n .join('_');\n }\n return undefined;\n }\n parse(str: string): LngLatBoundsArray {\n const lngLat = str.split('_').map(Number) as LngLatBoundsArray;\n return lngLat;\n }\n}\n","import { StateItem } from './StateItem';\n\nimport type { LngLatArray } from '@nextgis/utils';\n\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\n\nexport class CenterState extends StateItem<LngLatArray> {\n name: keyof MapOptions = 'center';\n event: (keyof WebMapEvents)[] = ['moveend'];\n\n getValue(): LngLatArray | undefined {\n return this.webMap.getCenter();\n }\n setValue(val: LngLatArray): void {\n this.webMap.setCenter(val);\n }\n toString(): string {\n const data = this.getValue();\n if (data) {\n const d = data.map((x) => x.toFixed(5));\n return d[0] + '_' + d[1];\n }\n return '';\n }\n parse(str: string): LngLatArray {\n const lngLat = str.split('_').map(Number) as LngLatArray;\n return lngLat;\n }\n}\n","import { StateItem } from './StateItem';\n\nimport type { WebMapEvents } from '../../interfaces/Events';\nimport type { MapOptions } from '../../interfaces/MapOptions';\n\nexport class ZoomState extends StateItem<number> {\n name: keyof MapOptions = 'zoom';\n event: (keyof WebMapEvents)[] = ['zoomend'];\n getValue(): number | undefined {\n const zoom = this.webMap.getZoom();\n return zoom !== undefined ? Math.round(zoom) : undefined;\n }\n setValue(val: number): void {\n this.webMap.setZoom(val);\n }\n toString(): string | undefined {\n return String(this.getValue());\n }\n parse(str: string): number {\n return Number(str);\n }\n}\n","/**\n * @internal\n */\nexport function clearObject(obj: Record<any, any>): void {\n for (const member in obj) {\n delete obj[member];\n }\n}\n","import {\n checkExtent,\n deepmerge,\n defined,\n getBoundsFeature,\n} from '@nextgis/utils';\nimport { deprecatedMapClick } from '@nextgis/utils';\nimport { EventEmitter } from 'events';\n\nimport { Keys } from './components/keys/Keys';\nimport { BoundState, CenterState, ZoomState } from './components/mapStates';\nimport { clearObject } from './utils/clearObject';\n\nimport type { GetPaintFunction } from '@nextgis/paint';\nimport type {\n LngLatArray,\n LngLatBoundsArray,\n TileJson,\n Type,\n} from '@nextgis/utils';\nimport type { Feature, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type { StateItem } from './components/mapStates/StateItem';\nimport type { Cursor } from './interfaces/BaseTypes';\nimport type { MainMapEvents, WebMapEvents } from './interfaces/Events';\nimport type { LayerAdapter } from './interfaces/LayerAdapter';\nimport type {\n FitOptions,\n Locate,\n LocateOptions,\n LocationEvents,\n MapAdapter,\n MapClickEvent,\n} from './interfaces/MapAdapter';\nimport type { MapOptions, ViewOptions } from './interfaces/MapOptions';\nimport type { RuntimeParams } from './interfaces/RuntimeParams';\nimport type { StarterKit } from './interfaces/StarterKit';\n\ntype EmitStatusEventData = any;\n\nlet ID = 0;\n\nconst OPTIONS: MapOptions = {\n minZoom: 0,\n maxZoom: 22,\n paint: {\n color: '#0000ff', // blue\n opacity: 0.4,\n strokeOpacity: 1,\n stroke: true,\n radius: 8,\n weight: 1,\n },\n selectedPaint: {\n color: '#00008b', // darkblue\n opacity: 0.4,\n strokeOpacity: 1,\n stroke: true,\n radius: 12,\n weight: 1,\n },\n create: true,\n};\n\ninterface AddEventsListenersOptions {\n include: (keyof MainMapEvents)[];\n}\n\nexport class WebMapMain<\n M = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n> {\n static keys: Keys = new Keys();\n\n static getPaintFunctions: { [name: string]: GetPaintFunction };\n\n options: O = OPTIONS as O;\n // `WebMapEvents` must be `E` but its not work correct\n readonly emitter: StrictEventEmitter<EventEmitter, WebMapEvents> =\n new EventEmitter();\n readonly keys = WebMapMain.keys;\n\n readonly mapAdapter: MapAdapter<M>;\n readonly runtimeParams: RuntimeParams[] = [];\n\n getPaintFunctions = WebMapMain.getPaintFunctions;\n mapStateItems: Type<StateItem>[] = [CenterState, ZoomState, BoundState];\n id = ID++;\n\n /**\n * From runtime params\n */\n readonly mapState: StateItem[] = [];\n protected _initMapState: Record<string, any> = {};\n protected readonly _starterKits: StarterKit[];\n private _extent?: LngLatBoundsArray;\n private readonly _eventsStatus: { [key in keyof E]?: boolean } = {};\n private _coordFromMapClickAbort?: () => void;\n\n private readonly _mapEvents: {\n [key in keyof MainMapEvents]?: (...args: any[]) => void;\n } = {};\n\n constructor(mapOptions: O) {\n this.mapAdapter = mapOptions.mapAdapter as MapAdapter<M>;\n this._starterKits = mapOptions.starterKits || [];\n if (mapOptions) {\n this.options = deepmerge((OPTIONS as O) || {}, mapOptions) as O;\n }\n if (this.options.runtimeParams) {\n this.runtimeParams = this.options.runtimeParams;\n }\n this._addEventsListeners();\n\n if (this.options.tileJson) {\n this._setTileJsonOptions(this.options.tileJson);\n }\n if (this.options.create) {\n this.create();\n }\n }\n\n getId(): number {\n return this.id;\n }\n\n /**\n * Manual way to create a map (If {@link MapOptions.create} is `false`).\n * @example\n * ```javascript\n * const webMap = new WebMap(options);\n * webMap.create().then(() => doSomething());\n * ```\n */\n async create(): Promise<this> {\n if (!this.getEventStatus('create')) {\n await this._setInitMapState(this.mapStateItems);\n await this._setupMap();\n this._emitStatusEvent('create', this);\n }\n return this;\n }\n\n setRuntimeParams(params: RuntimeParams): void {\n this.runtimeParams.push(params);\n }\n\n /**\n * Destroys WebMap, MapAdapter, clears all layers and turn off all event listeners\n */\n destroy(): void {\n this._removeEventListeners();\n clearObject(this._emitStatusEvent);\n if (this.mapAdapter.destroy) {\n this.mapAdapter.destroy();\n }\n }\n\n mapStateWithFunc(func: (x: any) => any): Record<string, any> {\n const state: Record<string, any> = {};\n this.mapState.forEach((x) => {\n state[x.name] = func(x);\n });\n return state;\n }\n\n getStateAsString(): Record<string, any> {\n return this.mapStateWithFunc((x) => x.toString());\n }\n\n getState(): Record<string, any> {\n return this.mapStateWithFunc((x) => x.getValue());\n }\n\n getRuntimeParams(): Record<string, any> {\n const state: Record<string, any> = {};\n this.mapState.forEach((x) => {\n for (const r of this.runtimeParams) {\n const val = r.get(x.name);\n if (val !== undefined) {\n state[x.name] = x.parse(val);\n break;\n }\n }\n });\n return state;\n }\n\n /**\n * Returns the HTML element that contains the map.\n * @returns The map's container\n */\n getContainer(): HTMLElement | undefined {\n if (this.mapAdapter.getContainer) {\n return this.mapAdapter.getContainer();\n } else if (this.options.target) {\n if (this.options.target instanceof HTMLElement) {\n return this.options.target;\n } else if (typeof this.options.target === 'string') {\n const element = document.getElementById(this.options.target);\n if (element) {\n return element;\n }\n }\n }\n }\n\n /**\n * Set the cursor icon to be displayed when hover icon on the map container.\n * @param cursor - Available cursor name from https://developer.mozilla.org/ru/docs/Web/CSS/cursor\n */\n setCursor(cursor: Cursor): void {\n this.onLoad().then(() => {\n if (this.mapAdapter.setCursor) {\n this.mapAdapter.setCursor(cursor);\n }\n });\n }\n\n getCursor(): Cursor | undefined {\n if (this.mapAdapter.getCursor) {\n return this.mapAdapter.getCursor() as Cursor;\n }\n const container = this.getContainer();\n if (container) {\n return container.style.cursor as Cursor;\n }\n }\n\n /**\n * Set the center of the current view.\n * @param lngLat - Array of two numbers representing longitude and latitude of the center of the map view.\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.setCenter([86.925278, 27.988056]);\n * ```\n */\n setCenter(lngLat: LngLatArray): this {\n this.mapAdapter.setCenter(lngLat);\n return this;\n }\n\n /**\n * Returns the map's geographical centerpoint.\n * @returns lngLat Array of two numbers representing longitude and latitude of the center of the map view.\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.getCenter(); // [86.925278, 27.988056]\n * ```\n */\n getCenter(): LngLatArray | undefined {\n return this.mapAdapter.getCenter();\n }\n\n getBounds(): LngLatBoundsArray | undefined {\n if (this.mapAdapter.getBounds) {\n return this.mapAdapter.getBounds();\n }\n }\n\n getBoundsPolygon(): Feature<Polygon> | undefined {\n const bounds = this.getBounds();\n if (bounds) {\n const feature = getBoundsFeature(bounds);\n return feature;\n }\n }\n\n /**\n * Zoom to a specific zoom level.\n * @param zoom - The zoom level to set (0-24).\n */\n setZoom(zoom: number): this {\n this.mapAdapter.setZoom(zoom);\n return this;\n }\n\n /**\n * Returns the map's current zoom level.\n * @returns The map's current zoom level (0-24).\n */\n getZoom(): number | undefined {\n const zoom = this.mapAdapter.getZoom();\n if (typeof zoom === 'number') {\n return zoom;\n }\n // throw Error(\n // 'Unable to get zoom level. Perhaps the map is not have been initialized yet',\n // );\n }\n\n zoomIn(): void {\n if (this.mapAdapter.zoomIn) {\n this.mapAdapter.zoomIn();\n } else {\n const zoom = this.getZoom();\n if (zoom !== undefined) {\n const toZoom = zoom + 1;\n this.setZoom(toZoom);\n }\n }\n }\n\n zoomOut(): void {\n if (this.mapAdapter.zoomOut) {\n this.mapAdapter.zoomOut();\n } else {\n const zoom = this.getZoom();\n if (zoom !== undefined) {\n const toZoom = zoom - 1;\n this.setZoom(toZoom);\n }\n }\n }\n\n /**\n * Sets the view of the map geographical center and zoom\n * @param lngLat - Array of two numbers representing longitude and latitude of the center of the map view.\n * @param zoom - The zoom level to set (0-24).\n *\n * @example\n * ```javascript\n * // Mount Everest 27° 59′ 17″ N, 86° 55′ 31″ E\n * webMap.setView([86.925278, 27.988056], 12)\n * ```\n */\n setView(lngLatOr: LngLatArray, zoom?: number): void;\n\n setView(options: ViewOptions): void;\n\n setView(lngLatOrOpt: LngLatArray | ViewOptions, zoom?: number): void {\n if (Array.isArray(lngLatOrOpt)) {\n const lngLat = lngLatOrOpt;\n if (this.mapAdapter.setView && lngLat && defined(zoom)) {\n this.mapAdapter.setView(lngLat, zoom);\n } else {\n if (lngLat) {\n this.mapAdapter.setCenter(lngLat);\n }\n if (defined(zoom)) {\n this.mapAdapter.setZoom(zoom);\n }\n }\n } else {\n const viewOpt = lngLatOrOpt;\n if (this.mapAdapter.setView) {\n this.mapAdapter.setView(viewOpt);\n }\n }\n }\n\n /**\n * Sets a map view that contains the given geographical bounds.\n * @param bounds - Array of coordinates, measured in degrees, in [west, south, east, north] order.\n *\n * @example\n * ```javascript\n * // Whole world\n * webMap.fitBounds([0, -90, 180, 90]);\n * ```\n */\n fitBounds(bounds: LngLatBoundsArray, options?: FitOptions): this {\n checkExtent(bounds);\n if (bounds.every((x) => defined(x))) {\n if (bounds[1] < -85.06) {\n bounds[1] = -85.06;\n }\n if (bounds[3] > 85.06) {\n bounds[3] = 85.06;\n }\n this.mapAdapter.fitBounds(bounds, options);\n }\n return this;\n }\n\n /**\n * Checking the status of any asynchronous operation\n * @param event - The name of the event whose status is checked\n *\n * @example\n * ```javascript\n * var webMap = new WebMap(options);\n * webMap.getEventStatus('create'); // false\n * webMap.emitter.on('create', function () {\n * webMap.getEventStatus('create'); // true\n * })\n * ```\n */\n getEventStatus(event: keyof E): boolean {\n // ugly hack to disable type checking error\n const _eventName = event as keyof WebMapEvents;\n const status = this._eventsStatus[_eventName];\n return status ?? false;\n }\n\n /**\n * helper method to wait for events to load. By default, card creation is tracked\n * @param event - The name of the event whose status is checked\n *\n * @example\n * ```javascript\n * var webMap = new WebMap(options);\n * webMap.onLoad().then(function () {\n * webMap.getEventStatus('create'); // true\n * })\n *\n * // use async/await syntax\n * async function () {\n * await webMap.onLoad();\n * doSomething();\n * }\n *\n * ```\n */\n onLoad(event: keyof WebMapEvents = 'create'): Promise<this> {\n return new Promise((res) => {\n if (this.getEventStatus(event)) {\n res(this);\n } else {\n this.emitter.once(event, () => {\n res(this);\n });\n }\n });\n }\n\n onMapLoad(cb?: (mapAdapter: MapAdapter) => void): Promise<MapAdapter> {\n return new Promise((res) => {\n const _resolve = () => {\n const mapAdapter = this.mapAdapter;\n if (cb) {\n cb(mapAdapter);\n }\n if (mapAdapter) {\n res(mapAdapter);\n }\n };\n const isLoaded = this.mapAdapter.isLoaded ?? true;\n if (this.mapAdapter.map && isLoaded) {\n _resolve();\n } else {\n this.mapAdapter.emitter.once('create', () => {\n _resolve();\n });\n }\n });\n }\n\n getLayerAdapters(): { [name: string]: Type<LayerAdapter> } {\n return this.mapAdapter.layerAdapters;\n }\n\n getLayerAdapter(name: string): Type<LayerAdapter> {\n const adapter = this.mapAdapter.layerAdapters[name];\n return adapter;\n }\n\n locate(opt: LocateOptions, events?: LocationEvents): Locate {\n if (this.mapAdapter && this.mapAdapter.locate) {\n return this.mapAdapter.locate(opt, events);\n }\n const stop = () => ({});\n return { stop };\n }\n\n stopGetCoordFromMapClick(): void {\n if (this._coordFromMapClickAbort) {\n this._coordFromMapClickAbort();\n this._coordFromMapClickAbort = undefined;\n }\n }\n\n getCoordFromMapClick(): Promise<LngLatArray> {\n if (!this._coordFromMapClickAbort) {\n return new Promise((resolve, reject) => {\n const cursor: Cursor = this.getCursor() || 'grab';\n this._removeEventListeners({ include: ['click'] });\n this.setCursor('crosshair');\n const onCancel_ = (): void => {\n this.setCursor(cursor);\n this._addEventsListeners({ include: ['click'] });\n this.mapAdapter.emitter.off('click', onMapClick);\n this._coordFromMapClickAbort = undefined;\n };\n const onMapClick = (e: MapClickEvent) => {\n onCancel_();\n deprecatedMapClick(e);\n resolve(e.lngLat);\n };\n this.mapAdapter.emitter.once('click', onMapClick);\n this._coordFromMapClickAbort = onCancel_;\n });\n } else {\n return this.getCoordFromMapClick();\n }\n }\n\n protected _emitStatusEvent(\n eventName: keyof E,\n data?: EmitStatusEventData,\n ): void {\n // ugly hack to disable type checking error\n const _eventName = eventName as keyof E;\n this._eventsStatus[_eventName] = true;\n this.emitter.emit(_eventName as keyof WebMapEvents, data);\n }\n\n protected async _addLayerProviders(): Promise<void> {\n //\n }\n\n protected async _onLoadSync(): Promise<void> {\n //\n }\n\n private async _setupMap(): Promise<this> {\n if (!this.mapAdapter) {\n throw new Error('WebMap `mapAdapter` option is not set');\n }\n await this.mapAdapter.create(this.options);\n this._zoomToInitialExtent();\n\n await this._addLayerProviders();\n await this._onLoadSync();\n\n this._emitStatusEvent('build-map', this.mapAdapter);\n return this;\n }\n\n private _setTileJsonOptions(tileJson: TileJson): void {\n if (tileJson.center) {\n this.options.center = tileJson.center;\n }\n if (tileJson.bounds) {\n this.options.bounds = tileJson.bounds;\n }\n if (defined(tileJson.maxzoom)) {\n // this.options.maxZoom = tileJson.maxzoom;\n this.options.zoom = tileJson.maxzoom;\n }\n if (defined(tileJson.minzoom)) {\n // this.options.minZoom = tileJson.minzoom;\n this.options.zoom = tileJson.minzoom;\n }\n if (defined(tileJson.maxzoom) && defined(tileJson.minzoom)) {\n this.options.zoom = (tileJson.maxzoom + tileJson.minzoom) / 2;\n }\n }\n\n private _zoomToInitialExtent(): void {\n const { center, zoom, bounds } = this.options;\n if (this._extent) {\n this.fitBounds(this._extent);\n } else if (center && zoom) {\n this.setView(center, zoom);\n } else if (bounds) {\n this.fitBounds(bounds);\n if (zoom !== undefined) {\n this.setZoom(zoom);\n }\n }\n }\n\n private _setInitMapState(states: Type<StateItem>[]): void {\n for (const X of states) {\n const state = new X(this);\n this.mapState.push(state);\n for (const r of this.runtimeParams) {\n const str = r.get(state.name);\n if (str !== undefined) {\n const val = state.parse(str);\n this._initMapState[state.name] = val;\n Object.defineProperty(this.options, state.name, {\n value: val,\n configurable: true,\n enumerable: true,\n });\n break;\n }\n }\n }\n }\n\n private _addEventsListeners(opt?: AddEventsListenersOptions): void {\n let events: (keyof MainMapEvents)[] = [\n 'preclick',\n 'click',\n 'zoomstart',\n 'zoom',\n 'zoomend',\n 'movestart',\n 'move',\n 'moveend',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n ];\n\n if (opt && opt.include) {\n events = events.filter((x) => opt.include.includes(x));\n }\n\n events.forEach((x) => {\n this._mapEvents[x] = (data): void => {\n if (this.runtimeParams.length) {\n const mapStatusEvents = this.mapState.filter((y) =>\n y.event.includes(x),\n );\n mapStatusEvents.forEach((mapStatusEvent) => {\n const value = mapStatusEvent.toString();\n this.runtimeParams.forEach((r) => {\n r.set(mapStatusEvent.name, value);\n });\n });\n }\n if (this._eventsStatus) {\n this.emitter.emit(x, data);\n }\n };\n const mapEvent = this._mapEvents[x];\n if (mapEvent) {\n this.mapAdapter.emitter.on(x, mapEvent);\n }\n });\n }\n\n private _removeEventListeners(opt?: AddEventsListenersOptions): void {\n let events = Object.entries(this._mapEvents) as [\n keyof MainMapEvents,\n ((...args: any[]) => void) | undefined,\n ][];\n if (opt && opt.include) {\n events = events.filter((x) => opt.include.includes(x[0]));\n }\n events.forEach(([x, event]) => {\n if (event) {\n this.mapAdapter.emitter.removeListener(x as keyof MainMapEvents, event);\n }\n });\n }\n}\n","import { preparePaint } from '@nextgis/paint';\nimport { propertiesFilter } from '@nextgis/properties-filter';\nimport { defined } from '@nextgis/utils';\n\nimport { updateGeoJsonAdapterOptions } from './utils/updateGeoJsonAdapterOptions';\nimport { WebMapMain } from './WebMapMain';\n\nimport type { Paint } from '@nextgis/paint';\nimport type { PropertiesFilter } from '@nextgis/properties-filter';\nimport type { FeatureProperties, TileJson, Type } from '@nextgis/utils';\nimport type { Feature, GeoJsonObject, Geometry } from 'geojson';\n\nimport type { LayerLegend } from '../../ngw-connector/src/types/LegendItem';\n\nimport type { LayerDef } from './interfaces/BaseTypes';\nimport type { WebMapEvents } from './interfaces/Events';\nimport type {\n AdapterConstructor,\n AdapterOptions,\n DataLayerFilter,\n FeatureLayerAdapter,\n FilterOptions,\n GeoJsonAdapterOptions,\n GetLegendOptions,\n ImageAdapterOptions,\n LayerAdapter,\n LayerAdapterDefinition,\n LayerAdapters,\n LayerAdaptersOptions,\n LayerDefinition,\n MainLayerAdapter,\n OnLayerMouseOptions,\n OnLayerSelectOptions,\n TileAdapterOptions,\n VectorLayerAdapter,\n} from './interfaces/LayerAdapter';\nimport type { FitOptions } from './interfaces/MapAdapter';\nimport type {\n GetAttributionsOptions,\n MapOptions,\n ToggleLayerOptions,\n} from './interfaces/MapOptions';\n\ntype AddedLayers<M = any, L = any> = { [id: string]: LayerAdapter<M, L> };\n\nexport class WebMapLayers<\n M = any,\n L = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n> extends WebMapMain<M, E, O> {\n private _layersIdCounter = 1;\n private _layersOrderCounter = 1;\n private readonly _baselayers: string[] = [];\n private readonly _layers: AddedLayers<M, L> = {};\n private readonly _selectedLayers: string[] = [];\n\n constructor(mapOptions: O) {\n super(mapOptions);\n const tileJson = this.options.tileJson;\n if (tileJson) {\n this.emitter.once('build-map', () => this.addTileJsonLayer(tileJson));\n }\n }\n\n /**\n * Try to fit map view by given layer bounds.\n * But not all layers have borders\n */\n async fitLayer(layerDef: LayerDef, options?: FitOptions): Promise<void> {\n const layer = this.getLayer(layerDef);\n // TODO: remove backward compatibility for `getExtent`\n const getBounds = layer && (layer.getBounds || layer.getExtent);\n if (getBounds) {\n const extent = await getBounds.call(layer);\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n }\n\n /**\n * Check if given layer is baselayer\n */\n isBaseLayer(layerDef: LayerDef): boolean | undefined {\n const layer = this.getLayer(layerDef);\n if (layer && layer.id) {\n return this._baselayers.indexOf(layer.id) !== -1;\n }\n return undefined;\n }\n\n getBaseLayers(): LayerAdapter[] {\n const baselayers: LayerAdapter[] = [];\n this._baselayers.forEach((x) => {\n const baselayer = this._layers[x];\n if (baselayer) {\n baselayers.push(baselayer);\n }\n });\n return baselayers;\n }\n\n getBaseLayersIds(): string[] {\n return this._baselayers;\n }\n\n /**\n * Helper method to return added layer object by any definition type.\n */\n getLayer<LA extends LayerAdapter = LayerAdapter>(\n layerDef: LayerDef,\n ): LA | undefined {\n if (typeof layerDef === 'string') {\n return this._layers[layerDef] as LA;\n }\n return layerDef as LA;\n }\n\n /**\n * Helper method to return added layer identificator by any definition type.\n */\n getLayerId(layerDef: LayerDef): string | undefined {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.id) {\n return layer?.id;\n }\n if (layer && layer.options) {\n return layer.options.id;\n }\n }\n throw new Error('No id for layer');\n }\n\n /**\n * Return array of all added layer identifications.\n */\n getLayers(): string[] {\n return Object.keys(this._layers);\n }\n\n // TODO: rename to getLayers, getLayers rename to getLayersIds\n allLayers(): AddedLayers<M, L> {\n return this._layers;\n }\n\n orderedLayers<LA extends LayerAdapter<M, L> = LayerAdapter<M, L>>(): LA[] {\n return Object.values(this._layers).sort((a, b) =>\n a.order && b.order ? a.order - b.order : 0,\n ) as LA[];\n }\n\n findLayer<T extends LayerAdapter = LayerAdapter>(\n filter: (adapter: T) => boolean,\n ): T | undefined {\n for (const l in this._layers) {\n const layerAdapter = this._layers[l] as T;\n const isFit = filter(layerAdapter);\n if (isFit) {\n return layerAdapter;\n }\n }\n }\n\n /**\n * Check if the given layer on the map\n */\n isLayerVisible(layerDef: LayerDef): boolean {\n const layer = this.getLayer(layerDef);\n return layer && layer.options.visibility !== undefined\n ? layer.options.visibility\n : false;\n }\n\n /**\n * Shortcut method to create base layer\n */\n async addBaseLayer<\n K extends keyof LayerAdapters,\n O extends AdapterOptions = AdapterOptions,\n >(\n adapter: K | Type<LayerAdapters[K]>,\n options?: O | LayerAdaptersOptions[K],\n ): Promise<LayerAdapter> {\n const layer = await this.addLayer(\n adapter,\n {\n ...options,\n baselayer: true,\n },\n undefined,\n );\n\n return layer;\n }\n\n /**\n * Registration of map layer.\n *\n * @param adapter - The name of layer adapter from [MapAdapter.layerAdapters](webmap#MapAdapter.layerAdapters).\n * May be custom object or class implemented by [MainLayerAdapter](webmap#MainLayerAdapter).\n * @param options - Specific options for given adapter\n *\n * @example\n * ```javascript\n * webMap.addLayer('TILE', options).then((layer) => webMap.showLayer(layer));\n *\n * webMap.addLayer(CustomLayerAdapter, options);\n * ```\n */\n async addLayer<\n K extends keyof LayerAdapters,\n LO extends AdapterOptions = AdapterOptions,\n >(\n adapter: LayerAdapterDefinition<K>,\n options: LO | LayerAdaptersOptions[K] = {},\n order?: number,\n ): Promise<LayerAdapter> {\n const id = this._layersIdCounter++;\n const _order = defined(order)\n ? order\n : options.order !== undefined\n ? options.order\n : this.reserveOrder();\n let adapterEngine: Type<LayerAdapter<M, L, LO>> | undefined;\n if (typeof adapter === 'string') {\n adapterEngine = this.getLayerAdapter(adapter) as Type<\n LayerAdapter<M, L, LO>\n >;\n } else if (typeof adapter === 'function') {\n adapterEngine = adapter as Type<LayerAdapter<M, L, LO>>;\n } else if (\n 'then' in (adapter as Promise<Type<LayerAdapters[K]> | undefined>)\n ) {\n adapterEngine = (await adapter) as Type<LayerAdapter<M, L, LO>>;\n }\n\n const geoJsonOptions = options as GeoJsonAdapterOptions;\n\n this._updateGeoJsonOptions(geoJsonOptions);\n\n options = {\n id: String(id),\n order: _order,\n ...options,\n };\n\n // options.visibility is a layer global state\n const visibility = options.visibility ?? true;\n options.visibility = false;\n\n if (options.baselayer) {\n options.order = 0;\n }\n if (this.options.onBeforeAddLayer) {\n const modified = this.options.onBeforeAddLayer({\n options,\n adapter: adapterEngine,\n });\n if (modified) {\n if (modified.options) {\n options = modified.options;\n }\n if (modified.adapter) {\n adapterEngine = modified.adapter as Type<LayerAdapter<M, L, LO>>;\n }\n }\n }\n if (adapterEngine !== undefined) {\n const _adapter = new adapterEngine(this.mapAdapter.map, options);\n _adapter.options = { ...options, ..._adapter.options };\n\n if (_adapter.options.baselayer) {\n options.baselayer = true;\n options.order = 0;\n _adapter.options.order = 0;\n }\n\n let layerId: string | undefined;\n if (_adapter.options.id) {\n layerId = String(_adapter.options.id);\n\n this._layers[layerId] = _adapter;\n }\n this._emitLayerEvent('layer:preadd', layerId || '', _adapter);\n await this.onMapLoad();\n _adapter.map = this.mapAdapter.map;\n const layer = await _adapter.addLayer(_adapter.options);\n // checking that the original layer was inserted into the adapter anyway\n _adapter.layer = layer;\n // think about how to move `id` to the adapter's constructor,\n // but that it is not required in the options\n _adapter.id = _adapter.options.id || String(id);\n _adapter.options.id = _adapter.id;\n if (options.baselayer) {\n _adapter.options.order = 0;\n }\n _adapter.order = _adapter.options.order ?? _order;\n if (layerId) {\n delete this._layers[layerId];\n }\n layerId = String(_adapter.id);\n if (this._layers[layerId]) {\n throw Error(`layer with id '${layerId}' already exist`);\n }\n if (layerId) {\n this._layers[layerId] = _adapter;\n\n if (geoJsonOptions.filter) {\n this.filterLayer(_adapter, geoJsonOptions.filter);\n }\n if (options.baselayer) {\n this._baselayers.push(layerId);\n }\n\n if (visibility) {\n await this.showLayer(layerId);\n }\n }\n const opacity = options.opacity;\n if (opacity !== undefined && opacity !== null && opacity <= 1) {\n this.setLayerOpacity(_adapter, opacity);\n }\n // TODO: remove backward compatibility for `getExtent`\n const getBounds = layer && (_adapter.getBounds || _adapter.getExtent);\n if (options.fit && getBounds) {\n const extent = await getBounds.call(_adapter);\n if (extent) {\n await this.fitBounds(extent);\n }\n }\n if (options.onAdded) {\n options.onAdded(_adapter);\n }\n this._emitLayerEvent('layer:add', layerId, _adapter);\n return _adapter;\n }\n return Promise.reject('No adapter');\n }\n\n async addLayerFromAsyncAdapter<\n K extends keyof LayerAdapters,\n O extends AdapterOptions = AdapterOptions,\n >(\n adapter: AdapterConstructor,\n options: O | LayerAdaptersOptions[K],\n order?: number,\n ): Promise<LayerAdapter> {\n const _order =\n order || options.order !== undefined\n ? options.order\n : this.reserveOrder();\n const adapterConstructor = adapter as AdapterConstructor;\n const adapterConstructorPromise = adapterConstructor();\n const adapterEngine = await adapterConstructorPromise;\n if (adapterEngine) {\n return this.addLayer(adapterEngine, options, _order);\n }\n return Promise.reject('No adapter');\n }\n\n /**\n * Remove all layer from map and memory.\n */\n removeLayers(\n allowCb?: (layer: string, adapter: LayerAdapter) => boolean,\n ): void {\n for (const l in this._layers) {\n let allow = true;\n if (allowCb) {\n allow = allowCb(l, this._layers[l]);\n }\n if (allow) {\n this.removeLayer(l);\n delete this._layers[l];\n }\n }\n }\n\n async getLegend(options?: GetLegendOptions): Promise<LayerLegend[]> {\n const promises: Promise<LayerLegend[]>[] = [];\n for (const l of this.orderedLayers()) {\n if (l.getLegend) {\n promises.push(l.getLegend(options));\n }\n }\n return (await Promise.all(promises)).flat();\n }\n\n reserveOrder(): number {\n return this._layersOrderCounter++;\n }\n\n /**\n * Remove all layers but not remove basemap.\n */\n removeOverlays(): void {\n this.removeLayers((layerId, layer) => {\n if (layer && layer.options && layer.options.baselayer) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Remove specific layer from map and memory by its definition.\n */\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n const layerId = layer && this.getLayerId(layer);\n if (layer && layerId) {\n this.emitter.emit('layer:preremove', layer);\n if (layer.beforeRemove) {\n layer.beforeRemove();\n }\n if (layer.removeLayer) {\n layer.removeLayer();\n } else {\n this.mapAdapter.removeLayer(layer.layer);\n }\n if (layer.options && layer.options.baselayer) {\n const index = this._baselayers.indexOf(layerId);\n if (index) {\n this._baselayers.splice(index, 1);\n }\n }\n delete this._layers[layerId];\n this.emitter.emit('layer:remove', layer);\n }\n }\n\n /**\n * Create layer from GeoJson data. Set style and behavior for selection.\n *\n * @example\n * ```javascript\n * // Add simple layer\n * webMap.addGeoJsonLayer({ data: geojson, paint: { color: 'red' } });\n *\n * // Add styled by feature property layer with selection behavior\n * webMap.addGeoJsonLayer({\n * data: geojson,\n * paint: function (feature) {\n * return { color: feature.properties.color, opacity: 0.5 }\n * },\n * selectedPaint: function (feature) {\n * return { color: feature.properties.selcolor, opacity: 1 }\n * },\n * selectable: true,\n * multiselect: true\n * });\n *\n * // Add marker layer styled with use [Icons](icons)\n * webMap.addGeoJsonLayer({ data: geojson, paint: webMap.getIcon({ color: 'orange' })});\n *\n * // work with added layer\n * const layer = webMap.addGeoJsonLayer({ data: geojson, id: 'my_layer_name'});\n * // access layer by id\n * webMap.showLayer('my_layer_name');\n * // or access layer by instance\n * webMap.showLayer(layer);\n * ```\n */\n addGeoJsonLayer<\n K extends keyof LayerAdapters = keyof LayerAdapters,\n O extends GeoJsonAdapterOptions<any, any> = GeoJsonAdapterOptions,\n >(\n opt: O = {} as O,\n adapter?: LayerAdapterDefinition<K>,\n ): Promise<VectorLayerAdapter<any, any, any>> {\n opt = opt || ({} as O);\n opt.multiselect = opt.multiselect !== undefined ? opt.multiselect : false;\n opt.unselectOnSecondClick =\n opt.unselectOnSecondClick !== undefined\n ? opt.unselectOnSecondClick\n : true;\n if (!adapter) {\n opt = updateGeoJsonAdapterOptions(opt);\n }\n opt.paint = opt.paint || {};\n return this.addLayer(adapter || 'GEOJSON', opt);\n }\n\n /** Shortcut for {@link WebMapLayers.addGeoJsonLayer} to create GeoJson adapter with generic types for working in typescript */\n addFeatureLayer<\n P extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n O extends GeoJsonAdapterOptions<Feature<G, P>> = GeoJsonAdapterOptions<\n Feature<G, P>\n >,\n >(options = {} as O): Promise<FeatureLayerAdapter<P, G>> {\n return this.addGeoJsonLayer<'GEOJSON', O>(options) as Promise<\n FeatureLayerAdapter<P, G>\n >;\n }\n\n /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */\n addTileLayer(\n url: string,\n options: Omit<TileAdapterOptions, 'url'> = {},\n ): Promise<MainLayerAdapter<M, L, TileAdapterOptions>> {\n return this.addLayer('TILE', { ...options, url }) as Promise<\n MainLayerAdapter<M, L, TileAdapterOptions>\n >;\n }\n\n /** Shortcut for {@link WebMapLayers.addLayer} to create TileLayer adapter */\n addImageLayer(\n url: string,\n options: Omit<ImageAdapterOptions, 'url'>,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>>;\n addImageLayer(\n options: ImageAdapterOptions,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>>;\n addImageLayer(\n urlOrOptions: string | ImageAdapterOptions,\n options?: Omit<ImageAdapterOptions, 'url'>,\n ): Promise<MainLayerAdapter<M, L, ImageAdapterOptions>> {\n let url;\n if (typeof urlOrOptions === 'string') {\n url = urlOrOptions;\n } else {\n url = urlOrOptions.url;\n options = urlOrOptions;\n }\n\n return this.addLayer('IMAGE', { ...options, url }) as Promise<\n MainLayerAdapter<M, L, ImageAdapterOptions>\n >;\n }\n\n /**\n * Show added layer on the map by it definition.\n */\n showLayer(\n layerDef: LayerDef,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n return this.toggleLayer(layerDef, true, options);\n }\n\n /**\n * Hide added layer on the map by it definition.\n */\n hideLayer(\n layerDef: LayerDef,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n return this.toggleLayer(layerDef, false, options);\n }\n\n /**\n * Change added layer visibility on the map by given status or inverse current status.\n *\n * @example\n * ```javascript\n * webMap.addLayer('TILE', {id: 'my_layer', url: ''}).then((layer) => {\n * webMap.toggleLayer(layer, true);\n * webMap.toggleLayer('my_layer', false);\n * webMap.toggleLayer('my_layer');\n * webMap.isLayerVisible(layer); // true\n * });\n * ```\n */\n toggleLayer(\n layerDef: LayerDef,\n status?: boolean,\n options: ToggleLayerOptions = {},\n ): Promise<void> {\n const layer = this.getLayer(layerDef);\n\n const onMap = layer && layer.options.visibility;\n const toStatus = status !== undefined ? status : !onMap;\n const silent = options.silent !== undefined ? options.silent : false;\n const action = async (l: LayerAdapter) => {\n const id = String(l.id);\n const preEventName = toStatus ? 'layer:preshow' : 'layer:prehide';\n const eventName = toStatus ? 'layer:show' : 'layer:hide';\n if (!silent) {\n this._emitLayerEvent(preEventName, id, l);\n this._emitLayerEvent('layer:pretoggle', id, l);\n }\n if (toStatus && this.mapAdapter) {\n const order = l.options.baselayer ? 0 : l.options.order;\n\n // do not show baselayer if another on the map\n if (l.options.baselayer && this._baselayers.length) {\n const anotherVisibleBaselayers = this._baselayers.filter((x) => {\n return x !== l.id && this.isLayerVisible(x);\n });\n for (const bl of anotherVisibleBaselayers) {\n await this.hideLayer(bl);\n }\n }\n if (l.showLayer) {\n await l.showLayer.call(l, l.layer);\n } else if (l.layer !== undefined) {\n await this.mapAdapter.showLayer(l.layer);\n }\n if (order !== undefined) {\n this.mapAdapter.setLayerOrder(l.layer, order, this._layers);\n }\n } else {\n if (l.hideLayer) {\n await l.hideLayer.call(l, l.layer);\n } else if (l.layer !== undefined) {\n await this.mapAdapter.hideLayer(l.layer);\n }\n }\n l.options.visibility = toStatus;\n if (!silent) {\n this._emitLayerEvent(eventName, id, l);\n this._emitLayerEvent('layer:toggle', id, l);\n }\n };\n if (layer) {\n return this.onMapLoad().then(() => action(layer));\n }\n return Promise.resolve();\n }\n\n updateLayer(\n layerDef: LayerDef,\n options?: { params?: Record<string, string> },\n ): Promise<void> {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.updateLayer) {\n return Promise.resolve(layer.updateLayer(options));\n } else if (this.isLayerVisible(layer)) {\n return this.hideLayer(layer, { silent: true }).then(() => {\n return this.showLayer(layer, { silent: true });\n });\n }\n }\n return Promise.resolve();\n }\n\n /**\n * Set transparency for a given layer by number from 0 to 1\n */\n setLayerOpacity(layerDef: LayerDef, value: number): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n if (layer.setOpacity) {\n layer.setOpacity(value);\n } else if (this.mapAdapter.setLayerOpacity) {\n this.mapAdapter.setLayerOpacity(layer.layer, value);\n }\n }\n }\n\n isLayerLabelVisible(layerDef: LayerDef): boolean {\n const layer = this.getLayer(layerDef) as VectorLayerAdapter;\n if (layer.isLabelVisible) {\n return layer.isLabelVisible();\n }\n return layer.options.labelVisibility ?? true;\n }\n\n showLayerLabel(layerDef: LayerDef): void {\n this.toggleLayerLabel(layerDef, true);\n }\n\n hideLayerLabel(layerDef: LayerDef): void {\n this.toggleLayerLabel(layerDef, false);\n }\n\n toggleLayerLabel(layerDef: LayerDef, status?: boolean): boolean {\n const layer = this.getLayer(layerDef) as VectorLayerAdapter;\n status = status ?? !this.isLayerLabelVisible(layerDef);\n if (layer) {\n if (status) {\n if (layer.showLabel) {\n layer.options.labelVisibility = true;\n layer.showLabel();\n }\n } else {\n if (layer.hideLabel) {\n layer.options.labelVisibility = false;\n layer.hideLabel();\n }\n }\n if (layer.id) {\n this._emitLayerEvent('layer:label:toggle', layer.id, layer);\n }\n }\n return status;\n }\n\n /**\n * Mark the layer as selected.\n * If the adapter is a vector layer and supports data selection,\n * you can pass a callback function to specify which data will be selected.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.selectLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n\n */\n selectLayer(layerDef: LayerDef, findFeatureFun?: DataLayerFilter): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer as VectorLayerAdapter;\n if (adapter && adapter.select) {\n adapter.select(findFeatureFun);\n }\n const layerId = this.getLayerId(layer);\n if (layerId) {\n this._selectedLayers.push(layerId);\n }\n }\n }\n\n /**\n * Unselect the given layer.\n * If the adapter is a vector layer and supports data selection,\n * you can pass a callback function to specify which data will be unselected.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.unSelectLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n *\n */\n unSelectLayer(layerDef: LayerDef, findFeatureFun?: DataLayerFilter): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer && (layer as VectorLayerAdapter);\n if (adapter.unselect) {\n adapter.unselect(findFeatureFun);\n }\n const layerId = this.getLayerId(layer);\n if (layerId) {\n const index = this._selectedLayers.indexOf(layerId);\n if (index !== -1) {\n this._selectedLayers.splice(index, 1);\n }\n }\n }\n }\n /** Remove selection from any selected selectable layer */\n unSelectLayers(): void {\n const layers = Object.values(this.allLayers());\n let l: VectorLayerAdapter;\n for (l of layers) {\n if (l.unselect) {\n l.unselect();\n }\n }\n }\n\n /**\n * Hide features from a vector layer using a callback function.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.filterLayer(layer, ({feature}) => feature.id === '42');\n * });\n * ```\n *\n */\n filterLayer(\n layerDef: LayerDef,\n filter: DataLayerFilter<Feature, L>,\n ): LayerDefinition<Feature, L>[] {\n const layer = this.getLayer(layerDef);\n const adapter = layer as VectorLayerAdapter;\n if (adapter.filter) {\n return adapter.filter(filter);\n }\n return [];\n }\n\n propertiesFilter(\n layerDef: LayerDef,\n filters: PropertiesFilter,\n options?: FilterOptions,\n ): Promise<void> {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const adapter = layer as VectorLayerAdapter;\n if (adapter.propertiesFilter) {\n return adapter.propertiesFilter(filters, options);\n } else if (adapter.filter) {\n this.filterLayer(adapter, (e) => {\n if (e.feature && e.feature.properties) {\n return propertiesFilter(e.feature.properties, filters);\n }\n return true;\n });\n }\n }\n return Promise.resolve();\n }\n\n removeLayerFilter(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n const adapter = layer as VectorLayerAdapter;\n if (adapter.removeFilter) {\n adapter.removeFilter();\n } else if (adapter.filter) {\n adapter.filter(() => {\n return true;\n });\n }\n }\n\n /**\n * Sets the GeoJSON data for given vector layer.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON').then((layer) => {\n * webMap.setLayerData(layer, geojson);\n * });\n * ```\n */\n setLayerData(layerDef: LayerDef, data: GeoJsonObject): void | Promise<void> {\n const vectorAdapter = this.getLayer(layerDef);\n const adapter = vectorAdapter as VectorLayerAdapter;\n if (adapter) {\n if (adapter.setData) {\n return adapter.setData(data);\n } else if (adapter.clearLayer && adapter.addData) {\n adapter.clearLayer();\n return adapter.addData(data);\n }\n }\n return Promise.resolve();\n }\n\n /**\n * Push new the GeoJSON features into given vector layer.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson_features_5}).then((layer) => {\n * console.log(layer.getLayers().length) // > 5;\n * webMap.addLayerData(layer, geojson_features_3);\n * console.log(layer.getLayers().length) // > 8;\n * });\n * ```\n */\n addLayerData(layerDef: LayerDef, data: GeoJsonObject): void {\n const layerMem = this.getLayer(layerDef);\n const adapter = layerMem as VectorLayerAdapter;\n if (adapter.addData) {\n adapter.addData(data);\n }\n }\n\n /**\n * Remove from vector layer all features.\n * it is possible to remove only some objects if you specify a callback function.\n *\n * @example\n * ```javascript\n * const layer = webMap.addLayer('GEOJSON', {data: geojson}).then((layer) => {\n * webMap.clearLayerData(layer, (feture) => feture.id === 42);\n * webMap.clearLayerData(layer);\n * });\n * ```\n */\n clearLayerData(layerDef: LayerDef, cb?: (feature: Feature) => boolean): void {\n const layerMem = this.getLayer(layerDef);\n const adapter = layerMem as VectorLayerAdapter;\n if (adapter && adapter.clearLayer) {\n adapter.clearLayer(cb);\n }\n }\n\n setLayerPaint(layerDef: LayerDef, paint?: Paint | null): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.setPaint) {\n layer.setPaint(paint);\n }\n }\n setLayerSelectedPaint(layerDef: LayerDef, paint?: Paint | null): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.setSelectedPaint) {\n layer.setSelectedPaint(paint);\n }\n }\n updateLayerPaint(layerDef: LayerDef, paint: Partial<Paint>): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.updatePaint) {\n layer.updatePaint(paint);\n }\n }\n updateLayerSelectedPaint(layerDef: LayerDef, paint: Partial<Paint>): void {\n const layer = this.getLayer(layerDef);\n if (paint && layer && layer.updateSelectedPaint) {\n layer.updateSelectedPaint(paint);\n }\n }\n\n getAttributions(options: GetAttributionsOptions): string[] {\n const attributions: string[] = [];\n for (const l in this._layers) {\n const layerCache = this._layers[l];\n const onlyVisible =\n options.onlyVisible !== undefined ? options.onlyVisible : true;\n let useLayerAttr = onlyVisible ? layerCache.options.visibility : true;\n if (useLayerAttr && options.onlyBaselayer) {\n useLayerAttr = this._baselayers.includes(l);\n }\n if (useLayerAttr) {\n const attr = layerCache.options && layerCache.options.attribution;\n if (attr) {\n attributions.push(attr);\n }\n }\n }\n\n return attributions;\n }\n\n getActiveBaseLayer(): MainLayerAdapter<M, any, AdapterOptions> | undefined {\n const visibleLayerBaseLayer = this.getBaseLayers().find((x) => {\n return this.isLayerVisible(x);\n });\n if (visibleLayerBaseLayer) {\n return this.getLayer(visibleLayerBaseLayer);\n }\n }\n\n addTileJsonLayer(\n tileJson: TileJson,\n ): Promise<MainLayerAdapter<M, any, TileAdapterOptions>> {\n // if (this.mapAdapter.createTileJsonlayer) {\n // } else {\n\n const url = tileJson.tiles[0];\n return this.addLayer('TILE', {\n url,\n maxZoom: tileJson.maxzoom,\n minZoom: tileJson.minzoom,\n subdomains: tileJson.scheme,\n attribution: tileJson.attribution,\n }) as Promise<MainLayerAdapter<M, any, TileAdapterOptions>>;\n }\n\n /** @internal */\n _emitLayerEvent(name: keyof E, id: string, options?: unknown) {\n const name_ = String(name);\n if (defined(id) && name_.startsWith('layer:')) {\n const specificLayerName = name_.replace('layer:', 'layer-' + id + ':');\n this.emitter.emit(specificLayerName as keyof WebMapEvents, options);\n }\n this.emitter.emit(name as keyof WebMapEvents, options);\n }\n\n private async _onLayerClick(options: OnLayerMouseOptions) {\n const id = options.layer.id;\n this._emitLayerEvent('layer:click', id || '', options);\n return Promise.resolve(options);\n }\n private async _onLayerDoubleClick(options: OnLayerMouseOptions) {\n const id = options.layer.id;\n this._emitLayerEvent('layer:dblclick', id || '', options);\n return Promise.resolve(options);\n }\n\n private async _onLayerSelect(options: OnLayerSelectOptions) {\n this._emitLayerEvent('layer:select', options.layer.id || '', options);\n return Promise.resolve(options);\n }\n\n private _updateGeoJsonOptions(options: GeoJsonAdapterOptions) {\n const {\n onSelect,\n onLayerSelect,\n onClick,\n onDoubleClick,\n onLayerClick,\n onMouseOut,\n onMouseOver,\n } = options;\n const onLayerClickFromOpt = onClick || onLayerClick;\n const onLayerDblClickFromOpt = onDoubleClick || onLayerClick;\n options.onClick = (e) => {\n if (onLayerClickFromOpt) {\n onLayerClickFromOpt(e);\n }\n return this._onLayerClick(e);\n };\n options.onDoubleClick = (e) => {\n if (onLayerDblClickFromOpt) {\n onLayerDblClickFromOpt(e);\n }\n return this._onLayerDoubleClick(e);\n };\n\n options.onMouseOut = (e) => {\n const id = e.layer.id;\n if (onMouseOut) onMouseOut(e);\n if (defined(id)) {\n this._emitLayerEvent(`layer:mouseout`, id, e);\n }\n };\n\n options.onMouseOver = (e) => {\n const id = e.layer.id;\n if (onMouseOver) onMouseOver(e);\n if (defined(id)) {\n this._emitLayerEvent(`layer:mouseover`, id, e);\n }\n };\n\n // TODO: remove backward compatibility for onLayerSelect\n const onLayerSelectFromOpt = onSelect || onLayerSelect;\n options.onSelect = (e) => {\n if (onLayerSelectFromOpt) {\n onLayerSelectFromOpt(e);\n }\n return this._onLayerSelect(e);\n };\n\n if (!options.nativePaint) {\n if (this.options.paint) {\n options.paint = preparePaint({\n paint: options.paint || {},\n defaultPaint: this.options.paint,\n getPaintFunctions: this.getPaintFunctions,\n });\n }\n if (options.selectedPaint && this.options.selectedPaint) {\n options.selectedPaint = preparePaint({\n paint: options.selectedPaint,\n defaultPaint: this.options.selectedPaint,\n getPaintFunctions: this.getPaintFunctions,\n });\n }\n }\n }\n}\n","import { createToggleControl } from './components/controls/createToggleControl';\nimport { WebMapLayers } from './WebMapLayers';\n\nimport type { WebMapEvents } from './interfaces/Events';\nimport type { ControlPosition } from './interfaces/MapAdapter';\nimport type {\n ButtonControlOptions,\n CreateControlOptions,\n MapControl,\n MapControls,\n ToggleControl,\n ToggleControlOptions,\n} from './interfaces/MapControl';\nimport type { MapOptions } from './interfaces/MapOptions';\nimport type { WebMapMain } from './WebMapMain';\n\n/**\n * Collection of methods for managing map controls\n */\nexport class WebMapControls<\n M = any,\n L = any,\n C extends object = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n >\n extends WebMapLayers<M, L, E, O>\n implements WebMapLayers, WebMapMain\n{\n static controls: {\n [name: string]: (webMap: WebMapControls, options?: any) => any;\n } = {\n CONTROL: (\n webMap: WebMapControls,\n options: {\n control: MapControl;\n options?: CreateControlOptions;\n },\n ) => {\n return webMap.createControl(options.control, options.options);\n },\n BUTTON: (webMap: WebMapControls, options: ButtonControlOptions) => {\n return webMap.createButtonControl(options);\n },\n TOGGLE: (webMap: WebMapControls, options: ToggleControlOptions) => {\n return webMap.createToggleControl(options);\n },\n };\n\n private _loadControlQueue: {\n [key in ControlPosition]: (() => Promise<any>)[];\n } = {\n 'top-right': [],\n 'bottom-right': [],\n 'top-left': [],\n 'bottom-left': [],\n };\n private _isControlLoading: { [key in ControlPosition]: boolean } = {\n 'top-right': false,\n 'bottom-right': false,\n 'top-left': false,\n 'bottom-left': false,\n };\n\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlPosition,\n options?: MapControls[K],\n ): Promise<any> {\n let control: C | undefined;\n position = position ?? 'top-left';\n if (typeof controlDef === 'string') {\n control = this.getControl(controlDef, options);\n } else {\n control = controlDef as C;\n }\n if (control) {\n return new Promise<() => Promise<any>>((resolve) => {\n const promise = async () => {\n const _control = await control;\n const c = this.mapAdapter.addControl(_control, position);\n resolve(c);\n };\n this._setControlQueue(position, promise);\n });\n }\n }\n\n /**\n * Creating a universal map layout control element. Can be used with any map adapter.\n *\n * @example\n * ```javascript\n * const control = webMap.createControl({\n * onAdd() {\n * return document.createElement('div');\n * }\n * });\n * ```\n */\n async createControl(\n control: MapControl,\n options?: CreateControlOptions,\n ): Promise<C | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createControl) {\n return this.mapAdapter.createControl(control, options);\n }\n }\n\n async createButtonControl(\n options: ButtonControlOptions,\n ): Promise<C | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createButtonControl) {\n return this.mapAdapter.createButtonControl(options);\n }\n }\n\n /**\n * Create any toggler control button\n * @param options - Options for control layout customization and assigning a callback function\n *\n * @example\n * ```javascript\n * const toggleControl = ngwMap.createToggleControl({\n * getStatus: () => webMap.isLayerVisible('any-layer-id'),\n * onClick: (status) => ngwMap.toggleLayer('webmap', status),\n * html: {\n * on: 'ON',\n * off: 'OFF'\n * },\n * title: 'Toggle layer visibility'\n * });\n * webMap.addControl(toggleControl, 'top-right');\n * ```\n * {@link http://code.nextgis.com/demo-examples-toggle-control | Toggle button control example}\n */\n async createToggleControl(\n options: ToggleControlOptions,\n ): Promise<(C & ToggleControl) | undefined> {\n await this.onLoad('build-map');\n if (this.mapAdapter.createToggleControl) {\n return this.mapAdapter.createToggleControl(options);\n } else {\n if (this.mapAdapter.createButtonControl) {\n return createToggleControl<C>(\n this.mapAdapter.createButtonControl,\n options,\n );\n }\n }\n }\n\n /**\n *\n * @param control - Instance of WEB-GIS framework control.\n * What is returned by the {@link createControl | create} method\n */\n removeControl(control: C): void {\n if ('remove' in control) {\n // @ts-expect-error TODO: ugly code, rewrite\n control.remove();\n } else if (this.mapAdapter.removeControl) {\n Promise.resolve(control).then((c) => {\n this.mapAdapter.removeControl(c);\n });\n }\n }\n\n /**\n * Get instance of registered control\n * @param control - Any registered control string name\n * @param options - Custom control options\n */\n getControl<K extends keyof MapControls>(\n control: K,\n options?: MapControls[K],\n ): C | undefined {\n const engine = this.mapAdapter.controlAdapters[control];\n if (engine) {\n return new engine(options);\n } else {\n const createFun = WebMapControls.controls[control];\n if (createFun) {\n return createFun(this, options);\n }\n }\n }\n\n getControlContainer(): HTMLElement | undefined {\n if (this.mapAdapter.getControlContainer) {\n return this.mapAdapter.getControlContainer();\n }\n }\n\n private _setControlQueue(position: ControlPosition, cb: () => Promise<any>) {\n this._loadControlQueue[position].push(cb);\n if (!this._isControlLoading[position]) {\n this._applyControls(position);\n }\n }\n\n private async _applyControls(position: ControlPosition) {\n if (this._loadControlQueue[position].length) {\n this._isControlLoading[position] = true;\n const controlCb = this._loadControlQueue[position][0];\n await controlCb();\n this._loadControlQueue[position].splice(0, 1);\n this._applyControls(position);\n } else {\n this._isControlLoading[position] = false;\n }\n }\n}\n","/**\n * @privateRemarks\n * Since it was not possible to split the code through mixins, inheritance was used.\n * The `ts-mixin` plugin worked fine, but led to errors in IE.\n *\n * Now inheritance is as follow:\n * BaseWebMap \\> WebMapLayers \\> WebMap\n *\n * Will need to be done this way:\n * ```javascript\n * class WebMap extend mixin(WebMapLayers, WebMapControls) {}\n * ```\n *\n * This approach can also be considered\n * ```javascript\n * class WebMap {\n * layers: WebMapLayers;\n * controls WebMapControls\n * }\n * ```\n * and then\n *\n * const webMap = new WebMap(...);\n * webMap.layers.addLayer(...)\n *\n * looks good, but will add difficulty in inheriting from WebMap\n *\n * old:\n * ```javascript\n * class NgwMap extends WebMap {\n * addLayer(...) {\n * super.addLayer(...)\n * }\n * }\n * ```\n * new:\n * ```javascript\n * class NgwLayers extends WebMapLayers {\n * addLayer(...) {\n * super.addLayer(...)\n * }\n * }\n *\n * class NgwMap extends WebMap {\n * layersClass = NgwLayers\n * }\n * ```\n * ...and there will be compatibility issues\n */\n\nimport { getWebMap, setWebMap } from './container';\nimport { WebMapControls } from './WebMapControls';\n\nimport type { WebMapEvents } from './interfaces/Events';\nimport type { ControlOptions } from './interfaces/MapControl';\nimport type { MapOptions } from './interfaces/MapOptions';\nimport type { WebMapLayers } from './WebMapLayers';\nimport type { WebMapMain } from './WebMapMain';\n\n/**\n * The core component for managing map adapters.\n * It contains methods for adding and manipulation with\n * {@link WebMapMain | map}, {@link WebMapLayers | layers} and {@link WebMapControls | controls}.\n *\n * @example\n * ```javascript\n * import { WebMap } from '@nextgis/webmap';\n * import MapAdapter from '@nextgis/ol-map-adapter';\n *\n * const webMap = new WebMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * });\n * ```\n *\n * @typeParam M - Interactive Map used in the adapter\n * @typeParam L - Layer\n * @typeParam C - Control\n * @typeParam E - Events\n *\n */\nexport class WebMap<\n M = any,\n L = any,\n C extends object = any,\n E extends WebMapEvents = WebMapEvents,\n O extends MapOptions = MapOptions,\n >\n extends WebMapControls<M, L, C, E, O>\n implements WebMapControls, WebMapLayers, WebMapMain\n{\n constructor(mapOptions: O) {\n super(mapOptions);\n this._addControls();\n setWebMap(this.id, this);\n }\n\n static get<T extends WebMap = WebMap>(id: number): T {\n return getWebMap<T>(id);\n }\n\n /**\n * @internal\n */\n protected async _addLayerProviders(): Promise<void> {\n for await (const kit of this._starterKits) {\n if (kit.getLayerAdapters) {\n const adapters = await kit.getLayerAdapters.call(kit);\n if (adapters) {\n for await (const adapter of adapters) {\n const newAdapter = await adapter.createAdapter(this);\n if (newAdapter) {\n this.mapAdapter.layerAdapters[adapter.name] = newAdapter;\n }\n }\n }\n }\n }\n }\n\n /**\n * @internal\n */\n protected async _onLoadSync(): Promise<void> {\n for await (const kit of this._starterKits) {\n if (kit.onLoadSync) {\n try {\n await kit.onLoadSync.call(kit, this);\n } catch (er) {\n console.error(er);\n }\n }\n }\n }\n\n private _addControls(): void {\n if (this.options.controls) {\n this.options.controls.forEach((x) => {\n let controlAdapterName = x;\n let controlOptions: ControlOptions = {};\n if (typeof x === 'string' && this.options.controlsOptions) {\n if (this.options.controlsOptions[x]) {\n controlOptions = this.options.controlsOptions[x];\n if (controlOptions.control !== undefined) {\n controlAdapterName = controlOptions.control;\n }\n }\n }\n const { position, ...options } = controlOptions;\n this.addControl(controlAdapterName, position || 'top-left', options);\n });\n }\n this._emitStatusEvent('controls:create');\n }\n}\n","export function getDefaultControls(): string[] {\n return ['ZOOM', 'ATTRIBUTION'];\n}\n","import { WebMap } from './WebMap';\n\nimport type { MapOptions } from './interfaces/MapOptions';\n\nexport * from './components/controls/createToggleControl';\nexport * from './container';\nexport * from './interfaces/BaseTypes';\nexport * from './interfaces/Events';\nexport * from './interfaces/LayerAdapter';\nexport * from './interfaces/MapAdapter';\nexport * from './interfaces/MapControl';\nexport * from './interfaces/MapOptions';\nexport * from './interfaces/RuntimeParams';\nexport * from './interfaces/StarterKit';\nexport * from './utils/geometryTypes';\nexport * from './utils/getDefaultControls';\nexport * from './utils/updateGeoJsonAdapterOptions';\nexport * from './WebMapControls';\nexport * from './WebMapLayers';\nexport * from './WebMapMain';\n\nexport { WebMap };\n\nexport async function createWebMap(options: MapOptions): Promise<WebMap> {\n const webMap = new WebMap(options);\n return webMap.onLoad();\n}\n","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 } = 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 if (defined(this.options.setViewDelay)) {\n options.adapterOptions = options.adapterOptions || {};\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\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":["isObject","__async","__spreadValues","__publicField","NetworksResponseError","lwResp","lwData","__objRest","_a","__spreadProps","ID","route","errors.NgwError","errors.ResourceNotFoundError","filters","url","__superGet","NgwWebmapLayerAdapter","NWLayerAdapter","NgwConnector","e","f","expressionCallback","OPTIONS","iter","more","temp","error"],"mappings":"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"}