{"version":3,"file":"transform.js","names":["Transform","eol","fs","path","VirtualFile","yaml","i18next","sortKeys","dotPathToHash","mergeHashes","transferValues","makeDefaultSort","Parser","i18nTransform","_Transform","_inherits","_super","_createSuper","_this","options","arguments","length","undefined","_classCallCheck","objectMode","call","defaults","contextSeparator","createOldCatalogs","defaultNamespace","defaultValue","indentation","keepRemoved","keySeparator","lexers","lineEnding","locales","namespaceSeparator","pluralSeparator","output","resetDefaultValueLocale","sort","verbose","customValueTemplate","failOnWarnings","yamlOptions","_objectSpread","i18nextOptions","nsSeparator","entries","parserHadWarnings","parserHadUpdate","parser","on","error","warning","warn","localeRegex","namespaceRegex","createInstance","init","keyToFilePaths","_createClass","key","value","emit","console","_transform","file","encoding","done","content","isBuffer","contents","toString","lstatSync","isDirectory","concat","readFileSync","log","filename","basename","parse","_iterator","_createForOfIteratorHelper","_step","s","n","entry","keyPrefix","parts","split","namespace","shift","join","replace","keyWithNamespace","includes","push","filePaths","addEntry","err","e","f","_flush","_this2","maybeSortedLocales","a","resetValues","_iterator2","_step2","_loop","locale","catalog","resetAndFlag","uniqueCount","uniquePluralsCount","transformEntry","suffix","_dotPathToHash","separator","duplicate","conflict","_iterator3","_step3","_loop2","count","services","pluralResolver","getSuffixes","ordinal","forEach","outputPath","resolve","namespacePath","parsedNamespacePath","namespaceOldPath","dir","name","ext","existingCatalog","getCatalog","existingOldCatalog","_mergeHashes","fullKeyPrefix","newCatalog","oldKeys","old","mergeCount","oldCount","resetFlags","reset","resetCount","_mergeHashes2","oldCatalog","restoreCount","addCount","failOnUpdate","refCount","maybeSortedNewCatalog","maybeSortedOldCatalog","compare","deep","parserHadSortUpdate","JSON","stringify","pushFile","Object","keys","process","exit","context","contextEntry","assign","endsWith","load","code","text","dump","indent","chr","charCodeAt","substr","auto","crlf","cr","lf","Buffer","from","default"],"sources":["../src/transform.js"],"sourcesContent":["import { Transform } from 'stream'\nimport eol from 'eol'\nimport fs from 'fs'\nimport path from 'path'\nimport VirtualFile from 'vinyl'\nimport yaml from 'js-yaml'\nimport i18next from 'i18next'\nimport sortKeys from 'sort-keys'\n\nimport {\n dotPathToHash,\n mergeHashes,\n transferValues,\n makeDefaultSort,\n} from './helpers.js'\nimport Parser from './parser.js'\n\nexport default class i18nTransform extends Transform {\n constructor(options = {}) {\n options.objectMode = true\n super(options)\n\n this.defaults = {\n contextSeparator: '_',\n createOldCatalogs: true,\n defaultNamespace: 'translation',\n defaultValue: '',\n indentation: 2,\n keepRemoved: false,\n keySeparator: '.',\n lexers: {},\n lineEnding: 'auto',\n locales: ['en', 'fr'],\n namespaceSeparator: ':',\n pluralSeparator: '_',\n output: 'locales/$LOCALE/$NAMESPACE.json',\n resetDefaultValueLocale: null,\n sort: false,\n verbose: false,\n customValueTemplate: null,\n failOnWarnings: false,\n yamlOptions: null,\n }\n\n this.options = { ...this.defaults, ...options }\n this.options.i18nextOptions = {\n ...options.i18nextOptions,\n pluralSeparator: this.options.pluralSeparator,\n nsSeparator: this.options.namespaceSeparator,\n }\n\n if (this.options.keySeparator === false) {\n this.options.keySeparator = '__!NO_KEY_SEPARATOR!__'\n }\n if (this.options.namespaceSeparator === false) {\n this.options.namespaceSeparator = '__!NO_NAMESPACE_SEPARATOR!__'\n }\n this.entries = []\n\n this.parserHadWarnings = false\n this.parserHadUpdate = false\n this.parser = new Parser(this.options)\n this.parser.on('error', (error) => this.error(error))\n this.parser.on('warning', (warning) => this.warn(warning))\n\n this.localeRegex = /\\$LOCALE/g\n this.namespaceRegex = /\\$NAMESPACE/g\n\n this.i18next = i18next.createInstance()\n this.i18next.init(this.options.i18nextOptions)\n\n // Track where individual keys are found, for use in customValueTemplate\n // substitution into \"${filePath}\"\n this.keyToFilePaths = {}\n }\n\n error(error) {\n this.emit('error', error)\n if (this.options.verbose) {\n console.error('\\x1b[31m%s\\x1b[0m', error)\n }\n }\n\n warn(warning) {\n this.emit('warning', warning)\n this.parserHadWarnings = true\n if (this.options.verbose) {\n console.warn('\\x1b[33m%s\\x1b[0m', warning)\n }\n }\n\n _transform(file, encoding, done) {\n let content\n if (file.isBuffer()) {\n content = file.contents.toString('utf8')\n } else if (fs.lstatSync(file.path).isDirectory()) {\n const warning = `${file.path} is a directory: skipping`\n this.warn(warning)\n done()\n return\n } else {\n content = fs.readFileSync(file.path, encoding || 'utf-8')\n }\n\n this.emit('reading', file)\n if (this.options.verbose) {\n console.log(`Parsing ${file.path}`)\n }\n\n const filename = path.basename(file.path)\n const entries = this.parser.parse(content, filename)\n\n for (const entry of entries) {\n let key = entry.key\n\n if (entry.keyPrefix) {\n key = entry.keyPrefix + this.options.keySeparator + key\n }\n\n const parts = key.split(this.options.namespaceSeparator)\n\n // make sure we're not pulling a 'namespace' out of a default value\n if (parts.length > 1 && key !== entry.defaultValue) {\n entry.namespace = parts.shift()\n }\n entry.namespace = entry.namespace || this.options.defaultNamespace\n\n key = parts.join(this.options.namespaceSeparator)\n key = key.replace(/\\\\('|\"|`)/g, '$1')\n key = key.replace(/\\\\n/g, '\\n')\n key = key.replace(/\\\\r/g, '\\r')\n key = key.replace(/\\\\t/g, '\\t')\n key = key.replace(/\\\\\\\\/g, '\\\\')\n entry.key = key\n entry.keyWithNamespace = entry.namespace + this.options.keySeparator + key\n // Add the filename so that we can use it in customValueTemplate\n this.keyToFilePaths[key] = this.keyToFilePaths[key] || []\n if (!this.keyToFilePaths[key].includes(file.path)) {\n this.keyToFilePaths[key].push(file.path)\n }\n entry.filePaths = this.keyToFilePaths[key]\n\n this.addEntry(entry)\n }\n\n done()\n }\n\n _flush(done) {\n let maybeSortedLocales = this.options.locales\n if (this.options.resetDefaultValueLocale) {\n // ensure we process the reset locale first\n maybeSortedLocales.sort((a) =>\n a === this.options.resetDefaultValueLocale ? -1 : 1\n )\n }\n\n // Tracks keys to reset by namespace\n let resetValues = {}\n\n for (const locale of maybeSortedLocales) {\n const catalog = {}\n const resetAndFlag = this.options.resetDefaultValueLocale === locale\n\n let uniqueCount = {}\n let uniquePluralsCount = {}\n\n const transformEntry = (entry, suffix) => {\n if (uniqueCount[entry.namespace] === undefined) {\n uniqueCount[entry.namespace] = 0\n }\n if (uniquePluralsCount[entry.namespace] === undefined) {\n uniquePluralsCount[entry.namespace] = 0\n }\n\n const { duplicate, conflict } = dotPathToHash(entry, catalog, {\n suffix,\n locale,\n separator: this.options.keySeparator,\n pluralSeparator: this.options.pluralSeparator,\n value: this.options.defaultValue,\n customValueTemplate: this.options.customValueTemplate,\n })\n\n if (duplicate) {\n if (conflict === 'key') {\n this.warn(\n `Found translation key already mapped to a map or parent of ` +\n `new key already mapped to a string: ${entry.key}`\n )\n } else if (conflict === 'value') {\n this.warn(`Found same keys with different values: ${entry.key}`)\n }\n } else {\n uniqueCount[entry.namespace] += 1\n if (suffix) {\n uniquePluralsCount[entry.namespace] += 1\n }\n }\n }\n\n // generates plurals according to i18next rules: key_zero, key_one, key_two, key_few, key_many and key_other\n for (const entry of this.entries) {\n if (\n this.options.pluralSeparator !== false &&\n entry.count !== undefined\n ) {\n this.i18next.services.pluralResolver\n .getSuffixes(locale, { ordinal: entry.ordinal })\n .forEach((suffix) => {\n transformEntry(entry, suffix)\n })\n } else {\n transformEntry(entry)\n }\n }\n\n const outputPath = path.resolve(this.options.output)\n\n for (const namespace in catalog) {\n let namespacePath = outputPath\n namespacePath = namespacePath.replace(this.localeRegex, locale)\n namespacePath = namespacePath.replace(this.namespaceRegex, namespace)\n\n let parsedNamespacePath = path.parse(namespacePath)\n\n const namespaceOldPath = path.join(\n parsedNamespacePath.dir,\n `${parsedNamespacePath.name}_old${parsedNamespacePath.ext}`\n )\n\n let existingCatalog = this.getCatalog(namespacePath)\n let existingOldCatalog = this.getCatalog(namespaceOldPath)\n\n // merges existing translations with the new ones\n const {\n new: newCatalog,\n old: oldKeys,\n mergeCount,\n oldCount,\n reset: resetFlags,\n resetCount,\n } = mergeHashes(\n existingCatalog,\n catalog[namespace],\n {\n ...this.options,\n resetAndFlag,\n fullKeyPrefix: namespace + this.options.namespaceSeparator,\n },\n resetValues[namespace]\n )\n\n // record values to be reset\n // assumes that the 'default' namespace is processed first\n if (resetAndFlag && !resetValues[namespace]) {\n resetValues[namespace] = resetFlags\n }\n\n // restore old translations\n const { old: oldCatalog, mergeCount: restoreCount } = mergeHashes(\n existingOldCatalog,\n newCatalog,\n { ...this.options, keepRemoved: false }\n )\n\n // backup unused translations\n transferValues(oldKeys, oldCatalog)\n\n if (this.options.verbose) {\n console.log(`[${locale}] ${namespace}`)\n console.log(\n `Unique keys: ${uniqueCount[namespace]} (${uniquePluralsCount[namespace]} are plurals)`\n )\n const addCount = uniqueCount[namespace] - mergeCount\n console.log(`Added keys: ${addCount}`)\n console.log(`Restored keys: ${restoreCount}`)\n if (this.options.keepRemoved) {\n console.log(`Unreferenced keys: ${oldCount}`)\n } else {\n console.log(`Removed keys: ${oldCount}`)\n }\n if (this.options.resetDefaultValueLocale) {\n console.log(`Reset keys: ${resetCount}`)\n }\n console.log('')\n }\n\n if (this.options.failOnUpdate) {\n const addCount = uniqueCount[namespace] - mergeCount\n const refCount =\n addCount + restoreCount + (this.options.keepRemoved ? 0 : oldCount)\n if (refCount !== 0) {\n this.parserHadUpdate = true\n continue\n }\n }\n\n if (this.options.failOnWarnings && this.parserHadWarnings) {\n continue\n }\n\n let maybeSortedNewCatalog = newCatalog\n let maybeSortedOldCatalog = oldCatalog\n const { sort } = this.options\n if (sort) {\n const compare =\n typeof sort === 'function'\n ? sort\n : makeDefaultSort(this.options.pluralSeparator)\n maybeSortedNewCatalog = sortKeys(newCatalog, {\n deep: true,\n compare,\n })\n\n maybeSortedOldCatalog = sortKeys(oldCatalog, { deep: true, compare })\n\n if (this.options.failOnUpdate && !this.parserHadUpdate) {\n // No updates to the catalog, so we do the deeper check to ensure it is also sorted.\n // This is easiest to accomplish by simply converting both objects to JSON, as we'd have\n // to do a deep comparison anyway\n this.parserHadSortUpdate =\n JSON.stringify(maybeSortedNewCatalog) !==\n JSON.stringify(existingCatalog)\n }\n }\n\n // push files back to the stream\n this.pushFile(namespacePath, maybeSortedNewCatalog)\n if (\n this.options.createOldCatalogs &&\n (Object.keys(oldCatalog).length || existingOldCatalog)\n ) {\n this.pushFile(namespaceOldPath, maybeSortedOldCatalog)\n }\n }\n }\n\n if (this.options.failOnWarnings && this.parserHadWarnings) {\n this.emit(\n 'error',\n 'Warnings were triggered and failOnWarnings option is enabled. Exiting...'\n )\n process.exit(1)\n }\n\n if (this.options.failOnUpdate) {\n if (this.parserHadUpdate) {\n this.emit(\n 'error',\n 'Some translations was updated and failOnUpdate option is enabled. Exiting...'\n )\n process.exit(1)\n }\n if (this.parserHadSortUpdate) {\n this.emit(\n 'error',\n 'Some keys were sorted and failOnUpdate option is enabled. Exiting...'\n )\n process.exit(1)\n }\n }\n\n done()\n }\n\n addEntry(entry) {\n if (entry.context) {\n const contextEntry = Object.assign({}, entry)\n delete contextEntry.context\n contextEntry.key += this.options.contextSeparator + entry.context\n contextEntry.keyWithNamespace +=\n this.options.contextSeparator + entry.context\n this.entries.push(contextEntry)\n } else {\n this.entries.push(entry)\n }\n }\n\n getCatalog(path) {\n try {\n let content\n if (path.endsWith('yml')) {\n content = yaml.load(fs.readFileSync(path).toString())\n } else {\n content = JSON.parse(fs.readFileSync(path))\n }\n return content\n } catch (error) {\n if (error.code !== 'ENOENT') {\n this.emit('error', error)\n }\n }\n\n return null\n }\n\n pushFile(path, contents) {\n let text\n if (path.endsWith('yml')) {\n text = yaml.dump(contents, {\n indent: this.options.indentation,\n ...this.options.yamlOptions,\n })\n } else {\n text = JSON.stringify(contents, null, this.options.indentation) + '\\n'\n // Convert non-printable Unicode characters to unicode escape sequence\n // https://unicode.org/reports/tr18/#General_Category_Property\n text = text.replace(/[\\p{Z}\\p{Cc}\\p{Cf}]/gu, (chr) => {\n const n = chr.charCodeAt(0)\n return n < 128 ? chr : `\\\\u${`0000${n.toString(16)}`.substr(-4)}`\n })\n }\n\n if (this.options.lineEnding === 'auto') {\n text = eol.auto(text)\n } else if (\n this.options.lineEnding === '\\r\\n' ||\n this.options.lineEnding === 'crlf'\n ) {\n text = eol.crlf(text)\n } else if (\n this.options.lineEnding === '\\r' ||\n this.options.lineEnding === 'cr'\n ) {\n text = eol.cr(text)\n } else {\n // Defaults to LF, aka \\n\n text = eol.lf(text)\n }\n\n const file = new VirtualFile({\n path,\n contents: Buffer.from(text),\n })\n this.push(file)\n }\n}\n"],"mappings":"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"}