universal-geocoder
Version:
Universal geocoding abstraction server-side and client-side with multiple built-in providers
1,303 lines (1,181 loc) • 844 kB
JavaScript
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/cross-fetch/dist/browser-ponyfill.js":
/*!***********************************************************!*\
!*** ./node_modules/cross-fetch/dist/browser-ponyfill.js ***!
\***********************************************************/
/***/ (function(module, exports) {
var global = typeof self !== 'undefined' ? self : this;
var __self__ = (function () {
function F() {
this.fetch = false;
this.DOMException = global.DOMException
}
F.prototype = global;
return new F();
})();
(function(self) {
var irrelevant = (function (exports) {
var support = {
searchParams: 'URLSearchParams' in self,
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob:
'FileReader' in self &&
'Blob' in self &&
(function() {
try {
new Blob();
return true
} catch (e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
};
function isDataView(obj) {
return obj && DataView.prototype.isPrototypeOf(obj)
}
if (support.arrayBuffer) {
var viewClasses = [
'[object Int8Array]',
'[object Uint8Array]',
'[object Uint8ClampedArray]',
'[object Int16Array]',
'[object Uint16Array]',
'[object Int32Array]',
'[object Uint32Array]',
'[object Float32Array]',
'[object Float64Array]'
];
var isArrayBufferView =
ArrayBuffer.isView ||
function(obj) {
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
};
}
function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name);
}
if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
throw new TypeError('Invalid character in header field name')
}
return name.toLowerCase()
}
function normalizeValue(value) {
if (typeof value !== 'string') {
value = String(value);
}
return value
}
// Build a destructive iterator for the value list
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift();
return {done: value === undefined, value: value}
}
};
if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
};
}
return iterator
}
function Headers(headers) {
this.map = {};
if (headers instanceof Headers) {
headers.forEach(function(value, name) {
this.append(name, value);
}, this);
} else if (Array.isArray(headers)) {
headers.forEach(function(header) {
this.append(header[0], header[1]);
}, this);
} else if (headers) {
Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name]);
}, this);
}
}
Headers.prototype.append = function(name, value) {
name = normalizeName(name);
value = normalizeValue(value);
var oldValue = this.map[name];
this.map[name] = oldValue ? oldValue + ', ' + value : value;
};
Headers.prototype['delete'] = function(name) {
delete this.map[normalizeName(name)];
};
Headers.prototype.get = function(name) {
name = normalizeName(name);
return this.has(name) ? this.map[name] : null
};
Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name))
};
Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = normalizeValue(value);
};
Headers.prototype.forEach = function(callback, thisArg) {
for (var name in this.map) {
if (this.map.hasOwnProperty(name)) {
callback.call(thisArg, this.map[name], name, this);
}
}
};
Headers.prototype.keys = function() {
var items = [];
this.forEach(function(value, name) {
items.push(name);
});
return iteratorFor(items)
};
Headers.prototype.values = function() {
var items = [];
this.forEach(function(value) {
items.push(value);
});
return iteratorFor(items)
};
Headers.prototype.entries = function() {
var items = [];
this.forEach(function(value, name) {
items.push([name, value]);
});
return iteratorFor(items)
};
if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
}
function consumed(body) {
if (body.bodyUsed) {
return Promise.reject(new TypeError('Already read'))
}
body.bodyUsed = true;
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result);
};
reader.onerror = function() {
reject(reader.error);
};
})
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader();
var promise = fileReaderReady(reader);
reader.readAsArrayBuffer(blob);
return promise
}
function readBlobAsText(blob) {
var reader = new FileReader();
var promise = fileReaderReady(reader);
reader.readAsText(blob);
return promise
}
function readArrayBufferAsText(buf) {
var view = new Uint8Array(buf);
var chars = new Array(view.length);
for (var i = 0; i < view.length; i++) {
chars[i] = String.fromCharCode(view[i]);
}
return chars.join('')
}
function bufferClone(buf) {
if (buf.slice) {
return buf.slice(0)
} else {
var view = new Uint8Array(buf.byteLength);
view.set(new Uint8Array(buf));
return view.buffer
}
}
function Body() {
this.bodyUsed = false;
this._initBody = function(body) {
this._bodyInit = body;
if (!body) {
this._bodyText = '';
} else if (typeof body === 'string') {
this._bodyText = body;
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
this._bodyBlob = body;
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
this._bodyFormData = body;
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this._bodyText = body.toString();
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
this._bodyArrayBuffer = bufferClone(body.buffer);
// IE 10-11 can't handle a DataView body.
this._bodyInit = new Blob([this._bodyArrayBuffer]);
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
this._bodyArrayBuffer = bufferClone(body);
} else {
this._bodyText = body = Object.prototype.toString.call(body);
}
if (!this.headers.get('content-type')) {
if (typeof body === 'string') {
this.headers.set('content-type', 'text/plain;charset=UTF-8');
} else if (this._bodyBlob && this._bodyBlob.type) {
this.headers.set('content-type', this._bodyBlob.type);
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
}
}
};
if (support.blob) {
this.blob = function() {
var rejected = consumed(this);
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return Promise.resolve(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(new Blob([this._bodyArrayBuffer]))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as blob')
} else {
return Promise.resolve(new Blob([this._bodyText]))
}
};
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
} else {
return this.blob().then(readBlobAsArrayBuffer)
}
};
}
this.text = function() {
var rejected = consumed(this);
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return readBlobAsText(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as text')
} else {
return Promise.resolve(this._bodyText)
}
};
if (support.formData) {
this.formData = function() {
return this.text().then(decode)
};
}
this.json = function() {
return this.text().then(JSON.parse)
};
return this
}
// HTTP methods whose capitalization should be normalized
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
function normalizeMethod(method) {
var upcased = method.toUpperCase();
return methods.indexOf(upcased) > -1 ? upcased : method
}
function Request(input, options) {
options = options || {};
var body = options.body;
if (input instanceof Request) {
if (input.bodyUsed) {
throw new TypeError('Already read')
}
this.url = input.url;
this.credentials = input.credentials;
if (!options.headers) {
this.headers = new Headers(input.headers);
}
this.method = input.method;
this.mode = input.mode;
this.signal = input.signal;
if (!body && input._bodyInit != null) {
body = input._bodyInit;
input.bodyUsed = true;
}
} else {
this.url = String(input);
}
this.credentials = options.credentials || this.credentials || 'same-origin';
if (options.headers || !this.headers) {
this.headers = new Headers(options.headers);
}
this.method = normalizeMethod(options.method || this.method || 'GET');
this.mode = options.mode || this.mode || null;
this.signal = options.signal || this.signal;
this.referrer = null;
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
throw new TypeError('Body not allowed for GET or HEAD requests')
}
this._initBody(body);
}
Request.prototype.clone = function() {
return new Request(this, {body: this._bodyInit})
};
function decode(body) {
var form = new FormData();
body
.trim()
.split('&')
.forEach(function(bytes) {
if (bytes) {
var split = bytes.split('=');
var name = split.shift().replace(/\+/g, ' ');
var value = split.join('=').replace(/\+/g, ' ');
form.append(decodeURIComponent(name), decodeURIComponent(value));
}
});
return form
}
function parseHeaders(rawHeaders) {
var headers = new Headers();
// Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
// https://tools.ietf.org/html/rfc7230#section-3.2
var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
var parts = line.split(':');
var key = parts.shift().trim();
if (key) {
var value = parts.join(':').trim();
headers.append(key, value);
}
});
return headers
}
Body.call(Request.prototype);
function Response(bodyInit, options) {
if (!options) {
options = {};
}
this.type = 'default';
this.status = options.status === undefined ? 200 : options.status;
this.ok = this.status >= 200 && this.status < 300;
this.statusText = 'statusText' in options ? options.statusText : 'OK';
this.headers = new Headers(options.headers);
this.url = options.url || '';
this._initBody(bodyInit);
}
Body.call(Response.prototype);
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
};
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''});
response.type = 'error';
return response
};
var redirectStatuses = [301, 302, 303, 307, 308];
Response.redirect = function(url, status) {
if (redirectStatuses.indexOf(status) === -1) {
throw new RangeError('Invalid status code')
}
return new Response(null, {status: status, headers: {location: url}})
};
exports.DOMException = self.DOMException;
try {
new exports.DOMException();
} catch (err) {
exports.DOMException = function(message, name) {
this.message = message;
this.name = name;
var error = Error(message);
this.stack = error.stack;
};
exports.DOMException.prototype = Object.create(Error.prototype);
exports.DOMException.prototype.constructor = exports.DOMException;
}
function fetch(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init);
if (request.signal && request.signal.aborted) {
return reject(new exports.DOMException('Aborted', 'AbortError'))
}
var xhr = new XMLHttpRequest();
function abortXhr() {
xhr.abort();
}
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || '')
};
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
var body = 'response' in xhr ? xhr.response : xhr.responseText;
resolve(new Response(body, options));
};
xhr.onerror = function() {
reject(new TypeError('Network request failed'));
};
xhr.ontimeout = function() {
reject(new TypeError('Network request failed'));
};
xhr.onabort = function() {
reject(new exports.DOMException('Aborted', 'AbortError'));
};
xhr.open(request.method, request.url, true);
if (request.credentials === 'include') {
xhr.withCredentials = true;
} else if (request.credentials === 'omit') {
xhr.withCredentials = false;
}
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob';
}
request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value);
});
if (request.signal) {
request.signal.addEventListener('abort', abortXhr);
xhr.onreadystatechange = function() {
// DONE (success or failure)
if (xhr.readyState === 4) {
request.signal.removeEventListener('abort', abortXhr);
}
};
}
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
})
}
fetch.polyfill = true;
if (!self.fetch) {
self.fetch = fetch;
self.Headers = Headers;
self.Request = Request;
self.Response = Response;
}
exports.Headers = Headers;
exports.Request = Request;
exports.Response = Response;
exports.fetch = fetch;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
}({}));
})(__self__);
__self__.fetch.ponyfill = true;
// Remove "polyfill" property added by whatwg-fetch
delete __self__.fetch.polyfill;
// Choose between native implementation (global) or custom implementation (__self__)
// var ctx = global.fetch ? global : __self__;
var ctx = __self__; // this line disable service worker support temporarily
exports = ctx.fetch // To enable: import fetch from 'cross-fetch'
exports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.
exports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'
exports.Headers = ctx.Headers
exports.Request = ctx.Request
exports.Response = ctx.Response
module.exports = exports
/***/ }),
/***/ "./src/AdminLevel.ts":
/*!***************************!*\
!*** ./src/AdminLevel.ts ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "ADMIN_LEVEL_CODES": () => (/* binding */ ADMIN_LEVEL_CODES),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
// eslint-disable-next-line no-shadow
var ADMIN_LEVEL_CODES;
(function (ADMIN_LEVEL_CODES) {
ADMIN_LEVEL_CODES[ADMIN_LEVEL_CODES["STATE_CODE"] = 1] = "STATE_CODE";
ADMIN_LEVEL_CODES[ADMIN_LEVEL_CODES["COUNTY_CODE"] = 2] = "COUNTY_CODE";
})(ADMIN_LEVEL_CODES || (ADMIN_LEVEL_CODES = {}));
var AdminLevel = /** @class */ (function () {
function AdminLevel(_a) {
var level = _a.level, name = _a.name, code = _a.code;
this.level = level;
this.name = name;
this.code = code;
}
AdminLevel.create = function (object) {
return new this(object);
};
AdminLevel.prototype.toObject = function () {
return {
level: this.level,
name: this.name,
code: this.code,
};
};
AdminLevel.prototype.getLevel = function () {
return this.level;
};
AdminLevel.prototype.getName = function () {
return this.name;
};
AdminLevel.prototype.getCode = function () {
return this.code;
};
return AdminLevel;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AdminLevel);
/***/ }),
/***/ "./src/ExternalLoader.ts":
/*!*******************************!*\
!*** ./src/ExternalLoader.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var cross_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cross-fetch */ "./node_modules/cross-fetch/dist/browser-ponyfill.js");
/* harmony import */ var cross_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cross_fetch__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./error */ "./src/error/ResponseError.ts");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (undefined && undefined.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var defaultOptions = {
protocol: "http",
method: "GET",
};
/**
* Load data from external geocoding engines.
*/
var ExternalLoader = /** @class */ (function () {
function ExternalLoader(options) {
if (options === void 0) { options = defaultOptions; }
this.options = defaultOptions;
this.setOptions(options);
}
ExternalLoader.prototype.setOptions = function (options) {
this.options = __assign(__assign({}, defaultOptions), options);
};
ExternalLoader.prototype.getOptions = function () {
return this.options;
};
ExternalLoader.prototype.executeRequest = function (params, callback, externalLoaderHeaders, body, errorCallback) {
var _a = this.options, protocol = _a.protocol, host = _a.host, pathname = _a.pathname, method = _a.method;
if (!host) {
throw new Error("A host is required for the external loader.");
}
if (!pathname) {
throw new Error("A pathname is required for the external loader.");
}
var requestUrl = new URL(protocol + "://" + host + "/" + pathname);
var jsonpCallback = params.jsonpCallback, requestParams = __rest(params, ["jsonpCallback"]);
var filteredRequestParams = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.filterUndefinedObjectValues)(requestParams);
Object.keys(filteredRequestParams).forEach(function (paramKey) {
var _a;
return requestUrl.searchParams.append(paramKey, (_a = filteredRequestParams[paramKey]) !== null && _a !== void 0 ? _a : "");
});
if (jsonpCallback) {
ExternalLoader.runJsonpCallback(requestUrl, callback, jsonpCallback);
return;
}
var headers = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.filterUndefinedObjectValues)(externalLoaderHeaders || {});
cross_fetch__WEBPACK_IMPORTED_MODULE_0___default()(requestUrl.toString(), {
headers: headers,
method: method,
body: method === "POST" ? JSON.stringify(body) : undefined,
})
.then(function (response) {
if (!response.ok) {
throw new _error__WEBPACK_IMPORTED_MODULE_2__.default("Received HTTP status code " + response.status + " when attempting geocoding request.", response);
}
return response.json();
})
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.then(function (data) { return callback(data); })
.catch(function (error) {
if (errorCallback && error instanceof _error__WEBPACK_IMPORTED_MODULE_2__.default) {
errorCallback(error);
return;
}
setTimeout(function () {
throw error;
});
});
};
ExternalLoader.runJsonpCallback = function (requestUrl, callback, jsonpCallback) {
if (!(0,_utils__WEBPACK_IMPORTED_MODULE_1__.isBrowser)()) {
throw new Error('"jsonpCallback" parameter can only be used in a browser environment.');
}
requestUrl.searchParams.append(jsonpCallback, ExternalLoader.generateJsonpCallback(callback));
// Create a new script element.
var scriptElement = document.createElement("script");
// Set its source to the JSONP API.
scriptElement.src = requestUrl.toString();
// Stick the script element in the page <head>.
document.getElementsByTagName("head")[0].appendChild(scriptElement);
};
/**
* Generates randomly-named function to use as a callback for JSONP requests.
* @see https://github.com/OscarGodson/JSONP
*/
ExternalLoader.generateJsonpCallback = function (callback) {
// Use timestamp + a random factor to account for a lot of requests in a short time.
// e.g. jsonp1394571775161.
var timestamp = Date.now();
var generatedFunction = "jsonp" + Math.round(timestamp + Math.random() * 1000001);
// Generate the temp JSONP function using the name above.
// First, call the function the user defined in the callback param [callback(json)].
// Then delete the generated function from the window [delete window[generatedFunction]].
// eslint-disable-next-line @typescript-eslint/no-explicit-any
window[generatedFunction] = function (json) {
callback(json);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
delete window[generatedFunction];
};
return generatedFunction;
};
return ExternalLoader;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExternalLoader);
/***/ }),
/***/ "./src/GeoJsonDumper.ts":
/*!******************************!*\
!*** ./src/GeoJsonDumper.ts ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (undefined && undefined.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var GeoJsonDumper = /** @class */ (function () {
function GeoJsonDumper() {
}
GeoJsonDumper.dump = function (geocoded) {
var result = GeoJsonDumper.baseGeoJson;
var _a = geocoded.toObject(), coordinates = _a.coordinates, bounds = _a.bounds, adminLevels = _a.adminLevels, geocodedProperties = __rest(_a, ["coordinates", "bounds", "adminLevels"]);
var properties = __assign({}, geocodedProperties);
Object.keys(properties).forEach(function (property) {
return properties[property] === undefined && delete properties[property];
});
if (adminLevels && adminLevels.length > 0) {
properties = __assign(__assign({}, properties), { adminLevels: adminLevels.map(function (adminLevel) { return adminLevel.toObject(); }) });
}
result = __assign(__assign({}, result), { properties: properties });
if (coordinates) {
result = __assign(__assign({}, result), {
geometry: __assign(__assign({}, result.geometry), { type: "Point", coordinates: [
parseFloat(coordinates.longitude.toString()),
parseFloat(coordinates.latitude.toString()),
] }),
});
}
if (bounds) {
result = __assign(__assign({}, result), { bbox: [
parseFloat(bounds.longitudeSW.toString()),
parseFloat(bounds.latitudeSW.toString()),
parseFloat(bounds.longitudeNE.toString()),
parseFloat(bounds.latitudeNE.toString()),
] });
}
return result;
};
GeoJsonDumper.baseGeoJson = {
type: "Feature",
properties: {},
geometry: {
type: "Point",
coordinates: [0, 0],
},
};
return GeoJsonDumper;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GeoJsonDumper);
/***/ }),
/***/ "./src/Geocoded.ts":
/*!*************************!*\
!*** ./src/Geocoded.ts ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var Geocoded = /** @class */ (function () {
function Geocoded(_a) {
var coordinates = _a.coordinates, bounds = _a.bounds, formattedAddress = _a.formattedAddress, streetNumber = _a.streetNumber, streetName = _a.streetName, subLocality = _a.subLocality, locality = _a.locality, postalCode = _a.postalCode, region = _a.region, adminLevels = _a.adminLevels, country = _a.country, countryCode = _a.countryCode, timezone = _a.timezone;
this.coordinates = coordinates;
this.bounds = bounds;
this.formattedAddress = formattedAddress;
this.streetNumber = streetNumber;
this.streetName = streetName;
this.subLocality = subLocality;
this.locality = locality;
this.postalCode = postalCode;
this.region = region;
this.adminLevels = adminLevels || [];
this.country = country;
this.countryCode = countryCode;
this.timezone = timezone;
}
Geocoded.create = function (object) {
return new this(object);
};
Geocoded.prototype.toObject = function () {
return {
coordinates: this.coordinates,
bounds: this.bounds,
formattedAddress: this.formattedAddress,
streetNumber: this.streetNumber,
streetName: this.streetName,
subLocality: this.subLocality,
locality: this.locality,
postalCode: this.postalCode,
region: this.region,
adminLevels: this.adminLevels,
country: this.country,
countryCode: this.countryCode,
timezone: this.timezone,
};
};
Geocoded.prototype.withBounds = function (bounds) {
return this.constructor.create(__assign(__assign({}, this.toObject()), { bounds: bounds }));
};
Geocoded.prototype.withCoordinates = function (coordinates) {
return this.constructor.create(__assign(__assign({}, this.toObject()), { coordinates: coordinates }));
};
Geocoded.prototype.getCoordinates = function () {
return this.coordinates;
};
Geocoded.prototype.getBounds = function () {
return this.bounds;
};
Geocoded.prototype.getFormattedAddress = function () {
return this.formattedAddress;
};
Geocoded.prototype.getStreetNumber = function () {
return this.streetNumber;
};
Geocoded.prototype.getStreetName = function () {
return this.streetName;
};
Geocoded.prototype.getSubLocality = function () {
return this.subLocality;
};
Geocoded.prototype.getLocality = function () {
return this.locality;
};
Geocoded.prototype.getPostalCode = function () {
return this.postalCode;
};
Geocoded.prototype.getRegion = function () {
return this.region;
};
Geocoded.prototype.addAdminLevel = function (adminLevel) {
this.adminLevels.push(adminLevel);
};
Geocoded.prototype.getAdminLevels = function () {
return this.adminLevels;
};
Geocoded.prototype.getCountry = function () {
return this.country;
};
Geocoded.prototype.getCountryCode = function () {
return this.countryCode;
};
Geocoded.prototype.getTimezone = function () {
return this.timezone;
};
return Geocoded;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Geocoded);
/***/ }),
/***/ "./src/GeocoderProviderFactory.ts":
/*!****************************************!*\
!*** ./src/GeocoderProviderFactory.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./provider */ "./src/provider/ProviderInterface.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./provider */ "./src/provider/bing/BingProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./provider */ "./src/provider/ChainProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./provider */ "./src/provider/geoplugin/GeoPluginProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./provider */ "./src/provider/googlemaps/GoogleMapsProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./provider */ "./src/provider/locationiq/LocationIQProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./provider */ "./src/provider/mapbox/MapboxProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./provider */ "./src/provider/mapquest/MapQuestProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./provider */ "./src/provider/nominatim/NominatimProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./provider */ "./src/provider/opencage/OpenCageProvider.ts");
/* harmony import */ var _provider__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./provider */ "./src/provider/yandex/YandexProvider.ts");
/* harmony import */ var _ExternalLoader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExternalLoader */ "./src/ExternalLoader.ts");
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (undefined && undefined.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var ProviderFactory = /** @class */ (function () {
function ProviderFactory() {
}
/**
* Creates Geocoder Provider instances.
* @param options
* Either a string representing the registered provider, or an object with the
* following settings for instigating providers:
* - provider: A string representing the registered provider.
* @return
* An object compatible with ProviderInterface, or undefined if there's not a
* registered provider.
*/
ProviderFactory.createProvider = function (options) {
var createProviderOptions = __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_0__.defaultProviderOptions), (typeof options === "string" ? { provider: options } : options));
var externalLoader = new _ExternalLoader__WEBPACK_IMPORTED_MODULE_1__.default();
var provider = createProviderOptions.provider, providerOptions = __rest(createProviderOptions, ["provider"]);
switch (provider) {
case "bing":
case "bingmaps":
case "microsoft":
return new _provider__WEBPACK_IMPORTED_MODULE_2__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_2__.defaultBingProviderOptions), providerOptions));
case "chain":
return new _provider__WEBPACK_IMPORTED_MODULE_3__.default(__assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_3__.defaultChainProviderOptions), providerOptions));
case "geoplugin":
return new _provider__WEBPACK_IMPORTED_MODULE_4__.default(externalLoader, providerOptions);
case "google":
case "googlemaps":
return new _provider__WEBPACK_IMPORTED_MODULE_5__.default(externalLoader, providerOptions);
case "locationiq":
return new _provider__WEBPACK_IMPORTED_MODULE_6__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_6__.defaultLocationIQProviderOptions), providerOptions));
case "mapbox":
return new _provider__WEBPACK_IMPORTED_MODULE_7__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_7__.defaultMapboxProviderOptions), providerOptions));
case "mapquest":
return new _provider__WEBPACK_IMPORTED_MODULE_8__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_8__.defaultMapQuestProviderOptions), providerOptions));
case "openstreetmap":
case "nominatim":
return new _provider__WEBPACK_IMPORTED_MODULE_9__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_9__.defaultNominatimProviderOptions), providerOptions));
case "opencage":
return new _provider__WEBPACK_IMPORTED_MODULE_10__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_10__.defaultOpenCageProviderOptions), providerOptions));
case "yandex":
return new _provider__WEBPACK_IMPORTED_MODULE_11__.default(externalLoader, __assign(__assign({}, _provider__WEBPACK_IMPORTED_MODULE_11__.defaultYandexProviderOptions), providerOptions));
default:
}
return undefined;
};
return ProviderFactory;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProviderFactory);
/***/ }),
/***/ "./src/UniversalGeocoder.ts":
/*!**********************************!*\
!*** ./src/UniversalGeocoder.ts ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _GeocoderProviderFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GeocoderProviderFactory */ "./src/GeocoderProviderFactory.ts");
var UniversalGeocoder = /** @class */ (function () {
function UniversalGeocoder() {
this.version = "0.1.0";
}
UniversalGeocoder.createGeocoder = function (options) {
return _GeocoderProviderFactory__WEBPACK_IMPORTED_MODULE_0__.default.createProvider(options);
};
return UniversalGeocoder;
}());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UniversalGeocoder);
/***/ }),
/***/ "./src/error/ResponseError.ts":
/*!************************************!*\
!*** ./src/error/ResponseError.ts ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
var __extends = (undefined && undefined.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var ResponseError = /** @class */ (function (_super) {
__extends(ResponseError, _super);
function ResponseError(message, response) {
var _this = _super.call(this, message) || this;
_this.name = "ResponseError";
_this.response = response;
// eslint-disable-next-line no-proto
_this.__proto__ = ResponseError.prototype;
return _this;
}
ResponseError.prototype.getResponse = function () {
return this.response;
};
return ResponseError;
}(Error));
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ResponseError);
/***/ }),
/***/ "./src/provider/ChainProvider.ts":
/*!***************************************!*\
!*** ./src/provider/ChainProvider.ts ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "defaultChainProviderOptions": () => (/* binding */ defaultChainProviderOptions),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ */ "./src/provider/ProviderInterface.ts");
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ */ "./src/provider/ProviderHelpers.ts");
var __assign = (undefined && undefined.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var defaultChainProviderOptions = __assign(__assign({}, ___WEBPACK_IMPORTED_MODULE_0__.defaultProviderOptions), { providers: [] });
var ChainProvider = /** @class */ (function () {
function ChainProvider(options) {
if (options === void 0) { options = defaultChainProviderOptions; }
this.options = options;
}
ChainProvider.prototype.geocode = function (query, callback, errorCallback) {
var _this = this;
if (this.options.parallelize || this.options.first) {
if (!callback) {
return new Promise(function (resolve, reject) {
return _this.geocodeAllProviders(query, function (results) { return resolve(results); }, function (error) { return reject(error); });
});
}
return this.geocodeAllProviders(query, callback, errorCallback);
}
if (!callback) {
return new Promise(function (resolve, reject) {
return _this.geocodeNextProvider(_this.options.providers, query, function (results) { return resolve(results); }, function (error) { return reject(error); });
});
}
return this.geocodeNextProvider(this.options.providers, query, callback, errorCallback);
};
ChainProvider.prototype.geodecode = function (latitudeOrQuery, longitudeOrCallback, callbackOrErrorCallback, errorCallback) {
var _this = this;
var reverseQuery = ___WEBPACK_IMPORTED_MODULE_1__.default.getReverseQueryFromParameters(latitudeOrQuery, longitudeOrCallback);
var reverseCallback = ___WEBPACK_IMPORTED_MODULE_1__.default.getCallbackFromParameters(longitudeOrCallback, callbackOrErrorCallback);
var reverseErrorCallback = ___WEBPACK_IMPORTED_MODULE_1__.default.getErrorCallbackFromParameters(longitudeOrCallback, callbackOrErrorCallback, errorCallback);
if (this.options.parallelize || this.options.first) {
if (!reverseCallback) {
return new Promise(function (resolve, reject) {
return _this.geodecodeAllProviders(reverseQuery, function (results) { return resolve(results); }, function (error) { return reject(error); });
});
}
return this.geodecodeAllProviders(reverseQuery, reverseCallback, reverseErrorCallback);
}
if (!reverseCallback) {
return new Promise(function (resolve, reject) {
return _this.geodecodeNextProvider(_this.options.providers, reverseQuery, function (results) { return resolve(results); }, function (error) { return reject(error); });
});
}
return this.geodecodeNextProvider(this.options.providers, reverseQuery, reverseCallback, reverseErrorCallback);
};
ChainProvider.prototype.geocodeNextProvider = function (providers, query, callback, errorCallback) {
var _this = this;
var provider = providers[0], nextProviders = providers.slice(1);
var resultCallback = function (results) {
if (results.length > 0) {
callback(results);
return;
}
_this.geocodeNextProvider(nextProviders, query, callback, errorCallback);
};
var resultErrorCallback = function (responseError) {
if (errorCallback) {
errorCallback(responseError);
}
if (!errorCallback) {
// eslint-disable-next-line no-console
console.error("An error has occurred when geocoding with the provider " + provider.constructor.name, responseError);
}
resultCallback([]);
};
provider.geocode(query, resultCallback, resultErrorCallback);
};
ChainProvider.prototype.geodecodeNextProvider = function (providers, reverseQuery, callback, errorCallback) {
var _this = this;
var provider = providers[0], nextProviders = providers.slice(1);
var resultCallback = function (results) {
if (results.length > 0) {
callback(results);
return;
}
_this.geodecodeNextProvider(nextProviders, reverseQuery, callback, errorCallback);
};
var resultErrorCallback = function (responseError) {
if (errorCallback) {
errorCallback(responseError);
}
if (!errorCallback) {
// eslint-disable-next-line no-console
console.error("An error has occurred when geodecoding with the provider " + provider.constructor.name, responseError);
}
resultCallback([]);
};
provider.geodecode(reverseQuery, resultCallback, resultErrorCallback);
};
ChainProvider.prototype.geocodeAllProviders = function (query, callback, errorCallback) {
var _this = this;
var providerResults = new Map();
var callbackCalled = false;
var getProviderResult = function () {
return _this.options.providers.reduce(function (result, provider) {
var providerResult = result;
if (undefined === providerResult && _this.options.first) {
providerResult = [];
}
if (undefined === providerResult) {
return undefined;
}
if (providerResult.length > 0) {
return providerResult;
}
return providerResults.get(provider.constructor.name);
}, []);
};
var resultProviderCallback = function (providerName) { return function (results) {
providerResults.set(providerName, results);
var providerResult = getProviderResult();
if (!callbackCalled && providerResult) {
callback(providerResult);
callbackCalled = true;
}
}; };
var resultProviderErrorCallback = function (providerName) { return function (responseError) {
if (errorCallback) {
errorCallback(responseError);
}
if (!errorCallback) {
// eslint-disable-next-line no-console
console.error("An error has occurred when geocoding with the provider " + providerName, responseError);
}
resultProviderCallback(providerName)([]);
}; };
this.options.providers.forEach(function (provider) {
var providerName = provider.constructor.name;
provider.geocode(query, resultProviderCallback(providerName), resultProviderErrorCallback(providerName));
});
};
ChainProvider.prototype.geodecodeAllProviders = function (reverseQuery, callback, errorCallback) {
var _this = this;
var providerResults = new Map();
var callbackCalled = false;
var getProviderResult = function () {
return _this.options.providers.reduce(function (result, provider) {
var providerResult = result;
if (undefined === providerResult && _this.options.first) {
providerResult = [];
}
if (undefined === providerResult) {
return undefined;
}
if (providerResult.length > 0) {
return providerResult;
}
return providerResults.get(provider.constructor.name);
}, []);
};
var resultProviderCallback = function (providerName) { return function (results) {
providerResults.set(providerName, results);