{"version":3,"sources":["jsdelivr-header.js","/npm/i18next-json-sync@3.1.2/dist/index.js"],"names":[],"mappings":"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","file":"/npm/i18next-json-sync@3.1.2/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/i18next-json-sync@3.1.2/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar glob = require(\"glob\");\nvar path = require(\"path\");\nvar ActionRecorder_1 = require(\"./ActionRecorder\");\nvar LocalizationFolder_1 = require(\"./LocalizationFolder\");\nvar pluralForms_1 = require(\"./pluralForms\");\nfunction sync(_a) {\n    var _b = _a.check, isReportMode = _b === void 0 ? false : _b, _c = _a.files, files = _c === void 0 ? '**/locales/*.json' : _c, _d = _a.excludeFiles, excludeFiles = _d === void 0 ? ['**/node_modules/**'] : _d, _e = _a.primary, primaryLanguage = _e === void 0 ? 'en' : _e, _f = _a.createResources, createFiles = _f === void 0 ? [] : _f, _g = _a.space, jsonSpacing = _g === void 0 ? 4 : _g, _h = _a.lineEndings, lineEndings = _h === void 0 ? 'LF' : _h, _j = _a.finalNewline, finalNewline = _j === void 0 ? false : _j, _k = _a.newKeysEmpty, newKeysEmpty = _k === void 0 ? false : _k;\n    var allFiles = glob.sync(files, { ignore: excludeFiles });\n    var directories = groupFilesByDirectory(allFiles);\n    var targetLanguage;\n    var record;\n    var hasAnyErrors = false;\n    var hasAnyChanges = false;\n    var hasValueChanges = false;\n    for (var _i = 0, _l = Object.keys(directories); _i < _l.length; _i++) {\n        var currentDirectory = _l[_i];\n        var folder = new LocalizationFolder_1.default(directories[currentDirectory], primaryLanguage, isReportMode);\n        folder.populateFromDisk(createFiles);\n        var sourceObject = folder.getSourceObject();\n        if (!sourceObject) {\n            continue;\n        }\n        for (var _m = 0, _o = folder.getFilenames(); _m < _o.length; _m++) {\n            var filename = _o[_m];\n            targetLanguage = normalizeLanguageFromFilename(filename);\n            record = new ActionRecorder_1.default(filename, isReportMode);\n            syncObjects(sourceObject, folder.getTargetObject(filename));\n            record.flushToConsole();\n            hasValueChanges = hasValueChanges || record.hasAnyActions();\n            hasAnyErrors = hasAnyErrors || record.hasAnyErrors();\n        }\n        var changedFiles = folder.flushToDisk(jsonSpacing, lineEndings.toUpperCase(), finalNewline);\n        hasAnyChanges = hasAnyChanges || changedFiles.length > 0;\n    }\n    if (hasAnyErrors) {\n        throw new Error('[i18next-json-sync] found keys unsafe to synchronize');\n    }\n    if (isReportMode) {\n        if (hasValueChanges) {\n            throw new Error('[i18next-json-sync] check failed -- keys are out of sync. Run again without check mode to synchronize files');\n        }\n        if (hasAnyChanges) {\n            throw new Error('[i18next-json-sync] check failed -- files have unordered keys or unexpected whitespace. Run again without check mode to correct files');\n        }\n    }\n    function groupFilesByDirectory(allFiles) {\n        var directories = {};\n        for (var _i = 0, allFiles_1 = allFiles; _i < allFiles_1.length; _i++) {\n            var filename = allFiles_1[_i];\n            var directory = path.dirname(filename);\n            directories[directory] = directories[directory] || {};\n            directories[directory][filename] = null;\n        }\n        return directories;\n    }\n    function normalizeLanguageFromFilename(filename) {\n        return path.basename(filename, '.json').replace(/-/g, '_').toLowerCase();\n    }\n    function syncObjects(source, target) {\n        mergeKeys(source, target);\n        for (var _i = 0, _a = Object.keys(target); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (source.hasOwnProperty(key) && target.hasOwnProperty(key)) {\n                // we should remove book_plural, book_1, etc if the language doesn't support singular forms\n                if (typeof target[key] === 'string' && keyIsOnlyPluralForPrimary(key, Object.keys(source), Object.keys(target))) {\n                    removeKey(source, target, key);\n                }\n            }\n            else if (!isValidMappedPluralForm(key, source, target)) { // don't remove valid mappings from book_plural to book_0\n                removeKey(source, target, key);\n            }\n        }\n    }\n    function mergeKeys(source, target) {\n        for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {\n            var key = _a[_i];\n            mergeKey(source, target, key);\n        }\n    }\n    function mergeKey(source, target, key) {\n        var sourceValue = source[key];\n        var targetValue = target[key];\n        if (target.hasOwnProperty(key)) {\n            if (areSameTypes(sourceValue, targetValue)) {\n                if (isObject(sourceValue)) {\n                    syncObjects(sourceValue, targetValue);\n                }\n                else if (keyMatchesPluralForLanguage(key, primaryLanguage) &&\n                    !keyMatchesPluralForLanguage(key, targetLanguage)) {\n                    removeKey(source, target, key);\n                    mergeKeys(createPlurals(key, source), target);\n                }\n                //base case: source and target agree on key name and value is string\n            }\n            else {\n                record.error(function (file) { return \"\".concat(file, \" contains type mismatch on key \").concat(key); });\n            }\n        }\n        else {\n            copyValue(source, target, key);\n        }\n    }\n    function copyValue(source, target, key) {\n        var sourceValue = source[key];\n        if (isObject(sourceValue)) {\n            target[key] = {};\n            syncObjects(sourceValue, target[key]);\n        }\n        else if (\n        //do we need to transform plurals from e.g. x_plural to x_0?\n        keyMatchesPluralForLanguageIncludingSingular(key, Object.keys(source), primaryLanguage) &&\n            !keyMatchesPluralForLanguage(key, targetLanguage) &&\n            !pluralFormsMatch()) {\n            if (!targetPluralsPopulated(target, key)) {\n                copyPlurals(createPlurals(key, source), target);\n            }\n        }\n        else {\n            target[key] = newKeysEmpty ? '' : sourceValue;\n            record.keyAdded(key);\n        }\n    }\n    function targetPluralsPopulated(target, key) {\n        //given 'x' for key, do we have 'x' and 'x_plural' for en?\n        var singular = getSingularForm(key);\n        var pluralKeys = getPluralsForLanguage(targetLanguage).map(function (p) { return p.replace('key', singular); });\n        var targetKeys = Object.keys(target);\n        return pluralKeys.every(function (expectedPluralKeys) { return targetKeys.indexOf(expectedPluralKeys) > -1; });\n    }\n    function copyPlurals(plurals, target) {\n        for (var _i = 0, _a = Object.keys(plurals); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (target.hasOwnProperty(key)) {\n                continue;\n            }\n            target[key] = target[key] = newKeysEmpty ? '' : plurals[key];\n            record.keyAdded(key);\n        }\n    }\n    function keyIsOnlyPluralForPrimary(key, allPimaryKeys, allTargetKeys) {\n        if (pluralFormsMatch()) {\n            return false;\n        }\n        if (languageOnlyHasOneForm(primaryLanguage)) {\n            return false;\n        }\n        return (keyMatchesPluralForLanguageIncludingSingular(key, allPimaryKeys, primaryLanguage) &&\n            !keyMatchesPluralForLanguageIncludingSingular(key, allTargetKeys, targetLanguage));\n    }\n    function pluralFormsMatch() {\n        var primaryForms = Object.keys(getPluralsForLanguage(primaryLanguage));\n        var targetForms = Object.keys(getPluralsForLanguage(targetLanguage));\n        return (primaryForms.length === targetForms.length &&\n            primaryForms.every(function (form) { return targetForms.indexOf(form) > -1; }));\n    }\n    function keyMatchesPluralForLanguageIncludingSingular(key, allKeys, language) {\n        /**\n         * It's impossible to tell whether a key is a plural for a language with one form shared between singular and plurals.\n         * With other languages we can look for relationships between e.g. value and value_plural or value and value_0.\n         */\n        if (languageOnlyHasOneForm(language)) {\n            return true;\n        }\n        var matchesAPlural = keyMatchesPluralForLanguage(key, language);\n        if (matchesAPlural) {\n            return true;\n        }\n        //key is now a singular form\n        if (!languageHasSingularForm(language)) {\n            return false;\n        }\n        for (var _i = 0, allKeys_1 = allKeys; _i < allKeys_1.length; _i++) {\n            var _key = allKeys_1[_i];\n            if (key !== _key && isPluralFormForSingular(_key, key, language)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    function keyMatchesPluralForLanguage(key, language) {\n        var forms = getPluralsForLanguage(language).map(function (form) { return form.replace('key', ''); });\n        for (var _i = 0, forms_1 = forms; _i < forms_1.length; _i++) {\n            var form = forms_1[_i];\n            if (form && key.endsWith(form)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    function isValidMappedPluralForm(key, sourceObject, targetObject) {\n        var singular = getSingularForm(key);\n        var isPluralForPrimaryLanguage = Object.keys(sourceObject).some(function (key) { return isPluralFormForSingular(key, singular, primaryLanguage); });\n        if (languageOnlyHasOneForm(targetLanguage)) {\n            return singular === key && isPluralForPrimaryLanguage;\n        }\n        var isPluralForTargetLanguage = Object.keys(targetObject).some(function (key) { return isPluralFormForSingular(key, singular, targetLanguage); });\n        return isPluralForPrimaryLanguage && isPluralForTargetLanguage;\n    }\n    function getSingularForm(key) {\n        return key.replace(/_(plural|\\d)$/, '');\n    }\n    function isPluralFormForSingular(key, singular, language) {\n        return getPluralsForLanguage(language)\n            .map(function (form) { return form.replace('key', singular); })\n            .indexOf(key) > -1;\n    }\n    function languageHasSingularForm(language) {\n        return getPluralsForLanguage(language)\n            .map(function (form) { return form.replace('key', ''); })\n            .indexOf('') > -1;\n    }\n    function languageOnlyHasOneForm(language) {\n        return getPluralsForLanguage(language).length === 1;\n    }\n    function getPluralsForLanguage(language) {\n        if (pluralForms_1.default.hasOwnProperty(language)) {\n            return pluralForms_1.default[language];\n        }\n        if (language.indexOf('_') > -1 || language.indexOf('-') > -1) {\n            var baseLanguage = language.split(/-|_/)[0];\n            if (pluralForms_1.default.hasOwnProperty(baseLanguage)) {\n                return pluralForms_1.default[baseLanguage];\n            }\n        }\n        return [];\n    }\n    function createPlurals(key, source) {\n        var singular = getSingularForm(key);\n        var plurals = {};\n        if (languageOnlyHasOneForm(primaryLanguage)) {\n            plurals[key] = source[key];\n        }\n        else {\n            var fillValue = getPluralFillValue(singular, source);\n            for (var _i = 0, _a = getPluralsForLanguage(targetLanguage); _i < _a.length; _i++) {\n                var form = _a[_i];\n                plurals[form.replace('key', singular)] = fillValue;\n            }\n        }\n        return plurals;\n    }\n    function getPluralFillValue(singular, source) {\n        if (languageOnlyHasOneForm(primaryLanguage)) {\n            return source[singular];\n        }\n        //prefer plural fill values because they're more likely to have\n        //interpolations like {{ count }}, but fall back to singular\n        var sourceKeys = Object.keys(source).filter(function (k) { return k !== singular; });\n        for (var _i = 0, _a = getPluralsForLanguage(primaryLanguage); _i < _a.length; _i++) {\n            var form = _a[_i];\n            var pluralKey = form.replace('key', singular);\n            if (sourceKeys.indexOf(pluralKey) > -1) {\n                return source[pluralKey];\n            }\n        }\n        return source[singular];\n    }\n    function removeKey(source, target, key) {\n        if (isObject(target[key])) {\n            gatherKeysFor(target[key]).forEach(function (k) { return record.keyRemoved(k); });\n        }\n        else {\n            record.keyRemoved(key);\n        }\n        //base case: key in target not found in source\n        delete target[key];\n    }\n    function gatherKeysFor(object) {\n        return Object.keys(object)\n            .map(function (key) { return gatherPrimitivesForSingleKey(object, key); })\n            .reduce(function (all, next) { return all.concat(next); }, []);\n    }\n    function gatherPrimitivesForSingleKey(object, key) {\n        if (isObject(object[key])) {\n            return gatherKeysFor(object[key]);\n        }\n        else {\n            return [key];\n        }\n    }\n}\nexports.default = sync;\nfunction isObject(value) {\n    return getTypeName(value) === 'Object';\n}\nfunction areSameTypes(value, otherValue) {\n    return getTypeName(value) === getTypeName(otherValue);\n}\nfunction getTypeName(object) {\n    var fullName = Object.prototype.toString.call(object);\n    return fullName.split(' ')[1].slice(0, -1);\n}\n"]}