diff --git a/Changelog.md b/Changelog.md index 6a5086f..a43adf8 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,17 @@ + +# [0.3.1](https://github.com/martinroob/ngx-i18nsupport/compare/v0.3.0...v0.3.1) (2017-04-25) + +### Bug Fixes + +* **xliffmerge:** compilation problem in WriterToString ([#19](https://github.com/martinroob/ngx-i18nsupport/issues/19)) + + +# [0.3.0](https://github.com/martinroob/ngx-i18nsupport/compare/v0.2.3...v0.3.0) (2017-04-24) + +### Features + +* **xliffmerge:** Added useSourceAsTargetOption, allows empty translations if set to false. + # [0.2.1](https://github.com/martinroob/ngx-i18nsupport/compare/v0.2.0...v0.2.1) (2017-03-27) diff --git a/README.md b/README.md index 3364b5a..fd3d01a 100644 --- a/README.md +++ b/README.md @@ -82,21 +82,38 @@ Options: `json-configurationfile` is a json file with the following allowed content (every value is optional):
-"xliffmerge": {
-  "srcDir: "i18n", // directory, where the master file is expected
-  "genDir": "i18n", // directory, where files are written to (normally identical with srcDir)
-  "i18nFile": "messages.xlf", // master file (relativ to srcDir)
-  "i18nFormat": "xlf", // "xlf" for XLIFF or "xmb" for XML Message Bundles
-  "encoding": "UTF-8",  // expected encoding of xlf or xmb files
-  "defaultLanguage": "en",  // the native language used in your templates
-  "languages": ["en", "de"], // list of languages (if not spefified at command line)
-  "removeUnusedIds": true, // flag, if unused IDs should be removed during merge
-  "supportNgxTranslate": true, // flag to active json translation files for ngx-translate
-  "verbose": false, // controls output
-  "quiet": false, // controls output
+{
+  "xliffmergeOptions": {
+    "srcDir": "i18n",
+    "genDir": "i18n",
+    "i18nFile": "messages.xlf",
+    "i18nFormat": "xlf",
+    "encoding": "UTF-8",
+    "defaultLanguage": "en",
+    "languages": ["en", "de"],
+    "removeUnusedIds": true,
+    "supportNgxTranslate": true,
+    "useSourceAsTarget": false,
+    "verbose": false,
+    "quiet": false,
+  }
 }
 
+The options are: +- `srcDir` (string, default "."): directory, where the master file is expected +- `genDir` (string, default "."): directory, where files are written to (normally identical with srcDir) +- `i18nFile` (string, default "messages.xlf"): master file (relativ to srcDir) +- `i18nFormat` (string, default "xlf"): "xlf" for XLIFF or "xmb" for XML Message Bundles +- `encoding` (string, default "UTF-8"): expected encoding of xlf or xmb files +- `defaultLanguage` (string, default "en"): the native language used in your templates +- `languages` (array of strings): list of languages (if not spefified at command line) +- `removeUnusedIds` (boolean, default `true`): flag, if unused IDs should be removed during merge +- `supportNgxTranslate` (boolean, default `false`): flag to active json translation files for ngx-translate +- `useSourceAsTarget` (boolean, default `true`): flag, if source should be copied to target for new trans-units +- `verbose` (boolean, default `false`): controls output +- `quiet` (boolean, default `false`): controls output + ### Generate (untranslated) language files, if not already there When you run `xliffmerge`, it will read the master xliff file **messages.xlf**. This is the file generated by the Angular extraction tool `ng-xi18n`. @@ -131,6 +148,9 @@ This is shown by the **state** `new`. The next step you have to do is to translate the file (or to let it translate). Depending on the software you use for translation you can filter for that state `new`. +>Have a look at my sister project [TinyTranslator](https://github.com/martinroob/tiny-translator). +It can filter for new untranslated entries and allows to edit xlf file very easily. + The file for English on the other hand is correct. So, due to the fact, that English is the **default language** here, the state is `translated`. @@ -161,6 +181,8 @@ it will remove it from the language file So after running it, you just have to translate the new parts. +>Once again: [TinyTranslator](https://github.com/martinroob/tiny-translator) might help you to do that. + ## Tests `npm test` @@ -179,7 +201,8 @@ But if you are interesting, send me an email, so that we can discuss it. * Phillippe Martin [Deploying an i18n Angular app with angular-cli](https://medium.com/@feloy/deploying-an-i18n-angular-app-with-angular-cli-fc788f17e358) * Roland Oldengarm: [Angular 2: Automated i18n workflow using gulp](http://rolandoldengarm.com/index.php/2016/10/17/angular-2-automated-i18n-workflow-using-gulp/) -* [XLIFF Spec](http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html) +* XLIFF Specification: [XLIFF Spec](http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html) +* My Tiny Translator Tool: [TinyTranslator](https://github.com/martinroob/tiny-translator) [travis-badge]: https://travis-ci.org/martinroob/ngx-i18nsupport.svg?branch=master [travis-badge-url]: https://travis-ci.org/martinroob/ngx-i18nsupport diff --git a/package.json b/package.json index aac62a3..123d61d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ngx-i18nsupport", - "version": "0.2.3", + "version": "0.3.1", "description": "Some tooling to be used with the Angular 2 i18n workflow", "main": "index.js", "module": "./src", @@ -49,6 +49,6 @@ "dependencies": { "chalk": "^1.1.3", "commander": "^2.9.0", - "ngx-i18nsupport-lib": "^0.0.3" + "ngx-i18nsupport-lib": "^0.0.6" } } diff --git a/src/common/file-util.ts b/src/common/file-util.ts index 050264a..a74dce2 100644 --- a/src/common/file-util.ts +++ b/src/common/file-util.ts @@ -93,4 +93,11 @@ export class FileUtil { } }; + /** + * Delete a file. + * @param path + */ + public static deleteFile(path: string) { + fs.unlinkSync(path); + } } \ No newline at end of file diff --git a/src/common/writer-to-string.ts b/src/common/writer-to-string.ts index 80b93c4..0d7c1d3 100644 --- a/src/common/writer-to-string.ts +++ b/src/common/writer-to-string.ts @@ -16,7 +16,7 @@ export class WriterToString extends Writable { this.resultString = ''; } - protected _write(chunk: any, encoding: string, callback: Function): void { + public _write(chunk: any, encoding: string, callback: Function): void { let chunkString; if (isString(chunk)) { chunkString = chunk; diff --git a/src/tsconfig.json b/src/tsconfig.json index db505ac..804e009 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -10,12 +10,15 @@ "moduleResolution": "node", "outDir": "../dist", "sourceMap": true, - "target": "es6", + "target": "es5", "typeRoots": [ "../node_modules/@types" ] }, "include": [ "**/*" + ], + "exclude": [ + "node_modules" ] } diff --git a/src/xliffmerge/i-xliff-merge-options.ts b/src/xliffmerge/i-xliff-merge-options.ts index ab87e21..c79b126 100644 --- a/src/xliffmerge/i-xliff-merge-options.ts +++ b/src/xliffmerge/i-xliff-merge-options.ts @@ -36,5 +36,6 @@ export interface IXliffMergeOptions { }; removeUnusedIds?: boolean; supportNgxTranslate?: boolean; // Flag, wether output for ngs-translate should be generated + useSourceAsTarget?: boolean; // Flag, whether source must be used as target for new trans-units } diff --git a/src/xliffmerge/ngx-translate-extractor.ts b/src/xliffmerge/ngx-translate-extractor.ts index 16c5a89..49c70a8 100644 --- a/src/xliffmerge/ngx-translate-extractor.ts +++ b/src/xliffmerge/ngx-translate-extractor.ts @@ -39,7 +39,13 @@ export class NgxTranslateExtractor { */ public extractTo(outputFile: string) { let translations: NgxTranslations = this.toNgxTranslations(this.extract()); - FileUtil.replaceContent(outputFile, JSON.stringify(translations, null, 4), 'UTF-8') + if (translations && Object.keys(translations).length > 0) { + FileUtil.replaceContent(outputFile, JSON.stringify(translations, null, 4), 'UTF-8') + } else { + if (FileUtil.exists(outputFile)) { + FileUtil.deleteFile(outputFile); + } + } } /** diff --git a/src/xliffmerge/xliff-merge-parameters.ts b/src/xliffmerge/xliff-merge-parameters.ts index f1b2732..80d2c44 100644 --- a/src/xliffmerge/xliff-merge-parameters.ts +++ b/src/xliffmerge/xliff-merge-parameters.ts @@ -24,6 +24,7 @@ export class XliffMergeParameters { private _languages: string[]; private _removeUnusedIds: boolean; private _supportNgxTranslate: boolean; + private _useSourceAsTarget: boolean; public errorsFound: XliffMergeError[]; public warningsFound: string[]; @@ -142,6 +143,9 @@ export class XliffMergeParameters { if (profile.supportNgxTranslate) { this._supportNgxTranslate = profile.supportNgxTranslate; } + if (!isNullOrUndefined(profile.useSourceAsTarget)) { + this._useSourceAsTarget = profile.useSourceAsTarget; + } } else { this.warningsFound.push('did not find "xliffmergeOptions" in profile, using defaults'); } @@ -225,6 +229,7 @@ export class XliffMergeParameters { commandOutput.debug('languages:\t%s', this.languages()); commandOutput.debug('removeUnusedIds:\t%s', this.removeUnusedIds()); commandOutput.debug('supportNgxTranslate:\t%s', this.supportNgxTranslate()); + commandOutput.debug('useSourceAsTarget:\t%s', this.useSourceAsTarget()); } /** @@ -310,4 +315,12 @@ export class XliffMergeParameters { public supportNgxTranslate(): boolean { return (isNullOrUndefined(this._supportNgxTranslate)) ? false : this._supportNgxTranslate; } + + /** + * Whether source must be used as target for new trans-units + * Default is true + */ + public useSourceAsTarget(): boolean { + return (isNullOrUndefined(this._useSourceAsTarget)) ? true : this._useSourceAsTarget; + } } \ No newline at end of file diff --git a/src/xliffmerge/xliff-merge.spec.ts b/src/xliffmerge/xliff-merge.spec.ts index 3833daf..681d331 100644 --- a/src/xliffmerge/xliff-merge.spec.ts +++ b/src/xliffmerge/xliff-merge.spec.ts @@ -354,6 +354,39 @@ describe('XliffMerge test spec', () => { done(); }); + it('should generate translated file for all languages with empty targets for non default languages', (done) => { + FileUtil.copy(MASTER1SRC, MASTER); + let ws: WriterToString = new WriterToString(); + let commandOut = new CommandOutput(ws); + let profileContent: IConfigFile = { + xliffmergeOptions: { + defaultLanguage: 'de', + srcDir: WORKDIR, + genDir: WORKDIR, + i18nFile: MASTERFILE, + useSourceAsTarget: false + } + }; + let xliffMergeCmd = XliffMerge.createFromOptions(commandOut, {languages: ['de', 'en']}, profileContent); + xliffMergeCmd.run(); + expect(ws.writtenData()).not.toContain('ERROR'); + let langFileGerman: ITranslationMessagesFile = readXliff(xliffMergeCmd.generatedI18nFile('de')); + expect(langFileGerman.sourceLanguage()).toBe('de'); + expect(langFileGerman.targetLanguage()).toBe('de'); + langFileGerman.forEachTransUnit((tu: ITransUnit) => { + expect(tu.targetContent()).toBe(tu.sourceContent()); + expect(tu.targetState()).toBe('final'); + }); + let langFileEnglish: ITranslationMessagesFile = readXliff(xliffMergeCmd.generatedI18nFile('en')); + expect(langFileEnglish.sourceLanguage()).toBe('de'); + expect(langFileEnglish.targetLanguage()).toBe('en'); + langFileEnglish.forEachTransUnit((tu: ITransUnit) => { + expect(tu.targetContent()).toBe(''); + expect(tu.targetState()).toBe('new'); + }); + done(); + }); + it('should merge translated file for all languages', (done) => { FileUtil.copy(MASTER1SRC, MASTER); let ws: WriterToString = new WriterToString(); @@ -422,7 +455,7 @@ describe('XliffMerge test spec', () => { // look, that the new file contains the translation langFileEnglish = readXliff(xliffMergeCmd.generatedI18nFile('en')); - expect(langFileEnglish.transUnitWithId(ID_WITH_PLACEHOLDER).targetContent()).toBe('Item of added.'); + expect(langFileEnglish.transUnitWithId(ID_WITH_PLACEHOLDER).targetContent()).toBe('Item of added.'); done(); }); @@ -433,6 +466,7 @@ describe('XliffMerge test spec', () => { let MASTER1FILE = 'ngxtranslate.xlf'; let MASTER1SRC = SRCDIR + MASTER1FILE; + let MASTER_WITHOUT_NGX_TRANSLATE_STUFF = SRCDIR + 'ngExtractedMaster1.xlf'; let MASTERFILE = 'messages.xlf'; let MASTER = WORKDIR + MASTERFILE; @@ -567,6 +601,27 @@ describe('XliffMerge test spec', () => { done(); }); + it('should not write empty translation json file for ngx-translate, if there are no translation (issue #18)', (done) => { + FileUtil.copy(MASTER_WITHOUT_NGX_TRANSLATE_STUFF, MASTER); + let ws: WriterToString = new WriterToString(); + let commandOut = new CommandOutput(ws); + let profileContent: IConfigFile = { + xliffmergeOptions: { + defaultLanguage: 'de', + srcDir: WORKDIR, + genDir: WORKDIR, + i18nFile: MASTERFILE, + supportNgxTranslate: true + } + }; + let xliffMergeCmd = XliffMerge.createFromOptions(commandOut, {languages: ['de']}, profileContent); + xliffMergeCmd.run(); + expect(ws.writtenData()).not.toContain('ERROR'); + let translationJsonFilename = xliffMergeCmd.generatedNgxTranslateFile('de'); + expect(FileUtil.exists(translationJsonFilename)).toBeFalsy(); + done(); + }); + }); describe('Merge process checks for format xmb', () => { @@ -676,7 +731,7 @@ describe('XliffMerge test spec', () => { xliffMergeCmd = XliffMerge.createFromOptions(commandOut, {languages: ['de', 'en']}, profileContent); xliffMergeCmd.run(); expect(ws.writtenData()).not.toContain('ERROR'); - expect(ws.writtenData()).toContain('merged 2 trans-units from master to "en"'); + expect(ws.writtenData()).toContain('merged 1 trans-units from master to "en"'); expect(ws.writtenData()).toContain('removed 2 unused trans-units in "en"'); // look, that the new file contains the old translation @@ -779,6 +834,7 @@ describe('XliffMerge test spec', () => { let MASTER1FILE = 'ngxtranslate.xmb'; let MASTER1SRC = SRCDIR + MASTER1FILE; + let MASTER_WITHOUT_NGX_TRANSLATE_STUFF = SRCDIR + 'ngExtractedMaster1.xmb'; let MASTERFILE = 'messages.xmb'; let MASTER = WORKDIR + MASTERFILE; @@ -917,5 +973,27 @@ describe('XliffMerge test spec', () => { done(); }); + it('should not write empty translation json file for ngx-translate, if there are no translation (issue #18)', (done) => { + FileUtil.copy(MASTER_WITHOUT_NGX_TRANSLATE_STUFF, MASTER); + let ws: WriterToString = new WriterToString(); + let commandOut = new CommandOutput(ws); + let profileContent: IConfigFile = { + xliffmergeOptions: { + defaultLanguage: 'de', + srcDir: WORKDIR, + genDir: WORKDIR, + i18nFile: MASTERFILE, + i18nFormat: 'xmb', + supportNgxTranslate: true + } + }; + let xliffMergeCmd = XliffMerge.createFromOptions(commandOut, {languages: ['de']}, profileContent); + xliffMergeCmd.run(); + expect(ws.writtenData()).not.toContain('ERROR'); + let translationJsonFilename = xliffMergeCmd.generatedNgxTranslateFile('de'); + expect(FileUtil.exists(translationJsonFilename)).toBeFalsy(); + done(); + }); + }); }); diff --git a/src/xliffmerge/xliff-merge.ts b/src/xliffmerge/xliff-merge.ts index 363a426..c732b49 100644 --- a/src/xliffmerge/xliff-merge.ts +++ b/src/xliffmerge/xliff-merge.ts @@ -209,10 +209,10 @@ export class XliffMerge { let languageSpecificMessagesFile: ITranslationMessagesFile = TranslationMessagesFileReader.fromFile(this.parameters.i18nFormat(), languageXliffFilePath, this.parameters.encoding()); languageSpecificMessagesFile.setTargetLanguage(lang); - // copy source to target + // copy source to target if necessary let isDefaultLang: boolean = (lang == this.parameters.defaultLanguage()); languageSpecificMessagesFile.forEachTransUnit((transUnit: ITransUnit) => { - languageSpecificMessagesFile.useSourceAsTarget(transUnit, isDefaultLang); + languageSpecificMessagesFile.useSourceAsTarget(transUnit, isDefaultLang, this.parameters.useSourceAsTarget()); }); // write it to file TranslationMessagesFileReader.save(languageSpecificMessagesFile); @@ -237,7 +237,7 @@ export class XliffMerge { let transUnit: ITransUnit = languageSpecificMessagesFile.transUnitWithId(masterTransUnit.id); if (!transUnit) { // oops, no translation, must be a new key, so add it - languageSpecificMessagesFile.useSourceAsTarget(masterTransUnit, isDefaultLang); + languageSpecificMessagesFile.useSourceAsTarget(masterTransUnit, isDefaultLang, this.parameters.useSourceAsTarget()); languageSpecificMessagesFile.addNewTransUnit(masterTransUnit); newCount++; } diff --git a/test/testdata/i18n/ngExtractedMaster1.xmb b/test/testdata/i18n/ngExtractedMaster1.xmb index b95add2..67f2a10 100644 --- a/test/testdata/i18n/ngExtractedMaster1.xmb +++ b/test/testdata/i18n/ngExtractedMaster1.xmb @@ -21,10 +21,11 @@ ]> - Meine erste I18N-Anwendung - Diese Anwendung ist eine reine Demonstration und hat keine wirklich nutzbare Funktion. - Diese Anwendung ist eine reine Demonstration und hat keine wirklich nutzbare Funktion. - Eintrag INTERPOLATION von INTERPOLATION_1 hinzugefügt. - Dieser Text + S:/experimente/sampleapp41/src/app/app.component.ts:1Meine erste I18N-Anwendung + S:/experimente/sampleapp41/src/app/app.component.ts:2S:/experimente/sampleapp41/src/app/app.component.ts:3Anwendung läuft! + S:/experimente/sampleapp41/src/app/app.component.ts:4Diese Anwendung ist eine reine Demonstration und hat keine wirklich nutzbare Funktion. + S:/experimente/sampleapp41/src/app/app.component.ts:5Diese Anwendung ist eine reine Demonstration und hat keine wirklich nutzbare Funktion. + S:/experimente/sampleapp41/src/app/app.component.ts:6Eintrag INTERPOLATION von INTERPOLATION_1 hinzugefügt. + S:/experimente/sampleapp41/src/app/app.component.ts:7,8Dieser Text enthält einen Zeilenumbruch. diff --git a/test/testdata/i18n/ngExtractedMaster2.xmb b/test/testdata/i18n/ngExtractedMaster2.xmb index d8c2171..9a94f95 100644 --- a/test/testdata/i18n/ngExtractedMaster2.xmb +++ b/test/testdata/i18n/ngExtractedMaster2.xmb @@ -21,11 +21,10 @@ ]> - Meine erste I18N-Anwendung - Anwendung läuft! - Eintrag INTERPOLATION von INTERPOLATION_1 hinzugefügt. - Dieser Text + S:/experimente/sampleapp41/src/app/app.component.ts:1Meine erste I18N-Anwendung + S:/experimente/sampleapp41/src/app/app.component.ts:2S:/experimente/sampleapp41/src/app/app.component.ts:3Anwendung läuft! + S:/experimente/sampleapp41/src/app/app.component.ts:6Eintrag INTERPOLATION von INTERPOLATION_1 hinzugefügt. + S:/experimente/sampleapp41/src/app/app.component.ts:7,8Dieser Text enthält einen Zeilenumbruch. - Dieser Text enthält <b>eingebettetes html</b> - Dieser Text enthält <b>eingebettetes html</b> + S:/experimente/sampleapp41/src/app/app.component.ts:9Dieser Text enthält <b>eingebettetes html</b> diff --git a/test/testdata/i18n/ngxtranslate.xlf b/test/testdata/i18n/ngxtranslate.xlf index 8935f53..1275a80 100644 --- a/test/testdata/i18n/ngxtranslate.xlf +++ b/test/testdata/i18n/ngxtranslate.xlf @@ -82,6 +82,14 @@ ngx-translate embeddedhtml.strange + + Explizit gesetzte ID + Explizit gesetzte ID + + S:/experimente/sampleapp41/src/app/ngx-translate-test-data/ngx-translate-test-data.component.ts + 18 + + \ No newline at end of file diff --git a/test/testdata/i18n/ngxtranslate.xmb b/test/testdata/i18n/ngxtranslate.xmb index 416e2ce..2787574 100644 --- a/test/testdata/i18n/ngxtranslate.xmb +++ b/test/testdata/i18n/ngxtranslate.xmb @@ -37,4 +37,5 @@ Diese Nachricht ist <b>WICHTIG</b> Diese Nachricht ist <b><strong>SEHR WICHTIG</strong></b> Diese Nachricht ist <strange>INTERPOLATION</strange> + S:/experimente/sampleapp41/src/app/ngx-translate-test-data/ngx-translate-test-data.component.ts:18Explizit gesetzte ID diff --git a/yarn.lock b/yarn.lock index 202afee..a19c2e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,10 @@ version "7.0.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.12.tgz#ae5f67a19c15f752148004db07cbbb372e69efc9" +"@types/xmldom@^0.1.29": + version "0.1.29" + resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.29.tgz#c4428b0ca86d3b881475726fd94980b38a27c381" + abbrev@1, abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -154,10 +158,6 @@ block-stream@*: dependencies: inherits "~2.0.0" -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -212,27 +212,6 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - chokidar@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -328,19 +307,6 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -373,34 +339,6 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - dependencies: - domelementtype "1" - -domutils@1.5.1, domutils@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -411,10 +349,6 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -699,17 +633,6 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -935,54 +858,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - -lodash.merge@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -1069,11 +944,12 @@ nan@^2.3.0: version "2.6.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.1.tgz#8c84f7b14c96b89f57fbc838012180ec8ca39a01" -ngx-i18nsupport-lib@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/ngx-i18nsupport-lib/-/ngx-i18nsupport-lib-0.0.3.tgz#22c022fdf67300f51ea1c5228d7b2bd2c8fe404b" +ngx-i18nsupport-lib@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ngx-i18nsupport-lib/-/ngx-i18nsupport-lib-0.0.6.tgz#e6e523719aae58f00e40f2df9e0aadd8af4c51af" dependencies: - cheerio "^0.22.0" + "@types/xmldom" "^0.1.29" + xmldom "^0.1.27" node-pre-gyp@^0.6.29: version "0.6.34" @@ -1117,12 +993,6 @@ npmlog@^4.0.2: gauge "~2.7.1" set-blocking "~2.0.0" -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -1614,6 +1484,10 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +xmldom@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"