UNPKG

xliff-generator

Version:

A simple module to create xliff files

116 lines (115 loc) 5.29 kB
"use strict"; 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;