{"version":3,"file":"helpers.js","names":["pathToFileURL","build","rmSync","yaml","builtinModules","dotPathToHash","entry","target","arguments","length","undefined","options","conflict","duplicate","path","keyWithNamespace","suffix","separator","key","substring","indexOf","namespace","defaultValue","concat","newValue","value","locale","endsWith","slice","segments","split","inner","i","segment","lastSegment","oldValue","_typeof","customValueTemplate","entries","Object","forEach","valueEntry","filePaths","replace","mergeHashes","source","resetValues","old","reset","mergeCount","pullCount","oldCount","resetCount","keepRemoved","keepRemovedPatterns","fullKeyPrefix","keySeparator","pluralSeparator","contextSeparator","_loop","hasNestedEntries","Array","isArray","nested","_objectSpread","keys","resetAndFlag","isPlural","singularKey","getSingularForm","pluralMatch","contextRegex","RegExp","contextMatch","test","rawKey","hasRelatedPluralKey","keepKey","some","pattern","transferValues","sourceValue","targetValue","pluralSuffixes","pluralRegex","getPluralSuffixPosition","len","makeDefaultSort","defaultSort","key1","key2","singularKey1","singularKey2","localeCompare","esConfigLoader","_x","_esConfigLoader","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee","filepath","wrap","_callee$","_context","prev","next","abrupt","sent","stop","tsConfigLoader","_x2","_tsConfigLoader","_callee2","outfile","config","_callee2$","_context2","absWorkingDir","process","cwd","entryPoints","write","platform","bundle","format","sourcemap","external","_toConsumableArray","map","mod","yamlConfigLoader","content","load","unescape","text","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","m"],"sources":["../src/helpers.js"],"sourcesContent":["import { pathToFileURL } from 'url'\nimport { build } from 'esbuild'\nimport { rmSync } from 'fs'\nimport yaml from 'js-yaml'\nimport { builtinModules } from 'module'\n\n/**\n * Take an entry for the Parser and turn it into a hash,\n * turning the key path 'foo.bar' into an hash {foo: {bar: \"\"}}\n * The generated hash can be merged with an optional `target`.\n * @returns An `{ target, duplicate, conflict }` object. `target` is the hash\n * that was passed as an argument or a new hash if none was passed. `duplicate`\n * indicates whether the entry already existed in the `target` hash. `conflict`\n * is `\"key\"` if a parent of the key was already mapped to a string (e.g. when\n * merging entry {one: {two: \"bla\"}} with target {one: \"bla\"}) or the key was\n * already mapped to a map (e.g. when merging entry {one: \"bla\"} with target\n * {one: {two: \"bla\"}}), `\"value\"` if the same key already exists with a\n * different value, or `false`.\n */\nfunction dotPathToHash(entry, target = {}, options = {}) {\n let conflict = false\n let duplicate = false\n let path = entry.keyWithNamespace\n if (options.suffix) {\n path += options.suffix\n }\n\n const separator = options.separator || '.'\n\n const key = entry.keyWithNamespace.substring(\n entry.keyWithNamespace.indexOf(separator) + separator.length,\n entry.keyWithNamespace.length\n )\n\n // There is no key to process so we return an empty object\n if (!key) {\n if (!target[entry.namespace]) {\n target[entry.namespace] = {}\n }\n return { target, duplicate, conflict }\n }\n\n const defaultValue =\n entry[`defaultValue${options.suffix}`] || entry.defaultValue || ''\n\n let newValue =\n typeof options.value === 'function'\n ? options.value(options.locale, entry.namespace, key, defaultValue)\n : options.value || defaultValue\n\n if (path.endsWith(separator)) {\n path = path.slice(0, -separator.length)\n }\n\n const segments = path.split(separator)\n let inner = target\n for (let i = 0; i < segments.length - 1; i += 1) {\n const segment = segments[i]\n if (segment) {\n if (typeof inner[segment] === 'string') {\n conflict = 'key'\n }\n if (inner[segment] === undefined || conflict) {\n inner[segment] = {}\n }\n inner = inner[segment]\n }\n }\n\n const lastSegment = segments[segments.length - 1]\n const oldValue = inner[lastSegment]\n if (oldValue !== undefined && oldValue !== newValue) {\n if (typeof oldValue !== typeof newValue) {\n conflict = 'key'\n } else if (oldValue !== '') {\n if (newValue === '') {\n newValue = oldValue\n } else {\n conflict = 'value'\n }\n }\n }\n duplicate = oldValue !== undefined || conflict !== false\n\n if (options.customValueTemplate) {\n inner[lastSegment] = {}\n\n const entries = Object.entries(options.customValueTemplate)\n entries.forEach((valueEntry) => {\n if (valueEntry[1] === '${defaultValue}') {\n inner[lastSegment][valueEntry[0]] = newValue\n } else if (valueEntry[1] === '${filePaths}') {\n inner[lastSegment][valueEntry[0]] = entry.filePaths\n } else {\n inner[lastSegment][valueEntry[0]] =\n entry[valueEntry[1].replace(/\\${(\\w+)}/, '$1')] || ''\n }\n })\n } else {\n inner[lastSegment] = newValue\n }\n\n return { target, duplicate, conflict }\n}\n\n/**\n * Takes a `source` hash and makes sure its value\n * is pasted in the `target` hash, if the target\n * hash has the corresponding key (or if `options.keepRemoved` is true).\n * @returns An `{ old, new, mergeCount, pullCount, oldCount, reset, resetCount }` object.\n * `old` is a hash of values that have not been merged into `target`.\n * `new` is `target`. `mergeCount` is the number of keys merged into\n * `new`, `pullCount` is the number of context and plural keys added to\n * `new` and `oldCount` is the number of keys that were either added to `old` or\n * `new` (if `options.keepRemoved` is true and `target` didn't have the corresponding\n * key) and `reset` is the keys that were reset due to not matching default values,\n * and `resetCount` which is the number of keys reset.\n */\nfunction mergeHashes(source, target, options = {}, resetValues = {}) {\n let old = {}\n let reset = {}\n let mergeCount = 0\n let pullCount = 0\n let oldCount = 0\n let resetCount = 0\n\n const keepRemoved =\n (typeof options.keepRemoved === 'boolean' && options.keepRemoved) || false\n const keepRemovedPatterns =\n (typeof options.keepRemoved !== 'boolean' && options.keepRemoved) || []\n const fullKeyPrefix = options.fullKeyPrefix || ''\n const keySeparator = options.keySeparator || '.'\n const pluralSeparator = options.pluralSeparator || '_'\n const contextSeparator = options.contextSeparator || '_'\n\n for (const key in source) {\n const hasNestedEntries =\n typeof target[key] === 'object' && !Array.isArray(target[key])\n\n if (hasNestedEntries) {\n const nested = mergeHashes(\n source[key],\n target[key],\n { ...options, fullKeyPrefix: fullKeyPrefix + key + keySeparator },\n resetValues[key]\n )\n mergeCount += nested.mergeCount\n pullCount += nested.pullCount\n oldCount += nested.oldCount\n resetCount += nested.resetCount\n if (Object.keys(nested.old).length) {\n old[key] = nested.old\n }\n if (Object.keys(nested.reset).length) {\n reset[key] = nested.reset\n }\n } else if (target[key] !== undefined) {\n if (typeof source[key] !== 'string' && !Array.isArray(source[key])) {\n old[key] = source[key]\n oldCount += 1\n } else {\n if (\n (options.resetAndFlag &&\n !isPlural(key) &&\n typeof source[key] === 'string' &&\n source[key] !== target[key]) ||\n resetValues[key]\n ) {\n old[key] = source[key]\n oldCount += 1\n reset[key] = true\n resetCount += 1\n } else {\n target[key] = source[key]\n mergeCount += 1\n }\n }\n } else {\n // support for plural in keys\n const singularKey = getSingularForm(key, pluralSeparator)\n const pluralMatch = key !== singularKey\n\n // support for context in keys\n const contextRegex = new RegExp(\n `\\\\${contextSeparator}([^\\\\${contextSeparator}]+)?$`\n )\n const contextMatch = contextRegex.test(singularKey)\n const rawKey = singularKey.replace(contextRegex, '')\n\n if (\n (contextMatch && target[rawKey] !== undefined) ||\n (pluralMatch &&\n hasRelatedPluralKey(`${singularKey}${pluralSeparator}`, target))\n ) {\n target[key] = source[key]\n pullCount += 1\n } else {\n const keepKey =\n keepRemoved ||\n keepRemovedPatterns.some((pattern) =>\n pattern.test(fullKeyPrefix + key)\n )\n if (keepKey) {\n target[key] = source[key]\n } else {\n old[key] = source[key]\n }\n oldCount += 1\n }\n }\n }\n\n return {\n old,\n new: target,\n mergeCount,\n pullCount,\n oldCount,\n reset,\n resetCount,\n }\n}\n\n/**\n * Merge `source` into `target` by merging nested dictionaries.\n */\nfunction transferValues(source, target) {\n for (const key in source) {\n const sourceValue = source[key]\n const targetValue = target[key]\n if (\n typeof sourceValue === 'object' &&\n typeof targetValue === 'object' &&\n !Array.isArray(sourceValue)\n ) {\n transferValues(sourceValue, targetValue)\n } else {\n target[key] = sourceValue\n }\n }\n}\n\nconst pluralSuffixes = ['zero', 'one', 'two', 'few', 'many', 'other']\n\nfunction isPlural(key) {\n return pluralSuffixes.some((suffix) => key.endsWith(suffix))\n}\n\nfunction hasRelatedPluralKey(rawKey, source) {\n return pluralSuffixes.some(\n (suffix) => source[`${rawKey}${suffix}`] !== undefined\n )\n}\n\nfunction getSingularForm(key, pluralSeparator) {\n const pluralRegex = new RegExp(\n `(\\\\${pluralSeparator}(?:zero|one|two|few|many|other))$`\n )\n\n return key.replace(pluralRegex, '')\n}\n\nfunction getPluralSuffixPosition(key) {\n for (let i = 0, len = pluralSuffixes.length; i < len; i++) {\n if (key.endsWith(pluralSuffixes[i])) return i\n }\n\n return -1\n}\n\nfunction makeDefaultSort(pluralSeparator) {\n return function defaultSort(key1, key2) {\n const singularKey1 = getSingularForm(key1, pluralSeparator)\n const singularKey2 = getSingularForm(key2, pluralSeparator)\n\n if (singularKey1 === singularKey2) {\n return getPluralSuffixPosition(key1) - getPluralSuffixPosition(key2)\n }\n\n return singularKey1.localeCompare(singularKey2, 'en')\n }\n}\n\nasync function esConfigLoader(filepath) {\n return (await import(pathToFileURL(filepath))).default\n}\n\nasync function tsConfigLoader(filepath) {\n const outfile = filepath + '.bundle.mjs'\n await build({\n absWorkingDir: process.cwd(),\n entryPoints: [filepath],\n outfile,\n write: true,\n target: ['node14.18', 'node16'],\n platform: 'node',\n bundle: true,\n format: 'esm',\n sourcemap: 'inline',\n external: [\n ...builtinModules,\n ...builtinModules.map((mod) => 'node:' + mod),\n ],\n })\n const config = await esConfigLoader(outfile)\n rmSync(outfile)\n return config\n}\n\nfunction yamlConfigLoader(filepath, content) {\n return yaml.load(content)\n}\n\n// unescape common html entities\n// code from react-18next taken from\n// https://github.com/i18next/react-i18next/blob/d3247b5c232f5d8c1a154fe5dd0090ca88c82dcf/src/unescape.js\nfunction unescape(text) {\n const matchHtmlEntity =\n /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g\n const htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/',\n }\n\n const unescapeHtmlEntity = (m) => htmlEntities[m]\n\n return text.replace(matchHtmlEntity, unescapeHtmlEntity)\n}\n\nexport {\n dotPathToHash,\n mergeHashes,\n transferValues,\n hasRelatedPluralKey,\n getSingularForm,\n getPluralSuffixPosition,\n makeDefaultSort,\n esConfigLoader,\n tsConfigLoader,\n yamlConfigLoader,\n unescape,\n}\n"],"mappings":"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"}