@bmat/translation-management
Version:
Manage Front-End translations from multiple sources
1 lines • 2.33 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 glob=require('glob');const pretty_data_1=require('pretty-data');const xmldom_1=require('xmldom');const merge_master_files_1=require('../../lib/transforms/merge-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 writeToOutput(path,xmlDoc){const serializer=new xmldom_1.XMLSerializer();return new Promise((resolve,reject)=>{create_folder_if_not_exists_1.createFolderIfNotExists(path).then(()=>{fs.writeFile(path,'<?xml version="1.0" encoding="UTF-8"?>\n'+pretty_data_1.pd.xml(serializer.serializeToString(xmlDoc)),{encoding:'utf-8'},err=>{if(err){reject(err);}else{resolve();}});}).catch(reject);});}function readOldTranslation(path){return new Promise((resolve,reject)=>{fs.readFile(path,{encoding:'utf8'},(err,data)=>{if(err){reject(err);}else{try{const parser=new xmldom_1.DOMParser();const oldDoc=parser.parseFromString(data);resolve(oldDoc);}catch(e){reject(e);}}});});}function mergeMasters(input,output,forceOverwrite=false,sourceLanguage='en-GB',targetLanguage='en-GB'){return new Promise((resolve,reject)=>{glob(input,(err,files)=>__awaiter(this,void 0,void 0,function*(){if(err){return reject(err);}if(!files.length){return resolve();}try{const mergedMaster=yield merge_master_files_1.mergeMasterFiles(files,{sourceLanguage,targetLanguage});if(!forceOverwrite&&fs.existsSync(output)){const oldDoc=yield readOldTranslation(output);const updated=update_translations_1.updateTranslations(mergedMaster,oldDoc);yield writeToOutput(output,updated);return resolve();}yield writeToOutput(output,mergedMaster);return resolve();}catch(e){return reject(e);}}));});}exports.mergeMasters=mergeMasters;