UNPKG

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
"use strict"; /* * 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;