g11n-js-common
Version:
This is I18n level 2 common library for javascript based clients like g11n-angular-client,g11n-js-client
129 lines (128 loc) • 4.13 kB
JavaScript
;
/*
* Copyright 2019 VMware, Inc.
* SPDX-License-Identifier: EPL-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
/**
* verify value if undefined or null
*/
function isDefined(value) {
return value !== undefined && value !== null && value !== '';
}
exports.isDefined = isDefined;
/**
* Format translation string, e.g. 'No custom buckets specified for {0}'
*/
function format(message, args) {
const templateMatcher = /{\s?([\d]*)\s?}/g;
for (let i = 0; i < args.length; i += 1) {
message = message.replace(templateMatcher, (substring, b) => {
return (b.trim() === i.toString() && isDefined(args[i])) ? args[i] : substring;
});
}
return message;
}
exports.format = format;
function mergeObject(a, b) {
a = a instanceof Object ? a : {};
b = b instanceof Object ? b : {};
return Object.assign(a, b);
}
exports.mergeObject = mergeObject;
function equals(o1, o2) {
if (o1 === o2) {
return true;
}
if (o1 === null || o2 === null) {
return false;
}
if (o1 !== o1 && o2 !== o2) {
return true;
} // NaN === NaN
const t1 = typeof o1, t2 = typeof o2;
let length, key, keySet;
if (t1 === t2 && t1 === 'object') {
if (Array.isArray(o1)) {
if (!Array.isArray(o2)) {
return false;
}
if ((length = o1.length) === o2.length) {
for (key = 0; key < length; key++) {
if (!equals(o1[key], o2[key])) {
return false;
}
}
return true;
}
}
else {
if (Array.isArray(o2)) {
return false;
}
keySet = Object.create(null);
for (key in o1) {
if (!equals(o1[key], o2[key])) {
return false;
}
else {
keySet[key] = true;
}
}
for (key in o2) {
if (!(key in keySet) && typeof o2[key] !== 'undefined') {
return false;
}
}
return true;
}
}
return false;
}
exports.equals = equals;
/*
* Mixin class decorator
*
* Based on
* https://medium.com/@dmyl/mixins-as-class-decorators-in-typescript-angular2-8e09f1bc1f02
*
* with minor modifications to support an opaque data object
* stored in the object prototype as `mixinData`
*/
function Mixin(baseCtors, data) {
return function (derivedCtor) {
baseCtors.forEach(baseCtor => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
const descriptor = Object.getOwnPropertyDescriptor(baseCtor.prototype, name);
if (name === 'constructor') {
return;
}
if (descriptor && (!descriptor.writable || !descriptor.configurable
|| !descriptor.enumerable || descriptor.get || descriptor.set)) {
Object.defineProperty(derivedCtor.prototype, name, descriptor);
}
else {
derivedCtor.prototype[name] = baseCtor.prototype[name];
derivedCtor.prototype.mixinData = data;
}
});
});
};
}
exports.Mixin = Mixin;
/**
* Returns the culture language code name from the browser, e.g. "de-DE"
* @returns string
*/
function getBrowserCultureLang() {
if (window === undefined || window.navigator === undefined) {
return undefined;
}
let browserCultureLang = window.navigator.languages ? window.navigator.languages[0] : null;
browserCultureLang = browserCultureLang ||
window.navigator.language ||
window.navigator.browserLanguage ||
window.navigator.userLanguage;
return browserCultureLang;
}
exports.getBrowserCultureLang = getBrowserCultureLang;