UNPKG

@mailbutler/i18n-utils

Version:

Manage i18n localization with static analysis

75 lines (74 loc) 4.25 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createI18NReport = createI18NReport; const path_1 = __importDefault(require("path")); const src_files_1 = require("./src-files"); const language_files_1 = require("./language-files"); const report_1 = require("./report"); const dot_object_1 = __importDefault(require("dot-object")); async function createI18NReport(options) { const { srcFiles: srcFilesGlob, languageFiles: languageFilesGlob, output, add, remove, normalize, ci, separator, detectDuplicates } = options; if (!srcFilesGlob) throw new Error('Required configuration srcFiles is missing.'); if (!languageFilesGlob) throw new Error('Required configuration languageFiles is missing.'); const dot = typeof separator === 'string' ? new dot_object_1.default(separator) : dot_object_1.default; const srcFilesGlobs = !Array.isArray(srcFilesGlob) ? [srcFilesGlob] : srcFilesGlob; const srcFiles = (0, src_files_1.readSrcFiles)(srcFilesGlobs.map((glob) => path_1.default.resolve(process.cwd(), glob))); const languageFilesGlobs = !Array.isArray(languageFilesGlob) ? [languageFilesGlob] : languageFilesGlob; const languageFiles = (0, language_files_1.readLanguageFiles)(languageFilesGlobs.map((glob) => path_1.default.resolve(process.cwd(), glob))); const I18NItems = (0, src_files_1.extractI18NItemsFromSrcFiles)(srcFiles); const I18NLanguage = (0, language_files_1.extractI18NLanguageFromLanguageFiles)(languageFiles, dot); const report = (0, report_1.extractI18NReport)(I18NItems, I18NLanguage); if (report.missingKeys.length) console.info('\nMissing Keys'), console.table(report.missingKeys); if (report.unusedKeys.length) console.info('\nUnused Keys'), console.table(report.unusedKeys); if (report.duplicatedKeys.length) console.info('\nDuplicated Keys'), console.table(report.duplicatedKeys); if (report.maybeDynamicKeys.length) console.warn("\nSuspected Dynamic Keys Found\ni18n-utils is extra cautious and won't consider any matching key as 'unused'."), console.table(report.maybeDynamicKeys); if (output) { await (0, report_1.writeReportToFile)(report, path_1.default.resolve(process.cwd(), output)); console.info(`\nThe report has been has been saved to ${output}`); } if (add && report.missingKeys.length) { (0, language_files_1.writeMissingToLanguageFiles)(languageFiles, report.missingKeys, dot, normalize); console.info('\nThe missing keys have been added to your language files.'); } if ((remove && report.unusedKeys.length) || normalize) { (0, language_files_1.removeUnusedFromLanguageFiles)(languageFiles, report.unusedKeys, dot, normalize); console.info('\nThe unused keys have been removed from your language files.'); } if (ci && report.missingKeys.length) { throw new Error(`${report.missingKeys.length} missing keys found.`); } if (ci && report.unusedKeys.length) { throw new Error(`${report.unusedKeys.length} unused keys found.`); } if (detectDuplicates && report.duplicatedKeys.length) { throw new Error(`${report.duplicatedKeys.length} duplicated keys found.`); } return report; } __exportStar(require("./src-files"), exports); __exportStar(require("./language-files"), exports); __exportStar(require("./report"), exports);