@nextgis/geocoder 1.16.7 → 1.17.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.
- package/lib/geocoder.cjs.js +192 -441
- package/lib/geocoder.cjs.js.map +1 -1
- package/lib/geocoder.cjs.prod.js +1 -1
- package/lib/geocoder.cjs.prod.js.map +1 -1
- package/lib/geocoder.esm-browser.js +1778 -2134
- package/lib/geocoder.esm-browser.js.map +1 -1
- package/lib/geocoder.esm-browser.prod.js +1 -1
- package/lib/geocoder.esm-browser.prod.js.map +1 -1
- package/lib/geocoder.esm-bundler.js +192 -441
- package/lib/geocoder.esm-bundler.js.map +1 -1
- package/lib/geocoder.esm-bundler.prod.js +1 -1
- package/lib/geocoder.esm-bundler.prod.js.map +1 -1
- package/lib/geocoder.global.js +1993 -1984
- package/lib/geocoder.global.js.map +1 -1
- package/lib/geocoder.global.prod.js +1 -1
- package/lib/geocoder.global.prod.js.map +1 -1
- package/package.json +6 -6
package/lib/geocoder.cjs.js.map
CHANGED
|
@@ -1 +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.warn(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
|
+
{"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.warn(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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"}
|
package/lib/geocoder.cjs.prod.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@nextgis/cancelable-promise"),t=require("@nextgis/utils"),
|
|
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 s of this.providers)try{const t=s.search(e);for await(const e of t)yield{...e,provider:s,_id:n++}}catch(t){}}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.warn(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(s){r(s)}},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 t of c)t.result=()=>this.result(t),yield t}result(e){return o.resolve({text:e.text,extent:e.extent||[],geom:e.geom})}},exports.create=function(e){return new a(e)};
|
|
2
2
|
//# sourceMappingURL=geocoder.cjs.prod.js.map
|
|
@@ -1 +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.warn(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","options","objectAssign","this","ID","Geocoder","_super","_this","call","providers","__extends","prototype","abort","forEach","x","search","query","_a","_i","provider","results","e_1","results_1","__asyncValues","__await","__assign","_id","_c","sent","result","item","CancelablePromise","resolve","undefined","BaseProvider","NgwProvider","caseInsensitive","searchUrl","searchResources","requests","connector","NgwConnector","baseUrl","cancel","like","resource","request","this_1","get","headers","RANGE","concat","limit","id","push","catch","er","console","warn","resp","_e","entries","resourceId","_f","_d","_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","_b","items_1","model"],"mappings":"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"}
|
|
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.warn(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","caseInsensitive","searchUrl","searchResources","requests","connector","NgwConnector","baseUrl","cancel","like","resource","request","get","headers","RANGE","limit","id","push","catch","console","warn","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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"}
|