UNPKG

@relayfy/angular-builders

Version:
78 lines (77 loc) 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.merge = exports.executeXLF = void 0; const fast_xml_parser_1 = require("fast-xml-parser"); const utils_1 = require("./utils"); const chalk_1 = require("chalk"); const fs_1 = require("fs"); const parser = new fast_xml_parser_1.XMLParser({ ignoreAttributes: false, allowBooleanAttributes: true, stopNodes: ['*.source', '*.target'] }); const builder = new fast_xml_parser_1.XMLBuilder({ ignoreAttributes: false, format: true, indentBy: ' ', stopNodes: ['*.source', '*.target'], processEntities: false }); const executeXLF = (sourceFile, targetFile, targetLocale) => { const sourceXML = (0, fs_1.readFileSync)(sourceFile, 'utf-8'); const targetXML = (0, fs_1.readFileSync)(targetFile, 'utf-8'); const mergedTargetXML = (0, exports.merge)(sourceXML, targetXML, targetLocale); (0, fs_1.writeFileSync)(targetFile, mergedTargetXML, 'utf-8'); }; exports.executeXLF = executeXLF; const merge = (sourceXML, targetXML = '', targetLocale) => { const sourceXMLObj = parser.parse(sourceXML); const targetXMLObj = parser.parse(targetXML); const sourceTransUnits = getTransUnits(sourceXMLObj); const targetTransUnits = getTransUnits(targetXMLObj); const mergedTransUnits = mergeTransUnits(sourceTransUnits, targetTransUnits, targetLocale); return builder.build(updateTransUnits(sourceXMLObj, mergedTransUnits, targetLocale)); }; exports.merge = merge; const mergeTransUnits = (sourceTransUnits, targetTransUnits, targetLocale) => { var _a; const merged = (_a = [...(sourceTransUnits || [])]) === null || _a === void 0 ? void 0 : _a.map((sourceTransUnit) => { const match = targetTransUnits === null || targetTransUnits === void 0 ? void 0 : targetTransUnits.find(targetTransUnit => targetTransUnit['@_id'] === sourceTransUnit['@_id']); if (match) { return { '@_id': sourceTransUnit['@_id'], '@_datatype': sourceTransUnit['@_datatype'], source: sourceTransUnit.source, target: match.target, 'context-group': sourceTransUnit['context-group'] }; } else { (0, utils_1.log)((0, chalk_1.yellow)(`${sourceTransUnit['@_id']} added for ${targetLocale}`)); return { '@_id': sourceTransUnit['@_id'], '@_datatype': sourceTransUnit['@_datatype'], source: sourceTransUnit.source, target: 'NOT_TRANSLATED', 'context-group': sourceTransUnit['context-group'] }; } }); targetTransUnits === null || targetTransUnits === void 0 ? void 0 : targetTransUnits.forEach(targetTransUnit => { const removed = !(sourceTransUnits === null || sourceTransUnits === void 0 ? void 0 : sourceTransUnits.find(sourceTransUnit => sourceTransUnit['@_id'] === targetTransUnit['@_id'])); if (removed) { (0, utils_1.log)((0, chalk_1.red)(`${targetTransUnit['@_id']} removed for ${targetLocale}`)); } }); return merged; }; const updateTransUnits = (xmlObj, transUnits, targetLocale) => { var _a; return Object.assign(Object.assign({}, xmlObj), { xliff: Object.assign(Object.assign({}, ((xmlObj === null || xmlObj === void 0 ? void 0 : xmlObj.xliff) || {})), { file: Object.assign(Object.assign({}, (((_a = xmlObj === null || xmlObj === void 0 ? void 0 : xmlObj.xliff) === null || _a === void 0 ? void 0 : _a.file) || {})), { '@_target-language': targetLocale, body: { 'trans-unit': transUnits } }) }) }); }; const getTransUnits = (xmlObj) => { var _a, _b, _c; return (_c = (_b = (_a = xmlObj === null || xmlObj === void 0 ? void 0 : xmlObj.xliff) === null || _a === void 0 ? void 0 : _a.file) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c['trans-unit']; };