@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.
@@ -1 +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.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":[],"mappings":"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"}
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.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":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e from"@nextgis/cancelable-promise";import{objectAssign as t,fixUrlStr as r}from"@nextgis/utils";import n from"@nextgis/ngw-connector";var o=function(e,t){return o=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])},o(e,t)};function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var u=function(){return u=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},u.apply(this,arguments)};function c(e,t){var r,n,o,s,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function c(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;u;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return u.label++,{value:s[1],done:!1};case 5:u.label++,n=s[1],s=[0];continue;case 7:s=u.ops.pop(),u.trys.pop();continue;default:if(!(o=u.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){u=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){u.label=s[1];break}if(6===s[0]&&u.label<o[1]){u.label=o[1],o=s;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(s);break}o[2]&&u.ops.pop(),u.trys.pop();continue}s=t.call(e,u)}catch(c){s=[6,c],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}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 a(e){return this instanceof a?(this.v=e,this):new a(e)}function l(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,o=r.apply(e,t||[]),s=[];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){s.push([e,t,r,n])>1||c(e,t)}))})}function c(e,t){try{(r=o[e](t)).value instanceof a?Promise.resolve(r.value.v).then(i,l):f(s[0][2],r)}catch(n){f(s[0][3],n)}var r}function i(e){c("next",e)}function l(e){c("throw",e)}function f(e,t){e(t),s.shift(),s.length&&c(s[0][0],s[0][1])}}function f(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 h=function(e){e&&t(this,e)},p=0,y=function(t){function r(e){var r=t.call(this,e)||this;return r.providers=[],e&&e.providers&&(r.providers=e.providers),r}return s(r,t),r.prototype.abort=function(){this.providers.forEach((function(e){e.abort&&e.abort()}))},r.prototype.search=function(e){return l(this,arguments,(function(){var t,r,n,o,s,i,l,h,y;return c(this,(function(c){switch(c.label){case 0:t=0,r=this.providers,c.label=1;case 1:if(!(t<r.length))return[3,19];n=r[t],c.label=2;case 2:c.trys.push([2,17,,18]),o=n.search(e),c.label=3;case 3:c.trys.push([3,10,11,16]),h=void 0,s=f(o),c.label=4;case 4:return[4,a(s.next())];case 5:return(i=c.sent()).done?[3,9]:[4,a(u(u({},i.value),{provider:n,_id:p++}))];case 6:return[4,c.sent()];case 7:c.sent(),c.label=8;case 8:return[3,4];case 9:return[3,16];case 10:return l=c.sent(),h={error:l},[3,16];case 11:return c.trys.push([11,,14,15]),i&&!i.done&&(y=s.return)?[4,a(y.call(s))]:[3,13];case 12:c.sent(),c.label=13;case 13:return[3,15];case 14:if(h)throw h.error;return[7];case 15:return[7];case 16:return[3,18];case 17:return c.sent(),[3,18];case 18:return t++,[3,1];case 19:return[2]}}))}))},r.prototype.result=function(t){return t.provider?t.provider.result(t):e.resolve(void 0)},r}(h),b=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return s(t,e),t}(h),v=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 n({baseUrl:r.searchUrl}),r.searchResources=t.searchResources,r}return s(t,e),t.prototype.abort=function(){this.requests.forEach((function(e){e.cancel()})),this.requests=[]},t.prototype.search=function(e){return l(this,arguments,(function(){var t,r,n,o,s=this;return c(this,(function(i){switch(i.label){case 0:t=function(t){var n,o,i,l,f,h;return c(this,(function(p){switch(p.label){case 0:return n=r.connector.get("feature_layer.store",{headers:{RANGE:"items=0-".concat(t.limit||300)}},{id:t.id,like:e}),r.requests.push(n),n.catch((function(e){console.warn(e)})),[4,a(n)];case 1:o=p.sent(),i=[],o&&o.forEach((function(r){i.push(u({query:e,resourceId:t.id},r))})),l=function(e){return c(this,(function(t){switch(t.label){case 0:return e.result=function(){return s.result(e)},[4,a(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},f=0,h=r._items(i),p.label=2;case 2:return f<h.length?[5,l(h[f])]:[3,5];case 3:p.sent(),p.label=4;case 4:return f++,[3,2];case 5:return[2]}}))},r=this,n=0,o=this.searchResources,i.label=1;case 1:return n<o.length?[5,t(o[n])]:[3,4];case 2:i.sent(),i.label=3;case 3:return n++,[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}(b),d=function(t){function n(e){var r=t.call(this,e)||this;return r.searchUrl="https://nominatim.openstreetmap.org",r._requests=[],r}return s(n,t),n.prototype.abort=function(){this._requests.forEach((function(e){return e.cancel()})),this._requests=[]},n.prototype.search=function(t){return l(this,arguments,(function(){var n,o,s,u,i,l,f=this;return c(this,(function(h){switch(h.label){case 0:return n=r("".concat(this.searchUrl,"/search?format=geojson&polygon_geojson=1&q=").concat(t)),o=new e((function(e,r,o){var s=new XMLHttpRequest;s.open("GET",n,!0),s.onload=function(){try{var n=JSON.parse(s.responseText).features.map((function(e){return{geom:e,extent:e.bbox,text:e.properties&&e.properties.display_name,query:t}}));e(n)}catch(o){r(o)}},s.onerror=function(e){r(e)},o((function(){s.abort()})),s.send()})).catch((function(e){throw e})),this._requests.push(o),[4,a(o)];case 1:if(!(s=h.sent()))return[3,5];u=function(e){return c(this,(function(t){switch(t.label){case 0:return e.result=function(){return f.result(e)},[4,a(e)];case 1:return[4,t.sent()];case 2:return t.sent(),[2]}}))},i=0,l=s,h.label=2;case 2:return i<l.length?[5,u(l[i])]:[3,5];case 3:h.sent(),h.label=4;case 4:return i++,[3,2];case 5:return[2]}}))}))},n.prototype.result=function(t){return e.resolve({text:t.text,extent:t.extent||[],geom:t.geom})},n}(b);function m(e){return new y(e)}export{b as BaseProvider,y as Geocoder,v as NgwProvider,d as NominatimProvider,m as create};
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 s of this.providers)try{const t=s.search(e);for await(const e of t)yield{...e,provider:s,_id:c++}}catch(t){}}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.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}}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(r){s(r)}},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
2
  //# sourceMappingURL=geocoder.esm-bundler.prod.js.map
@@ -1 +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.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","create"],"mappings":"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"}
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.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","NgwProvider","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","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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"}