@nextgis/geocoder 1.3.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/geocoder; version: 1.3.0; author: NextGIS */
1
+ /** Bundle of @nextgis/geocoder; version: 1.7.0; author: NextGIS */
2
2
  'use strict';
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -216,3 +216,4 @@ exports.Geocoder = Geocoder;
216
216
  exports.NgwProvider = NgwProvider;
217
217
  exports.NominatimProvider = NominatimProvider;
218
218
  exports.create = create;
219
+ //# sourceMappingURL=geocoder.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.cjs.js","sources":["../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["objectAssign","CancelablePromise","NgwConnector","fixUrlStr"],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@nextgis/cancelable-promise"),t=require("@nextgis/utils"),s=require("@nextgis/ngw-connector");function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=r(e),c=r(s);class i{constructor(e){e&&t.objectAssign(this,e)}}let n=0;class a extends i{constructor(e){super(e),this.providers=[],e&&e.providers&&(this.providers=e.providers)}abort(){this.providers.forEach((e=>{e.abort&&e.abort()}))}async*search(e){for(const t of this.providers)try{const s=t.search(e);for await(const e of s)yield{...e,provider:t,_id:n++}}catch(e){}}result(e){return e.provider?e.provider.result(e):o.resolve(void 0)}}class u extends i{}exports.BaseProvider=u,exports.Geocoder=a,exports.NgwProvider=class extends u{constructor(e){super(e),this.caseInsensitive=!0,this.searchUrl="https://maxim.nextgis.com",this.searchResources=[],this.requests=[],this.connector=e.connector||new c({baseUrl:this.searchUrl}),this.searchResources=e.searchResources}abort(){this.requests.forEach((e=>{e.cancel()})),this.requests=[]}async*search(e){for(const t of this.searchResources){const s=this.connector.get("feature_layer.store",{headers:{RANGE:`items=0-${t.limit||300}`}},{id:t.id,like:e});this.requests.push(s),s.catch((e=>{console.log(e)}));const r=await s,o=[];r&&r.forEach((s=>{o.push({query:e,resourceId:t.id,...s})}));for(const e of this._items(o))e.result=()=>this.result(e),yield e}}result(e){const t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((t=>{const s=t.extent;return{text:e.text,extent:[s.minLon,s.minLat,s.maxLon,s.maxLat]}}));return this.requests.push(t),t}_items(e){const t=[];return e.forEach((e=>{this.searchResources.find((t=>t.id===e.resourceId))&&t.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),t}},exports.NominatimProvider=class extends u{constructor(e){super(e),this.searchUrl="https://nominatim.openstreetmap.org",this._requests=[]}abort(){this._requests.forEach((e=>e.cancel())),this._requests=[]}async*search(e){const s=t.fixUrlStr(`${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${e}`),r=new o(((t,r,o)=>{const c=new XMLHttpRequest;c.open("GET",s,!0),c.onload=()=>{try{const s=JSON.parse(c.responseText).features.map((t=>({geom:t,extent:t.bbox,text:t.properties&&t.properties.display_name,query:e})));t(s)}catch(e){r(e)}},c.onerror=e=>{r(e)},o((()=>{c.abort()})),c.send()})).catch((e=>{throw e}));this._requests.push(r);const c=await r;if(c)for(const e of c)e.result=()=>this.result(e),yield e}result(e){return o.resolve({text:e.text,extent:e.extent||[],geom:e.geom})}},exports.create=function(e){return new a(e)};
2
+ //# sourceMappingURL=geocoder.cjs.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.cjs.prod.js","sources":["../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["BaseGeocoder","constructor","options","objectAssign","this","ID","Geocoder","super","providers","abort","forEach","x","search","query","provider","results","r","_id","er","result","item","CancelablePromise","resolve","undefined","BaseProvider","connector","NgwConnector","baseUrl","searchUrl","searchResources","requests","cancel","like","resource","request","get","headers","RANGE","limit","id","push","catch","console","log","resp","entries","resourceId","_items","req","fid","featureId","then","e","extent","text","minLon","minLat","maxLon","maxLat","items","entry","find","label","_requests","val","url","fixUrlStr","reject","onCancel","xhr","XMLHttpRequest","open","onload","features","JSON","parse","responseText","map","geom","bbox","properties","display_name","onerror","send","i","model"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/geocoder; version: 1.3.0; author: NextGIS */
1
+ /** Bundle of @nextgis/geocoder; version: 1.7.0; author: NextGIS */
2
2
  class CancelError extends Error {
3
3
  constructor() {
4
4
  super();
@@ -146,9 +146,8 @@ let ID$2 = 0;
146
146
  *
147
147
  * promise.cancel();
148
148
  * ```
149
- * @public
150
149
  */
151
- class CancelablePromise {
150
+ class CancelablePromise$1 {
152
151
  constructor(executor, timeout) {
153
152
  this.id = ID$2++;
154
153
  this._isCanceled = false;
@@ -162,7 +161,7 @@ class CancelablePromise {
162
161
  this._cancelPromise,
163
162
  new Promise((resolve, reject) => {
164
163
  const onResolve = (value) => {
165
- if (value instanceof CancelablePromise) {
164
+ if (value instanceof CancelablePromise$1) {
166
165
  this.attach(value);
167
166
  }
168
167
  else {
@@ -204,13 +203,13 @@ class CancelablePromise {
204
203
  return new PromiseControl(opt);
205
204
  }
206
205
  static resolve(value) {
207
- return new CancelablePromise((resolve) => resolve(value));
206
+ return new CancelablePromise$1((resolve) => resolve(value));
208
207
  }
209
208
  static reject(value) {
210
- return new CancelablePromise((resolve, reject) => reject(value));
209
+ return new CancelablePromise$1((resolve, reject) => reject(value));
211
210
  }
212
211
  static all(values) {
213
- return new CancelablePromise((resolve, reject) => {
212
+ return new CancelablePromise$1((resolve, reject) => {
214
213
  Promise.all(values).then(resolve).catch(reject);
215
214
  }).catch((er) => {
216
215
  if (er instanceof this.CancelError) {
@@ -232,7 +231,7 @@ class CancelablePromise {
232
231
  }
233
232
  }
234
233
  then(onfulfilled, onrejected) {
235
- const p = new CancelablePromise((resolve, reject) => {
234
+ const p = new CancelablePromise$1((resolve, reject) => {
236
235
  if (this._promise) {
237
236
  const reject_ = (r) => {
238
237
  if (onrejected) {
@@ -327,17 +326,18 @@ class CancelablePromise {
327
326
  this._promise = undefined;
328
327
  }
329
328
  }
330
- CancelablePromise.CancelError = CancelError;
331
- CancelablePromise.TimeoutError = TimeoutError;
332
- CancelablePromise.PromiseControl = PromiseControl;
333
- Object.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);
329
+ CancelablePromise$1.CancelError = CancelError;
330
+ CancelablePromise$1.TimeoutError = TimeoutError;
331
+ CancelablePromise$1.PromiseControl = PromiseControl;
332
+ Object.setPrototypeOf(CancelablePromise$1.prototype, Promise.prototype);
334
333
 
335
334
  /**
336
335
  * A promise you can stop
337
336
  *
338
337
  * @packageDocumentation
339
338
  * @module cancelable-promise
340
- */
339
+ */
340
+ var CancelablePromise = CancelablePromise$1;
341
341
 
342
342
  /**
343
343
  * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js
@@ -486,7 +486,7 @@ class Geocoder extends BaseGeocoder {
486
486
  class BaseProvider extends BaseGeocoder {
487
487
  }
488
488
 
489
- // Copyright Joyent, Inc. and other Node contributors.
489
+ var events = {exports: {}};
490
490
 
491
491
  var R = typeof Reflect === 'object' ? Reflect : null;
492
492
  var ReflectApply = R && typeof R.apply === 'function'
@@ -520,8 +520,8 @@ var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
520
520
  function EventEmitter() {
521
521
  EventEmitter.init.call(this);
522
522
  }
523
- var events = EventEmitter;
524
- var once_1 = once;
523
+ events.exports = EventEmitter;
524
+ events.exports.once = once;
525
525
 
526
526
  // Backwards-compat with node 0.10.x
527
527
  EventEmitter.EventEmitter = EventEmitter;
@@ -961,15 +961,14 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
961
961
  throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
962
962
  }
963
963
  }
964
- events.once = once_1;
965
964
 
966
- class Cache {
965
+ class Cache$1 {
967
966
  constructor() {
968
967
  this.cache = [];
969
- if (Cache.instance) {
970
- return Cache.instance;
968
+ if (Cache$1.instance) {
969
+ return Cache$1.instance;
971
970
  }
972
- Cache.instance = this;
971
+ Cache$1.instance = this;
973
972
  return this;
974
973
  }
975
974
  clean() {
@@ -1048,7 +1047,8 @@ class Cache {
1048
1047
  *
1049
1048
  * @packageDocumentation
1050
1049
  * @module cache
1051
- */
1050
+ */
1051
+ var Cache = Cache$1;
1052
1052
 
1053
1053
  /**
1054
1054
  * Thrown when...
@@ -1528,11 +1528,11 @@ function apiRequest(opt) {
1528
1528
  }
1529
1529
 
1530
1530
  let ID = 0;
1531
- class NgwConnector {
1531
+ class NgwConnector$1 {
1532
1532
  constructor(options) {
1533
1533
  this.options = options;
1534
1534
  this.id = ID++;
1535
- this.emitter = new events.EventEmitter();
1535
+ this.emitter = new events.exports.EventEmitter();
1536
1536
  this.routeStr = '/api/component/pyramid/route';
1537
1537
  const exist = findConnector(options);
1538
1538
  if (exist) {
@@ -1915,11 +1915,23 @@ class NgwConnector {
1915
1915
  return er;
1916
1916
  }
1917
1917
  }
1918
- NgwConnector.errors = {
1918
+ NgwConnector$1.errors = {
1919
1919
  NgwError,
1920
1920
  ResourceNotFoundError,
1921
1921
  };
1922
1922
 
1923
+ /**
1924
+ * A lightweight HTTP client optimized for use with {@link http://docs.nextgis.ru/docs_ngweb_dev/doc/developer/toc.html | NextGIS Web} API
1925
+ *
1926
+ * @remarks
1927
+ * Make sure CORS is registered in the {@link https://docs.nextgis.com/docs_ngcom/source/CORS.html | NextGIS Web settings } to be able to send requests.
1928
+ *
1929
+ * @packageDocumentation
1930
+ * @module ngw-connector
1931
+ */
1932
+ // export { NgwConnector };
1933
+ var NgwConnector = NgwConnector$1;
1934
+
1923
1935
  class NgwProvider extends BaseProvider {
1924
1936
  constructor(options) {
1925
1937
  super(options);
@@ -2072,3 +2084,4 @@ function create(options) {
2072
2084
  }
2073
2085
 
2074
2086
  export { BaseProvider, Geocoder, NgwProvider, NominatimProvider, create };
2087
+ //# sourceMappingURL=geocoder.esm-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.esm-browser.js","sources":["../../cancelable-promise/src/CancelError.ts","../../cancelable-promise/src/PromiseControl.ts","../../cancelable-promise/src/TimeoutError.ts","../../cancelable-promise/src/CancelablePromise.ts","../../cancelable-promise/src/index.ts","../../utils/src/defined.ts","../../utils/src/object/objectAssign.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/url.ts","../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../../../node_modules/events/events.js","../../cache/src/Cache.ts","../../cache/src/index.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/utils/apiRequest.ts","../../ngw-connector/src/NgwConnector.ts","../../ngw-connector/src/index.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["export class CancelError extends Error {\n name = 'CancelError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, CancelError.prototype);\n }\n}\n","import CancelablePromise from '.';\n\nexport interface PromiseControlOptions {\n onStart?: () => void;\n onStop?: () => void;\n}\n\ntype Key = CancelablePromise | string | number | symbol;\n\nexport class PromiseControl {\n private _promises: Map<Key, CancelablePromise> = new Map();\n\n get isLoaded(): boolean {\n return this._promises.size > 0;\n }\n\n constructor(private options: PromiseControlOptions = {}) {}\n\n remove(promise: Key): void {\n if (this._promises.has(promise)) {\n this._promises.delete(promise);\n this._onStop();\n }\n }\n\n get(promise: Key): CancelablePromise | undefined {\n return this._promises.get(promise);\n }\n\n add<T extends CancelablePromise = CancelablePromise>(\n promise: T,\n name?: string | number | symbol,\n ): CancelablePromise<T> {\n const key = name ? name : promise;\n const exist = this._promises.get(key);\n if (this.options.onStart && !this.isLoaded) {\n this.options.onStart();\n }\n if (exist) {\n return exist;\n }\n this._promises.set(key, promise);\n promise.finally(() => {\n this.remove(key);\n });\n return promise;\n }\n\n abort(): void {\n if (this.isLoaded) {\n this._promises.forEach((x) => {\n if (x.cancel) {\n x.cancel();\n }\n });\n this._promises.clear();\n this._onStop();\n }\n }\n\n waitFunc<T>(func: () => any, name = ''): CancelablePromise<T> {\n name = name || func.name;\n const exist = this.get(name);\n if (exist) {\n return exist;\n }\n return this.add(func(), name);\n }\n\n WaitForMe(name: string | symbol = ''): MethodDecorator {\n const get = this.get.bind(this);\n const add = this.add.bind(this);\n return function (\n target: unknown,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n name = name || key;\n descriptor.value = function (...args: any[]) {\n const exist = get(name);\n if (exist) {\n return exist;\n }\n const result = add(originalMethod.apply(this, args), name);\n return result;\n };\n\n return descriptor;\n };\n }\n\n /** @deprecated use {@link PromiseControl.WaitForMe } instead */\n GetOrCreateDecorator(name: string | symbol = ''): MethodDecorator {\n return this.WaitForMe(name);\n }\n\n private _onStop(): void {\n if (this.options.onStop && !this.isLoaded) {\n this.options.onStop();\n }\n }\n}\n","export class TimeoutError extends Error {\n name = 'TimeoutError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n","import { CancelError } from './CancelError';\nimport { PromiseControl, PromiseControlOptions } from './PromiseControl';\nimport { TimeoutError } from './TimeoutError';\n\ntype Reject = (reason?: any) => void;\ntype Resolve = (value?: any) => void;\nexport type OnCancelFunction = (cancelHandler: () => void) => void;\n\nconst handleCallback = <T = never>(\n resolve: Resolve,\n reject: Reject,\n callback: Resolve,\n r: T,\n) => {\n try {\n resolve(callback(r));\n } catch (e) {\n reject(e);\n }\n};\n\nlet ID = 0;\n\n/**\n * Promise that can be canceled\n *\n * @example\n * Catch `CancelError`\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject) => {\n * setTimeout(() => resolve(), 100);\n * }).catch((er) => {\n * if (er.name === \"CancelError\") {\n * // handle cancel error\n * }\n * throw er;\n * });\n *\n * promise.cancel();\n * ```\n * @example\n * Handle `onCancel` callback\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject, onCancel) => {\n * const xhr = new XMLHttpRequest();\n * xhr.open(\"GET\", url, true);\n * xhr.onload = () => {\n * resolve(xhr.responseText);\n * };\n * xhr.onerror = (er) => {\n * reject(er);\n * };\n *\n * onCancel(() => {\n * xhr.abort();\n * });\n *\n * xhr.send();\n * });\n *\n * promise.cancel();\n * ```\n */\nexport class CancelablePromise<T = any> implements Promise<T> {\n static CancelError = CancelError;\n static TimeoutError = TimeoutError;\n static PromiseControl = PromiseControl;\n\n readonly [Symbol.toStringTag]: string;\n readonly id = ID++;\n private _isCanceled = false;\n private _isPending = true;\n private _promise?: Promise<T>;\n private _cancelPromise?: Promise<T>;\n private _cancelHandlers: (() => void)[] = [];\n private _setCanceledCallback?: (er?: any) => void;\n private _parentPromise?: CancelablePromise;\n private _children: CancelablePromise[] = [];\n\n constructor(\n executor: (\n resolve: (value?: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancelFunction,\n ) => void,\n timeout?: number,\n ) {\n this._cancelPromise = new Promise<any>((resolve_, reject_) => {\n this._setCanceledCallback = (er) => resolve_(er || new CancelError());\n });\n const promises = [\n this._cancelPromise,\n new Promise<T>((resolve, reject) => {\n const onResolve = (value?: T | PromiseLike<T>) => {\n if (value instanceof CancelablePromise) {\n this.attach(value);\n } else {\n this._isPending = false;\n }\n // TODO: fix types, `undefined` not allowed since 19.12.2020\n resolve(value as T | PromiseLike<T>);\n };\n\n const onReject = (error: any) => {\n this._isPending = false;\n reject(error);\n };\n\n const onCancel: OnCancelFunction = (handler) => {\n if (!this._isPending) {\n throw new Error(\n 'The `onCancel` handler was attached after the promise settled.',\n );\n }\n\n this._cancelHandlers.push(handler);\n };\n\n return executor(onResolve, onReject, onCancel);\n }),\n ];\n if (timeout) {\n promises.push(\n new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._isPending) {\n try {\n this.cancel();\n } finally {\n reject(new TimeoutError());\n }\n }\n }, timeout);\n }),\n );\n }\n this._promise = Promise.race(promises);\n }\n\n static createControl(opt?: PromiseControlOptions): PromiseControl {\n return new PromiseControl(opt);\n }\n\n static resolve<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve) => resolve(value));\n }\n\n static reject<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve, reject) => reject(value));\n }\n\n static all<T>(values: (T | PromiseLike<T>)[]): CancelablePromise<T[]> {\n return new CancelablePromise((resolve, reject) => {\n Promise.all(values).then(resolve).catch(reject);\n }).catch((er) => {\n if (er instanceof this.CancelError) {\n for (const v of values) {\n if ('cancel' in v) {\n (v as CancelablePromise).cancel();\n }\n }\n }\n throw er;\n });\n }\n\n attach(p: CancelablePromise): void {\n if (this._isCanceled) {\n p.cancel();\n } else {\n this._children.push(p);\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?:\n | ((value: T) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): CancelablePromise<TResult1 | TResult2> {\n const p = new CancelablePromise((resolve, reject) => {\n if (this._promise) {\n const reject_ = (r: any) => {\n if (onrejected) {\n handleCallback(resolve, reject, onrejected, r);\n } else {\n reject(r);\n }\n };\n this._promise.then((r) => {\n if (this._isCanceled) {\n reject_(r);\n } else {\n if (onfulfilled) {\n handleCallback(resolve, reject, onfulfilled, r);\n } else {\n resolve(r);\n }\n }\n }, reject_);\n }\n });\n p._parentPromise = this;\n this._children.push(p);\n return p as CancelablePromise<TResult1 | TResult2>;\n }\n\n catch<TResult = never>(\n onrejected?:\n | ((reason: Error) => TResult | PromiseLike<TResult>)\n | undefined\n | null,\n ): CancelablePromise<T | TResult> {\n if (this._isCanceled && onrejected) {\n onrejected(new CancelError());\n }\n return this.then(undefined, onrejected);\n }\n\n finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n if (this._promise) {\n return this._promise.finally(onfinally);\n }\n if (this._isCanceled) {\n return Promise.reject(new CancelError());\n }\n return Promise.reject<T>(onfinally);\n }\n\n cancel(): this {\n // No reason to run cancel action if promise is already complete\n if (this._isCanceled || !this._isPending) {\n return this;\n }\n this._isCanceled = true;\n const parent = this._getTopParent();\n if (parent) {\n parent.cancel();\n }\n\n if (this._children) {\n this._children.forEach((x) => x.cancel());\n }\n\n if (this._isPending) {\n if (this._cancelHandlers.length) {\n try {\n for (const handler of this._cancelHandlers) {\n handler();\n }\n } catch (error) {\n // this._setCanceledCallback(error);\n }\n }\n if (this._setCanceledCallback) {\n this._setCanceledCallback();\n }\n }\n this._destroy();\n\n return this;\n }\n\n private _getTopParent() {\n let parent = this._parentPromise;\n let hasParent = !!parent;\n while (hasParent) {\n if (parent && parent._parentPromise) {\n parent = parent._parentPromise;\n hasParent = !!parent;\n } else {\n hasParent = false;\n }\n }\n return parent;\n }\n\n private _destroy() {\n this._setCanceledCallback = undefined;\n this._cancelPromise = undefined;\n this._promise = undefined;\n }\n}\n\nObject.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);\n","/**\n * A promise you can stop\n *\n * @packageDocumentation\n * @module cancelable-promise\n */\nimport { CancelablePromise } from './CancelablePromise';\n\nexport default CancelablePromise;\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 objectAssign<T, U>(target: T, source: U): T & U;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n */\nexport function objectAssign<T, U, V>(\n target: T,\n source1: U,\n source2: V,\n): T & U & V;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n * @param source3 - The third source object from which to copy properties.\n */\nexport function objectAssign<T, U, V, W>(\n target: T,\n source1: U,\n source2: V,\n source3: W,\n): T & U & V & W;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param sources - One or more source objects from which to copy properties\n */\nexport function objectAssign(\n target: Record<string, unknown>,\n ...sources: any[]\n): any {\n for (const source of sources) {\n for (const prop of Object.getOwnPropertyNames(source)) {\n (target as any)[prop] = source[prop];\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","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 fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n","import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheOptions<T> = Record<keyof T, T[keyof T]>;\n\ninterface CacheItem<T extends any = any, O = any> {\n key: string;\n value: CacheValue<T>;\n options?: CacheOptions<O>;\n}\n\nexport class Cache<\n T extends any = any,\n O extends Record<string, any> = Record<string, any>,\n> {\n private static instance: Cache<any, any>;\n private readonly cache: CacheItem<T, O>[] = [];\n\n constructor() {\n if (Cache.instance) {\n return Cache.instance;\n }\n\n Cache.instance = this;\n\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<T, O>[] {\n return this.cache;\n }\n\n add(\n key: string,\n valueToSet: CacheValue<T> | (() => CacheValue<T>),\n options?: CacheOptions<O>,\n ): CacheValue<T> {\n const exist = this._find(key, options);\n if (!exist) {\n let value: CacheValue<T>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const options_ =\n options && JSON.parse(JSON.stringify(objectRemoveEmpty(options)));\n\n const cacheItem = {\n key,\n value,\n options: options_,\n } as CacheItem<T, O>;\n\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch((er) => {\n this.delete(key, options);\n throw er;\n });\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, options?: CacheOptions<O>): CacheValue<T> | undefined {\n const cacheRecord = this._find(key, options);\n\n if (cacheRecord) {\n return cacheRecord.value;\n }\n }\n\n matchAll(key?: string, options?: CacheOptions<O>): CacheValue<T>[] {\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, options))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(key: string, options?: CacheOptions<O>): void {\n const exist = this.cache.filter((x) => this._filter(x, key, options));\n for (const e of exist) {\n const index = this.cache.indexOf(e);\n this.cache.splice(index, 1);\n }\n }\n\n private _find(\n key: string,\n options?: CacheOptions<O>,\n ): CacheItem<T> | undefined {\n return this.cache.find((x) => this._filter(x, key, options));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n options?: CacheOptions<O>,\n ): boolean {\n if (item.key === key) {\n if (options) {\n return objectDeepEqual(item.options || {}, objectRemoveEmpty(options));\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Caching for asynchronous functions\n *\n * @packageDocumentation\n * @module cache\n */\nimport { Cache } from './Cache';\n\nexport default Cache;\n","import { 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?: NgwError) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\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 {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\nimport { NgwError } from '../errors/NgwError';\nimport { NetworkError } from '../errors/NetworkError';\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, 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 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\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 request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: options.headers || {},\n method: options.method,\n };\n const body =\n typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n if (body !== undefined && options.method !== 'POST') {\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 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 // throw new Error(er);\n }\n if (json !== undefined) {\n resolve(json);\n }\n }\n reject('no data');\n });\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","// 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 { NgwError } from './NgwError';\nimport { 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 { NgwError } from './NgwError';\nimport { 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 { NgwConnectorOptions } from './interfaces';\nimport { NgwConnector } from './NgwConnector';\nimport { objectDeepEqual } from '@nextgis/utils';\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 function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { DeepPartial, defined } from '@nextgis/utils';\nimport { Resource } from '../types/ResourceItem';\nimport { isObject } from './isObject';\n\n/**\n * ```\n * { keyname, parent: { id }} > { keyname, parent__id }\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 Object.entries(resource).forEach(([key, value]) => {\n if (isObject(value)) {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n });\n return query;\n}\n","import { objectDeepEqual } from '@nextgis/utils';\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { Resource } from '../types/ResourceItem';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { resourceToQuery } from './utils/resourceToQuery';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\n\nimport { isObject } from './utils/isObject';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { NgwConnector } from './NgwConnector';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport type { RequestOptions, ResourceDefinition } from './interfaces';\n\nexport class ResourcesControl {\n cache = new Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number }\n >();\n\n constructor(private connector: NgwConnector) {}\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,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = new Cache();\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, requestOptions);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, requestOptions);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n };\n return cache.add('resource', makeRequest, { resource });\n }\n\n getOneOrFail(resource: ResourceDefinition): CancelablePromise<ResourceItem> {\n return this.getOne(resource).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(resource: ResourceDefinition): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.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(resource: ResourceDefinition): CancelablePromise<number> {\n return this.getId(resource).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,\n ): CancelablePromise<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 (resources) {\n resources.forEach((x) => {\n this.cache.add('resource.item', CancelablePromise.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 ): CancelablePromise<ResourceItem | undefined> {\n return this.connector.getResource(resource).then((child) => {\n if (child) {\n return this.connector.getResource(child.resource.parent.id);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.getId(resource).then((parent) => {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true },\n {\n parent,\n },\n )\n .then((items) => {\n for (const i of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(i), {\n id: i.resource.id,\n });\n }\n return items;\n });\n });\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<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): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this.cache.delete('resource.item', { id });\n return undefined;\n });\n }\n });\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions,\n ): CancelablePromise<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 ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.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 CancelablePromise from '@nextgis/cancelable-promise';\nimport { template } from './template';\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 function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","import { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { ResourcesControl } from './ResourcesControl';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n DeleteRequestItemsResponseMap,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n GetRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n ResourceIdKeynameDef,\n NgwConnectorOptions,\n ResourceDefinition,\n RequestItemsParams,\n RequestItemKeys,\n RequestHeaders,\n RequestOptions,\n PyramidRoute,\n Credentials,\n UserInfo,\n Params,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport { apiRequest } from './utils/apiRequest';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n\n emitter = new EventEmitter();\n user?: UserInfo;\n\n resources!: ResourcesControl;\n\n private routeStr = '/api/component/pyramid/route';\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n if (exist) {\n return exist;\n } else {\n if (this.options.route) {\n this.routeStr = this.options.route;\n }\n this.resources = new ResourcesControl(this);\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\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 NgwConnector.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 connect(): CancelablePromise<PyramidRoute> {\n const cache = new Cache();\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery(this.routeStr, {}, {})\n .then((route: PyramidRoute) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this.getUserInfo({ login, password })\n .then(() => {\n makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this.getUserInfo(credentials);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.emitter.emit('logout');\n this.resources.cache.clean();\n }\n\n getUserInfo(credentials?: Credentials): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n };\n\n // Do not use request('auth.current_user') to avoid circular-references\n return this.makeQuery('/api/component/auth/current_user', {}, options)\n .then((data: UserInfo) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\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 = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\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 ): CancelablePromise<P[K]> {\n const { method, headers, withCredentials, responseType } = requestOptions;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n const cache = new Cache<CancelablePromise<P[K]>>();\n return cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n auth: this.options.auth,\n }),\n });\n }\n return makeApiRequest();\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'>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 makeQuery(\n url: string,\n params?: Params,\n options: RequestOptions = {},\n ): CancelablePromise<any> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n // remove double slash\n url = fixUrlStr(url);\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@inheritDoc ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(resource: ResourceDefinition): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@inheritDoc ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n return new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n loadData(url, resolve, options, reject, onCancel);\n }).catch((httpError) => {\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n // @ts-ignore\n if (__DEV__) {\n console.warn(httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\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","/**\n * A lightweight HTTP client optimized for use with {@link http://docs.nextgis.ru/docs_ngweb_dev/doc/developer/toc.html | NextGIS Web} API\n *\n * @remarks\n * Make sure CORS is registered in the {@link https://docs.nextgis.com/docs_ngcom/source/CORS.html | NextGIS Web settings } to be able to send requests.\n *\n * @packageDocumentation\n * @module ngw-connector\n */\nimport { NgwConnector } from './NgwConnector';\n\nexport * from './interfaces';\nexport * from './types/ResourceItem';\nexport * from './types/FeatureLayer';\nexport * from './types/RequestItemsParamsMap';\nexport * from './types/ResourceStore';\n\n// export { NgwConnector };\nexport default NgwConnector;\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["ID","CancelablePromise","eventsModule","events","Cache","NgwConnector","EventEmitter"],"mappings":"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"}
@@ -1 +1,2 @@
1
- class e extends Error{constructor(){super(),this.name="CancelError",Object.setPrototypeOf(this,e.prototype)}}class t{constructor(e={}){this.options=e,this._promises=new Map}get isLoaded(){return this._promises.size>0}remove(e){this._promises.has(e)&&(this._promises.delete(e),this._onStop())}get(e){return this._promises.get(e)}add(e,t){const r=t||e,n=this._promises.get(r);return this.options.onStart&&!this.isLoaded&&this.options.onStart(),n||(this._promises.set(r,e),e.finally((()=>{this.remove(r)})),e)}abort(){this.isLoaded&&(this._promises.forEach((e=>{e.cancel&&e.cancel()})),this._promises.clear(),this._onStop())}waitFunc(e,t=""){const r=this.get(t=t||e.name);return r||this.add(e(),t)}WaitForMe(e=""){const t=this.get.bind(this),r=this.add.bind(this);return function(n,s,o){const i=o.value;return e=e||s,o.value=function(...n){const s=t(e);if(s)return s;return r(i.apply(this,n),e)},o}}GetOrCreateDecorator(e=""){return this.WaitForMe(e)}_onStop(){this.options.onStop&&!this.isLoaded&&this.options.onStop()}}class r extends Error{constructor(){super(),this.name="TimeoutError",Object.setPrototypeOf(this,r.prototype)}}const n=(e,t,r,n)=>{try{e(r(n))}catch(e){t(e)}};let s=0;class o{constructor(t,n){this.id=s++,this._isCanceled=!1,this._isPending=!0,this._cancelHandlers=[],this._children=[],this._cancelPromise=new Promise(((t,r)=>{this._setCanceledCallback=r=>t(r||new e)}));const i=[this._cancelPromise,new Promise(((e,r)=>t((t=>{t instanceof o?this.attach(t):this._isPending=!1,e(t)}),(e=>{this._isPending=!1,r(e)}),(e=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(e)}))))];n&&i.push(new Promise(((e,t)=>{setTimeout((()=>{if(this._isPending)try{this.cancel()}finally{t(new r)}}),n)}))),this._promise=Promise.race(i)}static createControl(e){return new t(e)}static resolve(e){return new o((t=>t(e)))}static reject(e){return new o(((t,r)=>r(e)))}static all(e){return new o(((t,r)=>{Promise.all(e).then(t).catch(r)})).catch((t=>{if(t instanceof this.CancelError)for(const t of e)"cancel"in t&&t.cancel();throw t}))}attach(e){this._isCanceled?e.cancel():this._children.push(e)}then(e,t){const r=new o(((r,s)=>{if(this._promise){const o=e=>{t?n(r,s,t,e):s(e)};this._promise.then((t=>{this._isCanceled?o(t):e?n(r,s,e,t):r(t)}),o)}}));return r._parentPromise=this,this._children.push(r),r}catch(t){return this._isCanceled&&t&&t(new e),this.then(void 0,t)}finally(t){return this._promise?this._promise.finally(t):Promise.reject(this._isCanceled?new e:t)}cancel(){if(this._isCanceled||!this._isPending)return this;this._isCanceled=!0;const e=this._getTopParent();if(e&&e.cancel(),this._children&&this._children.forEach((e=>e.cancel())),this._isPending){if(this._cancelHandlers.length)try{for(const e of this._cancelHandlers)e()}catch(e){}this._setCanceledCallback&&this._setCanceledCallback()}return this._destroy(),this}_getTopParent(){let e=this._parentPromise,t=!!e;for(;t;)e&&e._parentPromise?(e=e._parentPromise,t=!!e):t=!1;return e}_destroy(){this._setCanceledCallback=void 0,this._cancelPromise=void 0,this._promise=void 0}}function i(e){return null!=e}function c(e,t,r,n){if(e instanceof Array)return t instanceof Array&&t.sort().join("")===e.sort().join("");if(e instanceof Date)return t instanceof Date&&""+e==""+t;if(e instanceof Function){if(!(t instanceof Function))return!1}else if(e instanceof Object)return t instanceof Object&&(e===r?t===n:a(e,t));return e===t}function a(e,t){const r=Object.keys(e).sort(),n=Object.keys(t).sort();if(r.length!==n.length)return!1;if(r.join("")!==n.join(""))return!1;for(let s=0;s<r.length;s++){if(!c(e[r[s]],t[n[s]],e,t))return!1}return!0}function h(e){const t={};return Object.keys(e).forEach((r=>{e[r]instanceof Array||e[r]!==Object(e[r])?void 0!==e[r]&&(t[r]=e[r]):t[r]=h(e[r])})),t}function u(e){return e.replace(/([^:]\/)\/+/g,"$1")}o.CancelError=e,o.TimeoutError=r,o.PromiseControl=t,Object.setPrototypeOf(o.prototype,Promise.prototype);class l{constructor(e){e&&function(e,...t){for(const r of t)for(const t of Object.getOwnPropertyNames(r))e[t]=r[t]}(this,e)}}let f=0;class p extends l{constructor(e){super(e),this.providers=[],e&&e.providers&&(this.providers=e.providers)}abort(){this.providers.forEach((e=>{e.abort&&e.abort()}))}async*search(e){for(const t of this.providers)try{const r=t.search(e);for await(const e of r)yield{...e,provider:t,_id:f++}}catch(e){}}result(e){return e.provider?e.provider.result(e):o.resolve(void 0)}}class d extends l{}var m,y="object"==typeof Reflect?Reflect:null,g=y&&"function"==typeof y.apply?y.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};m=y&&"function"==typeof y.ownKeys?y.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var v=Number.isNaN||function(e){return e!=e};function _(){_.init.call(this)}var w=_,b=function(e,t){return new Promise((function(r,n){function s(r){e.removeListener(t,o),n(r)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",s),r([].slice.call(arguments))}I(e,t,o,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&I(e,"error",t,r)}(e,s,{once:!0})}))};_.EventEmitter=_,_.prototype._events=void 0,_.prototype._eventsCount=0,_.prototype._maxListeners=void 0;var O=10;function E(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function x(e){return void 0===e._maxListeners?_.defaultMaxListeners:e._maxListeners}function L(e,t,r,n){var s,o,i,c;if(E(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),i=o[t]),void 0===i)i=o[t]=r,++e._eventsCount;else if("function"==typeof i?i=o[t]=n?[r,i]:[i,r]:n?i.unshift(r):i.push(r),(s=x(e))>0&&i.length>s&&!i.warned){i.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=i.length,c=a,console&&console.warn&&console.warn(c)}return e}function P(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function C(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},s=P.bind(n);return s.listener=r,n.wrapFn=s,s}function R(e,t,r){var n=e._events;if(void 0===n)return[];var s=n[t];return void 0===s?[]:"function"==typeof s?r?[s.listener||s]:[s]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(s):T(s,s.length)}function j(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function T(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}function I(e,t,r,n){if("function"==typeof e.on)n.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function s(o){n.once&&e.removeEventListener(t,s),r(o)}))}}Object.defineProperty(_,"defaultMaxListeners",{enumerable:!0,get:function(){return O},set:function(e){if("number"!=typeof e||e<0||v(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");O=e}}),_.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},_.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||v(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},_.prototype.getMaxListeners=function(){return x(this)},_.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n="error"===e,s=this._events;if(void 0!==s)n=n&&void 0===s.error;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var i=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw i.context=o,i}var c=s[e];if(void 0===c)return!1;if("function"==typeof c)g(c,this,t);else{var a=c.length,h=T(c,a);for(r=0;r<a;++r)g(h[r],this,t)}return!0},_.prototype.on=_.prototype.addListener=function(e,t){return L(this,e,t,!1)},_.prototype.prependListener=function(e,t){return L(this,e,t,!0)},_.prototype.once=function(e,t){return E(t),this.on(e,C(this,e,t)),this},_.prototype.prependOnceListener=function(e,t){return E(t),this.prependListener(e,C(this,e,t)),this},_.prototype.off=_.prototype.removeListener=function(e,t){var r,n,s,o,i;if(E(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(s=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){i=r[o].listener,s=o;break}if(s<0)return this;0===s?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,s),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",e,i||t)}return this},_.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var s,o=Object.keys(r);for(n=0;n<o.length;++n)"removeListener"!==(s=o[n])&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},_.prototype.listeners=function(e){return R(this,e,!0)},_.prototype.rawListeners=function(e){return R(this,e,!1)},_.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):j.call(e,t)},_.prototype.listenerCount=j,_.prototype.eventNames=function(){return this._eventsCount>0?m(this._events):[]},w.once=b;class k{constructor(){return this.cache=[],k.instance?k.instance:(k.instance=this,this)}clean(){this.cache.length=0}all(){return this.cache}add(e,t,r){const n=this._find(e,r);if(n)return n.value;{let n;n=t instanceof Function?t():t;const s=r&&JSON.parse(JSON.stringify(h(r)));return this.cache.push({key:e,value:n,options:s}),n instanceof Promise?(n.catch((t=>{throw this.delete(e,r),t})),n):n}}match(e,t){const r=this._find(e,t);if(r)return r.value}matchAll(e,t){return e?this.cache.filter((r=>this._filter(r,e,t))).map((e=>e.value)):this.cache.map((e=>e.value))}delete(e,t){const r=this.cache.filter((r=>this._filter(r,e,t)));for(const e of r){const t=this.cache.indexOf(e);this.cache.splice(t,1)}}_find(e,t){return this.cache.find((r=>this._filter(r,e,t)))}_filter(e,t,r){return e.key===t&&(!r||a(e.options||{},h(r)))}}class q extends Error{constructor(e){super(),this.name="NgwError",Object.assign(this,e),Object.setPrototypeOf(this,q.prototype)}}class F extends Error{constructor(e){super(),this.name="NetworkError",Object.setPrototypeOf(this,F.prototype),this.message=`Unable to request ${e}.\n Possibly invalid NGW URL entered or CORS not configured to get request from ${location.origin}`}}let N;N=(e,t,r={},n,s)=>{r.method=r.method||"GET";const o=new XMLHttpRequest;o.open(r.method||"GET",e,!0),"blob"===r.responseType&&(o.responseType=r.responseType);const i=()=>{try{return JSON.parse(o.responseText)}catch(e){return o.responseText}};o.onload=()=>{-1!==[401,403,404,500].indexOf(o.status)&&n(new q(i())),((e=!1)=>{const s=e?n:t;"blob"===r.responseType?s(o.response):o.responseText?s(i()):n({message:""})})()},o.onerror=t=>{n(0===o.status?new F(e):t)},o.upload.onprogress=function(e){if(e.lengthComputable){const t=e.loaded/e.total*100;r.onProgress&&r.onProgress(t,e)}};const c=r.headers;if(c)for(const e in c){const t=c[e];"string"==typeof t&&o.setRequestHeader(e,t)}let a;if(void 0!==r.withCredentials&&(o.withCredentials=r.withCredentials),r.file){if(a=new FormData,a.append("file",r.file),r.data)for(const e in a)a.append(e,a[e])}else a=r.data?"string"==typeof r.data?r.data:JSON.stringify(r.data):null;s&&s((()=>{o.abort()})),o.send(a)};const U=/\{ *([\w_-]+) *\}/g;function S(e,t){return e.replace(U,((e,r)=>{let n=t[r];if(void 0===n)throw new Error("No value provided for letiable "+e);return"function"==typeof n&&(n=n(t)),n}))}class A extends q{constructor(e){super(e),this.name="ResourceNotFoundError",this.exception="nextgisweb.resource.exception.ResourceNotFound",Object.setPrototypeOf(this,A.prototype)}}class M extends q{constructor(e){super(e),this.name="InsufficientPermissionsError",this.exception="nextgisweb.core.exception.InsufficientPermissions",Object.setPrototypeOf(this,M.prototype)}}const H=[];function $(e){H.push(e)}function B(e){return"[object Object]"===Object.prototype.toString.call(e)}function G(e,t=""){t=t?t+"__":"";const r={};return Object.entries(e).forEach((([e,n])=>{if(B(n)){const t=G(n,e);Object.assign(r,t)}else i(n)&&(r[t+e]=n)})),r}class D{constructor(e){this.connector=e,this.cache=new k}getOne(e,t){return(new k).add("resource",(()=>"string"==typeof e?this._fetchResourceBy({keyname:e},t):"number"==typeof e?this._fetchResourceById(e,t):B(e)?this._fetchResourceBy(e,t):o.resolve(void 0)),{resource:e})}getOneOrFail(e){return this.getOne(e).then((e=>{if(e)return e;throw new A}))}getId(e){return"number"==typeof e?o.resolve(e):"string"==typeof e||B(e)?this.getOne(e).then((e=>{if(e)return e.resource.id})):o.resolve(void 0)}getIdOrFail(e){return this.getId(e).then((e=>{if(void 0===e)throw new Error;return e}))}getMany(e,t){return this._resourceCacheFilter(e).then((r=>{if(!r.length){const r={};return e.keyname?r.keyname=e.keyname:Object.assign(r,G(e)),this.connector.get("resource.search",t,{serialization:"full",...r}).then((e=>(e&&e.forEach((e=>{this.cache.add("resource.item",o.resolve(e),{id:e.resource.id})})),e)))}return r}))}getParent(e){return this.connector.getResource(e).then((e=>e?this.connector.getResource(e.resource.parent.id):o.resolve(void 0)))}getChildrenOf(e){return this.getId(e).then((e=>this.connector.get("resource.collection",{cache:!0},{parent:e}).then((e=>{for(const t of e)this.cache.add("resource.item",o.resolve(t),{id:t.resource.id});return e}))))}update(e,t){return this.getId(e).then((e=>{if(void 0!==e)return this.connector.put("resource.item",{data:t},{id:e})}))}delete(e){return this.getId(e).then((e=>{if(void 0!==e)return this.connector.delete("resource.item",null,{id:e}).then((()=>{this.cache.delete("resource.item",{id:e})}))}))}_fetchResourceById(e,t){return this.cache.add("resource.item",(()=>this.connector.get("resource.item",t,{id:e})),{id:e}).catch((e=>{if(!(e instanceof A))throw e}))}_fetchResourceBy(e,t){return this.getMany(e,t).then((e=>e[0]))}_resourceCacheFilter(e){return o.all(this.cache.matchAll("resource.item")).then((t=>(t.filter((t=>{if(t)return e.keyname&&t.resource.keyname?e.keyname===t.resource.keyname:i(e.id)&&i(t.resource.id)?e.id===t.resource.id:a(e,t.resource)})),[])))}}let z=0;class J{constructor(e){this.options=e,this.id=z++,this.emitter=new w.EventEmitter,this.routeStr="/api/component/pyramid/route";const t=function(e){return H.find((t=>{if(t.options.baseUrl===e.baseUrl){if(!e.auth)return!0;if(t.options.auth)return a(t.options.auth,e.auth)}}))}(e);if(t)return t;this.options.route&&(this.routeStr=this.options.route),this.resources=new D(this),$(this)}static create(e){return new this(e)}setNgw(e){this.logout(),this.options.baseUrl=e,$(this)}connect(){const e=new k,t=this.options.auth;return e.add("route",(()=>new o(((e,r)=>{const n=()=>this.makeQuery(this.routeStr,{},{}).then((t=>{e(t)})).catch((e=>{r(e)}));if(t){const{login:e,password:s}=t;if(e&&s)return this.getUserInfo({login:e,password:s}).then((()=>{n()})).catch((e=>r(e)))}return n()}))),{id:this.id,auth:t,baseUrl:this.options.baseUrl})}login(e){return this.logout(),$(this),this.getUserInfo(e)}logout(){!function(e){const t=H.indexOf(e);-1!==t&&H.splice(t,1)}(this),this.options.auth=void 0,this.user=void 0,this.emitter.emit("logout"),this.resources.cache.clean()}getUserInfo(e){if(this.user&&this.user.id)return o.resolve(this.user);e&&(this.options.auth=e);const t={headers:this.getAuthorizationHeaders(e)};return this.makeQuery("/api/component/auth/current_user",{},t).then((e=>(this.user=e,this.emitter.emit("login",e),e))).catch((e=>{throw this.emitter.emit("login:error",e),e}))}getAuthorizationHeaders(e){const t=this.makeClientId(e);if(t)return{Authorization:"Basic "+t}}makeClientId(e){if(e=e||this.options.auth){const{login:t,password:r}=e,n=unescape(encodeURIComponent(`${t}:${r}`));return window.btoa(n)}}apiRequest(e,t={},r={}){const{method:n,headers:s,withCredentials:i,responseType:c}=r,a=h(t),u=()=>function(e){const t=e.params;return new o(((r,n)=>{e.connector.connect().then((s=>{let o=s&&s[e.name];if(o){o=[...o];let s=o.shift();if(o.length){const e={};for(let r=0;r<o.length;r++){const n=o[r];if(e[r]="{"+n+"}",void 0===t[n])throw new Error("`"+n+"` url api argument is not specified")}s&&(s=S(s,e))}if(t){const e=[],r=t.paramList;Array.isArray(r)&&(delete t.paramList,r.forEach((t=>{e.push(`${t[0]}=${t[1]}`)})));for(const r in t)-1===o.indexOf(r)&&e.push(`${r}=${t[r]}`);e.length&&(s=s+"?"+e.join("&"))}s?r(e.connector.makeQuery(s,t,e.requestOptions)):n(new Error("request url is not set"))}else r(void 0)})).catch((e=>{n(e)}))}))}({name:e,params:a,requestOptions:r,connector:this});if(r.cache&&"GET"===n){return(new k).add(e,u,{params:a,...h({headers:s,withCredentials:i,responseType:c,baseUrl:this.options.baseUrl,auth:this.options.auth})})}return u()}post(e,t,r){return(t=t||{}).method="POST",this.apiRequest(e,r,t)}get(e,t,r){return(t=t||{}).method="GET",this.apiRequest(e,r,t)}patch(e,t,r){return(t=t||{}).method="PATCH",this.apiRequest(e,r,t)}put(e,t,r){return(t=t||{}).method="PUT",this.apiRequest(e,r,t)}delete(e,t,r){return(t=t||{}).method="DELETE",this.apiRequest(e,r,t)}makeQuery(e,t,r={}){if(e=(this.options.baseUrl?this.options.baseUrl:"")+e)return t&&(e=S(e,t)),e=u(e),this._loadData(e,r);throw new Error("Empty `url` not allowed")}getResource(e){return this.resources.getOne(e)}getResourceOrFail(e){return this.resources.getOneOrFail(e)}getResourceBy(e){return this.resources.getOne(e)}getResourceByKeyname(e){return this.resources.getOne(e)}getResourceById(e){return this.resources.getOne(e)}getResourceId(e){return this.resources.getId(e)}getResourceIdOrFail(e){return this.resources.getIdOrFail(e)}getResourcesBy(e){return this.resources.getMany(e)}getResourceParent(e){return this.resources.getParent(e)}getResourceChildren(e){return this.resources.getChildrenOf(e)}updateResource(e,t){return this.resources.update(e,t)}deleteResource(e){return this.resources.delete(e)}_loadData(e,t){return t.responseType=t.responseType||"json",new o(((r,n,s)=>{this.user&&((t=t||{}).headers={...this.getAuthorizationHeaders(),...t.headers}),N(e,r,t,n,s)})).catch((e=>{if(e instanceof o.CancelError);else{const t=this._handleHttpError(e);if(t)throw t}}))}_handleHttpError(e){if(e&&e instanceof q){if("nextgisweb.resource.exception.ResourceNotFound"===e.exception)throw new A(e);if("nextgisweb.core.exception.InsufficientPermissions"===e.exception)throw new M(e)}return e}}J.errors={NgwError:q,ResourceNotFoundError:A};class Q extends d{constructor(e){super(e),this.caseInsensitive=!0,this.searchUrl="https://maxim.nextgis.com",this.searchResources=[],this.requests=[],this.connector=e.connector||new J({baseUrl:this.searchUrl}),this.searchResources=e.searchResources}abort(){this.requests.forEach((e=>{e.cancel()})),this.requests=[]}async*search(e){for(const t of this.searchResources){const r=this.connector.get("feature_layer.store",{headers:{RANGE:`items=0-${t.limit||300}`}},{id:t.id,like:e});this.requests.push(r),r.catch((e=>{console.log(e)}));const n=await r,s=[];n&&n.forEach((r=>{s.push({query:e,resourceId:t.id,...r})}));for(const e of this._items(s))e.result=()=>this.result(e),yield e}}result(e){const t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((t=>{const r=t.extent;return{text:e.text,extent:[r.minLon,r.minLat,r.maxLon,r.maxLat]}}));return this.requests.push(t),t}_items(e){const t=[];return e.forEach((e=>{this.searchResources.find((t=>t.id===e.resourceId))&&t.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),t}}class W extends d{constructor(e){super(e),this.searchUrl="https://nominatim.openstreetmap.org",this._requests=[]}abort(){this._requests.forEach((e=>e.cancel())),this._requests=[]}async*search(e){const t=u(`${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${e}`),r=new o(((r,n,s)=>{const o=new XMLHttpRequest;o.open("GET",t,!0),o.onload=()=>{try{const t=JSON.parse(o.responseText).features.map((t=>({geom:t,extent:t.bbox,text:t.properties&&t.properties.display_name,query:e})));r(t)}catch(e){n(e)}},o.onerror=e=>{n(e)},s((()=>{o.abort()})),o.send()})).catch((e=>{throw e}));this._requests.push(r);const n=await r;if(n)for(const e of n)e.result=()=>this.result(e),yield e}result(e){return o.resolve({text:e.text,extent:e.extent||[],geom:e.geom})}}function K(e){return new p(e)}export{d as BaseProvider,p as Geocoder,Q as NgwProvider,W as NominatimProvider,K as create};
1
+ class e extends Error{constructor(){super(),this.name="CancelError",Object.setPrototypeOf(this,e.prototype)}}class t{constructor(e={}){this.options=e,this._promises=new Map}get isLoaded(){return this._promises.size>0}remove(e){this._promises.has(e)&&(this._promises.delete(e),this._onStop())}get(e){return this._promises.get(e)}add(e,t){const r=t||e,s=this._promises.get(r);return this.options.onStart&&!this.isLoaded&&this.options.onStart(),s||(this._promises.set(r,e),e.finally((()=>{this.remove(r)})),e)}abort(){this.isLoaded&&(this._promises.forEach((e=>{e.cancel&&e.cancel()})),this._promises.clear(),this._onStop())}waitFunc(e,t=""){const r=this.get(t=t||e.name);return r||this.add(e(),t)}WaitForMe(e=""){const t=this.get.bind(this),r=this.add.bind(this);return function(s,n,o){const i=o.value;return e=e||n,o.value=function(...s){const n=t(e);if(n)return n;return r(i.apply(this,s),e)},o}}GetOrCreateDecorator(e=""){return this.WaitForMe(e)}_onStop(){this.options.onStop&&!this.isLoaded&&this.options.onStop()}}class r extends Error{constructor(){super(),this.name="TimeoutError",Object.setPrototypeOf(this,r.prototype)}}const s=(e,t,r,s)=>{try{e(r(s))}catch(e){t(e)}};let n=0;class o{constructor(t,s){this.id=n++,this._isCanceled=!1,this._isPending=!0,this._cancelHandlers=[],this._children=[],this._cancelPromise=new Promise(((t,r)=>{this._setCanceledCallback=r=>t(r||new e)}));const i=[this._cancelPromise,new Promise(((e,r)=>t((t=>{t instanceof o?this.attach(t):this._isPending=!1,e(t)}),(e=>{this._isPending=!1,r(e)}),(e=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(e)}))))];s&&i.push(new Promise(((e,t)=>{setTimeout((()=>{if(this._isPending)try{this.cancel()}finally{t(new r)}}),s)}))),this._promise=Promise.race(i)}static createControl(e){return new t(e)}static resolve(e){return new o((t=>t(e)))}static reject(e){return new o(((t,r)=>r(e)))}static all(e){return new o(((t,r)=>{Promise.all(e).then(t).catch(r)})).catch((t=>{if(t instanceof this.CancelError)for(const t of e)"cancel"in t&&t.cancel();throw t}))}attach(e){this._isCanceled?e.cancel():this._children.push(e)}then(e,t){const r=new o(((r,n)=>{if(this._promise){const o=e=>{t?s(r,n,t,e):n(e)};this._promise.then((t=>{this._isCanceled?o(t):e?s(r,n,e,t):r(t)}),o)}}));return r._parentPromise=this,this._children.push(r),r}catch(t){return this._isCanceled&&t&&t(new e),this.then(void 0,t)}finally(t){return this._promise?this._promise.finally(t):Promise.reject(this._isCanceled?new e:t)}cancel(){if(this._isCanceled||!this._isPending)return this;this._isCanceled=!0;const e=this._getTopParent();if(e&&e.cancel(),this._children&&this._children.forEach((e=>e.cancel())),this._isPending){if(this._cancelHandlers.length)try{for(const e of this._cancelHandlers)e()}catch(e){}this._setCanceledCallback&&this._setCanceledCallback()}return this._destroy(),this}_getTopParent(){let e=this._parentPromise,t=!!e;for(;t;)e&&e._parentPromise?(e=e._parentPromise,t=!!e):t=!1;return e}_destroy(){this._setCanceledCallback=void 0,this._cancelPromise=void 0,this._promise=void 0}}o.CancelError=e,o.TimeoutError=r,o.PromiseControl=t,Object.setPrototypeOf(o.prototype,Promise.prototype);var i=o;function c(e){return null!=e}function a(e,t,r,s){if(e instanceof Array)return t instanceof Array&&t.sort().join("")===e.sort().join("");if(e instanceof Date)return t instanceof Date&&""+e==""+t;if(e instanceof Function){if(!(t instanceof Function))return!1}else if(e instanceof Object)return t instanceof Object&&(e===r?t===s:h(e,t));return e===t}function h(e,t){const r=Object.keys(e).sort(),s=Object.keys(t).sort();if(r.length!==s.length)return!1;if(r.join("")!==s.join(""))return!1;for(let n=0;n<r.length;n++){if(!a(e[r[n]],t[s[n]],e,t))return!1}return!0}function u(e){const t={};return Object.keys(e).forEach((r=>{e[r]instanceof Array||e[r]!==Object(e[r])?void 0!==e[r]&&(t[r]=e[r]):t[r]=u(e[r])})),t}function l(e){return e.replace(/([^:]\/)\/+/g,"$1")}class f{constructor(e){e&&function(e,...t){for(const r of t)for(const t of Object.getOwnPropertyNames(r))e[t]=r[t]}(this,e)}}let p=0;class d extends f{constructor(e){super(e),this.providers=[],e&&e.providers&&(this.providers=e.providers)}abort(){this.providers.forEach((e=>{e.abort&&e.abort()}))}async*search(e){for(const t of this.providers)try{const r=t.search(e);for await(const e of r)yield{...e,provider:t,_id:p++}}catch(e){}}result(e){return e.provider?e.provider.result(e):i.resolve(void 0)}}class m extends f{}var y,g={exports:{}},v="object"==typeof Reflect?Reflect:null,_=v&&"function"==typeof v.apply?v.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};y=v&&"function"==typeof v.ownKeys?v.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var w=Number.isNaN||function(e){return e!=e};function b(){b.init.call(this)}g.exports=b,g.exports.once=function(e,t){return new Promise((function(r,s){function n(r){e.removeListener(t,o),s(r)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",n),r([].slice.call(arguments))}I(e,t,o,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&I(e,"error",t,r)}(e,n,{once:!0})}))},b.EventEmitter=b,b.prototype._events=void 0,b.prototype._eventsCount=0,b.prototype._maxListeners=void 0;var O=10;function x(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function E(e){return void 0===e._maxListeners?b.defaultMaxListeners:e._maxListeners}function L(e,t,r,s){var n,o,i,c;if(x(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),i=o[t]),void 0===i)i=o[t]=r,++e._eventsCount;else if("function"==typeof i?i=o[t]=s?[r,i]:[i,r]:s?i.unshift(r):i.push(r),(n=E(e))>0&&i.length>n&&!i.warned){i.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=i.length,c=a,console&&console.warn&&console.warn(c)}return e}function P(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function C(e,t,r){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},n=P.bind(s);return n.listener=r,s.wrapFn=n,n}function R(e,t,r){var s=e._events;if(void 0===s)return[];var n=s[t];return void 0===n?[]:"function"==typeof n?r?[n.listener||n]:[n]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(n):T(n,n.length)}function j(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function T(e,t){for(var r=new Array(t),s=0;s<t;++s)r[s]=e[s];return r}function I(e,t,r,s){if("function"==typeof e.on)s.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function n(o){s.once&&e.removeEventListener(t,n),r(o)}))}}Object.defineProperty(b,"defaultMaxListeners",{enumerable:!0,get:function(){return O},set:function(e){if("number"!=typeof e||e<0||w(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");O=e}}),b.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},b.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||w(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},b.prototype.getMaxListeners=function(){return E(this)},b.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var s="error"===e,n=this._events;if(void 0!==n)s=s&&void 0===n.error;else if(!s)return!1;if(s){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var i=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw i.context=o,i}var c=n[e];if(void 0===c)return!1;if("function"==typeof c)_(c,this,t);else{var a=c.length,h=T(c,a);for(r=0;r<a;++r)_(h[r],this,t)}return!0},b.prototype.on=b.prototype.addListener=function(e,t){return L(this,e,t,!1)},b.prototype.prependListener=function(e,t){return L(this,e,t,!0)},b.prototype.once=function(e,t){return x(t),this.on(e,C(this,e,t)),this},b.prototype.prependOnceListener=function(e,t){return x(t),this.prependListener(e,C(this,e,t)),this},b.prototype.off=b.prototype.removeListener=function(e,t){var r,s,n,o,i;if(x(t),void 0===(s=this._events))return this;if(void 0===(r=s[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(n=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){i=r[o].listener,n=o;break}if(n<0)return this;0===n?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,n),1===r.length&&(s[e]=r[0]),void 0!==s.removeListener&&this.emit("removeListener",e,i||t)}return this},b.prototype.removeAllListeners=function(e){var t,r,s;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var n,o=Object.keys(r);for(s=0;s<o.length;++s)"removeListener"!==(n=o[s])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},b.prototype.listeners=function(e){return R(this,e,!0)},b.prototype.rawListeners=function(e){return R(this,e,!1)},b.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):j.call(e,t)},b.prototype.listenerCount=j,b.prototype.eventNames=function(){return this._eventsCount>0?y(this._events):[]};class k{constructor(){return this.cache=[],k.instance?k.instance:(k.instance=this,this)}clean(){this.cache.length=0}all(){return this.cache}add(e,t,r){const s=this._find(e,r);if(s)return s.value;{let s;s=t instanceof Function?t():t;const n=r&&JSON.parse(JSON.stringify(u(r)));return this.cache.push({key:e,value:s,options:n}),s instanceof Promise?(s.catch((t=>{throw this.delete(e,r),t})),s):s}}match(e,t){const r=this._find(e,t);if(r)return r.value}matchAll(e,t){return e?this.cache.filter((r=>this._filter(r,e,t))).map((e=>e.value)):this.cache.map((e=>e.value))}delete(e,t){const r=this.cache.filter((r=>this._filter(r,e,t)));for(const e of r){const t=this.cache.indexOf(e);this.cache.splice(t,1)}}_find(e,t){return this.cache.find((r=>this._filter(r,e,t)))}_filter(e,t,r){return e.key===t&&(!r||h(e.options||{},u(r)))}}var q=k;class F extends Error{constructor(e){super(),this.name="NgwError",Object.assign(this,e),Object.setPrototypeOf(this,F.prototype)}}class N extends Error{constructor(e){super(),this.name="NetworkError",Object.setPrototypeOf(this,N.prototype),this.message=`Unable to request ${e}.\n Possibly invalid NGW URL entered or CORS not configured to get request from ${location.origin}`}}let U;U=(e,t,r={},s,n)=>{r.method=r.method||"GET";const o=new XMLHttpRequest;o.open(r.method||"GET",e,!0),"blob"===r.responseType&&(o.responseType=r.responseType);const i=()=>{try{return JSON.parse(o.responseText)}catch(e){return o.responseText}};o.onload=()=>{-1!==[401,403,404,500].indexOf(o.status)&&s(new F(i())),((e=!1)=>{const n=e?s:t;"blob"===r.responseType?n(o.response):o.responseText?n(i()):s({message:""})})()},o.onerror=t=>{s(0===o.status?new N(e):t)},o.upload.onprogress=function(e){if(e.lengthComputable){const t=e.loaded/e.total*100;r.onProgress&&r.onProgress(t,e)}};const c=r.headers;if(c)for(const e in c){const t=c[e];"string"==typeof t&&o.setRequestHeader(e,t)}let a;if(void 0!==r.withCredentials&&(o.withCredentials=r.withCredentials),r.file){if(a=new FormData,a.append("file",r.file),r.data)for(const e in a)a.append(e,a[e])}else a=r.data?"string"==typeof r.data?r.data:JSON.stringify(r.data):null;n&&n((()=>{o.abort()})),o.send(a)};const S=/\{ *([\w_-]+) *\}/g;function A(e,t){return e.replace(S,((e,r)=>{let s=t[r];if(void 0===s)throw new Error("No value provided for letiable "+e);return"function"==typeof s&&(s=s(t)),s}))}class M extends F{constructor(e){super(e),this.name="ResourceNotFoundError",this.exception="nextgisweb.resource.exception.ResourceNotFound",Object.setPrototypeOf(this,M.prototype)}}class H extends F{constructor(e){super(e),this.name="InsufficientPermissionsError",this.exception="nextgisweb.core.exception.InsufficientPermissions",Object.setPrototypeOf(this,H.prototype)}}const $=[];function B(e){$.push(e)}function G(e){return"[object Object]"===Object.prototype.toString.call(e)}function D(e,t=""){t=t?t+"__":"";const r={};return Object.entries(e).forEach((([e,s])=>{if(G(s)){const t=D(s,e);Object.assign(r,t)}else c(s)&&(r[t+e]=s)})),r}class z{constructor(e){this.connector=e,this.cache=new q}getOne(e,t){return(new q).add("resource",(()=>"string"==typeof e?this._fetchResourceBy({keyname:e},t):"number"==typeof e?this._fetchResourceById(e,t):G(e)?this._fetchResourceBy(e,t):i.resolve(void 0)),{resource:e})}getOneOrFail(e){return this.getOne(e).then((e=>{if(e)return e;throw new M}))}getId(e){return"number"==typeof e?i.resolve(e):"string"==typeof e||G(e)?this.getOne(e).then((e=>{if(e)return e.resource.id})):i.resolve(void 0)}getIdOrFail(e){return this.getId(e).then((e=>{if(void 0===e)throw new Error;return e}))}getMany(e,t){return this._resourceCacheFilter(e).then((r=>{if(!r.length){const r={};return e.keyname?r.keyname=e.keyname:Object.assign(r,D(e)),this.connector.get("resource.search",t,{serialization:"full",...r}).then((e=>(e&&e.forEach((e=>{this.cache.add("resource.item",i.resolve(e),{id:e.resource.id})})),e)))}return r}))}getParent(e){return this.connector.getResource(e).then((e=>e?this.connector.getResource(e.resource.parent.id):i.resolve(void 0)))}getChildrenOf(e){return this.getId(e).then((e=>this.connector.get("resource.collection",{cache:!0},{parent:e}).then((e=>{for(const t of e)this.cache.add("resource.item",i.resolve(t),{id:t.resource.id});return e}))))}update(e,t){return this.getId(e).then((e=>{if(void 0!==e)return this.connector.put("resource.item",{data:t},{id:e})}))}delete(e){return this.getId(e).then((e=>{if(void 0!==e)return this.connector.delete("resource.item",null,{id:e}).then((()=>{this.cache.delete("resource.item",{id:e})}))}))}_fetchResourceById(e,t){return this.cache.add("resource.item",(()=>this.connector.get("resource.item",t,{id:e})),{id:e}).catch((e=>{if(!(e instanceof M))throw e}))}_fetchResourceBy(e,t){return this.getMany(e,t).then((e=>e[0]))}_resourceCacheFilter(e){return i.all(this.cache.matchAll("resource.item")).then((t=>(t.filter((t=>{if(t)return e.keyname&&t.resource.keyname?e.keyname===t.resource.keyname:c(e.id)&&c(t.resource.id)?e.id===t.resource.id:h(e,t.resource)})),[])))}}let J=0;class Q{constructor(e){this.options=e,this.id=J++,this.emitter=new g.exports.EventEmitter,this.routeStr="/api/component/pyramid/route";const t=function(e){return $.find((t=>{if(t.options.baseUrl===e.baseUrl){if(!e.auth)return!0;if(t.options.auth)return h(t.options.auth,e.auth)}}))}(e);if(t)return t;this.options.route&&(this.routeStr=this.options.route),this.resources=new z(this),B(this)}static create(e){return new this(e)}setNgw(e){this.logout(),this.options.baseUrl=e,B(this)}connect(){const e=new q,t=this.options.auth;return e.add("route",(()=>new i(((e,r)=>{const s=()=>this.makeQuery(this.routeStr,{},{}).then((t=>{e(t)})).catch((e=>{r(e)}));if(t){const{login:e,password:n}=t;if(e&&n)return this.getUserInfo({login:e,password:n}).then((()=>{s()})).catch((e=>r(e)))}return s()}))),{id:this.id,auth:t,baseUrl:this.options.baseUrl})}login(e){return this.logout(),B(this),this.getUserInfo(e)}logout(){!function(e){const t=$.indexOf(e);-1!==t&&$.splice(t,1)}(this),this.options.auth=void 0,this.user=void 0,this.emitter.emit("logout"),this.resources.cache.clean()}getUserInfo(e){if(this.user&&this.user.id)return i.resolve(this.user);e&&(this.options.auth=e);const t={headers:this.getAuthorizationHeaders(e)};return this.makeQuery("/api/component/auth/current_user",{},t).then((e=>(this.user=e,this.emitter.emit("login",e),e))).catch((e=>{throw this.emitter.emit("login:error",e),e}))}getAuthorizationHeaders(e){const t=this.makeClientId(e);if(t)return{Authorization:"Basic "+t}}makeClientId(e){if(e=e||this.options.auth){const{login:t,password:r}=e,s=unescape(encodeURIComponent(`${t}:${r}`));return window.btoa(s)}}apiRequest(e,t={},r={}){const{method:s,headers:n,withCredentials:o,responseType:c}=r,a=u(t),h=()=>function(e){const t=e.params;return new i(((r,s)=>{e.connector.connect().then((n=>{let o=n&&n[e.name];if(o){o=[...o];let n=o.shift();if(o.length){const e={};for(let r=0;r<o.length;r++){const s=o[r];if(e[r]="{"+s+"}",void 0===t[s])throw new Error("`"+s+"` url api argument is not specified")}n&&(n=A(n,e))}if(t){const e=[],r=t.paramList;Array.isArray(r)&&(delete t.paramList,r.forEach((t=>{e.push(`${t[0]}=${t[1]}`)})));for(const r in t)-1===o.indexOf(r)&&e.push(`${r}=${t[r]}`);e.length&&(n=n+"?"+e.join("&"))}n?r(e.connector.makeQuery(n,t,e.requestOptions)):s(new Error("request url is not set"))}else r(void 0)})).catch((e=>{s(e)}))}))}({name:e,params:a,requestOptions:r,connector:this});if(r.cache&&"GET"===s){return(new q).add(e,h,{params:a,...u({headers:n,withCredentials:o,responseType:c,baseUrl:this.options.baseUrl,auth:this.options.auth})})}return h()}post(e,t,r){return(t=t||{}).method="POST",this.apiRequest(e,r,t)}get(e,t,r){return(t=t||{}).method="GET",this.apiRequest(e,r,t)}patch(e,t,r){return(t=t||{}).method="PATCH",this.apiRequest(e,r,t)}put(e,t,r){return(t=t||{}).method="PUT",this.apiRequest(e,r,t)}delete(e,t,r){return(t=t||{}).method="DELETE",this.apiRequest(e,r,t)}makeQuery(e,t,r={}){if(e=(this.options.baseUrl?this.options.baseUrl:"")+e)return t&&(e=A(e,t)),e=l(e),this._loadData(e,r);throw new Error("Empty `url` not allowed")}getResource(e){return this.resources.getOne(e)}getResourceOrFail(e){return this.resources.getOneOrFail(e)}getResourceBy(e){return this.resources.getOne(e)}getResourceByKeyname(e){return this.resources.getOne(e)}getResourceById(e){return this.resources.getOne(e)}getResourceId(e){return this.resources.getId(e)}getResourceIdOrFail(e){return this.resources.getIdOrFail(e)}getResourcesBy(e){return this.resources.getMany(e)}getResourceParent(e){return this.resources.getParent(e)}getResourceChildren(e){return this.resources.getChildrenOf(e)}updateResource(e,t){return this.resources.update(e,t)}deleteResource(e){return this.resources.delete(e)}_loadData(e,t){return t.responseType=t.responseType||"json",new i(((r,s,n)=>{this.user&&((t=t||{}).headers={...this.getAuthorizationHeaders(),...t.headers}),U(e,r,t,s,n)})).catch((e=>{if(e instanceof i.CancelError);else{const t=this._handleHttpError(e);if(t)throw t}}))}_handleHttpError(e){if(e&&e instanceof F){if("nextgisweb.resource.exception.ResourceNotFound"===e.exception)throw new M(e);if("nextgisweb.core.exception.InsufficientPermissions"===e.exception)throw new H(e)}return e}}Q.errors={NgwError:F,ResourceNotFoundError:M};var W=Q;class K extends m{constructor(e){super(e),this.caseInsensitive=!0,this.searchUrl="https://maxim.nextgis.com",this.searchResources=[],this.requests=[],this.connector=e.connector||new W({baseUrl:this.searchUrl}),this.searchResources=e.searchResources}abort(){this.requests.forEach((e=>{e.cancel()})),this.requests=[]}async*search(e){for(const t of this.searchResources){const r=this.connector.get("feature_layer.store",{headers:{RANGE:`items=0-${t.limit||300}`}},{id:t.id,like:e});this.requests.push(r),r.catch((e=>{console.log(e)}));const s=await r,n=[];s&&s.forEach((r=>{n.push({query:e,resourceId:t.id,...r})}));for(const e of this._items(n))e.result=()=>this.result(e),yield e}}result(e){const t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((t=>{const r=t.extent;return{text:e.text,extent:[r.minLon,r.minLat,r.maxLon,r.maxLat]}}));return this.requests.push(t),t}_items(e){const t=[];return e.forEach((e=>{this.searchResources.find((t=>t.id===e.resourceId))&&t.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),t}}class X extends m{constructor(e){super(e),this.searchUrl="https://nominatim.openstreetmap.org",this._requests=[]}abort(){this._requests.forEach((e=>e.cancel())),this._requests=[]}async*search(e){const t=l(`${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${e}`),r=new i(((r,s,n)=>{const o=new XMLHttpRequest;o.open("GET",t,!0),o.onload=()=>{try{const t=JSON.parse(o.responseText).features.map((t=>({geom:t,extent:t.bbox,text:t.properties&&t.properties.display_name,query:e})));r(t)}catch(e){s(e)}},o.onerror=e=>{s(e)},n((()=>{o.abort()})),o.send()})).catch((e=>{throw e}));this._requests.push(r);const s=await r;if(s)for(const e of s)e.result=()=>this.result(e),yield e}result(e){return i.resolve({text:e.text,extent:e.extent||[],geom:e.geom})}}function V(e){return new d(e)}export{m as BaseProvider,d as Geocoder,K as NgwProvider,X as NominatimProvider,V as create};
2
+ //# sourceMappingURL=geocoder.esm-browser.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.esm-browser.prod.js","sources":["../../cancelable-promise/src/CancelError.ts","../../cancelable-promise/src/PromiseControl.ts","../../cancelable-promise/src/TimeoutError.ts","../../cancelable-promise/src/CancelablePromise.ts","../../cancelable-promise/src/index.ts","../../utils/src/defined.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/url.ts","../src/BaseGeocoder.ts","../../utils/src/object/objectAssign.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../../../node_modules/events/events.js","../../cache/src/Cache.ts","../../cache/src/index.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/NgwConnector.ts","../../ngw-connector/src/utils/apiRequest.ts","../../ngw-connector/src/index.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["export class CancelError extends Error {\n name = 'CancelError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, CancelError.prototype);\n }\n}\n","import CancelablePromise from '.';\n\nexport interface PromiseControlOptions {\n onStart?: () => void;\n onStop?: () => void;\n}\n\ntype Key = CancelablePromise | string | number | symbol;\n\nexport class PromiseControl {\n private _promises: Map<Key, CancelablePromise> = new Map();\n\n get isLoaded(): boolean {\n return this._promises.size > 0;\n }\n\n constructor(private options: PromiseControlOptions = {}) {}\n\n remove(promise: Key): void {\n if (this._promises.has(promise)) {\n this._promises.delete(promise);\n this._onStop();\n }\n }\n\n get(promise: Key): CancelablePromise | undefined {\n return this._promises.get(promise);\n }\n\n add<T extends CancelablePromise = CancelablePromise>(\n promise: T,\n name?: string | number | symbol,\n ): CancelablePromise<T> {\n const key = name ? name : promise;\n const exist = this._promises.get(key);\n if (this.options.onStart && !this.isLoaded) {\n this.options.onStart();\n }\n if (exist) {\n return exist;\n }\n this._promises.set(key, promise);\n promise.finally(() => {\n this.remove(key);\n });\n return promise;\n }\n\n abort(): void {\n if (this.isLoaded) {\n this._promises.forEach((x) => {\n if (x.cancel) {\n x.cancel();\n }\n });\n this._promises.clear();\n this._onStop();\n }\n }\n\n waitFunc<T>(func: () => any, name = ''): CancelablePromise<T> {\n name = name || func.name;\n const exist = this.get(name);\n if (exist) {\n return exist;\n }\n return this.add(func(), name);\n }\n\n WaitForMe(name: string | symbol = ''): MethodDecorator {\n const get = this.get.bind(this);\n const add = this.add.bind(this);\n return function (\n target: unknown,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n name = name || key;\n descriptor.value = function (...args: any[]) {\n const exist = get(name);\n if (exist) {\n return exist;\n }\n const result = add(originalMethod.apply(this, args), name);\n return result;\n };\n\n return descriptor;\n };\n }\n\n /** @deprecated use {@link PromiseControl.WaitForMe } instead */\n GetOrCreateDecorator(name: string | symbol = ''): MethodDecorator {\n return this.WaitForMe(name);\n }\n\n private _onStop(): void {\n if (this.options.onStop && !this.isLoaded) {\n this.options.onStop();\n }\n }\n}\n","export class TimeoutError extends Error {\n name = 'TimeoutError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n","import { CancelError } from './CancelError';\nimport { PromiseControl, PromiseControlOptions } from './PromiseControl';\nimport { TimeoutError } from './TimeoutError';\n\ntype Reject = (reason?: any) => void;\ntype Resolve = (value?: any) => void;\nexport type OnCancelFunction = (cancelHandler: () => void) => void;\n\nconst handleCallback = <T = never>(\n resolve: Resolve,\n reject: Reject,\n callback: Resolve,\n r: T,\n) => {\n try {\n resolve(callback(r));\n } catch (e) {\n reject(e);\n }\n};\n\nlet ID = 0;\n\n/**\n * Promise that can be canceled\n *\n * @example\n * Catch `CancelError`\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject) => {\n * setTimeout(() => resolve(), 100);\n * }).catch((er) => {\n * if (er.name === \"CancelError\") {\n * // handle cancel error\n * }\n * throw er;\n * });\n *\n * promise.cancel();\n * ```\n * @example\n * Handle `onCancel` callback\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject, onCancel) => {\n * const xhr = new XMLHttpRequest();\n * xhr.open(\"GET\", url, true);\n * xhr.onload = () => {\n * resolve(xhr.responseText);\n * };\n * xhr.onerror = (er) => {\n * reject(er);\n * };\n *\n * onCancel(() => {\n * xhr.abort();\n * });\n *\n * xhr.send();\n * });\n *\n * promise.cancel();\n * ```\n */\nexport class CancelablePromise<T = any> implements Promise<T> {\n static CancelError = CancelError;\n static TimeoutError = TimeoutError;\n static PromiseControl = PromiseControl;\n\n readonly [Symbol.toStringTag]: string;\n readonly id = ID++;\n private _isCanceled = false;\n private _isPending = true;\n private _promise?: Promise<T>;\n private _cancelPromise?: Promise<T>;\n private _cancelHandlers: (() => void)[] = [];\n private _setCanceledCallback?: (er?: any) => void;\n private _parentPromise?: CancelablePromise;\n private _children: CancelablePromise[] = [];\n\n constructor(\n executor: (\n resolve: (value?: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancelFunction,\n ) => void,\n timeout?: number,\n ) {\n this._cancelPromise = new Promise<any>((resolve_, reject_) => {\n this._setCanceledCallback = (er) => resolve_(er || new CancelError());\n });\n const promises = [\n this._cancelPromise,\n new Promise<T>((resolve, reject) => {\n const onResolve = (value?: T | PromiseLike<T>) => {\n if (value instanceof CancelablePromise) {\n this.attach(value);\n } else {\n this._isPending = false;\n }\n // TODO: fix types, `undefined` not allowed since 19.12.2020\n resolve(value as T | PromiseLike<T>);\n };\n\n const onReject = (error: any) => {\n this._isPending = false;\n reject(error);\n };\n\n const onCancel: OnCancelFunction = (handler) => {\n if (!this._isPending) {\n throw new Error(\n 'The `onCancel` handler was attached after the promise settled.',\n );\n }\n\n this._cancelHandlers.push(handler);\n };\n\n return executor(onResolve, onReject, onCancel);\n }),\n ];\n if (timeout) {\n promises.push(\n new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._isPending) {\n try {\n this.cancel();\n } finally {\n reject(new TimeoutError());\n }\n }\n }, timeout);\n }),\n );\n }\n this._promise = Promise.race(promises);\n }\n\n static createControl(opt?: PromiseControlOptions): PromiseControl {\n return new PromiseControl(opt);\n }\n\n static resolve<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve) => resolve(value));\n }\n\n static reject<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve, reject) => reject(value));\n }\n\n static all<T>(values: (T | PromiseLike<T>)[]): CancelablePromise<T[]> {\n return new CancelablePromise((resolve, reject) => {\n Promise.all(values).then(resolve).catch(reject);\n }).catch((er) => {\n if (er instanceof this.CancelError) {\n for (const v of values) {\n if ('cancel' in v) {\n (v as CancelablePromise).cancel();\n }\n }\n }\n throw er;\n });\n }\n\n attach(p: CancelablePromise): void {\n if (this._isCanceled) {\n p.cancel();\n } else {\n this._children.push(p);\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?:\n | ((value: T) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): CancelablePromise<TResult1 | TResult2> {\n const p = new CancelablePromise((resolve, reject) => {\n if (this._promise) {\n const reject_ = (r: any) => {\n if (onrejected) {\n handleCallback(resolve, reject, onrejected, r);\n } else {\n reject(r);\n }\n };\n this._promise.then((r) => {\n if (this._isCanceled) {\n reject_(r);\n } else {\n if (onfulfilled) {\n handleCallback(resolve, reject, onfulfilled, r);\n } else {\n resolve(r);\n }\n }\n }, reject_);\n }\n });\n p._parentPromise = this;\n this._children.push(p);\n return p as CancelablePromise<TResult1 | TResult2>;\n }\n\n catch<TResult = never>(\n onrejected?:\n | ((reason: Error) => TResult | PromiseLike<TResult>)\n | undefined\n | null,\n ): CancelablePromise<T | TResult> {\n if (this._isCanceled && onrejected) {\n onrejected(new CancelError());\n }\n return this.then(undefined, onrejected);\n }\n\n finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n if (this._promise) {\n return this._promise.finally(onfinally);\n }\n if (this._isCanceled) {\n return Promise.reject(new CancelError());\n }\n return Promise.reject<T>(onfinally);\n }\n\n cancel(): this {\n // No reason to run cancel action if promise is already complete\n if (this._isCanceled || !this._isPending) {\n return this;\n }\n this._isCanceled = true;\n const parent = this._getTopParent();\n if (parent) {\n parent.cancel();\n }\n\n if (this._children) {\n this._children.forEach((x) => x.cancel());\n }\n\n if (this._isPending) {\n if (this._cancelHandlers.length) {\n try {\n for (const handler of this._cancelHandlers) {\n handler();\n }\n } catch (error) {\n // this._setCanceledCallback(error);\n }\n }\n if (this._setCanceledCallback) {\n this._setCanceledCallback();\n }\n }\n this._destroy();\n\n return this;\n }\n\n private _getTopParent() {\n let parent = this._parentPromise;\n let hasParent = !!parent;\n while (hasParent) {\n if (parent && parent._parentPromise) {\n parent = parent._parentPromise;\n hasParent = !!parent;\n } else {\n hasParent = false;\n }\n }\n return parent;\n }\n\n private _destroy() {\n this._setCanceledCallback = undefined;\n this._cancelPromise = undefined;\n this._promise = undefined;\n }\n}\n\nObject.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);\n","/**\n * A promise you can stop\n *\n * @packageDocumentation\n * @module cancelable-promise\n */\nimport { CancelablePromise } from './CancelablePromise';\n\nexport default CancelablePromise;\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","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 fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n","import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","export function objectAssign<T, U>(target: T, source: U): T & U;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n */\nexport function objectAssign<T, U, V>(\n target: T,\n source1: U,\n source2: V,\n): T & U & V;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n * @param source3 - The third source object from which to copy properties.\n */\nexport function objectAssign<T, U, V, W>(\n target: T,\n source1: U,\n source2: V,\n source3: W,\n): T & U & V & W;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param sources - One or more source objects from which to copy properties\n */\nexport function objectAssign(\n target: Record<string, unknown>,\n ...sources: any[]\n): any {\n for (const source of sources) {\n for (const prop of Object.getOwnPropertyNames(source)) {\n (target as any)[prop] = source[prop];\n }\n }\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheOptions<T> = Record<keyof T, T[keyof T]>;\n\ninterface CacheItem<T extends any = any, O = any> {\n key: string;\n value: CacheValue<T>;\n options?: CacheOptions<O>;\n}\n\nexport class Cache<\n T extends any = any,\n O extends Record<string, any> = Record<string, any>,\n> {\n private static instance: Cache<any, any>;\n private readonly cache: CacheItem<T, O>[] = [];\n\n constructor() {\n if (Cache.instance) {\n return Cache.instance;\n }\n\n Cache.instance = this;\n\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<T, O>[] {\n return this.cache;\n }\n\n add(\n key: string,\n valueToSet: CacheValue<T> | (() => CacheValue<T>),\n options?: CacheOptions<O>,\n ): CacheValue<T> {\n const exist = this._find(key, options);\n if (!exist) {\n let value: CacheValue<T>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const options_ =\n options && JSON.parse(JSON.stringify(objectRemoveEmpty(options)));\n\n const cacheItem = {\n key,\n value,\n options: options_,\n } as CacheItem<T, O>;\n\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch((er) => {\n this.delete(key, options);\n throw er;\n });\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, options?: CacheOptions<O>): CacheValue<T> | undefined {\n const cacheRecord = this._find(key, options);\n\n if (cacheRecord) {\n return cacheRecord.value;\n }\n }\n\n matchAll(key?: string, options?: CacheOptions<O>): CacheValue<T>[] {\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, options))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(key: string, options?: CacheOptions<O>): void {\n const exist = this.cache.filter((x) => this._filter(x, key, options));\n for (const e of exist) {\n const index = this.cache.indexOf(e);\n this.cache.splice(index, 1);\n }\n }\n\n private _find(\n key: string,\n options?: CacheOptions<O>,\n ): CacheItem<T> | undefined {\n return this.cache.find((x) => this._filter(x, key, options));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n options?: CacheOptions<O>,\n ): boolean {\n if (item.key === key) {\n if (options) {\n return objectDeepEqual(item.options || {}, objectRemoveEmpty(options));\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Caching for asynchronous functions\n *\n * @packageDocumentation\n * @module cache\n */\nimport { Cache } from './Cache';\n\nexport default Cache;\n","import { 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?: NgwError) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\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 {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\nimport { NgwError } from '../errors/NgwError';\nimport { NetworkError } from '../errors/NetworkError';\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, 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 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\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 request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: options.headers || {},\n method: options.method,\n };\n const body =\n typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n if (body !== undefined && options.method !== 'POST') {\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 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 // throw new Error(er);\n }\n if (json !== undefined) {\n resolve(json);\n }\n }\n reject('no data');\n });\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","// 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 { NgwError } from './NgwError';\nimport { 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 { NgwError } from './NgwError';\nimport { 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 { NgwConnectorOptions } from './interfaces';\nimport { NgwConnector } from './NgwConnector';\nimport { objectDeepEqual } from '@nextgis/utils';\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 function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { DeepPartial, defined } from '@nextgis/utils';\nimport { Resource } from '../types/ResourceItem';\nimport { isObject } from './isObject';\n\n/**\n * ```\n * { keyname, parent: { id }} > { keyname, parent__id }\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 Object.entries(resource).forEach(([key, value]) => {\n if (isObject(value)) {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n });\n return query;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { resourceToQuery } from './utils/resourceToQuery';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\n\nimport { isObject } from './utils/isObject';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { NgwConnector } from './NgwConnector';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport type { RequestOptions, ResourceDefinition } from './interfaces';\n\nexport class ResourcesControl {\n cache = new Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number }\n >();\n\n constructor(private connector: NgwConnector) {}\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,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = new Cache();\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, requestOptions);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, requestOptions);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n };\n return cache.add('resource', makeRequest, { resource });\n }\n\n getOneOrFail(resource: ResourceDefinition): CancelablePromise<ResourceItem> {\n return this.getOne(resource).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(resource: ResourceDefinition): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.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(resource: ResourceDefinition): CancelablePromise<number> {\n return this.getId(resource).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,\n ): CancelablePromise<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 (resources) {\n resources.forEach((x) => {\n this.cache.add('resource.item', CancelablePromise.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 ): CancelablePromise<ResourceItem | undefined> {\n return this.connector.getResource(resource).then((child) => {\n if (child) {\n return this.connector.getResource(child.resource.parent.id);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.getId(resource).then((parent) => {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true },\n {\n parent,\n },\n )\n .then((items) => {\n for (const i of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(i), {\n id: i.resource.id,\n });\n }\n return items;\n });\n });\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<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): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this.cache.delete('resource.item', { id });\n return undefined;\n });\n }\n });\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions,\n ): CancelablePromise<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 ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.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';\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { Resource } from '../types/ResourceItem';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { ResourcesControl } from './ResourcesControl';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n DeleteRequestItemsResponseMap,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n GetRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n ResourceIdKeynameDef,\n NgwConnectorOptions,\n ResourceDefinition,\n RequestItemsParams,\n RequestItemKeys,\n RequestHeaders,\n RequestOptions,\n PyramidRoute,\n Credentials,\n UserInfo,\n Params,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport { apiRequest } from './utils/apiRequest';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n\n emitter = new EventEmitter();\n user?: UserInfo;\n\n resources!: ResourcesControl;\n\n private routeStr = '/api/component/pyramid/route';\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n if (exist) {\n return exist;\n } else {\n if (this.options.route) {\n this.routeStr = this.options.route;\n }\n this.resources = new ResourcesControl(this);\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\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 NgwConnector.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 connect(): CancelablePromise<PyramidRoute> {\n const cache = new Cache();\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery(this.routeStr, {}, {})\n .then((route: PyramidRoute) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this.getUserInfo({ login, password })\n .then(() => {\n makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this.getUserInfo(credentials);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.emitter.emit('logout');\n this.resources.cache.clean();\n }\n\n getUserInfo(credentials?: Credentials): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n };\n\n // Do not use request('auth.current_user') to avoid circular-references\n return this.makeQuery('/api/component/auth/current_user', {}, options)\n .then((data: UserInfo) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\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 = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\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 ): CancelablePromise<P[K]> {\n const { method, headers, withCredentials, responseType } = requestOptions;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n const cache = new Cache<CancelablePromise<P[K]>>();\n return cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n auth: this.options.auth,\n }),\n });\n }\n return makeApiRequest();\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'>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 makeQuery(\n url: string,\n params?: Params,\n options: RequestOptions = {},\n ): CancelablePromise<any> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n // remove double slash\n url = fixUrlStr(url);\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@inheritDoc ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(resource: ResourceDefinition): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@inheritDoc ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n return new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n loadData(url, resolve, options, reject, onCancel);\n }).catch((httpError) => {\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n // @ts-ignore\n if (__DEV__) {\n console.warn(httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\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 CancelablePromise from '@nextgis/cancelable-promise';\nimport { template } from './template';\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 function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","/**\n * A lightweight HTTP client optimized for use with {@link http://docs.nextgis.ru/docs_ngweb_dev/doc/developer/toc.html | NextGIS Web} API\n *\n * @remarks\n * Make sure CORS is registered in the {@link https://docs.nextgis.com/docs_ngcom/source/CORS.html | NextGIS Web settings } to be able to send requests.\n *\n * @packageDocumentation\n * @module ngw-connector\n */\nimport { NgwConnector } from './NgwConnector';\n\nexport * from './interfaces';\nexport * from './types/ResourceItem';\nexport * from './types/FeatureLayer';\nexport * from './types/RequestItemsParamsMap';\nexport * from './types/ResourceStore';\n\n// export { NgwConnector };\nexport default NgwConnector;\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["CancelError","Error","constructor","super","this","Object","setPrototypeOf","prototype","PromiseControl","options","Map","isLoaded","_promises","size","remove","promise","has","delete","_onStop","get","add","name","key","exist","onStart","set","finally","abort","forEach","x","cancel","clear","waitFunc","func","WaitForMe","bind","target","descriptor","originalMethod","value","args","apply","GetOrCreateDecorator","onStop","TimeoutError","handleCallback","resolve","reject","callback","r","e","ID","CancelablePromise","executor","timeout","_cancelPromise","Promise","resolve_","reject_","_setCanceledCallback","er","promises","attach","_isPending","error","handler","_cancelHandlers","push","setTimeout","_promise","race","createControl","opt","all","values","then","catch","v","p","_isCanceled","_children","onfulfilled","onrejected","_parentPromise","undefined","onfinally","parent","_getTopParent","length","_destroy","hasParent","defined","val","isEqual","a","b","o","Array","sort","join","Date","Function","objectDeepEqual","keysO","keys","keysP","i","objectRemoveEmpty","obj","newObj","fixUrlStr","url","replace","BaseGeocoder","sources","source","prop","getOwnPropertyNames","objectAssign","Geocoder","providers","search","query","provider","results","_id","result","item","BaseProvider","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","call","ownKeys","getOwnPropertySymbols","concat","NumberIsNaN","Number","isNaN","EventEmitter","init","eventsModule","exports","events","once","emitter","errorListener","err","removeListener","resolver","slice","arguments","eventTargetAgnosticAddListener","flags","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","type","prepend","m","existing","warning","create","newListener","emit","unshift","warned","w","String","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","message","context","len","listeners","addListener","prependListener","prependOnceListener","off","list","position","originalListener","shift","index","pop","spliceOne","removeAllListeners","rawListeners","eventNames","Cache","instance","clean","cache","valueToSet","_find","options_","JSON","parse","stringify","match","cacheRecord","matchAll","filter","_filter","map","indexOf","splice","find","NgwError","assign","NetworkError","location","origin","loadData","onCancel","method","xhr","XMLHttpRequest","open","responseType","getResponseText","responseText","onload","status","forError","cb","response","processingResponse","onerror","upload","onprogress","lengthComputable","percentComplete","loaded","total","onProgress","headers","h","header","setRequestHeader","data","withCredentials","file","FormData","append","d","send","templateRe","template","str","s","ResourceNotFoundError","InsufficientPermissionsError","CONNECTORS","addConnector","connector","isObject","toString","resourceToQuery","resource","prefix","entries","children","ResourcesControl","getOne","requestOptions","_fetchResourceBy","keyname","_fetchResourceById","getOneOrFail","res","getId","id","getIdOrFail","resp","getMany","_resourceCacheFilter","items","serialization","resources","getParent","getResource","child","getChildrenOf","update","put","NgwConnector","baseUrl","auth","findConnector","route","routeStr","setNgw","logout","connect","makeQuery","login","password","getUserInfo","credentials","removeConnector","user","getAuthorizationHeaders","client","makeClientId","Authorization","unescape","encodeURIComponent","window","btoa","apiRequest","params_","params","makeApiRequest","apiItems","apiItem","replaceParams","fry","paramArray","paramList","isArray","post","patch","_loadData","getResourceOrFail","getResourceBy","getResourceByKeyname","getResourceById","getResourceId","getResourceIdOrFail","getResourcesBy","getResourceParent","getResourceChildren","updateResource","deleteResource","httpError","_handleHttpError","exception","NgwProvider","searchUrl","searchResources","requests","like","request","RANGE","limit","log","resourceId","_items","req","fid","featureId","extent","text","minLon","minLat","maxLon","maxLat","entry","label","NominatimProvider","_requests","features","geom","bbox","properties","display_name","model"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/geocoder; version: 1.3.0; author: NextGIS */
1
+ /** Bundle of @nextgis/geocoder; version: 1.7.0; author: NextGIS */
2
2
  import CancelablePromise from '@nextgis/cancelable-promise';
3
3
  import { objectAssign, fixUrlStr } from '@nextgis/utils';
4
4
  import NgwConnector from '@nextgis/ngw-connector';
@@ -203,3 +203,4 @@ function create(options) {
203
203
  }
204
204
 
205
205
  export { BaseProvider, Geocoder, NgwProvider, NominatimProvider, create };
206
+ //# sourceMappingURL=geocoder.esm-bundler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.esm-bundler.js","sources":["../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  import e from"@nextgis/cancelable-promise";import{objectAssign as t,fixUrlStr as s}from"@nextgis/utils";import r from"@nextgis/ngw-connector";class o{constructor(e){e&&t(this,e)}}let c=0;class n extends o{constructor(e){super(e),this.providers=[],e&&e.providers&&(this.providers=e.providers)}abort(){this.providers.forEach((e=>{e.abort&&e.abort()}))}async*search(e){for(const t of this.providers)try{const s=t.search(e);for await(const e of s)yield{...e,provider:t,_id:c++}}catch(e){}}result(t){return t.provider?t.provider.result(t):e.resolve(void 0)}}class i extends o{}class a extends i{constructor(e){super(e),this.caseInsensitive=!0,this.searchUrl="https://maxim.nextgis.com",this.searchResources=[],this.requests=[],this.connector=e.connector||new r({baseUrl:this.searchUrl}),this.searchResources=e.searchResources}abort(){this.requests.forEach((e=>{e.cancel()})),this.requests=[]}async*search(e){for(const t of this.searchResources){const s=this.connector.get("feature_layer.store",{headers:{RANGE:`items=0-${t.limit||300}`}},{id:t.id,like:e});this.requests.push(s),s.catch((e=>{console.log(e)}));const r=await s,o=[];r&&r.forEach((s=>{o.push({query:e,resourceId:t.id,...s})}));for(const e of this._items(o))e.result=()=>this.result(e),yield e}}result(e){const t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((t=>{const s=t.extent;return{text:e.text,extent:[s.minLon,s.minLat,s.maxLon,s.maxLat]}}));return this.requests.push(t),t}_items(e){const t=[];return e.forEach((e=>{this.searchResources.find((t=>t.id===e.resourceId))&&t.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),t}}class h extends i{constructor(e){super(e),this.searchUrl="https://nominatim.openstreetmap.org",this._requests=[]}abort(){this._requests.forEach((e=>e.cancel())),this._requests=[]}async*search(t){const r=s(`${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${t}`),o=new e(((e,s,o)=>{const c=new XMLHttpRequest;c.open("GET",r,!0),c.onload=()=>{try{const s=JSON.parse(c.responseText).features.map((e=>({geom:e,extent:e.bbox,text:e.properties&&e.properties.display_name,query:t})));e(s)}catch(e){s(e)}},c.onerror=e=>{s(e)},o((()=>{c.abort()})),c.send()})).catch((e=>{throw e}));this._requests.push(o);const c=await o;if(c)for(const e of c)e.result=()=>this.result(e),yield e}result(t){return e.resolve({text:t.text,extent:t.extent||[],geom:t.geom})}}function u(e){return new n(e)}export{i as BaseProvider,n as Geocoder,a as NgwProvider,h as NominatimProvider,u as create};
2
+ //# sourceMappingURL=geocoder.esm-bundler.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.esm-bundler.prod.js","sources":["../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["BaseGeocoder","constructor","options","objectAssign","this","ID","Geocoder","super","providers","abort","forEach","x","search","query","provider","results","r","_id","er","result","item","CancelablePromise","resolve","undefined","BaseProvider","NgwProvider","connector","NgwConnector","baseUrl","searchUrl","searchResources","requests","cancel","like","resource","request","get","headers","RANGE","limit","id","push","catch","console","log","resp","entries","resourceId","_items","req","fid","featureId","then","e","extent","text","minLon","minLat","maxLon","maxLat","items","entry","find","label","NominatimProvider","_requests","val","url","fixUrlStr","reject","onCancel","xhr","XMLHttpRequest","open","onload","features","JSON","parse","responseText","map","geom","bbox","properties","display_name","onerror","send","i","model","create"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/geocoder; version: 1.3.0; author: NextGIS */
1
+ /** Bundle of @nextgis/geocoder; version: 1.7.0; author: NextGIS */
2
2
  var Geocoder = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -281,9 +281,8 @@ var Geocoder = (function (exports) {
281
281
  *
282
282
  * promise.cancel();
283
283
  * ```
284
- * @public
285
284
  */
286
- var CancelablePromise = /** @class */ (function () {
285
+ var CancelablePromise$1 = /** @class */ (function () {
287
286
  function CancelablePromise(executor, timeout) {
288
287
  var _this = this;
289
288
  this.id = ID$2++;
@@ -471,7 +470,15 @@ var Geocoder = (function (exports) {
471
470
  CancelablePromise.PromiseControl = PromiseControl;
472
471
  return CancelablePromise;
473
472
  }());
474
- Object.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);
473
+ Object.setPrototypeOf(CancelablePromise$1.prototype, Promise.prototype);
474
+
475
+ /**
476
+ * A promise you can stop
477
+ *
478
+ * @packageDocumentation
479
+ * @module cancelable-promise
480
+ */
481
+ var CancelablePromise = CancelablePromise$1;
475
482
 
476
483
  /**
477
484
  * from https://github.com/CesiumGS/cesium/blob/master/Source/Core/defined.js
@@ -682,7 +689,7 @@ var Geocoder = (function (exports) {
682
689
  return BaseProvider;
683
690
  }(BaseGeocoder));
684
691
 
685
- // Copyright Joyent, Inc. and other Node contributors.
692
+ var events = {exports: {}};
686
693
 
687
694
  var R = typeof Reflect === 'object' ? Reflect : null;
688
695
  var ReflectApply = R && typeof R.apply === 'function'
@@ -716,8 +723,8 @@ var Geocoder = (function (exports) {
716
723
  function EventEmitter() {
717
724
  EventEmitter.init.call(this);
718
725
  }
719
- var events = EventEmitter;
720
- var once_1 = once;
726
+ events.exports = EventEmitter;
727
+ events.exports.once = once;
721
728
 
722
729
  // Backwards-compat with node 0.10.x
723
730
  EventEmitter.EventEmitter = EventEmitter;
@@ -1157,9 +1164,8 @@ var Geocoder = (function (exports) {
1157
1164
  throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
1158
1165
  }
1159
1166
  }
1160
- events.once = once_1;
1161
1167
 
1162
- var Cache = /** @class */ (function () {
1168
+ var Cache$1 = /** @class */ (function () {
1163
1169
  function Cache() {
1164
1170
  this.cache = [];
1165
1171
  if (Cache.instance) {
@@ -1245,6 +1251,14 @@ var Geocoder = (function (exports) {
1245
1251
  return Cache;
1246
1252
  }());
1247
1253
 
1254
+ /**
1255
+ * Caching for asynchronous functions
1256
+ *
1257
+ * @packageDocumentation
1258
+ * @module cache
1259
+ */
1260
+ var Cache = Cache$1;
1261
+
1248
1262
  /**
1249
1263
  * Thrown when...
1250
1264
  */
@@ -1746,11 +1760,11 @@ var Geocoder = (function (exports) {
1746
1760
  }
1747
1761
 
1748
1762
  var ID = 0;
1749
- var NgwConnector = /** @class */ (function () {
1763
+ var NgwConnector$1 = /** @class */ (function () {
1750
1764
  function NgwConnector(options) {
1751
1765
  this.options = options;
1752
1766
  this.id = ID++;
1753
- this.emitter = new events.EventEmitter();
1767
+ this.emitter = new events.exports.EventEmitter();
1754
1768
  this.routeStr = '/api/component/pyramid/route';
1755
1769
  var exist = findConnector(options);
1756
1770
  if (exist) {
@@ -2144,6 +2158,18 @@ var Geocoder = (function (exports) {
2144
2158
  return NgwConnector;
2145
2159
  }());
2146
2160
 
2161
+ /**
2162
+ * A lightweight HTTP client optimized for use with {@link http://docs.nextgis.ru/docs_ngweb_dev/doc/developer/toc.html | NextGIS Web} API
2163
+ *
2164
+ * @remarks
2165
+ * Make sure CORS is registered in the {@link https://docs.nextgis.com/docs_ngcom/source/CORS.html | NextGIS Web settings } to be able to send requests.
2166
+ *
2167
+ * @packageDocumentation
2168
+ * @module ngw-connector
2169
+ */
2170
+ // export { NgwConnector };
2171
+ var NgwConnector = NgwConnector$1;
2172
+
2147
2173
  var NgwProvider = /** @class */ (function (_super) {
2148
2174
  __extends(NgwProvider, _super);
2149
2175
  function NgwProvider(options) {
@@ -2393,3 +2419,4 @@ var Geocoder = (function (exports) {
2393
2419
  return exports;
2394
2420
 
2395
2421
  }({}));
2422
+ //# sourceMappingURL=geocoder.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.global.js","sources":["../../cancelable-promise/src/CancelError.ts","../../cancelable-promise/src/PromiseControl.ts","../../cancelable-promise/src/TimeoutError.ts","../../cancelable-promise/src/CancelablePromise.ts","../../cancelable-promise/src/index.ts","../../utils/src/defined.ts","../../utils/src/object/objectAssign.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/url.ts","../src/BaseGeocoder.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../../../node_modules/events/events.js","../../cache/src/Cache.ts","../../cache/src/index.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/utils/apiRequest.ts","../../ngw-connector/src/NgwConnector.ts","../../ngw-connector/src/index.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["export class CancelError extends Error {\n name = 'CancelError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, CancelError.prototype);\n }\n}\n","import CancelablePromise from '.';\n\nexport interface PromiseControlOptions {\n onStart?: () => void;\n onStop?: () => void;\n}\n\ntype Key = CancelablePromise | string | number | symbol;\n\nexport class PromiseControl {\n private _promises: Map<Key, CancelablePromise> = new Map();\n\n get isLoaded(): boolean {\n return this._promises.size > 0;\n }\n\n constructor(private options: PromiseControlOptions = {}) {}\n\n remove(promise: Key): void {\n if (this._promises.has(promise)) {\n this._promises.delete(promise);\n this._onStop();\n }\n }\n\n get(promise: Key): CancelablePromise | undefined {\n return this._promises.get(promise);\n }\n\n add<T extends CancelablePromise = CancelablePromise>(\n promise: T,\n name?: string | number | symbol,\n ): CancelablePromise<T> {\n const key = name ? name : promise;\n const exist = this._promises.get(key);\n if (this.options.onStart && !this.isLoaded) {\n this.options.onStart();\n }\n if (exist) {\n return exist;\n }\n this._promises.set(key, promise);\n promise.finally(() => {\n this.remove(key);\n });\n return promise;\n }\n\n abort(): void {\n if (this.isLoaded) {\n this._promises.forEach((x) => {\n if (x.cancel) {\n x.cancel();\n }\n });\n this._promises.clear();\n this._onStop();\n }\n }\n\n waitFunc<T>(func: () => any, name = ''): CancelablePromise<T> {\n name = name || func.name;\n const exist = this.get(name);\n if (exist) {\n return exist;\n }\n return this.add(func(), name);\n }\n\n WaitForMe(name: string | symbol = ''): MethodDecorator {\n const get = this.get.bind(this);\n const add = this.add.bind(this);\n return function (\n target: unknown,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n name = name || key;\n descriptor.value = function (...args: any[]) {\n const exist = get(name);\n if (exist) {\n return exist;\n }\n const result = add(originalMethod.apply(this, args), name);\n return result;\n };\n\n return descriptor;\n };\n }\n\n /** @deprecated use {@link PromiseControl.WaitForMe } instead */\n GetOrCreateDecorator(name: string | symbol = ''): MethodDecorator {\n return this.WaitForMe(name);\n }\n\n private _onStop(): void {\n if (this.options.onStop && !this.isLoaded) {\n this.options.onStop();\n }\n }\n}\n","export class TimeoutError extends Error {\n name = 'TimeoutError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n","import { CancelError } from './CancelError';\nimport { PromiseControl, PromiseControlOptions } from './PromiseControl';\nimport { TimeoutError } from './TimeoutError';\n\ntype Reject = (reason?: any) => void;\ntype Resolve = (value?: any) => void;\nexport type OnCancelFunction = (cancelHandler: () => void) => void;\n\nconst handleCallback = <T = never>(\n resolve: Resolve,\n reject: Reject,\n callback: Resolve,\n r: T,\n) => {\n try {\n resolve(callback(r));\n } catch (e) {\n reject(e);\n }\n};\n\nlet ID = 0;\n\n/**\n * Promise that can be canceled\n *\n * @example\n * Catch `CancelError`\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject) => {\n * setTimeout(() => resolve(), 100);\n * }).catch((er) => {\n * if (er.name === \"CancelError\") {\n * // handle cancel error\n * }\n * throw er;\n * });\n *\n * promise.cancel();\n * ```\n * @example\n * Handle `onCancel` callback\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject, onCancel) => {\n * const xhr = new XMLHttpRequest();\n * xhr.open(\"GET\", url, true);\n * xhr.onload = () => {\n * resolve(xhr.responseText);\n * };\n * xhr.onerror = (er) => {\n * reject(er);\n * };\n *\n * onCancel(() => {\n * xhr.abort();\n * });\n *\n * xhr.send();\n * });\n *\n * promise.cancel();\n * ```\n */\nexport class CancelablePromise<T = any> implements Promise<T> {\n static CancelError = CancelError;\n static TimeoutError = TimeoutError;\n static PromiseControl = PromiseControl;\n\n readonly [Symbol.toStringTag]: string;\n readonly id = ID++;\n private _isCanceled = false;\n private _isPending = true;\n private _promise?: Promise<T>;\n private _cancelPromise?: Promise<T>;\n private _cancelHandlers: (() => void)[] = [];\n private _setCanceledCallback?: (er?: any) => void;\n private _parentPromise?: CancelablePromise;\n private _children: CancelablePromise[] = [];\n\n constructor(\n executor: (\n resolve: (value?: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancelFunction,\n ) => void,\n timeout?: number,\n ) {\n this._cancelPromise = new Promise<any>((resolve_, reject_) => {\n this._setCanceledCallback = (er) => resolve_(er || new CancelError());\n });\n const promises = [\n this._cancelPromise,\n new Promise<T>((resolve, reject) => {\n const onResolve = (value?: T | PromiseLike<T>) => {\n if (value instanceof CancelablePromise) {\n this.attach(value);\n } else {\n this._isPending = false;\n }\n // TODO: fix types, `undefined` not allowed since 19.12.2020\n resolve(value as T | PromiseLike<T>);\n };\n\n const onReject = (error: any) => {\n this._isPending = false;\n reject(error);\n };\n\n const onCancel: OnCancelFunction = (handler) => {\n if (!this._isPending) {\n throw new Error(\n 'The `onCancel` handler was attached after the promise settled.',\n );\n }\n\n this._cancelHandlers.push(handler);\n };\n\n return executor(onResolve, onReject, onCancel);\n }),\n ];\n if (timeout) {\n promises.push(\n new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._isPending) {\n try {\n this.cancel();\n } finally {\n reject(new TimeoutError());\n }\n }\n }, timeout);\n }),\n );\n }\n this._promise = Promise.race(promises);\n }\n\n static createControl(opt?: PromiseControlOptions): PromiseControl {\n return new PromiseControl(opt);\n }\n\n static resolve<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve) => resolve(value));\n }\n\n static reject<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve, reject) => reject(value));\n }\n\n static all<T>(values: (T | PromiseLike<T>)[]): CancelablePromise<T[]> {\n return new CancelablePromise((resolve, reject) => {\n Promise.all(values).then(resolve).catch(reject);\n }).catch((er) => {\n if (er instanceof this.CancelError) {\n for (const v of values) {\n if ('cancel' in v) {\n (v as CancelablePromise).cancel();\n }\n }\n }\n throw er;\n });\n }\n\n attach(p: CancelablePromise): void {\n if (this._isCanceled) {\n p.cancel();\n } else {\n this._children.push(p);\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?:\n | ((value: T) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): CancelablePromise<TResult1 | TResult2> {\n const p = new CancelablePromise((resolve, reject) => {\n if (this._promise) {\n const reject_ = (r: any) => {\n if (onrejected) {\n handleCallback(resolve, reject, onrejected, r);\n } else {\n reject(r);\n }\n };\n this._promise.then((r) => {\n if (this._isCanceled) {\n reject_(r);\n } else {\n if (onfulfilled) {\n handleCallback(resolve, reject, onfulfilled, r);\n } else {\n resolve(r);\n }\n }\n }, reject_);\n }\n });\n p._parentPromise = this;\n this._children.push(p);\n return p as CancelablePromise<TResult1 | TResult2>;\n }\n\n catch<TResult = never>(\n onrejected?:\n | ((reason: Error) => TResult | PromiseLike<TResult>)\n | undefined\n | null,\n ): CancelablePromise<T | TResult> {\n if (this._isCanceled && onrejected) {\n onrejected(new CancelError());\n }\n return this.then(undefined, onrejected);\n }\n\n finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n if (this._promise) {\n return this._promise.finally(onfinally);\n }\n if (this._isCanceled) {\n return Promise.reject(new CancelError());\n }\n return Promise.reject<T>(onfinally);\n }\n\n cancel(): this {\n // No reason to run cancel action if promise is already complete\n if (this._isCanceled || !this._isPending) {\n return this;\n }\n this._isCanceled = true;\n const parent = this._getTopParent();\n if (parent) {\n parent.cancel();\n }\n\n if (this._children) {\n this._children.forEach((x) => x.cancel());\n }\n\n if (this._isPending) {\n if (this._cancelHandlers.length) {\n try {\n for (const handler of this._cancelHandlers) {\n handler();\n }\n } catch (error) {\n // this._setCanceledCallback(error);\n }\n }\n if (this._setCanceledCallback) {\n this._setCanceledCallback();\n }\n }\n this._destroy();\n\n return this;\n }\n\n private _getTopParent() {\n let parent = this._parentPromise;\n let hasParent = !!parent;\n while (hasParent) {\n if (parent && parent._parentPromise) {\n parent = parent._parentPromise;\n hasParent = !!parent;\n } else {\n hasParent = false;\n }\n }\n return parent;\n }\n\n private _destroy() {\n this._setCanceledCallback = undefined;\n this._cancelPromise = undefined;\n this._promise = undefined;\n }\n}\n\nObject.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);\n","/**\n * A promise you can stop\n *\n * @packageDocumentation\n * @module cancelable-promise\n */\nimport { CancelablePromise } from './CancelablePromise';\n\nexport default CancelablePromise;\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 objectAssign<T, U>(target: T, source: U): T & U;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n */\nexport function objectAssign<T, U, V>(\n target: T,\n source1: U,\n source2: V,\n): T & U & V;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n * @param source3 - The third source object from which to copy properties.\n */\nexport function objectAssign<T, U, V, W>(\n target: T,\n source1: U,\n source2: V,\n source3: W,\n): T & U & V & W;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param sources - One or more source objects from which to copy properties\n */\nexport function objectAssign(\n target: Record<string, unknown>,\n ...sources: any[]\n): any {\n for (const source of sources) {\n for (const prop of Object.getOwnPropertyNames(source)) {\n (target as any)[prop] = source[prop];\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","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 fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n","import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheOptions<T> = Record<keyof T, T[keyof T]>;\n\ninterface CacheItem<T extends any = any, O = any> {\n key: string;\n value: CacheValue<T>;\n options?: CacheOptions<O>;\n}\n\nexport class Cache<\n T extends any = any,\n O extends Record<string, any> = Record<string, any>,\n> {\n private static instance: Cache<any, any>;\n private readonly cache: CacheItem<T, O>[] = [];\n\n constructor() {\n if (Cache.instance) {\n return Cache.instance;\n }\n\n Cache.instance = this;\n\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<T, O>[] {\n return this.cache;\n }\n\n add(\n key: string,\n valueToSet: CacheValue<T> | (() => CacheValue<T>),\n options?: CacheOptions<O>,\n ): CacheValue<T> {\n const exist = this._find(key, options);\n if (!exist) {\n let value: CacheValue<T>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const options_ =\n options && JSON.parse(JSON.stringify(objectRemoveEmpty(options)));\n\n const cacheItem = {\n key,\n value,\n options: options_,\n } as CacheItem<T, O>;\n\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch((er) => {\n this.delete(key, options);\n throw er;\n });\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, options?: CacheOptions<O>): CacheValue<T> | undefined {\n const cacheRecord = this._find(key, options);\n\n if (cacheRecord) {\n return cacheRecord.value;\n }\n }\n\n matchAll(key?: string, options?: CacheOptions<O>): CacheValue<T>[] {\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, options))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(key: string, options?: CacheOptions<O>): void {\n const exist = this.cache.filter((x) => this._filter(x, key, options));\n for (const e of exist) {\n const index = this.cache.indexOf(e);\n this.cache.splice(index, 1);\n }\n }\n\n private _find(\n key: string,\n options?: CacheOptions<O>,\n ): CacheItem<T> | undefined {\n return this.cache.find((x) => this._filter(x, key, options));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n options?: CacheOptions<O>,\n ): boolean {\n if (item.key === key) {\n if (options) {\n return objectDeepEqual(item.options || {}, objectRemoveEmpty(options));\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Caching for asynchronous functions\n *\n * @packageDocumentation\n * @module cache\n */\nimport { Cache } from './Cache';\n\nexport default Cache;\n","import { 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?: NgwError) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\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 {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\nimport { NgwError } from '../errors/NgwError';\nimport { NetworkError } from '../errors/NetworkError';\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, 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 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\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 request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: options.headers || {},\n method: options.method,\n };\n const body =\n typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n if (body !== undefined && options.method !== 'POST') {\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 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 // throw new Error(er);\n }\n if (json !== undefined) {\n resolve(json);\n }\n }\n reject('no data');\n });\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","// 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 { NgwError } from './NgwError';\nimport { 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 { NgwError } from './NgwError';\nimport { 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 { NgwConnectorOptions } from './interfaces';\nimport { NgwConnector } from './NgwConnector';\nimport { objectDeepEqual } from '@nextgis/utils';\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 function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { DeepPartial, defined } from '@nextgis/utils';\nimport { Resource } from '../types/ResourceItem';\nimport { isObject } from './isObject';\n\n/**\n * ```\n * { keyname, parent: { id }} > { keyname, parent__id }\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 Object.entries(resource).forEach(([key, value]) => {\n if (isObject(value)) {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n });\n return query;\n}\n","import { objectDeepEqual } from '@nextgis/utils';\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { Resource } from '../types/ResourceItem';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { resourceToQuery } from './utils/resourceToQuery';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\n\nimport { isObject } from './utils/isObject';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { NgwConnector } from './NgwConnector';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport type { RequestOptions, ResourceDefinition } from './interfaces';\n\nexport class ResourcesControl {\n cache = new Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number }\n >();\n\n constructor(private connector: NgwConnector) {}\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,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = new Cache();\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, requestOptions);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, requestOptions);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n };\n return cache.add('resource', makeRequest, { resource });\n }\n\n getOneOrFail(resource: ResourceDefinition): CancelablePromise<ResourceItem> {\n return this.getOne(resource).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(resource: ResourceDefinition): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.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(resource: ResourceDefinition): CancelablePromise<number> {\n return this.getId(resource).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,\n ): CancelablePromise<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 (resources) {\n resources.forEach((x) => {\n this.cache.add('resource.item', CancelablePromise.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 ): CancelablePromise<ResourceItem | undefined> {\n return this.connector.getResource(resource).then((child) => {\n if (child) {\n return this.connector.getResource(child.resource.parent.id);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.getId(resource).then((parent) => {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true },\n {\n parent,\n },\n )\n .then((items) => {\n for (const i of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(i), {\n id: i.resource.id,\n });\n }\n return items;\n });\n });\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<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): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this.cache.delete('resource.item', { id });\n return undefined;\n });\n }\n });\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions,\n ): CancelablePromise<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 ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.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 CancelablePromise from '@nextgis/cancelable-promise';\nimport { template } from './template';\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 function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","import { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { ResourcesControl } from './ResourcesControl';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n DeleteRequestItemsResponseMap,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n GetRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n ResourceIdKeynameDef,\n NgwConnectorOptions,\n ResourceDefinition,\n RequestItemsParams,\n RequestItemKeys,\n RequestHeaders,\n RequestOptions,\n PyramidRoute,\n Credentials,\n UserInfo,\n Params,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport { apiRequest } from './utils/apiRequest';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n\n emitter = new EventEmitter();\n user?: UserInfo;\n\n resources!: ResourcesControl;\n\n private routeStr = '/api/component/pyramid/route';\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n if (exist) {\n return exist;\n } else {\n if (this.options.route) {\n this.routeStr = this.options.route;\n }\n this.resources = new ResourcesControl(this);\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\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 NgwConnector.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 connect(): CancelablePromise<PyramidRoute> {\n const cache = new Cache();\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery(this.routeStr, {}, {})\n .then((route: PyramidRoute) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this.getUserInfo({ login, password })\n .then(() => {\n makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this.getUserInfo(credentials);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.emitter.emit('logout');\n this.resources.cache.clean();\n }\n\n getUserInfo(credentials?: Credentials): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n };\n\n // Do not use request('auth.current_user') to avoid circular-references\n return this.makeQuery('/api/component/auth/current_user', {}, options)\n .then((data: UserInfo) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\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 = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\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 ): CancelablePromise<P[K]> {\n const { method, headers, withCredentials, responseType } = requestOptions;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n const cache = new Cache<CancelablePromise<P[K]>>();\n return cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n auth: this.options.auth,\n }),\n });\n }\n return makeApiRequest();\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'>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 makeQuery(\n url: string,\n params?: Params,\n options: RequestOptions = {},\n ): CancelablePromise<any> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n // remove double slash\n url = fixUrlStr(url);\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@inheritDoc ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(resource: ResourceDefinition): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@inheritDoc ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n return new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n loadData(url, resolve, options, reject, onCancel);\n }).catch((httpError) => {\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n // @ts-ignore\n if (__DEV__) {\n console.warn(httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\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","/**\n * A lightweight HTTP client optimized for use with {@link http://docs.nextgis.ru/docs_ngweb_dev/doc/developer/toc.html | NextGIS Web} API\n *\n * @remarks\n * Make sure CORS is registered in the {@link https://docs.nextgis.com/docs_ngcom/source/CORS.html | NextGIS Web settings } to be able to send requests.\n *\n * @packageDocumentation\n * @module ngw-connector\n */\nimport { NgwConnector } from './NgwConnector';\n\nexport * from './interfaces';\nexport * from './types/ResourceItem';\nexport * from './types/FeatureLayer';\nexport * from './types/RequestItemsParamsMap';\nexport * from './types/ResourceStore';\n\n// export { NgwConnector };\nexport default NgwConnector;\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["ID","CancelablePromise","eventsModule","events","Cache","EventEmitter","NgwConnector"],"mappings":"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"}
@@ -12,4 +12,5 @@ var Geocoder=function(e){"use strict";
12
12
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,r)};function r(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function o(e,t){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,n=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function i(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e){return this instanceof s?(this.v=e,this):new s(e)}function u(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,o=r.apply(e,t||[]),i=[];return n={},u("next"),u("throw"),u("return"),n[Symbol.asyncIterator]=function(){return this},n;function u(e){o[e]&&(n[e]=function(t){return new Promise((function(r,n){i.push([e,t,r,n])>1||c(e,t)}))})}function c(e,t){try{(r=o[e](t)).value instanceof s?Promise.resolve(r.value.v).then(a,f):h(i[0][2],r)}catch(e){h(i[0][3],e)}var r}function a(e){c("next",e)}function f(e){c("throw",e)}function h(e,t){e(t),i.shift(),i.length&&c(i[0][0],i[0][1])}}function c(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=i(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise((function(n,o){(function(e,t,r,n){Promise.resolve(n).then((function(t){e({value:t,done:r})}),t)})(n,o,(t=e[r](t)).done,t.value)}))}}}var a=function(e){function t(){var r=e.call(this)||this;return r.name="CancelError",Object.setPrototypeOf(r,t.prototype),r}return r(t,e),t}(Error),f=function(){function e(e){void 0===e&&(e={}),this.options=e,this._promises=new Map}return Object.defineProperty(e.prototype,"isLoaded",{get:function(){return this._promises.size>0},enumerable:!1,configurable:!0}),e.prototype.remove=function(e){this._promises.has(e)&&(this._promises.delete(e),this._onStop())},e.prototype.get=function(e){return this._promises.get(e)},e.prototype.add=function(e,t){var r=this,n=t||e,o=this._promises.get(n);return this.options.onStart&&!this.isLoaded&&this.options.onStart(),o||(this._promises.set(n,e),e.finally((function(){r.remove(n)})),e)},e.prototype.abort=function(){this.isLoaded&&(this._promises.forEach((function(e){e.cancel&&e.cancel()})),this._promises.clear(),this._onStop())},e.prototype.waitFunc=function(e,t){void 0===t&&(t="");var r=this.get(t=t||e.name);return r||this.add(e(),t)},e.prototype.WaitForMe=function(e){void 0===e&&(e="");var t=this.get.bind(this),r=this.add.bind(this);return function(n,o,i){var s=i.value;return e=e||o,i.value=function(){for(var n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];var i=t(e);if(i)return i;var u=r(s.apply(this,n),e);return u},i}},e.prototype.GetOrCreateDecorator=function(e){return void 0===e&&(e=""),this.WaitForMe(e)},e.prototype._onStop=function(){this.options.onStop&&!this.isLoaded&&this.options.onStop()},e}(),h=function(e){function t(){var r=e.call(this)||this;return r.name="TimeoutError",Object.setPrototypeOf(r,t.prototype),r}return r(t,e),t}(Error),p=function(e,t,r,n){try{e(r(n))}catch(e){t(e)}},l=0,d=function(){function e(t,r){var n=this;this.id=l++,this._isCanceled=!1,this._isPending=!0,this._cancelHandlers=[],this._children=[],this._cancelPromise=new Promise((function(e,t){n._setCanceledCallback=function(t){return e(t||new a)}}));var o=[this._cancelPromise,new Promise((function(r,o){return t((function(t){t instanceof e?n.attach(t):n._isPending=!1,r(t)}),(function(e){n._isPending=!1,o(e)}),(function(e){if(!n._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");n._cancelHandlers.push(e)}))}))];r&&o.push(new Promise((function(e,t){setTimeout((function(){if(n._isPending)try{n.cancel()}finally{t(new h)}}),r)}))),this._promise=Promise.race(o)}return e.createControl=function(e){return new f(e)},e.resolve=function(t){return new e((function(e){return e(t)}))},e.reject=function(t){return new e((function(e,r){return r(t)}))},e.all=function(t){var r=this;return new e((function(e,r){Promise.all(t).then(e).catch(r)})).catch((function(e){if(e instanceof r.CancelError)for(var n=0,o=t;n<o.length;n++){var i=o[n];"cancel"in i&&i.cancel()}throw e}))},e.prototype.attach=function(e){this._isCanceled?e.cancel():this._children.push(e)},e.prototype.then=function(t,r){var n=this,o=new e((function(e,o){if(n._promise){var i=function(t){r?p(e,o,r,t):o(t)};n._promise.then((function(r){n._isCanceled?i(r):t?p(e,o,t,r):e(r)}),i)}}));return o._parentPromise=this,this._children.push(o),o},e.prototype.catch=function(e){return this._isCanceled&&e&&e(new a),this.then(void 0,e)},e.prototype.finally=function(e){return this._promise?this._promise.finally(e):Promise.reject(this._isCanceled?new a:e)},e.prototype.cancel=function(){if(this._isCanceled||!this._isPending)return this;this._isCanceled=!0;var e=this._getTopParent();if(e&&e.cancel(),this._children&&this._children.forEach((function(e){return e.cancel()})),this._isPending){if(this._cancelHandlers.length)try{for(var t=0,r=this._cancelHandlers;t<r.length;t++){(0,r[t])()}}catch(e){}this._setCanceledCallback&&this._setCanceledCallback()}return this._destroy(),this},e.prototype._getTopParent=function(){for(var e=this._parentPromise,t=!!e;t;)t=!(!e||!e._parentPromise)&&!!(e=e._parentPromise);return e},e.prototype._destroy=function(){this._setCanceledCallback=void 0,this._cancelPromise=void 0,this._promise=void 0},e.CancelError=a,e.TimeoutError=h,e.PromiseControl=f,e}();function v(e){return null!=e}function y(e,t,r,n){if(e instanceof Array)return t instanceof Array&&t.sort().join("")===e.sort().join("");if(e instanceof Date)return t instanceof Date&&""+e==""+t;if(e instanceof Function){if(!(t instanceof Function))return!1}else if(e instanceof Object)return t instanceof Object&&(e===r?t===n:m(e,t));return e===t}function m(e,t){var r=Object.keys(e).sort(),n=Object.keys(t).sort();if(r.length!==n.length)return!1;if(r.join("")!==n.join(""))return!1;for(var o=0;o<r.length;o++){if(!y(e[r[o]],t[n[o]],e,t))return!1}return!0}function g(e){var t={};return Object.keys(e).forEach((function(r){e[r]instanceof Array||e[r]!==Object(e[r])?void 0!==e[r]&&(t[r]=e[r]):t[r]=g(e[r])})),t}function b(e){return e.replace(/([^:]\/)\/+/g,"$1")}Object.setPrototypeOf(d.prototype,Promise.prototype);var w,_=function(e){e&&function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=0,o=t;n<o.length;n++)for(var i=o[n],s=0,u=Object.getOwnPropertyNames(i);s<u.length;s++){var c=u[s];e[c]=i[c]}}(this,e)},O=0,E=function(e){function t(t){var r=e.call(this,t)||this;return r.providers=[],t&&t.providers&&(r.providers=t.providers),r}return r(t,e),t.prototype.abort=function(){this.providers.forEach((function(e){e.abort&&e.abort()}))},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,i,u,a,f,h,p,l;return o(this,(function(o){switch(o.label){case 0:t=0,r=this.providers,o.label=1;case 1:if(!(t<r.length))return[3,19];i=r[t],o.label=2;case 2:o.trys.push([2,17,,18]),u=i.search(e),o.label=3;case 3:o.trys.push([3,10,11,16]),p=void 0,a=c(u),o.label=4;case 4:return[4,s(a.next())];case 5:return(f=o.sent()).done?[3,9]:[4,s(n(n({},f.value),{provider:i,_id:O++}))];case 6:return[4,o.sent()];case 7:o.sent(),o.label=8;case 8:return[3,4];case 9:return[3,16];case 10:return h=o.sent(),p={error:h},[3,16];case 11:return o.trys.push([11,,14,15]),f&&!f.done&&(l=a.return)?[4,s(l.call(a))]:[3,13];case 12:o.sent(),o.label=13;case 13:return[3,15];case 14:if(p)throw p.error;return[7];case 15:return[7];case 16:return[3,18];case 17:return o.sent(),[3,18];case 18:return t++,[3,1];case 19:return[2]}}))}))},t.prototype.result=function(e){return e.provider?e.provider.result(e):d.resolve(void 0)},t}(_),P=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),t}(_),x="object"==typeof Reflect?Reflect:null,L=x&&"function"==typeof x.apply?x.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};w=x&&"function"==typeof x.ownKeys?x.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var j=Number.isNaN||function(e){return e!=e};function C(){C.init.call(this)}var R=C,I=function(e,t){return new Promise((function(r,n){function o(r){e.removeListener(t,i),n(r)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),r([].slice.call(arguments))}H(e,t,i,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&H(e,"error",t,r)}(e,o,{once:!0})}))};C.EventEmitter=C,C.prototype._events=void 0,C.prototype._eventsCount=0,C.prototype._maxListeners=void 0;var T=10;function S(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function k(e){return void 0===e._maxListeners?C.defaultMaxListeners:e._maxListeners}function q(e,t,r,n){var o,i,s,u;if(S(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),s=i[t]),void 0===s)s=i[t]=r,++e._eventsCount;else if("function"==typeof s?s=i[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(o=k(e))>0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,u=c,console&&console.warn&&console.warn(u)}return e}function N(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function F(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=N.bind(n);return o.listener=r,n.wrapFn=o,o}function U(e,t,r){var n=e._events;if(void 0===n)return[];var o=n[t];return void 0===o?[]:"function"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(o):M(o,o.length)}function A(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function M(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}function H(e,t,r,n){if("function"==typeof e.on)n.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(i){n.once&&e.removeEventListener(t,o),r(i)}))}}Object.defineProperty(C,"defaultMaxListeners",{enumerable:!0,get:function(){return T},set:function(e){if("number"!=typeof e||e<0||j(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");T=e}}),C.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},C.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||j(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},C.prototype.getMaxListeners=function(){return k(this)},C.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n="error"===e,o=this._events;if(void 0!==o)n=n&&void 0===o.error;else if(!n)return!1;if(n){var i;if(t.length>0&&(i=t[0]),i instanceof Error)throw i;var s=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw s.context=i,s}var u=o[e];if(void 0===u)return!1;if("function"==typeof u)L(u,this,t);else{var c=u.length,a=M(u,c);for(r=0;r<c;++r)L(a[r],this,t)}return!0},C.prototype.on=C.prototype.addListener=function(e,t){return q(this,e,t,!1)},C.prototype.prependListener=function(e,t){return q(this,e,t,!0)},C.prototype.once=function(e,t){return S(t),this.on(e,F(this,e,t)),this},C.prototype.prependOnceListener=function(e,t){return S(t),this.prependListener(e,F(this,e,t)),this},C.prototype.off=C.prototype.removeListener=function(e,t){var r,n,o,i,s;if(S(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(o=-1,i=r.length-1;i>=0;i--)if(r[i]===t||r[i].listener===t){s=r[i].listener,o=i;break}if(o<0)return this;0===o?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,o),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",e,s||t)}return this},C.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var o,i=Object.keys(r);for(n=0;n<i.length;++n)"removeListener"!==(o=i[n])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},C.prototype.listeners=function(e){return U(this,e,!0)},C.prototype.rawListeners=function(e){return U(this,e,!1)},C.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):A.call(e,t)},C.prototype.listenerCount=A,C.prototype.eventNames=function(){return this._eventsCount>0?w(this._events):[]},R.once=I;var B,G=function(){function e(){return this.cache=[],e.instance?e.instance:(e.instance=this,this)}return e.prototype.clean=function(){this.cache.length=0},e.prototype.all=function(){return this.cache},e.prototype.add=function(e,t,r){var n=this,o=this._find(e,r);if(o)return o.value;var i=void 0;i=t instanceof Function?t():t;var s=r&&JSON.parse(JSON.stringify(g(r)));return this.cache.push({key:e,value:i,options:s}),i instanceof Promise?(i.catch((function(t){throw n.delete(e,r),t})),i):i},e.prototype.match=function(e,t){var r=this._find(e,t);if(r)return r.value},e.prototype.matchAll=function(e,t){var r=this;return e?this.cache.filter((function(n){return r._filter(n,e,t)})).map((function(e){return e.value})):this.cache.map((function(e){return e.value}))},e.prototype.delete=function(e,t){for(var r=this,n=0,o=this.cache.filter((function(n){return r._filter(n,e,t)}));n<o.length;n++){var i=this.cache.indexOf(o[n]);this.cache.splice(i,1)}},e.prototype._find=function(e,t){var r=this;return this.cache.find((function(n){return r._filter(n,e,t)}))},e.prototype._filter=function(e,t,r){return e.key===t&&(!r||m(e.options||{},g(r)))},e}(),D=function(e){function t(r){var n=e.call(this)||this;return n.name="NgwError",Object.assign(n,r),Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(Error),z=function(e){function t(r){var n=e.call(this)||this;return n.name="NetworkError",Object.setPrototypeOf(n,t.prototype),n.message="Unable to request "+r+".\n Possibly invalid NGW URL entered or CORS not configured to get request from "+location.origin,n}return r(t,e),t}(Error);B=function(e,t,r,n,o){void 0===r&&(r={}),r.method=r.method||"GET";var i=new XMLHttpRequest;i.open(r.method||"GET",e,!0),"blob"===r.responseType&&(i.responseType=r.responseType);var s=function(){try{return JSON.parse(i.responseText)}catch(e){return i.responseText}};i.onload=function(){-1!==[401,403,404,500].indexOf(i.status)&&n(new D(s())),function(e){void 0===e&&(e=!1);var o=e?n:t;"blob"===r.responseType?o(i.response):i.responseText?o(s()):n({message:""})}()},i.onerror=function(t){n(0===i.status?new z(e):t)},i.upload.onprogress=function(e){e.lengthComputable&&(r.onProgress&&r.onProgress(e.loaded/e.total*100,e))};var u,c=r.headers;if(c)for(var a in c){var f=c[a];"string"==typeof f&&i.setRequestHeader(a,f)}if(void 0!==r.withCredentials&&(i.withCredentials=r.withCredentials),r.file){if((u=new FormData).append("file",r.file),r.data)for(var h in u)u.append(h,u[h])}else u=r.data?"string"==typeof r.data?r.data:JSON.stringify(r.data):null;o&&o((function(){i.abort()})),i.send(u)};var J=/\{ *([\w_-]+) *\}/g;function Q(e,t){return e.replace(J,(function(e,r){var n=t[r];if(void 0===n)throw new Error("No value provided for letiable "+e);return"function"==typeof n&&(n=n(t)),n}))}var W=function(e){function t(r){var n=e.call(this,r)||this;return n.name="ResourceNotFoundError",n.exception="nextgisweb.resource.exception.ResourceNotFound",Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(D),K=function(e){function t(r){var n=e.call(this,r)||this;return n.name="InsufficientPermissionsError",n.exception="nextgisweb.core.exception.InsufficientPermissions",Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(D),X=[];function $(e){X.push(e)}function V(e){return"[object Object]"===Object.prototype.toString.call(e)}function Y(e,t){void 0===t&&(t=""),t=t?t+"__":"";var r={};return Object.entries(e).forEach((function(e){var n=e[0],o=e[1];if(V(o)){var i=Y(o,n);Object.assign(r,i)}else v(o)&&(r[t+n]=o)})),r}var Z=function(){function e(e){this.connector=e,this.cache=new G}return e.prototype.getOne=function(e,t){var r=this;return(new G).add("resource",(function(){return"string"==typeof e?r._fetchResourceBy({keyname:e},t):"number"==typeof e?r._fetchResourceById(e,t):V(e)?r._fetchResourceBy(e,t):d.resolve(void 0)}),{resource:e})},e.prototype.getOneOrFail=function(e){return this.getOne(e).then((function(e){if(e)return e;throw new W}))},e.prototype.getId=function(e){return"number"==typeof e?d.resolve(e):"string"==typeof e||V(e)?this.getOne(e).then((function(e){if(e)return e.resource.id})):d.resolve(void 0)},e.prototype.getIdOrFail=function(e){return this.getId(e).then((function(e){if(void 0===e)throw new Error;return e}))},e.prototype.getMany=function(e,t){var r=this;return this._resourceCacheFilter(e).then((function(o){if(!o.length){var i={};return e.keyname?i.keyname=e.keyname:Object.assign(i,Y(e)),r.connector.get("resource.search",t,n({serialization:"full"},i)).then((function(e){return e&&e.forEach((function(e){r.cache.add("resource.item",d.resolve(e),{id:e.resource.id})})),e}))}return o}))},e.prototype.getParent=function(e){var t=this;return this.connector.getResource(e).then((function(e){return e?t.connector.getResource(e.resource.parent.id):d.resolve(void 0)}))},e.prototype.getChildrenOf=function(e){var t=this;return this.getId(e).then((function(e){return t.connector.get("resource.collection",{cache:!0},{parent:e}).then((function(e){for(var r=0,n=e;r<n.length;r++){var o=n[r];t.cache.add("resource.item",d.resolve(o),{id:o.resource.id})}return e}))}))},e.prototype.update=function(e,t){var r=this;return this.getId(e).then((function(e){if(void 0!==e)return r.connector.put("resource.item",{data:t},{id:e})}))},e.prototype.delete=function(e){var t=this;return this.getId(e).then((function(e){if(void 0!==e)return t.connector.delete("resource.item",null,{id:e}).then((function(){t.cache.delete("resource.item",{id:e})}))}))},e.prototype._fetchResourceById=function(e,t){var r=this;return this.cache.add("resource.item",(function(){return r.connector.get("resource.item",t,{id:e})}),{id:e}).catch((function(e){if(!(e instanceof W))throw e}))},e.prototype._fetchResourceBy=function(e,t){return this.getMany(e,t).then((function(e){return e[0]}))},e.prototype._resourceCacheFilter=function(e){return d.all(this.cache.matchAll("resource.item")).then((function(t){return t.filter((function(t){if(t)return e.keyname&&t.resource.keyname?e.keyname===t.resource.keyname:v(e.id)&&v(t.resource.id)?e.id===t.resource.id:m(e,t.resource)})),[]}))},e}();var ee=0,te=function(){function e(e){this.options=e,this.id=ee++,this.emitter=new R.EventEmitter,this.routeStr="/api/component/pyramid/route";var t=function(e){return X.find((function(t){if(t.options.baseUrl===e.baseUrl){if(!e.auth)return!0;if(t.options.auth)return m(t.options.auth,e.auth)}}))}(e);if(t)return t;this.options.route&&(this.routeStr=this.options.route),this.resources=new Z(this),$(this)}return e.create=function(e){return new this(e)},e.prototype.setNgw=function(e){this.logout(),this.options.baseUrl=e,$(this)},e.prototype.connect=function(){var e=this,t=new G,r=this.options.auth;return t.add("route",(function(){return new d((function(t,n){var o=function(){return e.makeQuery(e.routeStr,{},{}).then((function(e){t(e)})).catch((function(e){n(e)}))};if(r){var i=r.login,s=r.password;if(i&&s)return e.getUserInfo({login:i,password:s}).then((function(){o()})).catch((function(e){return n(e)}))}return o()}))}),{id:this.id,auth:r,baseUrl:this.options.baseUrl})},e.prototype.login=function(e){return this.logout(),$(this),this.getUserInfo(e)},e.prototype.logout=function(){var e;-1!==(e=X.indexOf(this))&&X.splice(e,1),this.options.auth=void 0,this.user=void 0,this.emitter.emit("logout"),this.resources.cache.clean()},e.prototype.getUserInfo=function(e){var t=this;if(this.user&&this.user.id)return d.resolve(this.user);e&&(this.options.auth=e);var r={headers:this.getAuthorizationHeaders(e)};return this.makeQuery("/api/component/auth/current_user",{},r).then((function(e){return t.user=e,t.emitter.emit("login",e),e})).catch((function(e){throw t.emitter.emit("login:error",e),e}))},e.prototype.getAuthorizationHeaders=function(e){var t=this.makeClientId(e);if(t)return{Authorization:"Basic "+t}},e.prototype.makeClientId=function(e){if(e=e||this.options.auth){var t=unescape(encodeURIComponent(e.login+":"+e.password));return window.btoa(t)}},e.prototype.apiRequest=function(e,t,r){var o=this;void 0===t&&(t={}),void 0===r&&(r={});var i=r.method,s=r.headers,u=r.withCredentials,c=r.responseType,a=g(t),f=function(){return function(e){var t=e.params;return new d((function(r,n){e.connector.connect().then((function(o){var i=o&&o[e.name];if(i){var s=(i=function(e,t){for(var r=0,n=t.length,o=e.length;r<n;r++,o++)e[o]=t[r];return e}([],i)).shift();if(i.length){for(var u={},c=0;c<i.length;c++){var a=i[c];if(u[c]="{"+a+"}",void 0===t[a])throw new Error("`"+a+"` url api argument is not specified")}s&&(s=Q(s,u))}if(t){var f=[],h=t.paramList;for(var p in Array.isArray(h)&&(delete t.paramList,h.forEach((function(e){f.push(e[0]+"="+e[1])}))),t)-1===i.indexOf(p)&&f.push(p+"="+t[p]);f.length&&(s=s+"?"+f.join("&"))}s?r(e.connector.makeQuery(s,t,e.requestOptions)):n(new Error("request url is not set"))}else r(void 0)})).catch((function(e){n(e)}))}))}({name:e,params:a,requestOptions:r,connector:o})};return r.cache&&"GET"===i?(new G).add(e,f,n({params:a},g({headers:s,withCredentials:u,responseType:c,baseUrl:this.options.baseUrl,auth:this.options.auth}))):f()},e.prototype.post=function(e,t,r){return(t=t||{}).method="POST",this.apiRequest(e,r,t)},e.prototype.get=function(e,t,r){return(t=t||{}).method="GET",this.apiRequest(e,r,t)},e.prototype.patch=function(e,t,r){return(t=t||{}).method="PATCH",this.apiRequest(e,r,t)},e.prototype.put=function(e,t,r){return(t=t||{}).method="PUT",this.apiRequest(e,r,t)},e.prototype.delete=function(e,t,r){return(t=t||{}).method="DELETE",this.apiRequest(e,r,t)},e.prototype.makeQuery=function(e,t,r){if(void 0===r&&(r={}),e=(this.options.baseUrl?this.options.baseUrl:"")+e)return t&&(e=Q(e,t)),e=b(e),this._loadData(e,r);throw new Error("Empty `url` not allowed")},e.prototype.getResource=function(e){return this.resources.getOne(e)},e.prototype.getResourceOrFail=function(e){return this.resources.getOneOrFail(e)},e.prototype.getResourceBy=function(e){return this.resources.getOne(e)},e.prototype.getResourceByKeyname=function(e){return this.resources.getOne(e)},e.prototype.getResourceById=function(e){return this.resources.getOne(e)},e.prototype.getResourceId=function(e){return this.resources.getId(e)},e.prototype.getResourceIdOrFail=function(e){return this.resources.getIdOrFail(e)},e.prototype.getResourcesBy=function(e){return this.resources.getMany(e)},e.prototype.getResourceParent=function(e){return this.resources.getParent(e)},e.prototype.getResourceChildren=function(e){return this.resources.getChildrenOf(e)},e.prototype.updateResource=function(e,t){return this.resources.update(e,t)},e.prototype.deleteResource=function(e){return this.resources.delete(e)},e.prototype._loadData=function(e,t){var r=this;return t.responseType=t.responseType||"json",new d((function(o,i,s){r.user&&((t=t||{}).headers=n(n({},r.getAuthorizationHeaders()),t.headers)),B(e,o,t,i,s)})).catch((function(e){if(e instanceof d.CancelError);else{var t=r._handleHttpError(e);if(t)throw t}}))},e.prototype._handleHttpError=function(e){if(e&&e instanceof D){if("nextgisweb.resource.exception.ResourceNotFound"===e.exception)throw new W(e);if("nextgisweb.core.exception.InsufficientPermissions"===e.exception)throw new K(e)}return e},e.errors={NgwError:D,ResourceNotFoundError:W},e}(),re=function(e){function t(t){var r=e.call(this,t)||this;return r.caseInsensitive=!0,r.searchUrl="https://maxim.nextgis.com",r.searchResources=[],r.requests=[],r.connector=t.connector||new te({baseUrl:r.searchUrl}),r.searchResources=t.searchResources,r}return r(t,e),t.prototype.abort=function(){this.requests.forEach((function(e){e.cancel()})),this.requests=[]},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,i,u,c=this;return o(this,(function(a){switch(a.label){case 0:t=function(t){var i,u,a,f,h,p;return o(this,(function(l){switch(l.label){case 0:return i=r.connector.get("feature_layer.store",{headers:{RANGE:"items=0-"+(t.limit||300)}},{id:t.id,like:e}),r.requests.push(i),i.catch((function(e){console.log(e)})),[4,s(i)];case 1:u=l.sent(),a=[],u&&u.forEach((function(r){a.push(n({query:e,resourceId:t.id},r))})),f=function(e){return o(this,(function(t){switch(t.label){case 0:return e.result=function(){return c.result(e)},[4,s(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},h=0,p=r._items(a),l.label=2;case 2:return h<p.length?[5,f(p[h])]:[3,5];case 3:l.sent(),l.label=4;case 4:return h++,[3,2];case 5:return[2]}}))},r=this,i=0,u=this.searchResources,a.label=1;case 1:return i<u.length?[5,t(u[i])]:[3,4];case 2:a.sent(),a.label=3;case 3:return i++,[3,1];case 4:return[2]}}))}))},t.prototype.result=function(e){var t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((function(t){var r=t.extent;return{text:e.text,extent:[r.minLon,r.minLat,r.maxLon,r.maxLat]}}));return this.requests.push(t),t},t.prototype._items=function(e){var t=this,r=[];return e.forEach((function(e){t.searchResources.find((function(t){return t.id===e.resourceId}))&&r.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),r},t}(P),ne=function(e){function t(t){var r=e.call(this,t)||this;return r.searchUrl="https://nominatim.openstreetmap.org",r._requests=[],r}return r(t,e),t.prototype.abort=function(){this._requests.forEach((function(e){return e.cancel()})),this._requests=[]},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,n,i,u,c,a=this;return o(this,(function(f){switch(f.label){case 0:return t=b(this.searchUrl+"/search?format=geojson&polygon_geojson=1&q="+e),r=new d((function(r,n,o){var i=new XMLHttpRequest;i.open("GET",t,!0),i.onload=function(){try{var t=JSON.parse(i.responseText).features.map((function(t){return{geom:t,extent:t.bbox,text:t.properties&&t.properties.display_name,query:e}}));r(t)}catch(e){n(e)}},i.onerror=function(e){n(e)},o((function(){i.abort()})),i.send()})).catch((function(e){throw e})),this._requests.push(r),[4,s(r)];case 1:if(!(n=f.sent()))return[3,5];i=function(e){return o(this,(function(t){switch(t.label){case 0:return e.result=function(){return a.result(e)},[4,s(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},u=0,c=n,f.label=2;case 2:return u<c.length?[5,i(c[u])]:[3,5];case 3:f.sent(),f.label=4;case 4:return u++,[3,2];case 5:return[2]}}))}))},t.prototype.result=function(e){return d.resolve({text:e.text,extent:e.extent||[],geom:e.geom})},t}(P);return e.BaseProvider=P,e.Geocoder=E,e.NgwProvider=re,e.NominatimProvider=ne,e.create=function(e){return new E(e)},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
15
+ ***************************************************************************** */var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,r)};function r(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function o(e,t){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,n=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function i(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e){return this instanceof s?(this.v=e,this):new s(e)}function u(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,o=r.apply(e,t||[]),i=[];return n={},u("next"),u("throw"),u("return"),n[Symbol.asyncIterator]=function(){return this},n;function u(e){o[e]&&(n[e]=function(t){return new Promise((function(r,n){i.push([e,t,r,n])>1||c(e,t)}))})}function c(e,t){try{(r=o[e](t)).value instanceof s?Promise.resolve(r.value.v).then(a,f):h(i[0][2],r)}catch(e){h(i[0][3],e)}var r}function a(e){c("next",e)}function f(e){c("throw",e)}function h(e,t){e(t),i.shift(),i.length&&c(i[0][0],i[0][1])}}function c(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=i(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise((function(n,o){(function(e,t,r,n){Promise.resolve(n).then((function(t){e({value:t,done:r})}),t)})(n,o,(t=e[r](t)).done,t.value)}))}}}var a=function(e){function t(){var r=e.call(this)||this;return r.name="CancelError",Object.setPrototypeOf(r,t.prototype),r}return r(t,e),t}(Error),f=function(){function e(e){void 0===e&&(e={}),this.options=e,this._promises=new Map}return Object.defineProperty(e.prototype,"isLoaded",{get:function(){return this._promises.size>0},enumerable:!1,configurable:!0}),e.prototype.remove=function(e){this._promises.has(e)&&(this._promises.delete(e),this._onStop())},e.prototype.get=function(e){return this._promises.get(e)},e.prototype.add=function(e,t){var r=this,n=t||e,o=this._promises.get(n);return this.options.onStart&&!this.isLoaded&&this.options.onStart(),o||(this._promises.set(n,e),e.finally((function(){r.remove(n)})),e)},e.prototype.abort=function(){this.isLoaded&&(this._promises.forEach((function(e){e.cancel&&e.cancel()})),this._promises.clear(),this._onStop())},e.prototype.waitFunc=function(e,t){void 0===t&&(t="");var r=this.get(t=t||e.name);return r||this.add(e(),t)},e.prototype.WaitForMe=function(e){void 0===e&&(e="");var t=this.get.bind(this),r=this.add.bind(this);return function(n,o,i){var s=i.value;return e=e||o,i.value=function(){for(var n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];var i=t(e);if(i)return i;var u=r(s.apply(this,n),e);return u},i}},e.prototype.GetOrCreateDecorator=function(e){return void 0===e&&(e=""),this.WaitForMe(e)},e.prototype._onStop=function(){this.options.onStop&&!this.isLoaded&&this.options.onStop()},e}(),h=function(e){function t(){var r=e.call(this)||this;return r.name="TimeoutError",Object.setPrototypeOf(r,t.prototype),r}return r(t,e),t}(Error),p=function(e,t,r,n){try{e(r(n))}catch(e){t(e)}},l=0,d=function(){function e(t,r){var n=this;this.id=l++,this._isCanceled=!1,this._isPending=!0,this._cancelHandlers=[],this._children=[],this._cancelPromise=new Promise((function(e,t){n._setCanceledCallback=function(t){return e(t||new a)}}));var o=[this._cancelPromise,new Promise((function(r,o){return t((function(t){t instanceof e?n.attach(t):n._isPending=!1,r(t)}),(function(e){n._isPending=!1,o(e)}),(function(e){if(!n._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");n._cancelHandlers.push(e)}))}))];r&&o.push(new Promise((function(e,t){setTimeout((function(){if(n._isPending)try{n.cancel()}finally{t(new h)}}),r)}))),this._promise=Promise.race(o)}return e.createControl=function(e){return new f(e)},e.resolve=function(t){return new e((function(e){return e(t)}))},e.reject=function(t){return new e((function(e,r){return r(t)}))},e.all=function(t){var r=this;return new e((function(e,r){Promise.all(t).then(e).catch(r)})).catch((function(e){if(e instanceof r.CancelError)for(var n=0,o=t;n<o.length;n++){var i=o[n];"cancel"in i&&i.cancel()}throw e}))},e.prototype.attach=function(e){this._isCanceled?e.cancel():this._children.push(e)},e.prototype.then=function(t,r){var n=this,o=new e((function(e,o){if(n._promise){var i=function(t){r?p(e,o,r,t):o(t)};n._promise.then((function(r){n._isCanceled?i(r):t?p(e,o,t,r):e(r)}),i)}}));return o._parentPromise=this,this._children.push(o),o},e.prototype.catch=function(e){return this._isCanceled&&e&&e(new a),this.then(void 0,e)},e.prototype.finally=function(e){return this._promise?this._promise.finally(e):Promise.reject(this._isCanceled?new a:e)},e.prototype.cancel=function(){if(this._isCanceled||!this._isPending)return this;this._isCanceled=!0;var e=this._getTopParent();if(e&&e.cancel(),this._children&&this._children.forEach((function(e){return e.cancel()})),this._isPending){if(this._cancelHandlers.length)try{for(var t=0,r=this._cancelHandlers;t<r.length;t++){(0,r[t])()}}catch(e){}this._setCanceledCallback&&this._setCanceledCallback()}return this._destroy(),this},e.prototype._getTopParent=function(){for(var e=this._parentPromise,t=!!e;t;)t=!(!e||!e._parentPromise)&&!!(e=e._parentPromise);return e},e.prototype._destroy=function(){this._setCanceledCallback=void 0,this._cancelPromise=void 0,this._promise=void 0},e.CancelError=a,e.TimeoutError=h,e.PromiseControl=f,e}();Object.setPrototypeOf(d.prototype,Promise.prototype);var v=d;function y(e){return null!=e}function m(e,t,r,n){if(e instanceof Array)return t instanceof Array&&t.sort().join("")===e.sort().join("");if(e instanceof Date)return t instanceof Date&&""+e==""+t;if(e instanceof Function){if(!(t instanceof Function))return!1}else if(e instanceof Object)return t instanceof Object&&(e===r?t===n:g(e,t));return e===t}function g(e,t){var r=Object.keys(e).sort(),n=Object.keys(t).sort();if(r.length!==n.length)return!1;if(r.join("")!==n.join(""))return!1;for(var o=0;o<r.length;o++){if(!m(e[r[o]],t[n[o]],e,t))return!1}return!0}function b(e){var t={};return Object.keys(e).forEach((function(r){e[r]instanceof Array||e[r]!==Object(e[r])?void 0!==e[r]&&(t[r]=e[r]):t[r]=b(e[r])})),t}function w(e){return e.replace(/([^:]\/)\/+/g,"$1")}var _,O=function(e){e&&function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=0,o=t;n<o.length;n++)for(var i=o[n],s=0,u=Object.getOwnPropertyNames(i);s<u.length;s++){var c=u[s];e[c]=i[c]}}(this,e)},E=0,x=function(e){function t(t){var r=e.call(this,t)||this;return r.providers=[],t&&t.providers&&(r.providers=t.providers),r}return r(t,e),t.prototype.abort=function(){this.providers.forEach((function(e){e.abort&&e.abort()}))},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,i,u,a,f,h,p,l;return o(this,(function(o){switch(o.label){case 0:t=0,r=this.providers,o.label=1;case 1:if(!(t<r.length))return[3,19];i=r[t],o.label=2;case 2:o.trys.push([2,17,,18]),u=i.search(e),o.label=3;case 3:o.trys.push([3,10,11,16]),p=void 0,a=c(u),o.label=4;case 4:return[4,s(a.next())];case 5:return(f=o.sent()).done?[3,9]:[4,s(n(n({},f.value),{provider:i,_id:E++}))];case 6:return[4,o.sent()];case 7:o.sent(),o.label=8;case 8:return[3,4];case 9:return[3,16];case 10:return h=o.sent(),p={error:h},[3,16];case 11:return o.trys.push([11,,14,15]),f&&!f.done&&(l=a.return)?[4,s(l.call(a))]:[3,13];case 12:o.sent(),o.label=13;case 13:return[3,15];case 14:if(p)throw p.error;return[7];case 15:return[7];case 16:return[3,18];case 17:return o.sent(),[3,18];case 18:return t++,[3,1];case 19:return[2]}}))}))},t.prototype.result=function(e){return e.provider?e.provider.result(e):v.resolve(void 0)},t}(O),P=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),t}(O),L={exports:{}},j="object"==typeof Reflect?Reflect:null,C=j&&"function"==typeof j.apply?j.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};_=j&&"function"==typeof j.ownKeys?j.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var R=Number.isNaN||function(e){return e!=e};function I(){I.init.call(this)}L.exports=I,L.exports.once=function(e,t){return new Promise((function(r,n){function o(r){e.removeListener(t,i),n(r)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),r([].slice.call(arguments))}H(e,t,i,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&H(e,"error",t,r)}(e,o,{once:!0})}))},I.EventEmitter=I,I.prototype._events=void 0,I.prototype._eventsCount=0,I.prototype._maxListeners=void 0;var T=10;function S(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function k(e){return void 0===e._maxListeners?I.defaultMaxListeners:e._maxListeners}function q(e,t,r,n){var o,i,s,u;if(S(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),s=i[t]),void 0===s)s=i[t]=r,++e._eventsCount;else if("function"==typeof s?s=i[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(o=k(e))>0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,u=c,console&&console.warn&&console.warn(u)}return e}function N(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function F(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=N.bind(n);return o.listener=r,n.wrapFn=o,o}function U(e,t,r){var n=e._events;if(void 0===n)return[];var o=n[t];return void 0===o?[]:"function"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(o):M(o,o.length)}function A(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function M(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}function H(e,t,r,n){if("function"==typeof e.on)n.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(i){n.once&&e.removeEventListener(t,o),r(i)}))}}Object.defineProperty(I,"defaultMaxListeners",{enumerable:!0,get:function(){return T},set:function(e){if("number"!=typeof e||e<0||R(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");T=e}}),I.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},I.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||R(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},I.prototype.getMaxListeners=function(){return k(this)},I.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n="error"===e,o=this._events;if(void 0!==o)n=n&&void 0===o.error;else if(!n)return!1;if(n){var i;if(t.length>0&&(i=t[0]),i instanceof Error)throw i;var s=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw s.context=i,s}var u=o[e];if(void 0===u)return!1;if("function"==typeof u)C(u,this,t);else{var c=u.length,a=M(u,c);for(r=0;r<c;++r)C(a[r],this,t)}return!0},I.prototype.on=I.prototype.addListener=function(e,t){return q(this,e,t,!1)},I.prototype.prependListener=function(e,t){return q(this,e,t,!0)},I.prototype.once=function(e,t){return S(t),this.on(e,F(this,e,t)),this},I.prototype.prependOnceListener=function(e,t){return S(t),this.prependListener(e,F(this,e,t)),this},I.prototype.off=I.prototype.removeListener=function(e,t){var r,n,o,i,s;if(S(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(o=-1,i=r.length-1;i>=0;i--)if(r[i]===t||r[i].listener===t){s=r[i].listener,o=i;break}if(o<0)return this;0===o?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,o),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",e,s||t)}return this},I.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var o,i=Object.keys(r);for(n=0;n<i.length;++n)"removeListener"!==(o=i[n])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},I.prototype.listeners=function(e){return U(this,e,!0)},I.prototype.rawListeners=function(e){return U(this,e,!1)},I.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):A.call(e,t)},I.prototype.listenerCount=A,I.prototype.eventNames=function(){return this._eventsCount>0?_(this._events):[]};var B,G=function(){function e(){return this.cache=[],e.instance?e.instance:(e.instance=this,this)}return e.prototype.clean=function(){this.cache.length=0},e.prototype.all=function(){return this.cache},e.prototype.add=function(e,t,r){var n=this,o=this._find(e,r);if(o)return o.value;var i=void 0;i=t instanceof Function?t():t;var s=r&&JSON.parse(JSON.stringify(b(r)));return this.cache.push({key:e,value:i,options:s}),i instanceof Promise?(i.catch((function(t){throw n.delete(e,r),t})),i):i},e.prototype.match=function(e,t){var r=this._find(e,t);if(r)return r.value},e.prototype.matchAll=function(e,t){var r=this;return e?this.cache.filter((function(n){return r._filter(n,e,t)})).map((function(e){return e.value})):this.cache.map((function(e){return e.value}))},e.prototype.delete=function(e,t){for(var r=this,n=0,o=this.cache.filter((function(n){return r._filter(n,e,t)}));n<o.length;n++){var i=this.cache.indexOf(o[n]);this.cache.splice(i,1)}},e.prototype._find=function(e,t){var r=this;return this.cache.find((function(n){return r._filter(n,e,t)}))},e.prototype._filter=function(e,t,r){return e.key===t&&(!r||g(e.options||{},b(r)))},e}(),D=function(e){function t(r){var n=e.call(this)||this;return n.name="NgwError",Object.assign(n,r),Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(Error),z=function(e){function t(r){var n=e.call(this)||this;return n.name="NetworkError",Object.setPrototypeOf(n,t.prototype),n.message="Unable to request "+r+".\n Possibly invalid NGW URL entered or CORS not configured to get request from "+location.origin,n}return r(t,e),t}(Error);B=function(e,t,r,n,o){void 0===r&&(r={}),r.method=r.method||"GET";var i=new XMLHttpRequest;i.open(r.method||"GET",e,!0),"blob"===r.responseType&&(i.responseType=r.responseType);var s=function(){try{return JSON.parse(i.responseText)}catch(e){return i.responseText}};i.onload=function(){-1!==[401,403,404,500].indexOf(i.status)&&n(new D(s())),function(e){void 0===e&&(e=!1);var o=e?n:t;"blob"===r.responseType?o(i.response):i.responseText?o(s()):n({message:""})}()},i.onerror=function(t){n(0===i.status?new z(e):t)},i.upload.onprogress=function(e){e.lengthComputable&&(r.onProgress&&r.onProgress(e.loaded/e.total*100,e))};var u,c=r.headers;if(c)for(var a in c){var f=c[a];"string"==typeof f&&i.setRequestHeader(a,f)}if(void 0!==r.withCredentials&&(i.withCredentials=r.withCredentials),r.file){if((u=new FormData).append("file",r.file),r.data)for(var h in u)u.append(h,u[h])}else u=r.data?"string"==typeof r.data?r.data:JSON.stringify(r.data):null;o&&o((function(){i.abort()})),i.send(u)};var J=/\{ *([\w_-]+) *\}/g;function Q(e,t){return e.replace(J,(function(e,r){var n=t[r];if(void 0===n)throw new Error("No value provided for letiable "+e);return"function"==typeof n&&(n=n(t)),n}))}var W=function(e){function t(r){var n=e.call(this,r)||this;return n.name="ResourceNotFoundError",n.exception="nextgisweb.resource.exception.ResourceNotFound",Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(D),K=function(e){function t(r){var n=e.call(this,r)||this;return n.name="InsufficientPermissionsError",n.exception="nextgisweb.core.exception.InsufficientPermissions",Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(D),X=[];function $(e){X.push(e)}function V(e){return"[object Object]"===Object.prototype.toString.call(e)}function Y(e,t){void 0===t&&(t=""),t=t?t+"__":"";var r={};return Object.entries(e).forEach((function(e){var n=e[0],o=e[1];if(V(o)){var i=Y(o,n);Object.assign(r,i)}else y(o)&&(r[t+n]=o)})),r}var Z=function(){function e(e){this.connector=e,this.cache=new G}return e.prototype.getOne=function(e,t){var r=this;return(new G).add("resource",(function(){return"string"==typeof e?r._fetchResourceBy({keyname:e},t):"number"==typeof e?r._fetchResourceById(e,t):V(e)?r._fetchResourceBy(e,t):v.resolve(void 0)}),{resource:e})},e.prototype.getOneOrFail=function(e){return this.getOne(e).then((function(e){if(e)return e;throw new W}))},e.prototype.getId=function(e){return"number"==typeof e?v.resolve(e):"string"==typeof e||V(e)?this.getOne(e).then((function(e){if(e)return e.resource.id})):v.resolve(void 0)},e.prototype.getIdOrFail=function(e){return this.getId(e).then((function(e){if(void 0===e)throw new Error;return e}))},e.prototype.getMany=function(e,t){var r=this;return this._resourceCacheFilter(e).then((function(o){if(!o.length){var i={};return e.keyname?i.keyname=e.keyname:Object.assign(i,Y(e)),r.connector.get("resource.search",t,n({serialization:"full"},i)).then((function(e){return e&&e.forEach((function(e){r.cache.add("resource.item",v.resolve(e),{id:e.resource.id})})),e}))}return o}))},e.prototype.getParent=function(e){var t=this;return this.connector.getResource(e).then((function(e){return e?t.connector.getResource(e.resource.parent.id):v.resolve(void 0)}))},e.prototype.getChildrenOf=function(e){var t=this;return this.getId(e).then((function(e){return t.connector.get("resource.collection",{cache:!0},{parent:e}).then((function(e){for(var r=0,n=e;r<n.length;r++){var o=n[r];t.cache.add("resource.item",v.resolve(o),{id:o.resource.id})}return e}))}))},e.prototype.update=function(e,t){var r=this;return this.getId(e).then((function(e){if(void 0!==e)return r.connector.put("resource.item",{data:t},{id:e})}))},e.prototype.delete=function(e){var t=this;return this.getId(e).then((function(e){if(void 0!==e)return t.connector.delete("resource.item",null,{id:e}).then((function(){t.cache.delete("resource.item",{id:e})}))}))},e.prototype._fetchResourceById=function(e,t){var r=this;return this.cache.add("resource.item",(function(){return r.connector.get("resource.item",t,{id:e})}),{id:e}).catch((function(e){if(!(e instanceof W))throw e}))},e.prototype._fetchResourceBy=function(e,t){return this.getMany(e,t).then((function(e){return e[0]}))},e.prototype._resourceCacheFilter=function(e){return v.all(this.cache.matchAll("resource.item")).then((function(t){return t.filter((function(t){if(t)return e.keyname&&t.resource.keyname?e.keyname===t.resource.keyname:y(e.id)&&y(t.resource.id)?e.id===t.resource.id:g(e,t.resource)})),[]}))},e}();var ee=0,te=function(){function e(e){this.options=e,this.id=ee++,this.emitter=new L.exports.EventEmitter,this.routeStr="/api/component/pyramid/route";var t=function(e){return X.find((function(t){if(t.options.baseUrl===e.baseUrl){if(!e.auth)return!0;if(t.options.auth)return g(t.options.auth,e.auth)}}))}(e);if(t)return t;this.options.route&&(this.routeStr=this.options.route),this.resources=new Z(this),$(this)}return e.create=function(e){return new this(e)},e.prototype.setNgw=function(e){this.logout(),this.options.baseUrl=e,$(this)},e.prototype.connect=function(){var e=this,t=new G,r=this.options.auth;return t.add("route",(function(){return new v((function(t,n){var o=function(){return e.makeQuery(e.routeStr,{},{}).then((function(e){t(e)})).catch((function(e){n(e)}))};if(r){var i=r.login,s=r.password;if(i&&s)return e.getUserInfo({login:i,password:s}).then((function(){o()})).catch((function(e){return n(e)}))}return o()}))}),{id:this.id,auth:r,baseUrl:this.options.baseUrl})},e.prototype.login=function(e){return this.logout(),$(this),this.getUserInfo(e)},e.prototype.logout=function(){var e;-1!==(e=X.indexOf(this))&&X.splice(e,1),this.options.auth=void 0,this.user=void 0,this.emitter.emit("logout"),this.resources.cache.clean()},e.prototype.getUserInfo=function(e){var t=this;if(this.user&&this.user.id)return v.resolve(this.user);e&&(this.options.auth=e);var r={headers:this.getAuthorizationHeaders(e)};return this.makeQuery("/api/component/auth/current_user",{},r).then((function(e){return t.user=e,t.emitter.emit("login",e),e})).catch((function(e){throw t.emitter.emit("login:error",e),e}))},e.prototype.getAuthorizationHeaders=function(e){var t=this.makeClientId(e);if(t)return{Authorization:"Basic "+t}},e.prototype.makeClientId=function(e){if(e=e||this.options.auth){var t=unescape(encodeURIComponent(e.login+":"+e.password));return window.btoa(t)}},e.prototype.apiRequest=function(e,t,r){var o=this;void 0===t&&(t={}),void 0===r&&(r={});var i=r.method,s=r.headers,u=r.withCredentials,c=r.responseType,a=b(t),f=function(){return function(e){var t=e.params;return new v((function(r,n){e.connector.connect().then((function(o){var i=o&&o[e.name];if(i){var s=(i=function(e,t){for(var r=0,n=t.length,o=e.length;r<n;r++,o++)e[o]=t[r];return e}([],i)).shift();if(i.length){for(var u={},c=0;c<i.length;c++){var a=i[c];if(u[c]="{"+a+"}",void 0===t[a])throw new Error("`"+a+"` url api argument is not specified")}s&&(s=Q(s,u))}if(t){var f=[],h=t.paramList;for(var p in Array.isArray(h)&&(delete t.paramList,h.forEach((function(e){f.push(e[0]+"="+e[1])}))),t)-1===i.indexOf(p)&&f.push(p+"="+t[p]);f.length&&(s=s+"?"+f.join("&"))}s?r(e.connector.makeQuery(s,t,e.requestOptions)):n(new Error("request url is not set"))}else r(void 0)})).catch((function(e){n(e)}))}))}({name:e,params:a,requestOptions:r,connector:o})};return r.cache&&"GET"===i?(new G).add(e,f,n({params:a},b({headers:s,withCredentials:u,responseType:c,baseUrl:this.options.baseUrl,auth:this.options.auth}))):f()},e.prototype.post=function(e,t,r){return(t=t||{}).method="POST",this.apiRequest(e,r,t)},e.prototype.get=function(e,t,r){return(t=t||{}).method="GET",this.apiRequest(e,r,t)},e.prototype.patch=function(e,t,r){return(t=t||{}).method="PATCH",this.apiRequest(e,r,t)},e.prototype.put=function(e,t,r){return(t=t||{}).method="PUT",this.apiRequest(e,r,t)},e.prototype.delete=function(e,t,r){return(t=t||{}).method="DELETE",this.apiRequest(e,r,t)},e.prototype.makeQuery=function(e,t,r){if(void 0===r&&(r={}),e=(this.options.baseUrl?this.options.baseUrl:"")+e)return t&&(e=Q(e,t)),e=w(e),this._loadData(e,r);throw new Error("Empty `url` not allowed")},e.prototype.getResource=function(e){return this.resources.getOne(e)},e.prototype.getResourceOrFail=function(e){return this.resources.getOneOrFail(e)},e.prototype.getResourceBy=function(e){return this.resources.getOne(e)},e.prototype.getResourceByKeyname=function(e){return this.resources.getOne(e)},e.prototype.getResourceById=function(e){return this.resources.getOne(e)},e.prototype.getResourceId=function(e){return this.resources.getId(e)},e.prototype.getResourceIdOrFail=function(e){return this.resources.getIdOrFail(e)},e.prototype.getResourcesBy=function(e){return this.resources.getMany(e)},e.prototype.getResourceParent=function(e){return this.resources.getParent(e)},e.prototype.getResourceChildren=function(e){return this.resources.getChildrenOf(e)},e.prototype.updateResource=function(e,t){return this.resources.update(e,t)},e.prototype.deleteResource=function(e){return this.resources.delete(e)},e.prototype._loadData=function(e,t){var r=this;return t.responseType=t.responseType||"json",new v((function(o,i,s){r.user&&((t=t||{}).headers=n(n({},r.getAuthorizationHeaders()),t.headers)),B(e,o,t,i,s)})).catch((function(e){if(e instanceof v.CancelError);else{var t=r._handleHttpError(e);if(t)throw t}}))},e.prototype._handleHttpError=function(e){if(e&&e instanceof D){if("nextgisweb.resource.exception.ResourceNotFound"===e.exception)throw new W(e);if("nextgisweb.core.exception.InsufficientPermissions"===e.exception)throw new K(e)}return e},e.errors={NgwError:D,ResourceNotFoundError:W},e}(),re=function(e){function t(t){var r=e.call(this,t)||this;return r.caseInsensitive=!0,r.searchUrl="https://maxim.nextgis.com",r.searchResources=[],r.requests=[],r.connector=t.connector||new te({baseUrl:r.searchUrl}),r.searchResources=t.searchResources,r}return r(t,e),t.prototype.abort=function(){this.requests.forEach((function(e){e.cancel()})),this.requests=[]},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,i,u,c=this;return o(this,(function(a){switch(a.label){case 0:t=function(t){var i,u,a,f,h,p;return o(this,(function(l){switch(l.label){case 0:return i=r.connector.get("feature_layer.store",{headers:{RANGE:"items=0-"+(t.limit||300)}},{id:t.id,like:e}),r.requests.push(i),i.catch((function(e){console.log(e)})),[4,s(i)];case 1:u=l.sent(),a=[],u&&u.forEach((function(r){a.push(n({query:e,resourceId:t.id},r))})),f=function(e){return o(this,(function(t){switch(t.label){case 0:return e.result=function(){return c.result(e)},[4,s(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},h=0,p=r._items(a),l.label=2;case 2:return h<p.length?[5,f(p[h])]:[3,5];case 3:l.sent(),l.label=4;case 4:return h++,[3,2];case 5:return[2]}}))},r=this,i=0,u=this.searchResources,a.label=1;case 1:return i<u.length?[5,t(u[i])]:[3,4];case 2:a.sent(),a.label=3;case 3:return i++,[3,1];case 4:return[2]}}))}))},t.prototype.result=function(e){var t=this.connector.get("feature_layer.feature.item_extent",null,{id:e.resourceId,fid:e.featureId}).then((function(t){var r=t.extent;return{text:e.text,extent:[r.minLon,r.minLat,r.maxLon,r.maxLat]}}));return this.requests.push(t),t},t.prototype._items=function(e){var t=this,r=[];return e.forEach((function(e){t.searchResources.find((function(t){return t.id===e.resourceId}))&&r.push({query:e.query,text:e.label,featureId:e.id,resourceId:e.resourceId})})),r},t}(P),ne=function(e){function t(t){var r=e.call(this,t)||this;return r.searchUrl="https://nominatim.openstreetmap.org",r._requests=[],r}return r(t,e),t.prototype.abort=function(){this._requests.forEach((function(e){return e.cancel()})),this._requests=[]},t.prototype.search=function(e){return u(this,arguments,(function(){var t,r,n,i,u,c,a=this;return o(this,(function(f){switch(f.label){case 0:return t=w(this.searchUrl+"/search?format=geojson&polygon_geojson=1&q="+e),r=new v((function(r,n,o){var i=new XMLHttpRequest;i.open("GET",t,!0),i.onload=function(){try{var t=JSON.parse(i.responseText).features.map((function(t){return{geom:t,extent:t.bbox,text:t.properties&&t.properties.display_name,query:e}}));r(t)}catch(e){n(e)}},i.onerror=function(e){n(e)},o((function(){i.abort()})),i.send()})).catch((function(e){throw e})),this._requests.push(r),[4,s(r)];case 1:if(!(n=f.sent()))return[3,5];i=function(e){return o(this,(function(t){switch(t.label){case 0:return e.result=function(){return a.result(e)},[4,s(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},u=0,c=n,f.label=2;case 2:return u<c.length?[5,i(c[u])]:[3,5];case 3:f.sent(),f.label=4;case 4:return u++,[3,2];case 5:return[2]}}))}))},t.prototype.result=function(e){return v.resolve({text:e.text,extent:e.extent||[],geom:e.geom})},t}(P);return e.BaseProvider=P,e.Geocoder=x,e.NgwProvider=re,e.NominatimProvider=ne,e.create=function(e){return new x(e)},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
16
+ //# sourceMappingURL=geocoder.global.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geocoder.global.prod.js","sources":["../../cancelable-promise/src/CancelError.ts","../../cancelable-promise/src/PromiseControl.ts","../../cancelable-promise/src/TimeoutError.ts","../../cancelable-promise/src/CancelablePromise.ts","../../cancelable-promise/src/index.ts","../../utils/src/defined.ts","../../utils/src/object/objectDeepEqual.ts","../../utils/src/object/objectRemoveEmpty.ts","../../utils/src/url.ts","../src/BaseGeocoder.ts","../../../node_modules/events/events.js","../../utils/src/object/objectAssign.ts","../src/Geocoder.ts","../src/providers/BaseProvider.ts","../../cache/src/Cache.ts","../../ngw-connector/src/utils/loadData.ts","../../ngw-connector/src/errors/NgwError.ts","../../ngw-connector/src/errors/NetworkError.ts","../../ngw-connector/src/utils/template.ts","../../ngw-connector/src/errors/ResourceNotFoundError.ts","../../ngw-connector/src/errors/InsufficientPermissionsError.ts","../../ngw-connector/src/activeConnectors.ts","../../ngw-connector/src/utils/isObject.ts","../../ngw-connector/src/utils/resourceToQuery.ts","../../ngw-connector/src/ResourcesControl.ts","../../ngw-connector/src/utils/resourceCompare.ts","../../ngw-connector/src/NgwConnector.ts","../../ngw-connector/src/utils/apiRequest.ts","../src/providers/NgwProvider.ts","../src/providers/NominatimProvider.ts","../src/index.ts"],"sourcesContent":["export class CancelError extends Error {\n name = 'CancelError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, CancelError.prototype);\n }\n}\n","import CancelablePromise from '.';\n\nexport interface PromiseControlOptions {\n onStart?: () => void;\n onStop?: () => void;\n}\n\ntype Key = CancelablePromise | string | number | symbol;\n\nexport class PromiseControl {\n private _promises: Map<Key, CancelablePromise> = new Map();\n\n get isLoaded(): boolean {\n return this._promises.size > 0;\n }\n\n constructor(private options: PromiseControlOptions = {}) {}\n\n remove(promise: Key): void {\n if (this._promises.has(promise)) {\n this._promises.delete(promise);\n this._onStop();\n }\n }\n\n get(promise: Key): CancelablePromise | undefined {\n return this._promises.get(promise);\n }\n\n add<T extends CancelablePromise = CancelablePromise>(\n promise: T,\n name?: string | number | symbol,\n ): CancelablePromise<T> {\n const key = name ? name : promise;\n const exist = this._promises.get(key);\n if (this.options.onStart && !this.isLoaded) {\n this.options.onStart();\n }\n if (exist) {\n return exist;\n }\n this._promises.set(key, promise);\n promise.finally(() => {\n this.remove(key);\n });\n return promise;\n }\n\n abort(): void {\n if (this.isLoaded) {\n this._promises.forEach((x) => {\n if (x.cancel) {\n x.cancel();\n }\n });\n this._promises.clear();\n this._onStop();\n }\n }\n\n waitFunc<T>(func: () => any, name = ''): CancelablePromise<T> {\n name = name || func.name;\n const exist = this.get(name);\n if (exist) {\n return exist;\n }\n return this.add(func(), name);\n }\n\n WaitForMe(name: string | symbol = ''): MethodDecorator {\n const get = this.get.bind(this);\n const add = this.add.bind(this);\n return function (\n target: unknown,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n name = name || key;\n descriptor.value = function (...args: any[]) {\n const exist = get(name);\n if (exist) {\n return exist;\n }\n const result = add(originalMethod.apply(this, args), name);\n return result;\n };\n\n return descriptor;\n };\n }\n\n /** @deprecated use {@link PromiseControl.WaitForMe } instead */\n GetOrCreateDecorator(name: string | symbol = ''): MethodDecorator {\n return this.WaitForMe(name);\n }\n\n private _onStop(): void {\n if (this.options.onStop && !this.isLoaded) {\n this.options.onStop();\n }\n }\n}\n","export class TimeoutError extends Error {\n name = 'TimeoutError';\n\n constructor() {\n super();\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n","import { CancelError } from './CancelError';\nimport { PromiseControl, PromiseControlOptions } from './PromiseControl';\nimport { TimeoutError } from './TimeoutError';\n\ntype Reject = (reason?: any) => void;\ntype Resolve = (value?: any) => void;\nexport type OnCancelFunction = (cancelHandler: () => void) => void;\n\nconst handleCallback = <T = never>(\n resolve: Resolve,\n reject: Reject,\n callback: Resolve,\n r: T,\n) => {\n try {\n resolve(callback(r));\n } catch (e) {\n reject(e);\n }\n};\n\nlet ID = 0;\n\n/**\n * Promise that can be canceled\n *\n * @example\n * Catch `CancelError`\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject) => {\n * setTimeout(() => resolve(), 100);\n * }).catch((er) => {\n * if (er.name === \"CancelError\") {\n * // handle cancel error\n * }\n * throw er;\n * });\n *\n * promise.cancel();\n * ```\n * @example\n * Handle `onCancel` callback\n * ```javascript\n * import CancelablePromise from \"@nextgis/cancelable-promise\";\n *\n * const promise = new CancelablePromise((resolve, reject, onCancel) => {\n * const xhr = new XMLHttpRequest();\n * xhr.open(\"GET\", url, true);\n * xhr.onload = () => {\n * resolve(xhr.responseText);\n * };\n * xhr.onerror = (er) => {\n * reject(er);\n * };\n *\n * onCancel(() => {\n * xhr.abort();\n * });\n *\n * xhr.send();\n * });\n *\n * promise.cancel();\n * ```\n */\nexport class CancelablePromise<T = any> implements Promise<T> {\n static CancelError = CancelError;\n static TimeoutError = TimeoutError;\n static PromiseControl = PromiseControl;\n\n readonly [Symbol.toStringTag]: string;\n readonly id = ID++;\n private _isCanceled = false;\n private _isPending = true;\n private _promise?: Promise<T>;\n private _cancelPromise?: Promise<T>;\n private _cancelHandlers: (() => void)[] = [];\n private _setCanceledCallback?: (er?: any) => void;\n private _parentPromise?: CancelablePromise;\n private _children: CancelablePromise[] = [];\n\n constructor(\n executor: (\n resolve: (value?: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancelFunction,\n ) => void,\n timeout?: number,\n ) {\n this._cancelPromise = new Promise<any>((resolve_, reject_) => {\n this._setCanceledCallback = (er) => resolve_(er || new CancelError());\n });\n const promises = [\n this._cancelPromise,\n new Promise<T>((resolve, reject) => {\n const onResolve = (value?: T | PromiseLike<T>) => {\n if (value instanceof CancelablePromise) {\n this.attach(value);\n } else {\n this._isPending = false;\n }\n // TODO: fix types, `undefined` not allowed since 19.12.2020\n resolve(value as T | PromiseLike<T>);\n };\n\n const onReject = (error: any) => {\n this._isPending = false;\n reject(error);\n };\n\n const onCancel: OnCancelFunction = (handler) => {\n if (!this._isPending) {\n throw new Error(\n 'The `onCancel` handler was attached after the promise settled.',\n );\n }\n\n this._cancelHandlers.push(handler);\n };\n\n return executor(onResolve, onReject, onCancel);\n }),\n ];\n if (timeout) {\n promises.push(\n new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._isPending) {\n try {\n this.cancel();\n } finally {\n reject(new TimeoutError());\n }\n }\n }, timeout);\n }),\n );\n }\n this._promise = Promise.race(promises);\n }\n\n static createControl(opt?: PromiseControlOptions): PromiseControl {\n return new PromiseControl(opt);\n }\n\n static resolve<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve) => resolve(value));\n }\n\n static reject<T>(value: T | PromiseLike<T>): CancelablePromise<T> {\n return new CancelablePromise((resolve, reject) => reject(value));\n }\n\n static all<T>(values: (T | PromiseLike<T>)[]): CancelablePromise<T[]> {\n return new CancelablePromise((resolve, reject) => {\n Promise.all(values).then(resolve).catch(reject);\n }).catch((er) => {\n if (er instanceof this.CancelError) {\n for (const v of values) {\n if ('cancel' in v) {\n (v as CancelablePromise).cancel();\n }\n }\n }\n throw er;\n });\n }\n\n attach(p: CancelablePromise): void {\n if (this._isCanceled) {\n p.cancel();\n } else {\n this._children.push(p);\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?:\n | ((value: T) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): CancelablePromise<TResult1 | TResult2> {\n const p = new CancelablePromise((resolve, reject) => {\n if (this._promise) {\n const reject_ = (r: any) => {\n if (onrejected) {\n handleCallback(resolve, reject, onrejected, r);\n } else {\n reject(r);\n }\n };\n this._promise.then((r) => {\n if (this._isCanceled) {\n reject_(r);\n } else {\n if (onfulfilled) {\n handleCallback(resolve, reject, onfulfilled, r);\n } else {\n resolve(r);\n }\n }\n }, reject_);\n }\n });\n p._parentPromise = this;\n this._children.push(p);\n return p as CancelablePromise<TResult1 | TResult2>;\n }\n\n catch<TResult = never>(\n onrejected?:\n | ((reason: Error) => TResult | PromiseLike<TResult>)\n | undefined\n | null,\n ): CancelablePromise<T | TResult> {\n if (this._isCanceled && onrejected) {\n onrejected(new CancelError());\n }\n return this.then(undefined, onrejected);\n }\n\n finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n if (this._promise) {\n return this._promise.finally(onfinally);\n }\n if (this._isCanceled) {\n return Promise.reject(new CancelError());\n }\n return Promise.reject<T>(onfinally);\n }\n\n cancel(): this {\n // No reason to run cancel action if promise is already complete\n if (this._isCanceled || !this._isPending) {\n return this;\n }\n this._isCanceled = true;\n const parent = this._getTopParent();\n if (parent) {\n parent.cancel();\n }\n\n if (this._children) {\n this._children.forEach((x) => x.cancel());\n }\n\n if (this._isPending) {\n if (this._cancelHandlers.length) {\n try {\n for (const handler of this._cancelHandlers) {\n handler();\n }\n } catch (error) {\n // this._setCanceledCallback(error);\n }\n }\n if (this._setCanceledCallback) {\n this._setCanceledCallback();\n }\n }\n this._destroy();\n\n return this;\n }\n\n private _getTopParent() {\n let parent = this._parentPromise;\n let hasParent = !!parent;\n while (hasParent) {\n if (parent && parent._parentPromise) {\n parent = parent._parentPromise;\n hasParent = !!parent;\n } else {\n hasParent = false;\n }\n }\n return parent;\n }\n\n private _destroy() {\n this._setCanceledCallback = undefined;\n this._cancelPromise = undefined;\n this._promise = undefined;\n }\n}\n\nObject.setPrototypeOf(CancelablePromise.prototype, Promise.prototype);\n","/**\n * A promise you can stop\n *\n * @packageDocumentation\n * @module cancelable-promise\n */\nimport { CancelablePromise } from './CancelablePromise';\n\nexport default CancelablePromise;\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","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 fixUrlStr(url: string): string {\n // remove double slash\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n}\n","import { objectAssign } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { SearchItem } from './types/SearchItem';\n\nexport abstract class BaseGeocoder<\n O extends Record<string, any> = Record<string, any>,\n> {\n constructor(options?: O) {\n if (options) {\n objectAssign(this, options);\n }\n }\n\n abstract search(query: string): AsyncGenerator<SearchItem>;\n\n abstract result(item: SearchItem): CancelablePromise<any>;\n\n abstract abort?(): void;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","export function objectAssign<T, U>(target: T, source: U): T & U;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n */\nexport function objectAssign<T, U, V>(\n target: T,\n source1: U,\n source2: V,\n): T & U & V;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source1 - The first source object from which to copy properties.\n * @param source2 - The second source object from which to copy properties.\n * @param source3 - The third source object from which to copy properties.\n */\nexport function objectAssign<T, U, V, W>(\n target: T,\n source1: U,\n source2: V,\n source3: W,\n): T & U & V & W;\n\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param sources - One or more source objects from which to copy properties\n */\nexport function objectAssign(\n target: Record<string, unknown>,\n ...sources: any[]\n): any {\n for (const source of sources) {\n for (const prop of Object.getOwnPropertyNames(source)) {\n (target as any)[prop] = source[prop];\n }\n }\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './providers/BaseProvider';\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { BaseGeocoder } from './BaseGeocoder';\nimport { SearchItem } from './types/SearchItem';\n\nlet ID = 0;\n\nexport class Geocoder extends BaseGeocoder<GeocoderOptions> {\n providers: BaseProvider[] = [];\n\n constructor(options: GeocoderOptions) {\n super(options);\n if (options && options.providers) {\n this.providers = options.providers;\n }\n }\n\n abort(): void {\n this.providers.forEach((x) => {\n if (x.abort) {\n x.abort();\n }\n });\n }\n\n async *search(query: string): AsyncGenerator<SearchItem, void, unknown> {\n for (const provider of this.providers) {\n try {\n const results = provider.search(query);\n\n for await (const r of results) {\n yield { ...r, provider, _id: ID++ };\n }\n } catch (er) {\n //\n }\n }\n }\n\n result(item: SearchItem): CancelablePromise<any> {\n if (item.provider) {\n return item.provider.result(item);\n }\n return CancelablePromise.resolve(undefined);\n }\n}\n","import { BaseProviderOptions } from './BaseProviderOptions';\nimport { BaseGeocoder } from '../BaseGeocoder';\n\nexport abstract class BaseProvider<\n O extends BaseProviderOptions = BaseProviderOptions,\n> extends BaseGeocoder<O> {\n searchUrl?: string;\n label?: string;\n}\n","import { objectDeepEqual, objectRemoveEmpty } from '@nextgis/utils';\n\ntype CacheValue<T> = T;\ntype CacheOptions<T> = Record<keyof T, T[keyof T]>;\n\ninterface CacheItem<T extends any = any, O = any> {\n key: string;\n value: CacheValue<T>;\n options?: CacheOptions<O>;\n}\n\nexport class Cache<\n T extends any = any,\n O extends Record<string, any> = Record<string, any>,\n> {\n private static instance: Cache<any, any>;\n private readonly cache: CacheItem<T, O>[] = [];\n\n constructor() {\n if (Cache.instance) {\n return Cache.instance;\n }\n\n Cache.instance = this;\n\n return this;\n }\n\n clean(): void {\n this.cache.length = 0;\n }\n\n all(): CacheItem<T, O>[] {\n return this.cache;\n }\n\n add(\n key: string,\n valueToSet: CacheValue<T> | (() => CacheValue<T>),\n options?: CacheOptions<O>,\n ): CacheValue<T> {\n const exist = this._find(key, options);\n if (!exist) {\n let value: CacheValue<T>;\n if (valueToSet instanceof Function) {\n value = valueToSet();\n } else {\n value = valueToSet;\n }\n const options_ =\n options && JSON.parse(JSON.stringify(objectRemoveEmpty(options)));\n\n const cacheItem = {\n key,\n value,\n options: options_,\n } as CacheItem<T, O>;\n\n this.cache.push(cacheItem);\n if (value instanceof Promise) {\n value.catch((er) => {\n this.delete(key, options);\n throw er;\n });\n return value;\n }\n return value;\n } else {\n return exist.value;\n }\n }\n\n match(key: string, options?: CacheOptions<O>): CacheValue<T> | undefined {\n const cacheRecord = this._find(key, options);\n\n if (cacheRecord) {\n return cacheRecord.value;\n }\n }\n\n matchAll(key?: string, options?: CacheOptions<O>): CacheValue<T>[] {\n if (key) {\n return this.cache\n .filter((x) => this._filter(x, key, options))\n .map((x) => x.value);\n }\n return this.cache.map((x) => x.value);\n }\n\n delete(key: string, options?: CacheOptions<O>): void {\n const exist = this.cache.filter((x) => this._filter(x, key, options));\n for (const e of exist) {\n const index = this.cache.indexOf(e);\n this.cache.splice(index, 1);\n }\n }\n\n private _find(\n key: string,\n options?: CacheOptions<O>,\n ): CacheItem<T> | undefined {\n return this.cache.find((x) => this._filter(x, key, options));\n }\n\n private _filter(\n item: CacheItem,\n key: string,\n options?: CacheOptions<O>,\n ): boolean {\n if (item.key === key) {\n if (options) {\n return objectDeepEqual(item.options || {}, objectRemoveEmpty(options));\n }\n return true;\n }\n return false;\n }\n}\n","import {\n RequestOptions as NgwRequestOptions,\n RequestMethods,\n} from '../interfaces';\nimport { NgwError } from '../errors/NgwError';\nimport { NetworkError } from '../errors/NetworkError';\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, 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 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\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 request = new Promise((resolve, reject) => {\n const adapter = adapterFor(url);\n if (adapter) {\n const requestOpt = {\n headers: options.headers || {},\n method: options.method,\n };\n const body =\n typeof options.data === 'string'\n ? options.data\n : JSON.stringify(options.data);\n // https://stackoverflow.com/questions/35589109/node-http-delete-request-no-longer-works-after-upgrading-from-0-10-40\n if (body !== undefined && options.method !== 'POST') {\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 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 // throw new Error(er);\n }\n if (json !== undefined) {\n resolve(json);\n }\n }\n reject('no data');\n });\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 { 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?: NgwError) {\n super();\n Object.assign(this, er);\n Object.setPrototypeOf(this, NgwError.prototype);\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","// 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 { NgwError } from './NgwError';\nimport { 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 { NgwError } from './NgwError';\nimport { 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 { NgwConnectorOptions } from './interfaces';\nimport { NgwConnector } from './NgwConnector';\nimport { objectDeepEqual } from '@nextgis/utils';\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 function isObject(val: unknown): val is Record<string | number, any> {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n","import { DeepPartial, defined } from '@nextgis/utils';\nimport { Resource } from '../types/ResourceItem';\nimport { isObject } from './isObject';\n\n/**\n * ```\n * { keyname, parent: { id }} > { keyname, parent__id }\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 Object.entries(resource).forEach(([key, value]) => {\n if (isObject(value)) {\n const children = resourceToQuery(value as DeepPartial<Resource>, key);\n Object.assign(query, children);\n } else if (defined(value)) {\n query[prefix + key] = value;\n }\n });\n return query;\n}\n","import CancelablePromise from '@nextgis/cancelable-promise';\nimport { defined } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { resourceToQuery } from './utils/resourceToQuery';\nimport { resourceCompare } from './utils/resourceCompare';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\n\nimport { isObject } from './utils/isObject';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { NgwConnector } from './NgwConnector';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport type { RequestOptions, ResourceDefinition } from './interfaces';\n\nexport class ResourcesControl {\n cache = new Cache<\n CancelablePromise<ResourceItem | undefined>,\n { id?: number }\n >();\n\n constructor(private connector: NgwConnector) {}\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,\n ): CancelablePromise<ResourceItem | undefined> {\n const cache = new Cache();\n const makeRequest = () => {\n if (typeof resource === 'string') {\n return this._fetchResourceBy({ keyname: resource }, requestOptions);\n } else if (typeof resource === 'number') {\n return this._fetchResourceById(resource, requestOptions);\n } else if (isObject(resource)) {\n return this._fetchResourceBy(resource, requestOptions);\n }\n return CancelablePromise.resolve(undefined);\n };\n return cache.add('resource', makeRequest, { resource });\n }\n\n getOneOrFail(resource: ResourceDefinition): CancelablePromise<ResourceItem> {\n return this.getOne(resource).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(resource: ResourceDefinition): CancelablePromise<number | undefined> {\n if (typeof resource === 'number') {\n return CancelablePromise.resolve(resource);\n } else if (typeof resource === 'string' || isObject(resource)) {\n return this.getOne(resource).then((res) => {\n if (res) {\n return res.resource.id;\n }\n });\n }\n return CancelablePromise.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(resource: ResourceDefinition): CancelablePromise<number> {\n return this.getId(resource).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,\n ): CancelablePromise<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 (resources) {\n resources.forEach((x) => {\n this.cache.add('resource.item', CancelablePromise.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 ): CancelablePromise<ResourceItem | undefined> {\n return this.connector.getResource(resource).then((child) => {\n if (child) {\n return this.connector.getResource(child.resource.parent.id);\n }\n return CancelablePromise.resolve(undefined);\n });\n }\n\n getChildrenOf(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.getId(resource).then((parent) => {\n return this.connector\n .get(\n 'resource.collection',\n { cache: true },\n {\n parent,\n },\n )\n .then((items) => {\n for (const i of items) {\n this.cache.add('resource.item', CancelablePromise.resolve(i), {\n id: i.resource.id,\n });\n }\n return items;\n });\n });\n }\n\n update(\n resource: ResourceDefinition,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<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): CancelablePromise<void> {\n return this.getId(resource).then((id) => {\n if (id !== undefined) {\n return this.connector.delete('resource.item', null, { id }).then(() => {\n this.cache.delete('resource.item', { id });\n return undefined;\n });\n }\n });\n }\n\n private _fetchResourceById(\n id: number,\n requestOptions?: RequestOptions,\n ): CancelablePromise<ResourceItem | undefined> {\n const promise = () =>\n this.connector.get('resource.item', requestOptions, { id });\n\n return this.cache\n .add('resource.item', promise, {\n id,\n })\n .catch((er) => {\n if (!(er instanceof ResourceNotFoundError)) {\n throw er;\n }\n return undefined;\n });\n }\n\n private _fetchResourceBy(\n resource: DeepPartial<Resource>,\n requestOptions?: RequestOptions,\n ): CancelablePromise<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 ): CancelablePromise<ResourceItem[]> {\n return CancelablePromise.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';\nimport type { DeepPartial } from '@nextgis/utils';\nimport type { Resource } from '../types/ResourceItem';\n\nexport function resourceCompare(\n res1: DeepPartial<Resource>,\n res2: DeepPartial<Resource>,\n): boolean {\n return objectDeepEqual(res1, res2);\n}\n","import { EventEmitter } from 'events';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { objectRemoveEmpty } from '@nextgis/utils';\nimport { fixUrlStr } from '@nextgis/utils';\nimport Cache from '@nextgis/cache';\n\nimport { loadData } from './utils/loadData';\nimport { template } from './utils/template';\nimport { NgwError } from './errors/NgwError';\nimport { ResourceNotFoundError } from './errors/ResourceNotFoundError';\nimport { InsufficientPermissionsError } from './errors/InsufficientPermissionsError';\nimport {\n addConnector,\n findConnector,\n removeConnector,\n} from './activeConnectors';\nimport { ResourcesControl } from './ResourcesControl';\n\nimport type { DeepPartial } from '@nextgis/utils';\nimport type {\n DeleteRequestItemsResponseMap,\n PatchRequestItemsResponseMap,\n PostRequestItemsResponseMap,\n GetRequestItemsResponseMap,\n PutRequestItemsResponseMap,\n ResourceIdKeynameDef,\n NgwConnectorOptions,\n ResourceDefinition,\n RequestItemsParams,\n RequestItemKeys,\n RequestHeaders,\n RequestOptions,\n PyramidRoute,\n Credentials,\n UserInfo,\n Params,\n} from './interfaces';\nimport type { RequestItemsParamsMap } from './types/RequestItemsParamsMap';\nimport type { ResourceItem, Resource } from './types/ResourceItem';\nimport { apiRequest } from './utils/apiRequest';\n\nlet ID = 0;\n\nexport class NgwConnector {\n static errors = {\n NgwError,\n ResourceNotFoundError,\n };\n id = ID++;\n\n emitter = new EventEmitter();\n user?: UserInfo;\n\n resources!: ResourcesControl;\n\n private routeStr = '/api/component/pyramid/route';\n\n constructor(public options: NgwConnectorOptions) {\n const exist = findConnector(options);\n if (exist) {\n return exist;\n } else {\n if (this.options.route) {\n this.routeStr = this.options.route;\n }\n this.resources = new ResourcesControl(this);\n addConnector(this);\n }\n }\n\n static create(options: NgwConnectorOptions): NgwConnector {\n return new this(options);\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 NgwConnector.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 connect(): CancelablePromise<PyramidRoute> {\n const cache = new Cache();\n const auth = this.options.auth;\n const makeConnect = () =>\n new CancelablePromise((resolve, reject) => {\n const makeQuery = () => {\n return this.makeQuery(this.routeStr, {}, {})\n .then((route: PyramidRoute) => {\n resolve(route);\n })\n .catch((er) => {\n reject(er);\n });\n };\n if (auth) {\n const { login, password } = auth;\n if (login && password) {\n return this.getUserInfo({ login, password })\n .then(() => {\n makeQuery();\n })\n .catch((er) => reject(er));\n }\n }\n return makeQuery();\n });\n return cache.add('route', makeConnect, {\n id: this.id,\n auth,\n baseUrl: this.options.baseUrl,\n });\n }\n\n /**\n * Quick way to change NextGIS Web user.\n * @param credentials - New user credentials\n */\n login(credentials: Credentials): CancelablePromise<UserInfo> {\n this.logout();\n addConnector(this);\n return this.getUserInfo(credentials);\n }\n\n /**\n * Disconnecting a user. Aborting all current requests\n */\n logout(): void {\n removeConnector(this);\n this.options.auth = undefined;\n this.user = undefined;\n this.emitter.emit('logout');\n this.resources.cache.clean();\n }\n\n getUserInfo(credentials?: Credentials): CancelablePromise<UserInfo> {\n if (this.user && this.user.id) {\n return CancelablePromise.resolve(this.user);\n }\n if (credentials) {\n this.options.auth = credentials;\n }\n const options: RequestOptions = {\n headers: this.getAuthorizationHeaders(credentials),\n // withCredentials: true\n };\n\n // Do not use request('auth.current_user') to avoid circular-references\n return this.makeQuery('/api/component/auth/current_user', {}, options)\n .then((data: UserInfo) => {\n this.user = data;\n this.emitter.emit('login', data);\n return data;\n })\n .catch((er) => {\n this.emitter.emit('login:error', er);\n throw er;\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 = unescape(encodeURIComponent(`${login}:${password}`));\n // @ts-ignore\n if (__BROWSER__) {\n return window.btoa(str);\n } else {\n return Buffer.from(str).toString('base64');\n }\n }\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 ): CancelablePromise<P[K]> {\n const { method, headers, withCredentials, responseType } = requestOptions;\n const params = objectRemoveEmpty(params_);\n const makeApiRequest = () =>\n apiRequest({ name, params, requestOptions, connector: this });\n if (requestOptions.cache && method === 'GET') {\n const cache = new Cache<CancelablePromise<P[K]>>();\n return cache.add(name, makeApiRequest, {\n params,\n ...objectRemoveEmpty({\n headers,\n withCredentials,\n responseType,\n baseUrl: this.options.baseUrl,\n auth: this.options.auth,\n }),\n });\n }\n return makeApiRequest();\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'>,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 | undefined | null,\n params?: RequestItemsParams<K>,\n ): CancelablePromise<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 makeQuery(\n url: string,\n params?: Params,\n options: RequestOptions = {},\n ): CancelablePromise<any> {\n url = (this.options.baseUrl ? this.options.baseUrl : '') + url;\n if (url) {\n if (params) {\n url = template(url, params);\n }\n // remove double slash\n url = fixUrlStr(url);\n return this._loadData(url, options);\n } else {\n throw new Error('Empty `url` not allowed');\n }\n }\n\n // -------------------------------------------------------------------------\n // Resource Methods\n // -------------------------------------------------------------------------\n\n /**\n * {@inheritDoc ResourcesControl.getOne}\n */\n getResource(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getOneOrFail}\n */\n getResourceOrFail(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem> {\n return this.resources.getOneOrFail(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(resource);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceByKeyname(\n keyname: string,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(keyname);\n }\n\n /**\n * @deprecated - use {@link NgwConnector.getResource}\n */\n getResourceById(id: number): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getOne(id);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getId}\n */\n getResourceId(\n resource: ResourceDefinition,\n ): CancelablePromise<number | undefined> {\n return this.resources.getId(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getIdOrFail}\n */\n getResourceIdOrFail(resource: ResourceDefinition): CancelablePromise<number> {\n return this.resources.getIdOrFail(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getMany}\n */\n getResourcesBy(\n resource: DeepPartial<Resource>,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getMany(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getParent}\n */\n getResourceParent(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.getParent(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.getChildrenOf}\n */\n getResourceChildren(\n resource: ResourceDefinition,\n ): CancelablePromise<ResourceItem[]> {\n return this.resources.getChildrenOf(resource);\n }\n\n /**\n * {@inheritDoc ResourcesControl.update}\n */\n updateResource(\n resource: ResourceIdKeynameDef,\n data: DeepPartial<ResourceItem>,\n ): CancelablePromise<ResourceItem | undefined> {\n return this.resources.update(resource, data);\n }\n\n /**\n * {@inheritDoc ResourcesControl.delete}\n */\n deleteResource(resource: ResourceIdKeynameDef): CancelablePromise<void> {\n return this.resources.delete(resource);\n }\n\n /**\n * @internal\n */\n protected _loadData(\n url: string,\n options: RequestOptions,\n ): CancelablePromise<any> {\n options.responseType = options.responseType || 'json';\n return new CancelablePromise((resolve, reject, onCancel) => {\n if (this.user) {\n options = options || {};\n // options.withCredentials = true;\n options.headers = {\n ...this.getAuthorizationHeaders(),\n ...options.headers,\n };\n }\n loadData(url, resolve, options, reject, onCancel);\n }).catch((httpError) => {\n if (httpError instanceof CancelablePromise.CancelError) {\n // not need to handle cancel error because onCancel method is used\n } else {\n // @ts-ignore\n if (__DEV__) {\n console.warn(httpError);\n }\n const er = this._handleHttpError(httpError);\n if (er) {\n throw er;\n }\n }\n });\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 CancelablePromise from '@nextgis/cancelable-promise';\nimport { template } from './template';\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 function apiRequest<\n K extends keyof RequestItemsParamsMap,\n P extends RequestItemKeys = RequestItemKeys,\n>(opt: ApiRequestOptions<K>): CancelablePromise<P[K]> {\n const params = opt.params;\n return new CancelablePromise((resolve, reject) => {\n opt.connector\n .connect()\n .then((apiItems) => {\n let apiItem = apiItems && apiItems[opt.name];\n if (apiItem) {\n apiItem = [...apiItem];\n let url = apiItem.shift();\n if (apiItem.length) {\n const replaceParams: {\n [num: number]: string;\n } = {};\n for (let fry = 0; fry < apiItem.length; fry++) {\n const arg = apiItem[fry];\n replaceParams[fry] = '{' + arg + '}';\n if (params[arg] === undefined) {\n throw new Error(\n '`' + arg + '`' + ' url api argument is not specified',\n );\n }\n }\n if (url) {\n url = template(url, replaceParams);\n }\n }\n // Transfer part of the parameters from `params` to the URL string\n if (params) {\n const paramArray = [];\n const paramList = params.paramList;\n if (Array.isArray(paramList)) {\n delete params.paramList;\n paramList.forEach((x) => {\n paramArray.push(`${x[0]}=${x[1]}`);\n });\n }\n for (const p in params) {\n if (apiItem.indexOf(p) === -1) {\n paramArray.push(`${p}=${params[p]}`);\n }\n }\n if (paramArray.length) {\n url = url + '?' + paramArray.join('&');\n }\n }\n if (url) {\n resolve(opt.connector.makeQuery(url, params, opt.requestOptions));\n } else {\n reject(new Error('request url is not set'));\n }\n } else {\n resolve(undefined);\n }\n })\n .catch((er) => {\n reject(er);\n });\n });\n}\n","import NgwConnector, { ResourceStoreItem } from '@nextgis/ngw-connector';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\ninterface NgwSearchItem extends SearchItem {\n resourceId: number;\n featureId: number;\n}\n\ninterface SearchResource {\n id: number;\n limit?: number;\n}\n\ninterface NgwProviderOptions extends BaseProviderOptions {\n connector?: NgwConnector;\n searchResources: SearchResource[];\n}\n\nexport class NgwProvider extends BaseProvider<NgwProviderOptions> {\n caseInsensitive = true;\n searchUrl = 'https://maxim.nextgis.com';\n searchResources: SearchResource[] = [];\n private connector: NgwConnector;\n private requests: CancelablePromise[] = [];\n\n constructor(options: NgwProviderOptions) {\n super(options);\n\n this.connector =\n options.connector ||\n new NgwConnector({\n baseUrl: this.searchUrl,\n });\n this.searchResources = options.searchResources;\n }\n\n abort(): void {\n this.requests.forEach((x) => {\n x.cancel();\n });\n this.requests = [];\n }\n\n async *search(like: string): AsyncGenerator<NgwSearchItem, void, unknown> {\n for (const resource of this.searchResources) {\n const limit = resource.limit || 300;\n const request = this.connector.get(\n 'feature_layer.store',\n {\n headers: { RANGE: `items=0-${limit}` },\n },\n {\n id: resource.id,\n like,\n },\n );\n this.requests.push(request);\n request.catch((er) => {\n console.log(er);\n });\n const resp = await request;\n const entries: ResourceStoreItem[] = [];\n if (resp) {\n resp.forEach((x) => {\n entries.push({\n query: like,\n resourceId: resource.id,\n ...x,\n });\n });\n }\n for (const item of this._items(entries)) {\n item.result = () => this.result(item);\n yield item;\n }\n }\n }\n\n result(item: NgwSearchItem): CancelablePromise<ResultItem> {\n const req = this.connector\n .get('feature_layer.feature.item_extent', null, {\n id: item.resourceId,\n fid: item.featureId,\n })\n .then((x) => {\n const e = x.extent;\n return {\n text: item.text,\n extent: [e.minLon, e.minLat, e.maxLon, e.maxLat],\n };\n });\n this.requests.push(req);\n return req;\n }\n\n _items(entries: ResourceStoreItem[]): NgwSearchItem[] {\n const items: NgwSearchItem[] = [];\n entries.forEach((entry) => {\n const meta = this.searchResources.find((x) => x.id === entry.resourceId);\n if (meta) {\n items.push({\n query: entry.query,\n text: entry.label,\n featureId: entry.id,\n resourceId: entry.resourceId,\n });\n }\n });\n return items;\n }\n}\n","import { fixUrlStr } from '@nextgis/utils';\nimport CancelablePromise from '@nextgis/cancelable-promise';\nimport { BaseProvider } from './BaseProvider';\nimport { BaseProviderOptions } from './BaseProviderOptions';\nimport { FeatureCollection } from 'geojson';\nimport { SearchItem } from '../types/SearchItem';\nimport { ResultItem } from '../types/ResultItem';\n\nexport class NominatimProvider extends BaseProvider {\n searchUrl = 'https://nominatim.openstreetmap.org';\n\n private _requests: CancelablePromise[] = [];\n\n constructor(options?: BaseProviderOptions) {\n super(options);\n }\n\n abort(): void {\n this._requests.forEach((x) => x.cancel());\n this._requests = [];\n }\n\n async *search(val: string): AsyncGenerator<SearchItem, void, unknown> {\n // RFC2616 accept - language string\n const url = fixUrlStr(\n // `${this.baseUrl}/search?format=geojson&polygon_geojson=1${window.locale === 'ru' ? '&accept-language=ru-RU,en-US' : ''}&q=${val}`\n `${this.searchUrl}/search?format=geojson&polygon_geojson=1&q=${val}`,\n );\n const request = new CancelablePromise<SearchItem[]>(\n (resolve, reject, onCancel) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onload = () => {\n try {\n const geojson = JSON.parse(xhr.responseText) as FeatureCollection;\n const features: SearchItem[] = geojson.features.map((x) => {\n return {\n geom: x,\n extent: x.bbox,\n text: x.properties && x.properties.display_name,\n query: val,\n };\n });\n resolve(features);\n } catch (er) {\n reject(er);\n }\n };\n\n xhr.onerror = (er) => {\n reject(er);\n };\n\n onCancel(() => {\n xhr.abort();\n });\n\n xhr.send();\n },\n ).catch((er) => {\n if (er.name === 'CancelError') {\n //\n }\n throw er;\n });\n this._requests.push(request);\n const items = await request;\n if (items) {\n for (const i of items) {\n i.result = () => this.result(i);\n yield i;\n }\n }\n }\n\n result(model: SearchItem): CancelablePromise<ResultItem> {\n return CancelablePromise.resolve({\n text: model.text,\n extent: model.extent || [],\n geom: model.geom,\n });\n }\n}\n","/**\n * Modern geocoder on async generators. May use different data providers.\n *\n * @packageDocumentation\n * @module geocoder\n */\nimport { GeocoderOptions } from './GeocoderOptions';\nimport { Geocoder } from './Geocoder';\n\nexport { Geocoder, GeocoderOptions };\nexport { BaseProvider } from './providers/BaseProvider';\nexport { NgwProvider } from './providers/NgwProvider';\nexport { NominatimProvider } from './providers/NominatimProvider';\n\nexport * from './providers/BaseProviderOptions';\nexport * from './types/ResultItem';\nexport * from './types/SearchItem';\n\nexport function create(options: GeocoderOptions): Geocoder {\n return new Geocoder(options);\n}\n"],"names":["_super","_this","Object","setPrototypeOf","CancelError","prototype","__extends","Error","options","this","Map","PromiseControl","_promises","size","promise","has","delete","_onStop","get","name","key","exist","onStart","isLoaded","set","finally","remove","forEach","x","cancel","clear","func","add","bind","target","descriptor","originalMethod","value","_i","args","result","apply","WaitForMe","onStop","TimeoutError","handleCallback","resolve","reject","callback","r","e","ID","executor","timeout","_cancelPromise","Promise","resolve_","reject_","_setCanceledCallback","er","promises","CancelablePromise","attach","_isPending","error","handler","_cancelHandlers","push","setTimeout","_promise","race","opt","values","all","then","catch","values_1","v","p","_isCanceled","_children","onfulfilled","onrejected","reject_1","_parentPromise","undefined","onfinally","parent","_getTopParent","length","_a","_destroy","hasParent","defined","val","isEqual","a","b","o","Array","sort","join","Date","Function","objectDeepEqual","keysO","keys","keysP","i","objectRemoveEmpty","obj","newObj","fixUrlStr","url","replace","ReflectOwnKeys","sources","sources_1","source","_c","getOwnPropertyNames","_b","prop","objectAssign","providers","Geocoder","abort","query","provider","results","search","results_1","__asyncValues","_id","item","BaseGeocoder","R","Reflect","ReflectApply","receiver","call","ownKeys","getOwnPropertySymbols","concat","NumberIsNaN","Number","isNaN","EventEmitter","init","exports","once","emitter","errorListener","err","removeListener","resolver","slice","arguments","eventTargetAgnosticAddListener","flags","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","type","prepend","m","events","existing","warning","create","newListener","emit","unshift","warned","w","String","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","message","context","len","listeners","addListener","prependListener","prependOnceListener","off","list","position","originalListener","shift","index","pop","spliceOne","removeAllListeners","rawListeners","eventNames","loadData","Cache","instance","cache","valueToSet","_find","options_","JSON","parse","stringify","cacheRecord","filter","_filter","map","exist_1","indexOf","splice","find","assign","NgwError","NetworkError","location","origin","onCancel","method","xhr","XMLHttpRequest","open","responseType","getResponseText","responseText","onload","status","forError","cb","response","processingResponse","onerror","upload","onprogress","lengthComputable","onProgress","loaded","total","data","headers","h","header","setRequestHeader","withCredentials","file","FormData","append","d","send","templateRe","template","str","s","ResourceNotFoundError","InsufficientPermissionsError","CONNECTORS","addConnector","connector","isObject","toString","resourceToQuery","resource","prefix","entries","children","ResourcesControl","requestOptions","_fetchResourceBy","keyname","_fetchResourceById","getOne","res","id","getId","resp","_resourceCacheFilter","items","serialization","resources","getResource","child","items_1","put","getMany","matchAll","baseUrl","auth","findConnector","route","routeStr","NgwConnector","logout","makeQuery","login","password","getUserInfo","credentials","user","clean","getAuthorizationHeaders","client","makeClientId","Authorization","unescape","encodeURIComponent","window","btoa","params_","params","makeApiRequest","connect","apiItems","apiItem","replaceParams","fry","paramArray_1","paramList","isArray","apiRequest","_loadData","getOneOrFail","getIdOrFail","getParent","getChildrenOf","update","httpError","_handleHttpError","exception","searchUrl","searchResources","NgwProvider","requests","like","request","this_1","RANGE","limit","log","_e","resourceId","_f","_d","_items","req","fid","featureId","extent","text","minLon","minLat","maxLon","maxLat","entry","label","BaseProvider","NominatimProvider","_requests","features","geom","bbox","properties","display_name","model"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextgis/geocoder",
3
- "version": "1.3.0",
3
+ "version": "1.7.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "module": "lib/geocoder.esm-bundler.js",
@@ -8,15 +8,15 @@
8
8
  "jsdelivr": "lib/geocoder.global.prod.js",
9
9
  "types": "lib/index.d.ts",
10
10
  "dependencies": {
11
- "@nextgis/cancelable-promise": "^1.2.3",
12
- "@nextgis/ngw-connector": "^1.3.0",
13
- "@nextgis/utils": "^1.3.0",
11
+ "@nextgis/cancelable-promise": "^1.7.0",
12
+ "@nextgis/ngw-connector": "^1.7.0",
13
+ "@nextgis/utils": "^1.7.0",
14
14
  "@types/events": "^3.0.0",
15
15
  "@types/geojson": "^7946.0.8",
16
16
  "events": "^3.3.0"
17
17
  },
18
18
  "devDependencies": {
19
- "@nextgis/build-tools": "^1.2.0"
19
+ "@nextgis/build-tools": "^1.7.0"
20
20
  },
21
21
  "buildOptions": {
22
22
  "name": "Geocoder",
@@ -52,5 +52,5 @@
52
52
  "bugs": {
53
53
  "url": "https://github.com/nextgis/nextgis_frontend/issues"
54
54
  },
55
- "gitHead": "7a95475ae3a33c5b428d81c8e04b361a18344938"
55
+ "gitHead": "a3113b03e87540abf798c1151d3243a1e20c8607"
56
56
  }