xliff-generator
Version:
A simple module to create xliff files
116 lines (115 loc) • 5.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const errors_1 = require("../errors");
const models_1 = require("../models");
const utils_1 = require("../utils");
const validators_1 = require("../validators");
class MainService {
constructor(logger, fileService, xlifGeneratorService, csvService, translationContainerCreator) {
this.logger = logger;
this.fileService = fileService;
this.xlifGeneratorService = xlifGeneratorService;
this.csvService = csvService;
this.translationContainerCreator = translationContainerCreator;
}
execute(iConfig) {
this.logger.trace('Config is ', iConfig);
let config;
try {
config = this.convertToCreateFromCsvConfig(iConfig);
this.validateCreateFromCsvConfig(config);
}
catch (e) {
return Promise.reject(new errors_1.ValidationError(e.message));
}
return new Promise((resolve, reject) => {
this.createTranslationContainerFromCsvFile(config)
.then((data) => {
this.writeXmlFiles(data, config)
.then(() => {
resolve();
})
.catch((e) => {
reject(e);
});
})
.catch((e) => {
reject(e);
});
});
}
executeSync(iConfig) {
this.logger.trace('Enter MainService.executeSync');
const sw = new utils_1.StopWatch();
sw.start();
try {
this.logger.trace('Config is ', iConfig);
const config = this.convertToCreateFromCsvConfig(iConfig);
this.validateCreateFromCsvConfig(config);
const translationContainer = this.createTranslationContainerFromCsvFileSync(config);
this.writeXmlFilesSync(translationContainer, config);
}
finally {
sw.stop();
this.logger.debug(`MainService.execute - Duration: ${sw.getElapsedMilliseconds()} ms`);
this.logger.trace('Leave MainService.executeSync');
}
}
convertToCreateFromCsvConfig(iConfig) {
const langOptions = [];
iConfig.languageOptions.forEach((value) => {
const valueToAdd = new models_1.LanguageOption(value.languageKey, value.output, value.isSourceLanguage);
langOptions.push(valueToAdd);
});
return new models_1.CreateFromCsvConfig(iConfig.productName, iConfig.csvFile, langOptions, iConfig.printPretty, iConfig.csvDelimiter, iConfig.csvComment, iConfig.csvEscape, iConfig.csvQuote);
}
validateCreateFromCsvConfig(config) {
const validator = new validators_1.CreateFromCsvConfigValidator();
validator.validate(config);
}
createTranslationContainerFromCsvFileSync(config) {
const swCsvFile = new utils_1.StopWatch();
swCsvFile.start();
const parsedCsvFile = this.csvService.parseCsvSync(config);
this.logger.debug(`ParseCsvFileSync - Read to '${config.csvFile}': `
+ `Duration: ${swCsvFile.getElapsedMilliseconds()} ms`);
const swCreateTranslationContainer = new utils_1.StopWatch();
swCreateTranslationContainer.start();
const container = this.translationContainerCreator.createTranslationContainerFromParsedCsvFile(config, parsedCsvFile);
this.logger.debug(`CreateTranslationContainer - `
+ `Duration: ${swCreateTranslationContainer.getElapsedMilliseconds()} ms`);
return container;
}
writeXmlFilesSync(container, config) {
for (const langOption of config.languageOptions) {
const swWriteXmlFileSync = new utils_1.StopWatch();
swWriteXmlFileSync.start();
const languageKey = langOption.languageKey;
const xmlFile = this.xlifGeneratorService.generateXml(container, languageKey, config.printPretty);
this.fileService.writeFileSync(langOption.output, xmlFile, { encoding: 'UTF-8' });
swWriteXmlFileSync.stop();
this.logger.debug(`WriteXmlFilesSync - Written to '${langOption.output}': `
+ `Duration: ${swWriteXmlFileSync.getElapsedMilliseconds()} ms`);
}
}
writeXmlFiles(container, config) {
const promiseArray = [];
for (const langOption of config.languageOptions) {
const promise = this.writeXmlFilesAsPromise(container, config, langOption);
promiseArray.push(promise);
}
return Promise.all(promiseArray);
}
writeXmlFilesAsPromise(container, config, langOption) {
const languageKey = langOption.languageKey;
const xmlFile = this.xlifGeneratorService.generateXml(container, languageKey, config.printPretty);
return this.fileService.writeFileAsPromise(langOption.output, xmlFile, { encoding: 'UTF-8' });
}
createTranslationContainerFromCsvFile(config) {
return this.csvService.parseCsv(config).then((parsedCsvFile) => {
const container = this.translationContainerCreator.createTranslationContainerFromParsedCsvFile(config, parsedCsvFile);
return Promise.resolve(container);
});
}
}
exports.MainService = MainService;