@relayfy/angular-builders
Version:
Usefull helper functionalities.
78 lines (77 loc) • 3.97 kB
JavaScript
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'];
};
;