universal-geocoder
Version:
Universal geocoding abstraction server-side and client-side with multiple built-in providers
76 lines • 3.23 kB
JavaScript
export var isBrowser = function () { return typeof window !== "undefined"; };
export var filterUndefinedObjectValues = function (object) {
return Object.keys(object).reduce(function (acc, key) {
var filtered = acc;
var value = object[key];
if (value !== undefined) {
filtered[key] = value;
}
return filtered;
}, {});
};
export var flattenObject = function (object) {
var flattened = {};
var isNested = function (value) {
var isArray = Array.isArray(value);
var type = Object.prototype.toString.call(value);
var isObject = type === "[object Object]" || type === "[object Array]";
if (!isArray && isObject && Object.keys(value).length) {
return true;
}
return false;
};
var step = function (nestedObject) {
Object.keys(nestedObject).forEach(function (key) {
var value = nestedObject[key];
if (undefined === value) {
return;
}
if (isNested(value)) {
step(value);
return;
}
flattened[key] = value;
});
};
step(object);
return flattened;
};
/**
* Decode from URL-safe base64 to true base64.
*/
export var decodeUrlSafeBase64 = function (safe) {
return safe.replace(/-/g, "+").replace(/_/g, "/");
};
/**
* Encode from true base64 to URL-safe base64.
*/
export var encodeUrlSafeBase64 = function (base64) {
return base64.replace(/\+/g, "-").replace(/\//g, "_");
};
export var decodeBase64 = function (base64) {
if (isBrowser()) {
throw new Error("decodeBase64 can only be used in a Node environment.");
}
return Buffer.from(base64, "base64").toString();
};
// From https://github.com/sindresorhus/ip-regex
var ipv4RegExp = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}";
export var isIpv4 = function (ip) {
return new RegExp("^" + ipv4RegExp + "$").test(ip);
};
// From https://github.com/sindresorhus/ip-regex
var ipv6Seg = "[a-fA-F\\d]{1,4}";
var ipv6RegExp = "((?:" + ipv6Seg + ":){7}(?:" + ipv6Seg + "|:)|(?:" + ipv6Seg + ":){6}(?:" + ipv4RegExp + "|:" + ipv6Seg + "|:)|(?:" + ipv6Seg + ":){5}(?::" + ipv4RegExp + "|(:" + ipv6Seg + "){1,2}|:)|(?:" + ipv6Seg + ":){4}(?:(:" + ipv6Seg + "){0,1}:" + ipv4RegExp + "|(:" + ipv6Seg + "){1,3}|:)|(?:" + ipv6Seg + ":){3}(?:(:" + ipv6Seg + "){0,2}:" + ipv4RegExp + "|(:" + ipv6Seg + "){1,4}|:)|(?:" + ipv6Seg + ":){2}(?:(:" + ipv6Seg + "){0,3}:" + ipv4RegExp + "|(:" + ipv6Seg + "){1,5}|:)|(?:" + ipv6Seg + ":){1}(?:(:" + ipv6Seg + "){0,4}:" + ipv4RegExp + "|(:" + ipv6Seg + "){1,6}|:)|(?::((?::" + ipv6Seg + "){0,5}:" + ipv4RegExp + "|(?::" + ipv6Seg + "){1,7}|:)))(%[0-9a-zA-Z]{1,})?";
export var isIpv6 = function (ip) {
return new RegExp("^" + ipv6RegExp + "$").test(ip);
};
// eslint-disable-next-line @typescript-eslint/ban-types
export var getRequireFunc = function () {
// eslint-disable-next-line camelcase
return typeof __non_webpack_require__ === "function"
? // eslint-disable-next-line camelcase
__non_webpack_require__
: require;
};
//# sourceMappingURL=utils.js.map