@bmat/translation-management
Version:
Manage Front-End translations from multiple sources
1 lines • 3.4 kB
JavaScript
;var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator['throw'](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):new P(function(resolve){resolve(result.value);}).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});};Object.defineProperty(exports,'__esModule',{value:true});const fs=require('fs');const path=require('path');const pretty_data_1=require('pretty-data');const xmldom_1=require('xmldom');const xliff_1=require('../../lib/constants/xliff');const merge_i18n_json_1=require('../../lib/transforms/merge-i18n-json');const split_master_files_1=require('../../lib/transforms/split-master-files');const update_translations_1=require('../../lib/transforms/update-translations');const create_folder_if_not_exists_1=require('../../lib/utils/create-folder-if-not-exists');function readMasterFile(filePath){return new Promise((resolve,reject)=>{fs.readFile(filePath,{encoding:'utf8'},(err,data)=>{if(err){reject(err);}else{try{const parser=new xmldom_1.DOMParser();const masterDoc=parser.parseFromString(data);const root=masterDoc.getElementsByTagNameNS(xliff_1.NAMESPACE,'xliff');if(!root.length){reject(new TypeError('Invalid master. Only XLIFF files allowed'));}else{resolve(masterDoc);}}catch(e){reject(e);}}});});}function readI18nJsonFile(filePath){return new Promise((resolve,reject)=>{fs.readFile(filePath,{encoding:'utf8'},(err,data)=>{if(err){reject(err);}else{try{const i18nJson=JSON.parse(data);resolve(i18nJson);}catch(e){reject(e);}}});});}function readOldSplit(filepath,fileType){if(fileType==='xliff'){return readMasterFile(filepath);}return readI18nJsonFile(filepath);}function mergedOverwrite(master,slave,fileType){if(fileType==='xliff'){return update_translations_1.updateTranslations(master,slave);}return merge_i18n_json_1.mergeI18nJson(master,slave);}function writeToOutput(outputPath,data){return new Promise((resolve,reject)=>{create_folder_if_not_exists_1.createFolderIfNotExists(outputPath).then(()=>{fs.writeFile(outputPath,data,{encoding:'utf-8'},err=>{if(err){reject(err);}else{resolve();}});}).catch(reject);});}function supportedFileToString(file){if(file.fileType==='json'){return pretty_data_1.pd.json(JSON.stringify(file.content));}else{const serializer=new xmldom_1.XMLSerializer();return pretty_data_1.pd.xml(serializer.serializeToString(file.content));}}function splitMaster(input,output,forceOverwrite=false){return __awaiter(this,void 0,void 0,function*(){try{const masterDoc=yield readMasterFile(input);const splitFiles=split_master_files_1.splitMasterFiles(masterDoc);yield Promise.all(splitFiles.map(file=>__awaiter(this,void 0,void 0,function*(){const basename=path.basename(file.original);const targetPath=path.resolve(output,basename);if(!forceOverwrite&&fs.existsSync(targetPath)){const oldSplitFile=yield readOldSplit(targetPath,file.fileType);const updated=mergedOverwrite(file.content,oldSplitFile,file.fileType);return writeToOutput(targetPath,supportedFileToString(Object.assign({},file,{content:updated})));}else{return writeToOutput(targetPath,supportedFileToString(file));}})));return;}catch(e){return Promise.reject(e);}});}exports.splitMaster=splitMaster;