UNPKG

pretur.i18n

Version:
96 lines 15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); function buildLocale(locale, definition) { return { locale: locale, definition: definition }; } exports.buildLocale = buildLocale; function createStringBuilders(locale) { var MessageFormat = require('messageformat'); var mf = new MessageFormat(locale); return { constant: function (str) { return function () { return str; }; }, callback: function (cb) { return cb; }, messageFormat: function (formatString) { return mf.compile(formatString); }, }; } function format(definition, fallback, bundleOrKey, data) { if (process.env.NODE_ENV !== 'production' && !definition) { throw new TypeError('definition must be provided'); } if (bundleOrKey && typeof bundleOrKey === 'object') { var targetKey = definition[bundleOrKey.key] || (fallback && fallback[bundleOrKey.key]); if (process.env.NODE_ENV !== 'production' && !targetKey) { throw new TypeError('provided bundle key does not exist in definition or the fallback'); } return targetKey(bundleOrKey.data); } if (typeof bundleOrKey === 'string') { var targetKey = definition[bundleOrKey] || (fallback && fallback[bundleOrKey]); if (process.env.NODE_ENV !== 'production' && !targetKey) { throw new TypeError('provided key does not exist in definition or the fallback'); } return targetKey(data); } return ''; } function bundle(key, data) { return { key: key, data: data }; } function internationalize(main) { var alts = []; for (var _i = 1; _i < arguments.length; _i++) { alts[_i - 1] = arguments[_i]; } var mainDefinition = main.definition(createStringBuilders(main.locale)); var keys = {}; for (var _a = 0, _b = Object.keys(mainDefinition); _a < _b.length; _a++) { var key = _b[_a]; keys[key] = key; } function buildFormatter(locale) { if (locale === main.locale) { return function (bundleOrKey, data) { return format(mainDefinition, undefined, bundleOrKey, data); }; } var target = alts.find(function (alt) { return alt.locale === locale; }); if (!target) { throw new Error("The provided locale " + locale + " does not exist in the list of languages."); } var targetDefinition = target.definition(createStringBuilders(locale)); return function (bundleOrKey, data) { return format(targetDefinition, mainDefinition, bundleOrKey, data); }; } return { keys: keys, bundle: bundle, buildFormatter: buildFormatter }; } exports.internationalize = internationalize; function combine(i18n1, i18n2) { var keys = tslib_1.__assign({}, i18n1.keys, i18n2.keys); function buildFormatter(locale) { var formatter1 = i18n1.buildFormatter(locale); var formatter2 = i18n2.buildFormatter(locale); return function (bundleOrKey, data) { var key = typeof bundleOrKey === 'string' ? bundleOrKey : bundleOrKey.key; if (process.env.NODE_ENV !== 'production' && !keys[key]) { throw new TypeError('provided key does not exist in any of the provided i18ns'); } if (i18n2.keys[key]) { return formatter2(bundleOrKey, data); } return formatter1(bundleOrKey, data); }; } return { keys: keys, bundle: bundle, buildFormatter: buildFormatter }; } exports.combine = combine; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSxxQkFDRSxNQUFjLEVBQ2QsVUFBNkQ7SUFFN0QsTUFBTSxDQUFDLEVBQUUsTUFBTSxRQUFBLEVBQUUsVUFBVSxZQUFBLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBTEQsa0NBS0M7QUFlRCw4QkFBOEIsTUFBYztJQUMxQyxJQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsSUFBTSxFQUFFLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsTUFBTSxDQUFDO1FBQ0wsUUFBUSxZQUFDLEdBQVc7WUFDbEIsTUFBTSxDQUFDLGNBQU0sT0FBQSxHQUFHLEVBQUgsQ0FBRyxDQUFDO1FBQ25CLENBQUM7UUFDRCxRQUFRLFlBQUMsRUFBMEI7WUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxhQUFhLFlBQUMsWUFBb0I7WUFDaEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsZ0JBQ0UsVUFBeUIsRUFDekIsUUFBbUMsRUFDbkMsV0FBNEIsRUFDNUIsSUFBVTtJQUVWLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFNLFNBQVMsR0FBUyxVQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNsRCxDQUFDLFFBQVEsSUFB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Qy9CLEtBQStCO0lBRS9CLElBQU0sSUFBSSx3QkFBYyxLQUFLLENBQUMsSUFBSyxFQUFXLEtBQUssQ0FBQyxJQUFLLENBQUUsQ0FBQztJQUU1RCx3QkFBd0IsTUFBYztRQUNwQyxJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEQsTUFBTSxDQUFDLFVBQUMsV0FBNEIsRUFBRSxJQUFVO1lBQzlDLElBQU0sR0FBRyxHQUFHLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzVFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxTQUFTLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUNsRixDQUFDO1lBRUQsRUFBRSxDQUFDLENBQU8sS0FBSyxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxVQUFVLENBQU0sV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFFRCxNQUFNLENBQUMsVUFBVSxDQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsTUFBTSxRQUFBLEVBQUUsY0FBYyxnQkFBQSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQXpCRCwwQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEJ1bmRsZTxLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBEID0gYW55PiB7XHJcbiAga2V5OiBLO1xyXG4gIGRhdGE/OiBEO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0J1aWxkZXI8RCA9IGFueT4ge1xyXG4gIChkYXRhPzogRCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdCdWlsZGVycyB7XHJcbiAgY29uc3RhbnQoc3RyOiBzdHJpbmcpOiBTdHJpbmdCdWlsZGVyPHVuZGVmaW5lZD47XHJcbiAgY2FsbGJhY2s8RD4oY2FsbGJhY2s6IChkYXRhPzogRCkgPT4gc3RyaW5nKTogU3RyaW5nQnVpbGRlcjxEPjtcclxuICBtZXNzYWdlRm9ybWF0PEQ+KGZvcm1hdFN0cmluZzogc3RyaW5nKTogU3RyaW5nQnVpbGRlcjxEPjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRGVmaW5pdGlvbjxUPiA9IHtcclxuICBbUCBpbiBrZXlvZiBUXTogU3RyaW5nQnVpbGRlcjxUW1BdPjtcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlPFQ+IHtcclxuICBsb2NhbGU6IHN0cmluZztcclxuICBkZWZpbml0aW9uOiAoYnVpbGRlcnM6IFN0cmluZ0J1aWxkZXJzKSA9PiBEZWZpbml0aW9uPFQ+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2NhbGU8VD4oXHJcbiAgbG9jYWxlOiBzdHJpbmcsXHJcbiAgZGVmaW5pdGlvbjogKHN0cmluZ0J1aWxkZXJzOiBTdHJpbmdCdWlsZGVycykgPT4gRGVmaW5pdGlvbjxUPixcclxuKTogTG9jYWxlPFQ+IHtcclxuICByZXR1cm4geyBsb2NhbGUsIGRlZmluaXRpb24gfTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgS2V5czxUPiA9IHtcclxuICBbUCBpbiBrZXlvZiBUXTogUDtcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlcjxUPiB7XHJcbiAgPEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIGRhdGE/OiBUW0tdKTogQnVuZGxlPEssIFRbS10+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlcjxUPiB7XHJcbiAgPEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIGRhdGE/OiBUW0tdKTogc3RyaW5nO1xyXG4gIDxLIGV4dGVuZHMga2V5b2YgVD4oYnVuZGxlOiBCdW5kbGU8SywgVFtLXT4pOiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0J1aWxkZXJzKGxvY2FsZTogc3RyaW5nKTogU3RyaW5nQnVpbGRlcnMge1xyXG4gIGNvbnN0IE1lc3NhZ2VGb3JtYXQgPSByZXF1aXJlKCdtZXNzYWdlZm9ybWF0Jyk7XHJcbiAgY29uc3QgbWYgPSBuZXcgTWVzc2FnZUZvcm1hdChsb2NhbGUpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY29uc3RhbnQoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuICgpID0+IHN0cjtcclxuICAgIH0sXHJcbiAgICBjYWxsYmFjayhjYjogKGRhdGE/OiBhbnkpID0+IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gY2I7XHJcbiAgICB9LFxyXG4gICAgbWVzc2FnZUZvcm1hdChmb3JtYXRTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gbWYuY29tcGlsZShmb3JtYXRTdHJpbmcpO1xyXG4gICAgfSxcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXQ8VD4oXHJcbiAgZGVmaW5pdGlvbjogRGVmaW5pdGlvbjxUPixcclxuICBmYWxsYmFjazogRGVmaW5pdGlvbjxUPiB8IHVuZGVmaW5lZCxcclxuICBidW5kbGVPcktleTogQnVuZGxlIHwgc3RyaW5nLFxyXG4gIGRhdGE/OiBhbnksXHJcbik6IHN0cmluZyB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRlZmluaXRpb24pIHtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RlZmluaXRpb24gbXVzdCBiZSBwcm92aWRlZCcpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGJ1bmRsZU9yS2V5ICYmIHR5cGVvZiBidW5kbGVPcktleSA9PT0gJ29iamVjdCcpIHtcclxuICAgIGNvbnN0IHRhcmdldEtleSA9ICg8YW55PmRlZmluaXRpb24pW2J1bmRsZU9yS2V5LmtleV0gfHxcclxuICAgICAgKGZhbGxiYWNrICYmICg8YW55PmZhbGxiYWNrKVtidW5kbGVPcktleS5rZXldKTtcclxuXHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGFyZ2V0S2V5KSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Byb3ZpZGVkIGJ1bmRsZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gZGVmaW5pdGlvbiBvciB0aGUgZmFsbGJhY2snKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXRLZXkoYnVuZGxlT3JLZXkuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIGJ1bmRsZU9yS2V5ID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gKDxhbnk+ZGVmaW5pdGlvbilbYnVuZGxlT3JLZXldIHx8XHJcbiAgICAgIChmYWxsYmFjayAmJiAoPGFueT5mYWxsYmFjaylbYnVuZGxlT3JLZXldKTtcclxuXHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGFyZ2V0S2V5KSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Byb3ZpZGVkIGtleSBkb2VzIG5vdCBleGlzdCBpbiBkZWZpbml0aW9uIG9yIHRoZSBmYWxsYmFjaycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldEtleShkYXRhKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufVxyXG5cclxuZnVuY3Rpb24gYnVuZGxlKGtleTogYW55LCBkYXRhPzogYW55KSB7XHJcbiAgcmV0dXJuIHsga2V5LCBkYXRhIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYXRpb25hbGl6YXRpb248VD4ge1xyXG4gIGtleXM6IEtleXM8VD47XHJcbiAgYnVuZGxlOiBCdW5kbGVyPFQ+O1xyXG4gIGJ1aWxkRm9ybWF0dGVyKGxvY2FsZTogc3RyaW5nKTogRm9ybWF0dGVyPFQ+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJuYXRpb25hbGl6ZTxUPihcclxuICBtYWluOiBMb2NhbGU8VD4sXHJcbiAgLi4uYWx0czogTG9jYWxlPFBhcnRpYWw8VD4+W10sXHJcbik6IEludGVybmF0aW9uYWxpemF0aW9uPFQ+IHtcclxuICBjb25zdCBtYWluRGVmaW5pdGlvbiA9IG1haW4uZGVmaW5pdGlvbihjcmVhdGVTdHJpbmdCdWlsZGVycyhtYWluLmxvY2FsZSkpO1xyXG5cclxuICBjb25zdCBrZXlzID0gPEtleXM8VD4+e307XHJcblxyXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1haW5EZWZpbml0aW9uKSkge1xyXG4gICAgKDxhbnk+a2V5cylba2V5XSA9IGtleTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkRm9ybWF0dGVyKGxvY2FsZTogc3RyaW5nKTogRm9ybWF0dGVyPFQ+IHtcclxuICAgIGlmIChsb2NhbGUgPT09IG1haW4ubG9jYWxlKSB7XHJcbiAgICAgIHJldHVybiAoYnVuZGxlT3JLZXk6IEJ1bmRsZSB8IHN0cmluZywgZGF0YT86IGFueSkgPT5cclxuICAgICAgICBmb3JtYXQobWFpbkRlZmluaXRpb24sIHVuZGVmaW5lZCwgYnVuZGxlT3JLZXksIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IGFsdHMuZmluZChhbHQgPT4gYWx0LmxvY2FsZSA9PT0gbG9jYWxlKTtcclxuXHJcbiAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBsb2NhbGUgJHtsb2NhbGV9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IG9mIGxhbmd1YWdlcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0YXJnZXREZWZpbml0aW9uID0gdGFyZ2V0LmRlZmluaXRpb24oY3JlYXRlU3RyaW5nQnVpbGRlcnMobG9jYWxlKSk7XHJcblxyXG4gICAgcmV0dXJuIChidW5kbGVPcktleTogQnVuZGxlIHwgc3RyaW5nLCBkYXRhPzogYW55KSA9PlxyXG4gICAgICBmb3JtYXQodGFyZ2V0RGVmaW5pdGlvbiwgbWFpbkRlZmluaXRpb24sIGJ1bmRsZU9yS2V5LCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IGtleXMsIGJ1bmRsZSwgYnVpbGRGb3JtYXR0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmU8VDEsIFQyPihcclxuICBpMThuMTogSW50ZXJuYXRpb25hbGl6YXRpb248VDE+LFxyXG4gIGkxOG4yOiBJbnRlcm5hdGlvbmFsaXphdGlvbjxUMj4sXHJcbik6IEludGVybmF0aW9uYWxpemF0aW9uPFQxICYgVDI+IHtcclxuICBjb25zdCBrZXlzID0geyAuLi4oPGFueT5pMThuMS5rZXlzKSwgLi4uKDxhbnk+aTE4bjIua2V5cykgfTtcclxuXHJcbiAgZnVuY3Rpb24gYnVpbGRGb3JtYXR0ZXIobG9jYWxlOiBzdHJpbmcpOiBGb3JtYXR0ZXI8VDEgJiBUMj4ge1xyXG4gICAgY29uc3QgZm9ybWF0dGVyMSA9IGkxOG4xLmJ1aWxkRm9ybWF0dGVyKGxvY2FsZSk7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIyID0gaTE4bjIuYnVpbGRGb3JtYXR0ZXIobG9jYWxlKTtcclxuXHJcbiAgICByZXR1cm4gKGJ1bmRsZU9yS2V5OiBCdW5kbGUgfCBzdHJpbmcsIGRhdGE/OiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIGJ1bmRsZU9yS2V5ID09PSAnc3RyaW5nJyA/IGJ1bmRsZU9yS2V5IDogYnVuZGxlT3JLZXkua2V5O1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAha2V5c1trZXldKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncHJvdmlkZWQga2V5IGRvZXMgbm90IGV4aXN0IGluIGFueSBvZiB0aGUgcHJvdmlkZWQgaTE4bnMnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCg8YW55PmkxOG4yLmtleXMpW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVyMig8YW55PmJ1bmRsZU9yS2V5LCBkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZvcm1hdHRlcjEoPGFueT5idW5kbGVPcktleSwgZGF0YSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsga2V5cywgYnVuZGxlLCBidWlsZEZvcm1hdHRlciB9O1xyXG59XHJcbiJdfQ==