vue-i18n-extract
Version:
Manage vue-i18n localization with static analysis
1 lines • 31.3 kB
Source Map (JSON)
{"version":3,"file":"vue-i18n-extract.modern.mjs","sources":["../src/config-file/vue-i18n-extract.config.ts","../src/config-file/index.ts","../src/create-report/vue-files.ts","../src/create-report/language-files.ts","../src/create-report/report.ts","../src/create-report/index.ts","../src/index.ts"],"sourcesContent":["export default {\n // Options documented in vue-i18n-extract readme.\n vueFiles: './src/**/*.?(js|vue)',\n languageFiles: './lang/**/*.?(json|yaml|yml|js)',\n exclude: [],\n output: false,\n add: false,\n remove: false,\n ci: false,\n separator: '.',\n noEmptyTranslation: ''\n};\n","import cac from 'cac';\nimport fs from 'fs';\nimport path from 'path';\nimport defaultConfig from './vue-i18n-extract.config';\n\nexport function initCommand(): void {\n fs.writeFileSync(\n path.resolve(process.cwd(), './vue-i18n-extract.config.js'),\n `module.exports = ${JSON.stringify(defaultConfig, null, 2)}`,\n );\n}\n\nexport function resolveConfig (): Record<string, string> {\n const argvOptions = cac().parse(process.argv, { run: false }).options;\n\n let options;\n\n try {\n const pathToConfigFile = path.resolve(process.cwd(), './vue-i18n-extract.config.js');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const configOptions = require(pathToConfigFile);\n\n console.info(`\\nUsing config file found at ${pathToConfigFile}`);\n\n options = {\n ...configOptions,\n ...argvOptions\n };\n } catch {\n options = argvOptions;\n }\n\n options.exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude];\n\n return options;\n}\n","import { SimpleFile, I18NItemWithBounding } from '../types';\nimport isValidGlob from 'is-valid-glob';\nimport glob from 'glob';\nimport fs from 'fs';\n\nexport function readVueFiles (src: string): SimpleFile[] {\n // Replace backslash path segments to make the path work with the glob package.\n // https://github.com/Spittal/vue-i18n-extract/issues/159\n const normalizedSrc = src.replace(/\\\\/g, '/');\n if (!isValidGlob(normalizedSrc)) {\n throw new Error(`vueFiles isn't a valid glob pattern.`);\n }\n\n const targetFiles = glob.sync(normalizedSrc);\n\n if (targetFiles.length === 0) {\n throw new Error('vueFiles glob has no files.');\n }\n\n return targetFiles.map((f) => {\n const fileName = f.replace(process.cwd(), '.');\n return { fileName, path: f, content: fs.readFileSync(f, 'utf8') };\n });\n}\n\nfunction* getMatches (file: SimpleFile, regExp: RegExp, captureGroup = 1): IterableIterator<I18NItemWithBounding> {\n while (true) {\n const match = regExp.exec(file.content);\n if (match === null) {\n break;\n }\n const path = match[captureGroup];\n\n const pathAtIndex = file.content.indexOf(path);\n const previousCharacter = file.content.charAt(pathAtIndex - 1);\n const nextCharacter = file.content.charAt(pathAtIndex + path.length);\n\n const line = (file.content.substring(0, match.index).match(/\\n/g) || []).length + 1;\n yield {\n path,\n previousCharacter,\n nextCharacter,\n file: file.fileName,\n line,\n };\n }\n}\n\n/**\n * Extracts translation keys from methods such as `$t` and `$tc`.\n *\n * - **regexp pattern**: (?:[$\\s.:\"'`+\\(\\[\\{]t[cm]?)\\(\n *\n * **description**: Matches the sequence t(, tc( or tm(, optionally with either “$”, SPACE, “.”, “:”, “\"”, “'”,\n * “`”, \"+\", \"(\", \"[\" or \"{\" in front of it.\n *\n * - **regexp pattern**: ([\"'`])\n *\n * **description**: 1. capturing group. Matches either “\"”, “'”, or “`”.\n *\n * - **regexp pattern**: ((?:[^\\\\]|\\\\.)*?)\n *\n * **description**: 2. capturing group. Matches anything except a backslash\n * *or* matches any backslash followed by any character (e.g. “\\\"”, “\\`”, “\\t”, etc.)\n *\n * - **regexp pattern**: \\1\n *\n * **description**: matches whatever was matched by capturing group 1 (e.g. the starting string character)\n *\n * @param file a file object\n * @returns a list of translation keys found in `file`.\n */\n function extractMethodMatches (file: SimpleFile): I18NItemWithBounding[] {\n const methodRegExp = /(?:[$\\s.:\"'`+\\(\\[\\{]t[cm]?)\\(\\s*?([\"'`])((?:[^\\\\]|\\\\.)*?)\\1/g;\n return [ ...getMatches(file, methodRegExp, 2) ];\n}\n\nfunction extractComponentMatches (file: SimpleFile): I18NItemWithBounding[] {\n const componentRegExp = /(?:(?:<|h\\()(?:i18n|Translation))(?:.|\\n)*?(?:[^:]path(?:=|: )(\"|'))((?:[^\\\\]|\\\\.)*?)\\1/gi;\n return [ ...getMatches(file, componentRegExp, 2) ];\n}\n\nfunction extractDirectiveMatches (file: SimpleFile): I18NItemWithBounding[] {\n const directiveRegExp = /\\bv-t(?:\\.[\\w-]+)?=\"'((?:[^\\\\]|\\\\.)*?)'\"/g;\n return [ ...getMatches(file, directiveRegExp) ];\n}\n\nexport function extractI18NItemsFromVueFiles (sourceFiles: SimpleFile[]): I18NItemWithBounding[] {\n return sourceFiles.reduce((accumulator, file) => {\n const methodMatches = extractMethodMatches(file);\n const componentMatches = extractComponentMatches(file);\n const directiveMatches = extractDirectiveMatches(file);\n return [\n ...accumulator,\n ...methodMatches,\n ...componentMatches,\n ...directiveMatches,\n ];\n }, [] as I18NItemWithBounding[]);\n}\n\n// This is a convenience function for users implementing in their own projects, and isn't used internally\nexport function parseVueFiles (vueFiles: string): I18NItemWithBounding[] {\n return extractI18NItemsFromVueFiles(readVueFiles(vueFiles));\n}\n","import path from 'path';\nimport fs from 'fs';\nimport glob from 'glob';\nimport Dot from 'dot-object';\nimport yaml from 'js-yaml';\nimport isValidGlob from 'is-valid-glob';\nimport { SimpleFile, I18NLanguage, I18NItem } from '../types';\n\nexport function readLanguageFiles (src: string): SimpleFile[] {\n // Replace backslash path segments to make the path work with the glob package.\n // https://github.com/Spittal/vue-i18n-extract/issues/159\n const normalizedSrc = src.replace(/\\\\/g, '/');\n if (!isValidGlob(normalizedSrc)) {\n throw new Error(`languageFiles isn't a valid glob pattern.`);\n }\n\n const targetFiles = glob.sync(normalizedSrc);\n\n if (targetFiles.length === 0) {\n throw new Error('languageFiles glob has no files.');\n }\n\n return targetFiles.map(f => {\n const langPath = path.resolve(process.cwd(), f);\n\n const extension = langPath.substring(langPath.lastIndexOf('.')).toLowerCase();\n const isJSON = extension === '.json';\n const isYAML = extension === '.yaml' || extension === '.yml';\n\n let langObj;\n if (isJSON) {\n langObj = JSON.parse(fs.readFileSync(langPath, 'utf8'));\n } else if (isYAML) {\n langObj = yaml.load(fs.readFileSync(langPath, 'utf8'));\n } else {\n langObj = eval(fs.readFileSync(langPath, 'utf8'));\n }\n\n const fileName = f.replace(process.cwd(), '.');\n\n return { path: f, fileName, content: JSON.stringify(langObj) };\n });\n}\n\nexport function extractI18NLanguageFromLanguageFiles (languageFiles: SimpleFile[], dot: DotObject.Dot = Dot): I18NLanguage {\n return languageFiles.reduce((accumulator, file) => {\n const language = file.fileName.substring(file.fileName.lastIndexOf('/') + 1, file.fileName.lastIndexOf('.'));\n\n if (!accumulator[language]) {\n accumulator[language] = [];\n }\n\n const flattenedObject = dot.dot(JSON.parse(file.content));\n Object.keys(flattenedObject).forEach((key) => {\n accumulator[language].push({\n path: key,\n file: file.fileName,\n });\n });\n\n return accumulator;\n }, {});\n}\n\nexport function writeMissingToLanguageFiles (parsedLanguageFiles: SimpleFile[], missingKeys: I18NItem[], dot: DotObject.Dot = Dot, noEmptyTranslation = ''): void {\n parsedLanguageFiles.forEach(languageFile => {\n const languageFileContent = JSON.parse(languageFile.content);\n\n missingKeys.forEach(item => {\n if (item.language && languageFile.fileName.includes(item.language) || !item.language) {\n const addDefaultTranslation = (noEmptyTranslation) && ((noEmptyTranslation === '*') || (noEmptyTranslation === item.language));\n dot.str(item.path, addDefaultTranslation ? item.path : '', languageFileContent);\n }\n });\n\n writeLanguageFile(languageFile, languageFileContent);\n });\n}\n\nexport function removeUnusedFromLanguageFiles (parsedLanguageFiles: SimpleFile[], unusedKeys: I18NItem[], dot: DotObject.Dot = Dot): void {\n parsedLanguageFiles.forEach(languageFile => {\n const languageFileContent = JSON.parse(languageFile.content);\n\n unusedKeys.forEach(item => {\n if (item.language && languageFile.fileName.includes(item.language)) {\n dot.delete(item.path, languageFileContent);\n }\n });\n\n writeLanguageFile(languageFile, languageFileContent);\n });\n}\n\nfunction writeLanguageFile (languageFile: SimpleFile, newLanguageFileContent: unknown) {\n const fileExtension = languageFile.fileName.substring(languageFile.fileName.lastIndexOf('.') + 1);\n const filePath = languageFile.path;\n const stringifiedContent = JSON.stringify(newLanguageFileContent, null, 2);\n\n if (fileExtension === 'json') {\n fs.writeFileSync(filePath, stringifiedContent);\n } else if (fileExtension === 'js') {\n const jsFile = `module.exports = ${stringifiedContent}; \\n`;\n fs.writeFileSync(filePath, jsFile);\n } else if (fileExtension === 'yaml' || fileExtension === 'yml') {\n const yamlFile = yaml.dump(newLanguageFileContent);\n fs.writeFileSync(filePath, yamlFile);\n } else {\n throw new Error(`Language filetype of ${fileExtension} not supported.`)\n }\n}\n\n// This is a convenience function for users implementing in their own projects, and isn't used internally\nexport function parselanguageFiles (languageFiles: string, dot: DotObject.Dot = Dot): I18NLanguage {\n return extractI18NLanguageFromLanguageFiles(readLanguageFiles(languageFiles), dot);\n}\n","import fs from 'fs';\nimport { I18NItem, I18NItemWithBounding, I18NLanguage, I18NReport } from '../types';\n\nfunction stripBounding (item: I18NItemWithBounding): I18NItem {\n return {\n path: item.path,\n file: item.file,\n line: item.line,\n }\n}\n\nfunction mightBeDynamic (item: I18NItemWithBounding): boolean {\n return item.path.includes('${') && !!item.previousCharacter.match(/`/g) && !!item.nextCharacter.match(/`/g);\n}\n\n// Looping through the arays multiple times might not be the most effecient, but it's the easiest to read and debug. Which at this scale is an accepted trade-off.\nexport function extractI18NReport (vueItems: I18NItemWithBounding[], languageFiles: I18NLanguage): I18NReport {\n const missingKeys: I18NItem[] = [];\n const unusedKeys: I18NItem[] = [];\n\n const maybeDynamicKeys: I18NItem[] = vueItems\n .filter(vueItem => mightBeDynamic(vueItem))\n .map(vueItem => stripBounding(vueItem));\n\n Object.keys(languageFiles).forEach(language => {\n const languageItems = languageFiles[language];\n\n const missingKeysInLanguage = vueItems\n .filter(vueItem => !mightBeDynamic(vueItem))\n .filter(vueItem => !languageItems.some(languageItem => vueItem.path === languageItem.path))\n .map(vueItem => ({ ...stripBounding(vueItem), language }));\n\n const unusedKeysInLanguage = languageItems\n .filter(languageItem => !vueItems.some(vueItem => languageItem.path === vueItem.path || languageItem.path.startsWith(vueItem.path + '.')))\n .map(languageItem => ({ ...languageItem, language }));\n\n missingKeys.push(...missingKeysInLanguage);\n unusedKeys.push(...unusedKeysInLanguage);\n });\n\n return {\n missingKeys,\n unusedKeys,\n maybeDynamicKeys,\n };\n}\n\nexport async function writeReportToFile (report: I18NReport, writePath: string): Promise<NodeJS.ErrnoException | void> {\n const reportString = JSON.stringify(report);\n return new Promise((resolve, reject) => {\n fs.writeFile(\n writePath,\n reportString,\n (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n },\n );\n });\n}\n\n","import path from 'path';\nimport { ReportOptions, I18NReport } from '../types';\nimport { readVueFiles, extractI18NItemsFromVueFiles } from './vue-files';\nimport { readLanguageFiles, extractI18NLanguageFromLanguageFiles, removeUnusedFromLanguageFiles, writeMissingToLanguageFiles } from './language-files';\nimport { extractI18NReport, writeReportToFile } from './report';\nimport Dot from 'dot-object';\n\nexport async function createI18NReport (options: ReportOptions): Promise<I18NReport> {\n const {\n vueFiles: vueFilesGlob,\n languageFiles: languageFilesGlob,\n output,\n add,\n remove,\n exclude = [],\n ci,\n separator,\n noEmptyTranslation = '',\n } = options;\n\n if (!vueFilesGlob) throw new Error('Required configuration vueFiles is missing.');\n if (!languageFilesGlob) throw new Error('Required configuration languageFiles is missing.');\n\n const dot = typeof separator === 'string' ? new Dot(separator) : Dot;\n const vueFiles = readVueFiles(path.resolve(process.cwd(), vueFilesGlob));\n const languageFiles = readLanguageFiles(path.resolve(process.cwd(), languageFilesGlob));\n\n const I18NItems = extractI18NItemsFromVueFiles(vueFiles);\n const I18NLanguage = extractI18NLanguageFromLanguageFiles(languageFiles, dot);\n\n const report = extractI18NReport(I18NItems, I18NLanguage);\n\n report.unusedKeys = report.unusedKeys.filter(key =>\n !exclude.filter(excluded => key.path.startsWith(excluded)).length)\n\n if (report.missingKeys.length) console.info('\\nMissing Keys'), console.table(report.missingKeys);\n if (report.unusedKeys.length) console.info('\\nUnused Keys'), console.table(report.unusedKeys);\n if (report.maybeDynamicKeys.length) console.warn('\\nSuspected Dynamic Keys Found\\nvue-i18n-extract does not compile Vue templates and therefore can not infer the correct key for the following keys.'), console.table(report.maybeDynamicKeys);\n\n if (output) {\n await writeReportToFile(report, path.resolve(process.cwd(), output));\n console.info(`\\nThe report has been has been saved to ${output}`);\n }\n\n if (remove && report.unusedKeys.length) {\n removeUnusedFromLanguageFiles(languageFiles, report.unusedKeys, dot);\n console.info('\\nThe unused keys have been removed from your language files.');\n }\n\n if (add && report.missingKeys.length) {\n writeMissingToLanguageFiles(languageFiles, report.missingKeys, dot, noEmptyTranslation);\n console.info('\\nThe missing keys have been added to your language files.');\n }\n\n if (ci && report.missingKeys.length) {\n throw new Error(`${report.missingKeys.length} missing keys found.`);\n }\n\n if (ci && report.unusedKeys.length) {\n throw new Error(`${report.unusedKeys.length} unused keys found.`);\n }\n\n return report;\n}\n\nexport * from './vue-files';\nexport * from './language-files';\nexport * from './report';\n","export * from './config-file';\nexport * from './create-report';\nexport * from './types';\n\nprocess.on('uncaughtException', (err) => {\n console.error('[vue-i18n-extract]', err);\n process.exit(1);\n});\n\nprocess.on('unhandledRejection', (err) => {\n console.error('[vue-i18n-extract]', err);\n process.exit(1);\n});\n"],"names":["vueFiles","languageFiles","exclude","output","add","remove","ci","separator","noEmptyTranslation","initCommand","fs","writeFileSync","path","resolve","process","cwd","JSON","stringify","defaultConfig","resolveConfig","argvOptions","cac","parse","argv","run","options","pathToConfigFile","configOptions","require","console","info","Array","isArray","readVueFiles","src","normalizedSrc","replace","isValidGlob","Error","targetFiles","glob","sync","length","map","f","fileName","content","readFileSync","getMatches","file","regExp","captureGroup","match","exec","pathAtIndex","indexOf","previousCharacter","charAt","nextCharacter","line","substring","index","extractMethodMatches","methodRegExp","extractComponentMatches","componentRegExp","extractDirectiveMatches","directiveRegExp","extractI18NItemsFromVueFiles","sourceFiles","reduce","accumulator","methodMatches","componentMatches","directiveMatches","parseVueFiles","readLanguageFiles","langPath","extension","lastIndexOf","toLowerCase","isJSON","isYAML","langObj","yaml","load","eval","extractI18NLanguageFromLanguageFiles","dot","Dot","language","flattenedObject","Object","keys","forEach","key","push","writeMissingToLanguageFiles","parsedLanguageFiles","missingKeys","languageFile","languageFileContent","item","includes","addDefaultTranslation","str","writeLanguageFile","removeUnusedFromLanguageFiles","unusedKeys","delete","newLanguageFileContent","fileExtension","filePath","stringifiedContent","jsFile","yamlFile","dump","parselanguageFiles","stripBounding","mightBeDynamic","extractI18NReport","vueItems","maybeDynamicKeys","filter","vueItem","languageItems","missingKeysInLanguage","some","languageItem","unusedKeysInLanguage","startsWith","writeReportToFile","report","writePath","reportString","Promise","reject","writeFile","err","createI18NReport","vueFilesGlob","languageFilesGlob","I18NItems","I18NLanguage","excluded","table","warn","on","error","exit"],"mappings":"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"}