next-translate-scanner
Version:
Scan next-translate code for translations and update json files.
75 lines (74 loc) • 4.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const glob_1 = __importDefault(require("glob"));
const commander_1 = require("commander");
const logger_1 = __importDefault(require("./utils/logger"));
const extract_translations_1 = __importDefault(require("./utils/extract-translations"));
const translations_to_namespace_map_1 = __importDefault(require("./utils/translations-to-namespace-map"));
const get_config_1 = __importDefault(require("./utils/get-config"));
const update_existing_translations_1 = __importDefault(require("./utils/update-existing-translations"));
const load_existing_translations_1 = __importDefault(require("./utils/load-existing-translations"));
const un_flatten_object_1 = __importDefault(require("./utils/un-flatten-object"));
const rimraf_1 = __importDefault(require("rimraf"));
const write_translation_files_1 = __importDefault(require("./utils/write-translation-files"));
const add_pseudo_locale_1 = __importDefault(require("./utils/add-pseudo-locale"));
const pkg = require('../package.json');
commander_1.program
.version(pkg.version)
.usage('[options] <file ...>')
.option('-s, --silent', 'Disable logging to stdout')
.option('--config <config>', 'Path to the config file (default: next-translate-scanner.config.js)', 'next-translate-scanner.config.js');
commander_1.program.parse(process.argv);
logger_1.default.setSilent(commander_1.program.opts().silent);
commander_1.program.on('--help', function () {
logger_1.default.info();
logger_1.default.info('Examples:');
logger_1.default.info(' $ next-translate-scanner "src/**/*.{js,jsx,ts,tsx}"');
logger_1.default.info(' $ next-translate-scanner --config custom-scanner.config.js');
});
const { config, inputs } = (0, get_config_1.default)();
const mapYesNo = (condition) => condition ? 'yes' : 'no';
logger_1.default.info();
logger_1.default.info(`next-translate Scanner`);
logger_1.default.info(`--------------`);
logger_1.default.info(`Input: ${inputs.join(', ')}`);
logger_1.default.info(`Output: ${config.output}`);
logger_1.default.info(`Locales: [${config.locales.join(', ')}]`);
logger_1.default.info();
logger_1.default.info(`KeepRemoved: ${mapYesNo(config.keepRemoved)}`);
logger_1.default.info(`ReplaceDefaults: ${mapYesNo(config.replaceDefaults)}`);
logger_1.default.info(`FailOnWarnings: ${mapYesNo(config.failOnWarnings)}`);
logger_1.default.info();
let allFiles = [];
for (const item of inputs) {
allFiles = [
...allFiles,
...glob_1.default.sync(item)
];
}
const extractedTranslations = (0, extract_translations_1.default)(allFiles, config);
const translationsWithNamespace = (0, translations_to_namespace_map_1.default)(extractedTranslations, config);
if (config.failOnWarnings && logger_1.default.getWarningCount() > 0) {
logger_1.default.error(`${logger_1.default.getWarningCount()} warnings encountered`, true);
}
const existingTranslations = (0, load_existing_translations_1.default)(config);
let mergedTranslations = (0, update_existing_translations_1.default)(translationsWithNamespace, existingTranslations, config);
if (config.pseudoLocale) {
mergedTranslations = (0, add_pseudo_locale_1.default)(mergedTranslations, config.pseudoLocale.baseLocale, config.pseudoLocale.locale);
}
if (!!config.keySeparator) {
for (const [locale, namespaces] of Object.entries(mergedTranslations)) {
for (const [namespace, translations] of Object.entries(namespaces)) {
mergedTranslations[locale][namespace] = (0, un_flatten_object_1.default)(translations, config.keySeparator);
}
}
}
if (!config.keepRemoved) {
const removePattern = config.output.replace('$LOCALE', '*').replace('$NAMESPACE', '*');
rimraf_1.default.sync(removePattern);
}
(0, write_translation_files_1.default)(mergedTranslations, config);