UNPKG

@lingui/cli

Version:

CLI for working wit message catalogs

61 lines (60 loc) 2.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractFromFiles = extractFromFiles; const picocolors_1 = __importDefault(require("picocolors")); const path_1 = __importDefault(require("path")); const extractors_1 = __importDefault(require("../extractors")); const utils_1 = require("../utils"); function mergePlaceholders(prev, next) { const res = Object.assign({}, prev); Object.entries(next).forEach(([key, value]) => { if (!res[key]) { res[key] = []; } if (!res[key].includes(value)) { res[key].push(value); } }); return res; } async function extractFromFiles(paths, config) { const messages = {}; let catalogSuccess = true; await Promise.all(paths.map(async (filename) => { const fileSuccess = await (0, extractors_1.default)(filename, (next) => { var _a; if (!messages[next.id]) { messages[next.id] = { message: next.message, context: next.context, placeholders: {}, comments: [], origin: [], }; } const prev = messages[next.id]; // there might be a case when filename was not mapped from sourcemaps const filename = next.origin[0] ? path_1.default.relative(config.rootDir, next.origin[0]).replace(/\\/g, "/") : ""; const origin = [filename, next.origin[1]]; if (prev.message && next.message && prev.message !== next.message) { throw new Error(`Encountered different default translations for message ${picocolors_1.default.yellow(next.id)}` + `\n${picocolors_1.default.yellow((0, utils_1.prettyOrigin)(prev.origin))} ${prev.message}` + `\n${picocolors_1.default.yellow((0, utils_1.prettyOrigin)([origin]))} ${next.message}`); } messages[next.id] = Object.assign(Object.assign({}, prev), { message: (_a = prev.message) !== null && _a !== void 0 ? _a : next.message, comments: next.comment ? [...prev.comments, next.comment].sort() : prev.comments, origin: [...prev.origin, [filename, next.origin[1]]].sort((a, b) => a[0].localeCompare(b[0])), placeholders: mergePlaceholders(prev.placeholders, next.placeholders) }); }, config, { extractors: config.extractors, }); catalogSuccess && (catalogSuccess = fileSuccess); })); if (!catalogSuccess) return undefined; return messages; }