@o3r/transloco 0.0.0 → 14.5.0-prerelease.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +64 -0
  3. package/builders/helpers/localization-generator.d.ts +126 -0
  4. package/builders/helpers/localization-generator.d.ts.map +1 -0
  5. package/builders/helpers/localization-generator.js +303 -0
  6. package/builders/helpers/localization-generator.js.map +1 -0
  7. package/builders/i18n/index.d.ts +7 -0
  8. package/builders/i18n/index.d.ts.map +1 -0
  9. package/builders/i18n/index.js +39 -0
  10. package/builders/i18n/index.js.map +1 -0
  11. package/builders/i18n/schema.d.ts +30 -0
  12. package/builders/i18n/schema.d.ts.map +1 -0
  13. package/builders/i18n/schema.js +3 -0
  14. package/builders/i18n/schema.js.map +1 -0
  15. package/builders/i18n/schema.json +35 -0
  16. package/builders/localization/index.d.ts +23 -0
  17. package/builders/localization/index.d.ts.map +1 -0
  18. package/builders/localization/index.js +416 -0
  19. package/builders/localization/index.js.map +1 -0
  20. package/builders/localization/schema.d.ts +29 -0
  21. package/builders/localization/schema.d.ts.map +1 -0
  22. package/builders/localization/schema.js +3 -0
  23. package/builders/localization/schema.js.map +1 -0
  24. package/builders/localization/schema.json +78 -0
  25. package/builders/localization-extractor/index.d.ts +8 -0
  26. package/builders/localization-extractor/index.d.ts.map +1 -0
  27. package/builders/localization-extractor/index.js +181 -0
  28. package/builders/localization-extractor/index.js.map +1 -0
  29. package/builders/localization-extractor/schema.d.ts +25 -0
  30. package/builders/localization-extractor/schema.d.ts.map +1 -0
  31. package/builders/localization-extractor/schema.js +3 -0
  32. package/builders/localization-extractor/schema.js.map +1 -0
  33. package/builders/localization-extractor/schema.json +62 -0
  34. package/builders/localization-extractor/validations.d.ts +17 -0
  35. package/builders/localization-extractor/validations.d.ts.map +1 -0
  36. package/builders/localization-extractor/validations.js +54 -0
  37. package/builders/localization-extractor/validations.js.map +1 -0
  38. package/builders/metadata-check/helpers/index.d.ts +2 -0
  39. package/builders/metadata-check/helpers/index.d.ts.map +1 -0
  40. package/builders/metadata-check/helpers/index.js +5 -0
  41. package/builders/metadata-check/helpers/index.js.map +1 -0
  42. package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts +14 -0
  43. package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts.map +1 -0
  44. package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js +34 -0
  45. package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js.map +1 -0
  46. package/builders/metadata-check/index.d.ts +7 -0
  47. package/builders/metadata-check/index.d.ts.map +1 -0
  48. package/builders/metadata-check/index.js +12 -0
  49. package/builders/metadata-check/index.js.map +1 -0
  50. package/builders/metadata-check/schema.d.ts +5 -0
  51. package/builders/metadata-check/schema.d.ts.map +1 -0
  52. package/builders/metadata-check/schema.js +3 -0
  53. package/builders/metadata-check/schema.js.map +1 -0
  54. package/builders/metadata-check/schema.json +46 -0
  55. package/builders/package.json +3 -0
  56. package/builders.json +25 -0
  57. package/collection.json +29 -0
  58. package/fesm2022/o3r-transloco-rules-engine.mjs +57 -0
  59. package/fesm2022/o3r-transloco-rules-engine.mjs.map +1 -0
  60. package/fesm2022/o3r-transloco.mjs +1177 -0
  61. package/fesm2022/o3r-transloco.mjs.map +1 -0
  62. package/package.json +190 -2
  63. package/rules-engine/package.json +4 -0
  64. package/schemas/localization.metadata.schema.json +84 -0
  65. package/schemas/localization.schema.json +116 -0
  66. package/schemas/rules-engine.localization-action.schema.json +26 -0
  67. package/schematics/add-localization-key/index.d.ts +13 -0
  68. package/schematics/add-localization-key/index.d.ts.map +1 -0
  69. package/schematics/add-localization-key/index.js +227 -0
  70. package/schematics/add-localization-key/index.js.map +1 -0
  71. package/schematics/add-localization-key/schema.d.ts +20 -0
  72. package/schematics/add-localization-key/schema.d.ts.map +1 -0
  73. package/schematics/add-localization-key/schema.js +3 -0
  74. package/schematics/add-localization-key/schema.js.map +1 -0
  75. package/schematics/add-localization-key/schema.json +49 -0
  76. package/schematics/cms-adapter/index.d.ts +8 -0
  77. package/schematics/cms-adapter/index.d.ts.map +1 -0
  78. package/schematics/cms-adapter/index.js +81 -0
  79. package/schematics/cms-adapter/index.js.map +1 -0
  80. package/schematics/localization-base/index.d.ts +14 -0
  81. package/schematics/localization-base/index.d.ts.map +1 -0
  82. package/schematics/localization-base/index.js +359 -0
  83. package/schematics/localization-base/index.js.map +1 -0
  84. package/schematics/localization-base/templates/src/assets/locales/__empty__.gitkeep +0 -0
  85. package/schematics/localization-to-component/index.d.ts +13 -0
  86. package/schematics/localization-to-component/index.d.ts.map +1 -0
  87. package/schematics/localization-to-component/index.js +264 -0
  88. package/schematics/localization-to-component/index.js.map +1 -0
  89. package/schematics/localization-to-component/schema.d.ts +12 -0
  90. package/schematics/localization-to-component/schema.d.ts.map +1 -0
  91. package/schematics/localization-to-component/schema.js +3 -0
  92. package/schematics/localization-to-component/schema.js.map +1 -0
  93. package/schematics/localization-to-component/schema.json +31 -0
  94. package/schematics/localization-to-component/templates/__name__-localization.json +3 -0
  95. package/schematics/localization-to-component/templates/__name__-translation.ts.template +5 -0
  96. package/schematics/migration-localization-to-transloco/index.d.ts +8 -0
  97. package/schematics/migration-localization-to-transloco/index.d.ts.map +1 -0
  98. package/schematics/migration-localization-to-transloco/index.js +194 -0
  99. package/schematics/migration-localization-to-transloco/index.js.map +1 -0
  100. package/schematics/migration-localization-to-transloco/schema.d.ts +15 -0
  101. package/schematics/migration-localization-to-transloco/schema.d.ts.map +1 -0
  102. package/schematics/migration-localization-to-transloco/schema.js +3 -0
  103. package/schematics/migration-localization-to-transloco/schema.js.map +1 -0
  104. package/schematics/migration-localization-to-transloco/schema.json +30 -0
  105. package/schematics/ng-add/helpers/devtools-registration.d.ts +8 -0
  106. package/schematics/ng-add/helpers/devtools-registration.d.ts.map +1 -0
  107. package/schematics/ng-add/helpers/devtools-registration.js +37 -0
  108. package/schematics/ng-add/helpers/devtools-registration.js.map +1 -0
  109. package/schematics/ng-add/index.d.ts +8 -0
  110. package/schematics/ng-add/index.d.ts.map +1 -0
  111. package/schematics/ng-add/index.js +62 -0
  112. package/schematics/ng-add/index.js.map +1 -0
  113. package/schematics/ng-add/schema.d.ts +11 -0
  114. package/schematics/ng-add/schema.d.ts.map +1 -0
  115. package/schematics/ng-add/schema.js +3 -0
  116. package/schematics/ng-add/schema.js.map +1 -0
  117. package/schematics/ng-add/schema.json +38 -0
  118. package/schematics/package.json +3 -0
  119. package/types/o3r-transloco-rules-engine.d.ts +40 -0
  120. package/types/o3r-transloco-rules-engine.d.ts.map +1 -0
  121. package/types/o3r-transloco.d.ts +804 -0
  122. package/types/o3r-transloco.d.ts.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright Amadeus SAS
2
+
3
+ Redistribution and use in source and binary forms, with or without modification,
4
+ are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this
7
+ list of conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation and/or
11
+ other materials provided with the distribution.
12
+
13
+ 3. Neither the name of the copyright holder nor the names of its contributors
14
+ may be used to endorse or promote products derived from this software without
15
+ specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
21
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ <h1 align="center">Otter Transloco</h1>
2
+ <p align="center">
3
+ <img src="https://raw.githubusercontent.com/AmadeusITGroup/otter/main/assets/logo/otter.png" alt="Super cute Otter!" width="40%"/>
4
+ </p>
5
+
6
+ > [!WARNING]
7
+ > [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental)
8
+ > This package is the successor to `@o3r/localization` (which is based on ngx-translate).
9
+ > In Otter v16, this package will be renamed to `@o3r/localization`, and ngx-translate will no longer be supported.
10
+
11
+ This package is an [Otter Framework Module](https://github.com/AmadeusITGroup/otter/tree/main/docs/core/MODULE.md).
12
+ <br />
13
+ <br />
14
+
15
+ ## Description
16
+
17
+ [![Stable Version](https://img.shields.io/npm/v/@o3r/transloco?style=for-the-badge)](https://www.npmjs.com/package/@o3r/transloco)
18
+ [![Bundle Size](https://img.shields.io/bundlephobia/min/@o3r/transloco?color=green&style=for-the-badge)](https://www.npmjs.com/package/@o3r/transloco)
19
+
20
+ This localization module is built on top of [JSVerse Transloco](https://github.com/jsverse/transloco).
21
+ It provides the same features as `@o3r/localization` (which is based on ngx-translate):
22
+
23
+ * Multiple [locales](https://github.com/angular/angular/tree/master/packages/common/locales) support, switchable at runtime.
24
+ * RTL (right-to-left) text direction support
25
+ * Translations loader using a specific endpoint or defaulting to local translation bundles
26
+ * Fallback language and intelligent fallback support
27
+ * Translation of resource keys from templates (`*.html`) and from typescript (`*.ts`)
28
+ * Support for resource keys with parameters
29
+ * Custom `LocalizationConfiguration`
30
+ * Ability to toggle translations on and off for debugging (and additional debug tools)
31
+
32
+ ## How to install
33
+
34
+ ```shell
35
+ ng add @o3r/transloco
36
+ ```
37
+
38
+ > [!WARNING]
39
+ > This module requires [@o3r/core](https://www.npmjs.com/package/@o3r/core) to be installed.
40
+
41
+ ## Generators
42
+
43
+ Otter framework provides a set of code generators based on [Angular schematics](https://angular.io/guide/schematics).
44
+
45
+ | Schematics | Description | How to use |
46
+ |-------------------------------------|---------------------------------------------------------|--------------------------------------------|
47
+ | add | Include Otter transloco module in a library/application | `ng add @o3r/transloco` |
48
+ | localization-to-component | Add localization architecture to an Otter component | `ng g localization-to-component` |
49
+ | localization-key-to-component | Add a localization key to an Otter component | `ng g localization-key-to-component` |
50
+ | migration-localization-to-transloco | Migrate from @o3r/localization to @o3r/transloco | `ng g migration-localization-to-transloco` |
51
+
52
+ ## Migrating from @o3r/localization
53
+
54
+ If you're upgrading from `@o3r/localization` (ngx-translate), use the migration schematic:
55
+
56
+ ```bash
57
+ ng g @o3r/transloco:migration-localization-to-transloco
58
+ ```
59
+
60
+ For detailed migration instructions, including manual steps required after running the schematic, see the [Migration Guide](../../../docs/transloco/localization-to-transloco.md).
61
+
62
+ ## More details
63
+
64
+ Find more information in the [documentation](https://github.com/AmadeusITGroup/otter/blob/main/docs/transloco/TRANSLOCO.md).
@@ -0,0 +1,126 @@
1
+ import { logging } from '@angular-devkit/core';
2
+ import type { LocalizationExtractorBuilderSchema } from '../localization-extractor/schema';
3
+ import type { JSONLocalization, LocalizationMetadata } from '@o3r/transloco';
4
+ /** Map of Localization Metadata base on localization key */
5
+ export interface LocalizationMetadataAsMap {
6
+ [key: string]: JSONLocalization;
7
+ }
8
+ /** Localization structure */
9
+ export interface LocalizationJsonValue {
10
+ /** Localization Description */
11
+ description: string;
12
+ /** Determine if the item can have multiple extensions */
13
+ dictionary?: boolean;
14
+ /** Determine if the value has to be overridden */
15
+ referenceData?: boolean;
16
+ /** Localization default value */
17
+ defaultValue?: string;
18
+ /** Tags used for filtering/categorizing */
19
+ tags?: string[];
20
+ /** Reference to other localization */
21
+ $ref?: string;
22
+ }
23
+ /** Localization file structure */
24
+ export interface LocalizationJsonFile {
25
+ [key: string]: LocalizationJsonValue;
26
+ }
27
+ /** Localization file mapping */
28
+ export interface LocalizationFileMap {
29
+ [file: string]: {
30
+ data: LocalizationJsonFile;
31
+ isDependency: boolean;
32
+ };
33
+ }
34
+ /** Metadata file mapping */
35
+ export interface LibraryMetadataMap {
36
+ [libraryMetadataFile: string]: LocalizationMetadata;
37
+ }
38
+ /**
39
+ * Localization extractor
40
+ */
41
+ export declare class LocalizationExtractor {
42
+ private readonly options?;
43
+ /** TsConfig of the file to base on */
44
+ private readonly tsconfigPath;
45
+ private readonly logger;
46
+ constructor(tsconfigPath: string, logger: logging.LoggerApi, options?: Partial<LocalizationExtractorBuilderSchema> | undefined);
47
+ /** Get the list of file from tsconfig.json */
48
+ private getFilesFromTsConfig;
49
+ /**
50
+ * Return the class node if the class is an angular element
51
+ * @param source Ts file source
52
+ */
53
+ private getAngularClassNode;
54
+ /**
55
+ * Get the list of referenced translation files
56
+ * @param localizationFileContent JSON content of a location file
57
+ * @param localizationFilePath Path of the localization file
58
+ */
59
+ private getReferencedFiles;
60
+ /**
61
+ * Read a localization file
62
+ * @param locFile Path to the localization file
63
+ */
64
+ private readLocalizationFile;
65
+ /**
66
+ * Read a metadata file
67
+ * @param metadataFile Path to the metadata file
68
+ */
69
+ private readMetadataFile;
70
+ /**
71
+ * Generate a metadata item from a localization item
72
+ * @param loc Localization item
73
+ * @param key Key of the localization
74
+ */
75
+ private generateMetadataItemFromLocalization;
76
+ /**
77
+ * Compares two JSONLocalization object by their keys and returns the result of the string comparison
78
+ * @param a JSONLocalization
79
+ * @param b JSONLocalization
80
+ */
81
+ private compareKeys;
82
+ /** Get the list of patterns from tsconfig.json */
83
+ getPatternsFromTsConfig(): {
84
+ include: string[];
85
+ exclude: string[];
86
+ cwd: string;
87
+ };
88
+ /**
89
+ * Generate the localization mapping for a list of files
90
+ * @param localizationFiles Localization files to load
91
+ * @param alreadyLoadedFiles List of localization files already loadded
92
+ * @param isDependency Determine if the list of files are dependencies of others
93
+ */
94
+ getLocalizationMap(localizationFiles: string[], alreadyLoadedFiles?: string[], isDependency?: boolean): Promise<LocalizationFileMap>;
95
+ /**
96
+ * Extract the localization mapping from a tsconfig file
97
+ * @param extraLocalizationFiles Additional translations to add
98
+ */
99
+ extractLocalizationFromTsConfig(extraLocalizationFiles?: string[]): Promise<LocalizationFileMap>;
100
+ /**
101
+ * Retrieve metadata from libraries
102
+ * @param libraries Libraries on which the project depend
103
+ */
104
+ getMetadataFromLibraries(libraries: string[]): Promise<LibraryMetadataMap>;
105
+ /**
106
+ * Retrieve metadata from metadata files
107
+ * @param metadataFiles Metadata files
108
+ */
109
+ getMetadataFromFiles(metadataFiles: string[]): Promise<LibraryMetadataMap>;
110
+ /**
111
+ * Generate metadata from localization and library metadata mappings
112
+ * @param localizationMap Map of localization files
113
+ * @param options Option of generation
114
+ * @param options.ignoreDuplicateKeys
115
+ * @param options.libraryMetadata
116
+ * @param options.outputFile
117
+ * @param options.sortKeys
118
+ */
119
+ generateMetadata(localizationMap: LocalizationFileMap, options: {
120
+ ignoreDuplicateKeys: boolean;
121
+ libraryMetadata: LibraryMetadataMap;
122
+ outputFile: string;
123
+ sortKeys: boolean;
124
+ }): LocalizationMetadata;
125
+ }
126
+ //# sourceMappingURL=localization-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization-generator.d.ts","sourceRoot":"","sources":["../../../builders/helpers/localization-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EACR,MAAM,sBAAsB,CAAC;AAY9B,OAAO,KAAK,EACV,kCAAkC,EACnC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAQxB,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjC;AAED,6BAA6B;AAC7B,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kCAAkC;AAClC,MAAM,WAAW,oBAAoB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAC;CACtC;AAMD,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,IAAI,EAAE,oBAAoB,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,CAAC,mBAAmB,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAM6B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IALtF,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAmB,OAAO,CAAC,EAAE,OAAO,CAAC,kCAAkC,CAAC,YAAA;IAKnI,8CAA8C;IAC9C,OAAO,CAAC,oBAAoB;IAK5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;OAGG;YACW,oBAAoB;IAQlC;;;OAGG;YACW,gBAAgB;IAI9B;;;;OAIG;IACH,OAAO,CAAC,oCAAoC;IA6B5C;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAYnB,kDAAkD;IAC3C,uBAAuB;;;;;IAiB9B;;;;;OAKG;IACU,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAE,MAAM,EAAO,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BnJ;;;OAGG;IACU,+BAA+B,CAAC,sBAAsB,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgCjH;;;OAGG;IACU,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE;IAQzD;;;OAGG;IACU,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE;IASzD;;;;;;;;OAQG;IACI,gBAAgB,CAAC,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE;QACrE,mBAAmB,EAAE,OAAO,CAAC;QAC7B,eAAe,EAAE,kBAAkB,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;KACnB,GAAG,oBAAoB;CA4DzB"}
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalizationExtractor = void 0;
4
+ const fs = require("node:fs");
5
+ const path = require("node:path");
6
+ const extractors_1 = require("@o3r/extractors");
7
+ const schematics_1 = require("@o3r/schematics");
8
+ const globby_1 = require("globby");
9
+ const ts = require("typescript");
10
+ /** List of Angular decorator to look for */
11
+ const ANGULAR_ANNOTATION = ['Component', 'Injectable', 'Pipe'];
12
+ /** Regular expression to match Angular decorators */
13
+ const ANGULAR_DECORATOR_REGEXP = new RegExp('^@' + ANGULAR_ANNOTATION.map((e) => `(${e})`).join('|'));
14
+ /**
15
+ * Localization extractor
16
+ */
17
+ class LocalizationExtractor {
18
+ constructor(tsconfigPath, logger, options) {
19
+ this.options = options;
20
+ this.tsconfigPath = tsconfigPath;
21
+ this.logger = logger;
22
+ }
23
+ /** Get the list of file from tsconfig.json */
24
+ getFilesFromTsConfig() {
25
+ const { include, exclude, cwd } = this.getPatternsFromTsConfig();
26
+ return (0, globby_1.sync)(include, { ignore: exclude, cwd });
27
+ }
28
+ /**
29
+ * Return the class node if the class is an angular element
30
+ * @param source Ts file source
31
+ */
32
+ getAngularClassNode(source) {
33
+ const angularItems = [];
34
+ source.forEachChild((item) => {
35
+ if (!ts.isClassDeclaration(item)) {
36
+ return;
37
+ }
38
+ let isAngularItem = false;
39
+ item.forEachChild((classItem) => {
40
+ if (isAngularItem || !ts.isDecorator(classItem)) {
41
+ return;
42
+ }
43
+ const text = classItem.getText(source);
44
+ if (!ANGULAR_DECORATOR_REGEXP.test(text)) {
45
+ return;
46
+ }
47
+ isAngularItem = true;
48
+ });
49
+ if (isAngularItem) {
50
+ angularItems.push(item);
51
+ }
52
+ });
53
+ return angularItems.length > 0 ? angularItems : undefined;
54
+ }
55
+ /**
56
+ * Get the list of referenced translation files
57
+ * @param localizationFileContent JSON content of a location file
58
+ * @param localizationFilePath Path of the localization file
59
+ */
60
+ getReferencedFiles(localizationFileContent, localizationFilePath) {
61
+ const folder = localizationFilePath ? path.dirname(localizationFilePath) : undefined;
62
+ const referencedFiles = Object.keys(localizationFileContent)
63
+ .filter((key) => !!localizationFileContent[key].$ref)
64
+ .map((key) => ({ key, ref: localizationFileContent[key].$ref.split('#/')[0] }))
65
+ .filter(({ key, ref }) => {
66
+ const res = !!ref;
67
+ if (!res) {
68
+ this.logger.error(`The reference (${ref}) of the key ${key} is invalid, it will be ignored`);
69
+ }
70
+ return res;
71
+ })
72
+ .map(({ ref }) => {
73
+ if (!ref.startsWith('.')) {
74
+ if (this.options?.libraries?.length && this.options.libraries.every((lib) => !ref.startsWith(lib))) {
75
+ try {
76
+ return require.resolve(ref);
77
+ }
78
+ catch (err) {
79
+ this.logger.debug(`Could not resolve reference ${ref}, treating as local file: ${err}`);
80
+ }
81
+ }
82
+ return undefined;
83
+ }
84
+ return folder ? path.resolve(folder, ref) : ref;
85
+ })
86
+ .filter((ref) => !!ref);
87
+ return referencedFiles.length > 0 ? referencedFiles : undefined;
88
+ }
89
+ /**
90
+ * Read a localization file
91
+ * @param locFile Path to the localization file
92
+ */
93
+ async readLocalizationFile(locFile) {
94
+ const content = JSON.parse(await fs.promises.readFile(locFile, { encoding: 'utf8' }));
95
+ if (content.$schema) {
96
+ delete content.$schema;
97
+ }
98
+ return content;
99
+ }
100
+ /**
101
+ * Read a metadata file
102
+ * @param metadataFile Path to the metadata file
103
+ */
104
+ async readMetadataFile(metadataFile) {
105
+ return JSON.parse(await fs.promises.readFile(metadataFile, { encoding: 'utf8' }));
106
+ }
107
+ /**
108
+ * Generate a metadata item from a localization item
109
+ * @param loc Localization item
110
+ * @param key Key of the localization
111
+ */
112
+ generateMetadataItemFromLocalization(loc, key) {
113
+ const res = {
114
+ description: loc.description,
115
+ dictionary: !!loc.dictionary,
116
+ referenceData: !!loc.referenceData,
117
+ key
118
+ };
119
+ if (loc.defaultValue || loc.defaultValue === '') {
120
+ res.value = loc.defaultValue;
121
+ }
122
+ if (loc.tags) {
123
+ res.tags = loc.tags;
124
+ }
125
+ if (loc.$ref) {
126
+ const [refPath, refKey] = loc.$ref.split('#/', 2);
127
+ res.ref = refPath.startsWith('.') || this.options?.libraries?.some((lib) => refPath.startsWith(lib)) ? refKey : loc.$ref;
128
+ }
129
+ if (typeof loc.defaultValue === 'undefined' && typeof loc.$ref === 'undefined' && !loc.dictionary) {
130
+ this.logger.error(`${key} has no default value or $ref defined`);
131
+ throw new schematics_1.O3rCliError(`${key} has no default value or $ref defined`);
132
+ }
133
+ return res;
134
+ }
135
+ /**
136
+ * Compares two JSONLocalization object by their keys and returns the result of the string comparison
137
+ * @param a JSONLocalization
138
+ * @param b JSONLocalization
139
+ */
140
+ compareKeys(a, b) {
141
+ const keyA = a.key.toUpperCase();
142
+ const keyB = b.key.toUpperCase();
143
+ if (keyA < keyB) {
144
+ return -1;
145
+ }
146
+ if (keyA > keyB) {
147
+ return 1;
148
+ }
149
+ return 0;
150
+ }
151
+ /** Get the list of patterns from tsconfig.json */
152
+ getPatternsFromTsConfig() {
153
+ const tsconfigResult = ts.readConfigFile(this.tsconfigPath, (p) => ts.sys.readFile(p));
154
+ if (tsconfigResult.error) {
155
+ const stringError = typeof tsconfigResult.error.messageText === 'string'
156
+ ? tsconfigResult.error.messageText
157
+ : tsconfigResult.error.messageText.messageText;
158
+ this.logger.error(stringError);
159
+ throw new schematics_1.O3rCliError(stringError);
160
+ }
161
+ const include = [...(tsconfigResult.config.files || []), ...(tsconfigResult.config.include || [])];
162
+ const exclude = tsconfigResult.config.exclude || [];
163
+ const cwd = path.resolve(path.dirname(this.tsconfigPath), tsconfigResult.config.rootDir || '.');
164
+ return { include, exclude, cwd };
165
+ }
166
+ /**
167
+ * Generate the localization mapping for a list of files
168
+ * @param localizationFiles Localization files to load
169
+ * @param alreadyLoadedFiles List of localization files already loadded
170
+ * @param isDependency Determine if the list of files are dependencies of others
171
+ */
172
+ async getLocalizationMap(localizationFiles, alreadyLoadedFiles = [], isDependency = false) {
173
+ const mapLocalization = {};
174
+ for (const file of localizationFiles) {
175
+ mapLocalization[file] = {
176
+ data: await this.readLocalizationFile(file),
177
+ isDependency
178
+ };
179
+ }
180
+ const references = localizationFiles
181
+ .map((file) => this.getReferencedFiles(mapLocalization[file].data, file))
182
+ .filter((refs) => !!refs)
183
+ .reduce((acc, refs) => {
184
+ acc.push(...refs.filter((ref) => !localizationFiles.includes(ref) && !alreadyLoadedFiles.includes(ref)));
185
+ return acc;
186
+ }, []);
187
+ if (references.length > 0) {
188
+ return {
189
+ ...mapLocalization,
190
+ ...await this.getLocalizationMap(references, [...localizationFiles, ...alreadyLoadedFiles], true)
191
+ };
192
+ }
193
+ return mapLocalization;
194
+ }
195
+ /**
196
+ * Extract the localization mapping from a tsconfig file
197
+ * @param extraLocalizationFiles Additional translations to add
198
+ */
199
+ async extractLocalizationFromTsConfig(extraLocalizationFiles = []) {
200
+ const files = this.getFilesFromTsConfig();
201
+ const tsFiles = files
202
+ .filter((file) => /\.ts$/.test(file))
203
+ .map((file) => path.join(path.dirname(this.tsconfigPath), file));
204
+ const program = ts.createProgram(tsFiles, {});
205
+ const localizationFiles = tsFiles
206
+ .map((file) => ({ file, source: program.getSourceFile(file) }))
207
+ .map(({ file, source }) => ({ file, classes: source && this.getAngularClassNode(source), source }))
208
+ .filter(({ classes }) => !!classes)
209
+ .map(({ file, classes }) => classes
210
+ .map((classItem) => (0, extractors_1.getLocalizationFileFromAngularElement)(classItem))
211
+ .filter((locFiles) => !!locFiles)
212
+ .reduce((acc, locFiles) => {
213
+ acc.push(...locFiles.filter((f) => !acc.includes(f)));
214
+ return acc;
215
+ }, [])
216
+ .map((locFile) => path.resolve(path.dirname(file), locFile)))
217
+ .reduce((acc, locFiles) => {
218
+ acc.push(...locFiles.filter((f) => !acc.includes(f)));
219
+ return acc;
220
+ }, []);
221
+ localizationFiles.push(...extraLocalizationFiles.filter((file) => !localizationFiles.includes(file)));
222
+ this.logger.debug(`Found ${localizationFiles.length} localization file(s) to process`);
223
+ return this.getLocalizationMap(localizationFiles);
224
+ }
225
+ /**
226
+ * Retrieve metadata from libraries
227
+ * @param libraries Libraries on which the project depend
228
+ */
229
+ async getMetadataFromLibraries(libraries) {
230
+ const metadataFiles = libraries
231
+ .map((lib) => (0, extractors_1.getLibraryCmsMetadata)(lib).localizationFilePath)
232
+ .filter((localizationFilePath) => !!localizationFilePath);
233
+ return this.getMetadataFromFiles(metadataFiles);
234
+ }
235
+ /**
236
+ * Retrieve metadata from metadata files
237
+ * @param metadataFiles Metadata files
238
+ */
239
+ async getMetadataFromFiles(metadataFiles) {
240
+ const metadataMap = {};
241
+ for (const file of metadataFiles) {
242
+ metadataMap[file] = await this.readMetadataFile(file);
243
+ }
244
+ return metadataMap;
245
+ }
246
+ /**
247
+ * Generate metadata from localization and library metadata mappings
248
+ * @param localizationMap Map of localization files
249
+ * @param options Option of generation
250
+ * @param options.ignoreDuplicateKeys
251
+ * @param options.libraryMetadata
252
+ * @param options.outputFile
253
+ * @param options.sortKeys
254
+ */
255
+ generateMetadata(localizationMap, options) {
256
+ const metadata = {};
257
+ let hasDuplicateKey = false;
258
+ const addMetadata = (data, origin, libraries = []) => {
259
+ if (metadata[data.key]) {
260
+ hasDuplicateKey = true;
261
+ if (options.ignoreDuplicateKeys) {
262
+ this.logger.warn(`The key ${data.key} from ${origin} will override the previous value (${metadata[data.key].value || 'ref ' + metadata[data.key].ref} -> ${data.value || 'ref ' + data.ref})`);
263
+ }
264
+ else {
265
+ this.logger.error(`The key ${data.key} from ${origin} try to override the previous value (${metadata[data.key].value || 'ref ' + metadata[data.key].ref} -> ${data.value || 'ref ' + data.ref})`);
266
+ }
267
+ }
268
+ metadata[data.key] = data.ref && data.ref.includes('#/') && libraries.some((lib) => data.ref.startsWith(lib))
269
+ ? {
270
+ ...data,
271
+ ref: data.ref.split('#/')[1]
272
+ }
273
+ : data;
274
+ };
275
+ Object.keys(options.libraryMetadata)
276
+ .forEach((lib) => options.libraryMetadata[lib].forEach((dataLoc) => addMetadata(dataLoc, lib, this.options?.libraries)));
277
+ Object.keys(localizationMap)
278
+ .forEach((locFile) => Object.keys(localizationMap[locFile].data)
279
+ .forEach((locKey) => addMetadata(this.generateMetadataItemFromLocalization(localizationMap[locFile].data[locKey], locKey), locFile)));
280
+ if (hasDuplicateKey && !options.ignoreDuplicateKeys) {
281
+ throw new schematics_1.O3rCliError('Duplicate key');
282
+ }
283
+ const localizationMetadata = Object.values(metadata);
284
+ let hasUnknownRef = false;
285
+ localizationMetadata.forEach((data) => {
286
+ if (data.ref && !data.ref.includes('#/')) {
287
+ if (!metadata[data.ref]) {
288
+ hasUnknownRef = true;
289
+ this.logger.error(`The key ${data.ref} is unknown but referenced by ${data.key}.`);
290
+ }
291
+ else if (typeof data.description === 'undefined') {
292
+ data.description = metadata[data.ref].description;
293
+ }
294
+ }
295
+ });
296
+ if (hasUnknownRef) {
297
+ throw new schematics_1.O3rCliError('Unknown referenced key');
298
+ }
299
+ return options.sortKeys ? localizationMetadata.toSorted((a, b) => this.compareKeys(a, b)) : localizationMetadata;
300
+ }
301
+ }
302
+ exports.LocalizationExtractor = LocalizationExtractor;
303
+ //# sourceMappingURL=localization-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization-generator.js","sourceRoot":"","sources":["../../../builders/helpers/localization-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { I18nBuilderSchema } from './schema';
2
+ /**
3
+ * Builder to generate i18n files from localization JSON files
4
+ */
5
+ declare const _default: import("@angular-devkit/architect").Builder<I18nBuilderSchema & import("@angular-devkit/core").JsonObject>;
6
+ export default _default;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../builders/i18n/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB;;GAEG;;AACH,wBAsCI"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs = require("node:fs");
4
+ const path = require("node:path");
5
+ const architect_1 = require("@angular-devkit/architect");
6
+ const extractors_1 = require("@o3r/extractors");
7
+ const globby_1 = require("globby");
8
+ /**
9
+ * Builder to generate i18n files from localization JSON files
10
+ */
11
+ exports.default = (0, architect_1.createBuilder)((0, extractors_1.createBuilderWithMetricsIfInstalled)((options, context) => {
12
+ const posixWorkspaceRoot = context.workspaceRoot.split(path.sep).join(path.posix.sep);
13
+ options.localizationConfigs.forEach((config) => {
14
+ const fileNames = (0, globby_1.sync)(config.localizationFiles.map((files) => path.posix.join(posixWorkspaceRoot, files)));
15
+ fileNames.forEach((filePath) => {
16
+ const localizationJson = JSON.parse(fs.readFileSync(filePath, { encoding: 'utf8' }));
17
+ const newContent = JSON.stringify(Object.entries(localizationJson)
18
+ .filter(([, value]) => !value.dictionary && !value.$ref && value.defaultValue !== undefined)
19
+ .toSorted((a, b) => a[0] < b[0] ? -1 : 1)
20
+ .reduce((acc, [key, { defaultValue }]) => {
21
+ acc[key] = defaultValue;
22
+ return acc;
23
+ }, {}), null, 2);
24
+ const dir = path.dirname(filePath);
25
+ const i18nPath = path.join(dir, config.i18nFolderPath);
26
+ if (!fs.existsSync(i18nPath)) {
27
+ fs.mkdirSync(i18nPath, {
28
+ recursive: true
29
+ });
30
+ }
31
+ const defaultLanguageFile = path.join(i18nPath, options.defaultLanguageFile);
32
+ fs.writeFileSync(defaultLanguageFile, newContent + '\n');
33
+ });
34
+ });
35
+ return {
36
+ success: true
37
+ };
38
+ }));
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../builders/i18n/index.ts"],"names":[],"mappings":";;AAAA,8BAA8B;AAC9B,kCAAkC;AAClC,yDAImC;AACnC,gDAEyB;AACzB,mCAEgB;AAKhB;;GAEG;AACH,kBAAe,IAAA,yBAAa,EAAC,IAAA,gDAAmC,EAAoB,CAAC,OAA0B,EAAE,OAAuB,EAAiB,EAAE;IACzJ,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtF,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,IAAA,aAAU,EAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1H,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,gBAAgB,GAAwB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAE1G,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;iBAC3F,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC,MAAM,CAAC,CAAC,GAA8B,EAAE,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;gBAClE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;gBACxB,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,EACR,IAAI,EACJ,CAAC,CACF,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE;oBACrB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC7E,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { JsonObject } from '@angular-devkit/core';
2
+ /**
3
+ * Configuration for localization files
4
+ */
5
+ export interface LocalizationConfig extends JsonObject {
6
+ /**
7
+ * Glob to define how to find localization json files
8
+ */
9
+ localizationFiles: string[];
10
+ /**
11
+ * Folder path for the i18n folder relative to the localization json file
12
+ * @default 'i18n'
13
+ */
14
+ i18nFolderPath: string;
15
+ }
16
+ /**
17
+ * Schema for the i18n builder
18
+ */
19
+ export interface I18nBuilderSchema extends JsonObject {
20
+ /**
21
+ * List of LocalizationConfig
22
+ */
23
+ localizationConfigs: LocalizationConfig[];
24
+ /**
25
+ * Name of the file for the default language
26
+ * @default 'en-GB.json'
27
+ */
28
+ defaultLanguageFile: string;
29
+ }
30
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../builders/i18n/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;OAEG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;OAEG;IACH,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAE1C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../builders/i18n/schema.ts"],"names":[],"mappings":""}