@messagevisor/core 0.0.1 → 0.1.0

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 (211) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -0
  4. package/jest.config.js +8 -0
  5. package/lib/benchmark/index.d.ts +2 -0
  6. package/lib/benchmark/index.js +417 -0
  7. package/lib/benchmark/index.js.map +1 -0
  8. package/lib/builder/index.d.ts +70 -0
  9. package/lib/builder/index.js +831 -0
  10. package/lib/builder/index.js.map +1 -0
  11. package/lib/cli/index.d.ts +28 -0
  12. package/lib/cli/index.js +182 -0
  13. package/lib/cli/index.js.map +1 -0
  14. package/lib/config/index.d.ts +61 -0
  15. package/lib/config/index.js +255 -0
  16. package/lib/config/index.js.map +1 -0
  17. package/lib/create/index.d.ts +2 -0
  18. package/lib/create/index.js +405 -0
  19. package/lib/create/index.js.map +1 -0
  20. package/lib/datasource/filesystemAdapter.d.ts +44 -0
  21. package/lib/datasource/filesystemAdapter.js +424 -0
  22. package/lib/datasource/filesystemAdapter.js.map +1 -0
  23. package/lib/datasource/index.d.ts +39 -0
  24. package/lib/datasource/index.js +96 -0
  25. package/lib/datasource/index.js.map +1 -0
  26. package/lib/error.d.ts +6 -0
  27. package/lib/error.js +49 -0
  28. package/lib/error.js.map +1 -0
  29. package/lib/evaluate/cli.d.ts +8 -0
  30. package/lib/evaluate/cli.js +179 -0
  31. package/lib/evaluate/cli.js.map +1 -0
  32. package/lib/evaluate/index.d.ts +10 -0
  33. package/lib/evaluate/index.js +131 -0
  34. package/lib/evaluate/index.js.map +1 -0
  35. package/lib/examples/coerceExampleIsoDates.d.ts +12 -0
  36. package/lib/examples/coerceExampleIsoDates.js +81 -0
  37. package/lib/examples/coerceExampleIsoDates.js.map +1 -0
  38. package/lib/examples/index.d.ts +63 -0
  39. package/lib/examples/index.js +713 -0
  40. package/lib/examples/index.js.map +1 -0
  41. package/lib/exporter/index.d.ts +60 -0
  42. package/lib/exporter/index.js +610 -0
  43. package/lib/exporter/index.js.map +1 -0
  44. package/lib/find-duplicates/index.d.ts +41 -0
  45. package/lib/find-duplicates/index.js +297 -0
  46. package/lib/find-duplicates/index.js.map +1 -0
  47. package/lib/generate-code/index.d.ts +11 -0
  48. package/lib/generate-code/index.js +157 -0
  49. package/lib/generate-code/index.js.map +1 -0
  50. package/lib/generate-code/typescript.d.ts +14 -0
  51. package/lib/generate-code/typescript.js +307 -0
  52. package/lib/generate-code/typescript.js.map +1 -0
  53. package/lib/importer/index.d.ts +64 -0
  54. package/lib/importer/index.js +1092 -0
  55. package/lib/importer/index.js.map +1 -0
  56. package/lib/index.d.ts +18 -0
  57. package/lib/index.js +35 -0
  58. package/lib/index.js.map +1 -0
  59. package/lib/info/index.d.ts +17 -0
  60. package/lib/info/index.js +132 -0
  61. package/lib/info/index.js.map +1 -0
  62. package/lib/init/index.d.ts +30 -0
  63. package/lib/init/index.js +348 -0
  64. package/lib/init/index.js.map +1 -0
  65. package/lib/lint/index.d.ts +1 -0
  66. package/lib/lint/index.js +6 -0
  67. package/lib/lint/index.js.map +1 -0
  68. package/lib/linter/attributeSchema.d.ts +7 -0
  69. package/lib/linter/attributeSchema.js +36 -0
  70. package/lib/linter/attributeSchema.js.map +1 -0
  71. package/lib/linter/checkLocaleCircularDependency.d.ts +7 -0
  72. package/lib/linter/checkLocaleCircularDependency.js +42 -0
  73. package/lib/linter/checkLocaleCircularDependency.js.map +1 -0
  74. package/lib/linter/conditionSchema.d.ts +3 -0
  75. package/lib/linter/conditionSchema.js +283 -0
  76. package/lib/linter/conditionSchema.js.map +1 -0
  77. package/lib/linter/formatSchema.d.ts +325 -0
  78. package/lib/linter/formatSchema.js +165 -0
  79. package/lib/linter/formatSchema.js.map +1 -0
  80. package/lib/linter/icuStyleLint.d.ts +6 -0
  81. package/lib/linter/icuStyleLint.js +226 -0
  82. package/lib/linter/icuStyleLint.js.map +1 -0
  83. package/lib/linter/index.d.ts +34 -0
  84. package/lib/linter/index.js +557 -0
  85. package/lib/linter/index.js.map +1 -0
  86. package/lib/linter/localeSchema.d.ts +672 -0
  87. package/lib/linter/localeSchema.js +50 -0
  88. package/lib/linter/localeSchema.js.map +1 -0
  89. package/lib/linter/messageSchema.d.ts +35 -0
  90. package/lib/linter/messageSchema.js +115 -0
  91. package/lib/linter/messageSchema.js.map +1 -0
  92. package/lib/linter/printError.d.ts +8 -0
  93. package/lib/linter/printError.js +41 -0
  94. package/lib/linter/printError.js.map +1 -0
  95. package/lib/linter/schema.d.ts +33 -0
  96. package/lib/linter/schema.js +192 -0
  97. package/lib/linter/schema.js.map +1 -0
  98. package/lib/linter/segmentSchema.d.ts +8 -0
  99. package/lib/linter/segmentSchema.js +18 -0
  100. package/lib/linter/segmentSchema.js.map +1 -0
  101. package/lib/linter/targetSchema.d.ts +337 -0
  102. package/lib/linter/targetSchema.js +39 -0
  103. package/lib/linter/targetSchema.js.map +1 -0
  104. package/lib/linter/testSchema.d.ts +71 -0
  105. package/lib/linter/testSchema.js +165 -0
  106. package/lib/linter/testSchema.js.map +1 -0
  107. package/lib/linter/zodHelpers.d.ts +2 -0
  108. package/lib/linter/zodHelpers.js +15 -0
  109. package/lib/linter/zodHelpers.js.map +1 -0
  110. package/lib/list/index.d.ts +8 -0
  111. package/lib/list/index.js +524 -0
  112. package/lib/list/index.js.map +1 -0
  113. package/lib/matrix.d.ts +4 -0
  114. package/lib/matrix.js +66 -0
  115. package/lib/matrix.js.map +1 -0
  116. package/lib/promoter/index.d.ts +65 -0
  117. package/lib/promoter/index.js +1208 -0
  118. package/lib/promoter/index.js.map +1 -0
  119. package/lib/prune/index.d.ts +37 -0
  120. package/lib/prune/index.js +673 -0
  121. package/lib/prune/index.js.map +1 -0
  122. package/lib/sets.d.ts +10 -0
  123. package/lib/sets.js +120 -0
  124. package/lib/sets.js.map +1 -0
  125. package/lib/tester/cliFormat.d.ts +8 -0
  126. package/lib/tester/cliFormat.js +15 -0
  127. package/lib/tester/cliFormat.js.map +1 -0
  128. package/lib/tester/index.d.ts +35 -0
  129. package/lib/tester/index.js +713 -0
  130. package/lib/tester/index.js.map +1 -0
  131. package/lib/tester/matrix.d.ts +14 -0
  132. package/lib/tester/matrix.js +76 -0
  133. package/lib/tester/matrix.js.map +1 -0
  134. package/lib/tester/prettyDuration.d.ts +1 -0
  135. package/lib/tester/prettyDuration.js +30 -0
  136. package/lib/tester/prettyDuration.js.map +1 -0
  137. package/lib/tester/printTestResult.d.ts +2 -0
  138. package/lib/tester/printTestResult.js +32 -0
  139. package/lib/tester/printTestResult.js.map +1 -0
  140. package/lib/tester/types.d.ts +29 -0
  141. package/lib/tester/types.js +3 -0
  142. package/lib/tester/types.js.map +1 -0
  143. package/package.json +41 -13
  144. package/src/benchmark/index.spec.ts +375 -0
  145. package/src/benchmark/index.ts +433 -0
  146. package/src/builder/index.spec.ts +822 -0
  147. package/src/builder/index.ts +920 -0
  148. package/src/cli/index.spec.ts +54 -0
  149. package/src/cli/index.ts +150 -0
  150. package/src/config/index.spec.ts +70 -0
  151. package/src/config/index.ts +259 -0
  152. package/src/create/index.spec.ts +272 -0
  153. package/src/create/index.ts +295 -0
  154. package/src/datasource/filesystemAdapter.ts +313 -0
  155. package/src/datasource/index.ts +135 -0
  156. package/src/error.ts +33 -0
  157. package/src/evaluate/cli.spec.ts +368 -0
  158. package/src/evaluate/cli.ts +130 -0
  159. package/src/evaluate/index.ts +161 -0
  160. package/src/examples/coerceExampleIsoDates.spec.ts +81 -0
  161. package/src/examples/coerceExampleIsoDates.ts +98 -0
  162. package/src/examples/index.spec.ts +453 -0
  163. package/src/examples/index.ts +854 -0
  164. package/src/exporter/index.spec.ts +443 -0
  165. package/src/exporter/index.ts +643 -0
  166. package/src/find-duplicates/index.spec.ts +289 -0
  167. package/src/find-duplicates/index.ts +314 -0
  168. package/src/generate-code/index.ts +92 -0
  169. package/src/generate-code/typescript.spec.ts +241 -0
  170. package/src/generate-code/typescript.ts +284 -0
  171. package/src/importer/index.spec.ts +1101 -0
  172. package/src/importer/index.ts +1190 -0
  173. package/src/index.ts +18 -0
  174. package/src/info/index.ts +67 -0
  175. package/src/init/index.spec.ts +279 -0
  176. package/src/init/index.ts +292 -0
  177. package/src/lint/index.ts +1 -0
  178. package/src/linter/attributeSchema.ts +38 -0
  179. package/src/linter/checkLocaleCircularDependency.ts +51 -0
  180. package/src/linter/conditionSchema.ts +386 -0
  181. package/src/linter/formatSchema.ts +170 -0
  182. package/src/linter/icuStyleLint.ts +312 -0
  183. package/src/linter/index.spec.ts +824 -0
  184. package/src/linter/index.ts +460 -0
  185. package/src/linter/localeSchema.ts +70 -0
  186. package/src/linter/messageSchema.ts +152 -0
  187. package/src/linter/printError.ts +52 -0
  188. package/src/linter/schema.ts +230 -0
  189. package/src/linter/segmentSchema.ts +15 -0
  190. package/src/linter/targetSchema.ts +50 -0
  191. package/src/linter/testSchema.spec.ts +405 -0
  192. package/src/linter/testSchema.ts +239 -0
  193. package/src/linter/zodHelpers.ts +16 -0
  194. package/src/list/index.spec.ts +431 -0
  195. package/src/list/index.ts +463 -0
  196. package/src/matrix.ts +69 -0
  197. package/src/promoter/index.spec.ts +584 -0
  198. package/src/promoter/index.ts +1267 -0
  199. package/src/prune/index.spec.ts +418 -0
  200. package/src/prune/index.ts +693 -0
  201. package/src/sets.ts +74 -0
  202. package/src/tester/cliFormat.ts +11 -0
  203. package/src/tester/featurevisorIntegration.spec.ts +101 -0
  204. package/src/tester/index.spec.ts +577 -0
  205. package/src/tester/index.ts +679 -0
  206. package/src/tester/matrix.ts +106 -0
  207. package/src/tester/prettyDuration.ts +34 -0
  208. package/src/tester/printTestResult.ts +40 -0
  209. package/src/tester/types.ts +32 -0
  210. package/tsconfig.cjs.json +11 -0
  211. package/tsconfig.typecheck.json +4 -0
@@ -0,0 +1,41 @@
1
+ import type { ProjectConfig } from "../config";
2
+ import type { Datasource } from "../datasource";
3
+ export interface FindDuplicatesOptions {
4
+ set?: string;
5
+ locale?: string;
6
+ }
7
+ export interface DuplicateTranslationSource {
8
+ messageKey: string;
9
+ locale: string;
10
+ }
11
+ export interface DuplicateTranslationValue {
12
+ value: string;
13
+ messageKeys: string[];
14
+ sources: DuplicateTranslationSource[];
15
+ }
16
+ export interface DuplicateTranslationLocaleResult {
17
+ locale: string;
18
+ duplicateValues: DuplicateTranslationValue[];
19
+ }
20
+ export interface DuplicateTranslationSetResult {
21
+ set: string | null;
22
+ locales: DuplicateTranslationLocaleResult[];
23
+ }
24
+ export interface FindDuplicatesResult {
25
+ summary: {
26
+ sets: number;
27
+ locales: number;
28
+ duplicateValues: number;
29
+ duplicateMessageKeys: number;
30
+ };
31
+ results: DuplicateTranslationSetResult[];
32
+ }
33
+ export declare function findDuplicateTranslations(projectConfig: ProjectConfig, datasource: Datasource, options?: FindDuplicatesOptions): Promise<FindDuplicatesResult>;
34
+ export declare const findDuplicatesPlugin: {
35
+ command: string;
36
+ handler: ({ projectConfig, datasource, parsed }: any) => Promise<boolean>;
37
+ examples: {
38
+ command: string;
39
+ description: string;
40
+ }[];
41
+ };
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.findDuplicatesPlugin = void 0;
40
+ exports.findDuplicateTranslations = findDuplicateTranslations;
41
+ var error_1 = require("../error");
42
+ var sets_1 = require("../sets");
43
+ var cliFormat_1 = require("../tester/cliFormat");
44
+ function readAll(keys, read) {
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ var entries;
47
+ var _this = this;
48
+ return __generator(this, function (_a) {
49
+ switch (_a.label) {
50
+ case 0: return [4 /*yield*/, Promise.all(keys.map(function (key) { return __awaiter(_this, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
51
+ switch (_b.label) {
52
+ case 0:
53
+ _a = [key];
54
+ return [4 /*yield*/, read(key)];
55
+ case 1: return [2 /*return*/, _a.concat([_b.sent()])];
56
+ }
57
+ }); }); }))];
58
+ case 1:
59
+ entries = _a.sent();
60
+ return [2 /*return*/, Object.fromEntries(entries)];
61
+ }
62
+ });
63
+ });
64
+ }
65
+ function resolveLocaleChain(localeKey, locales) {
66
+ var _a;
67
+ var chain = [];
68
+ var seen = new Set();
69
+ var currentKey = localeKey;
70
+ while (currentKey && !seen.has(currentKey)) {
71
+ seen.add(currentKey);
72
+ chain.unshift(currentKey);
73
+ currentKey = (_a = locales[currentKey]) === null || _a === void 0 ? void 0 : _a.inheritTranslationsFrom;
74
+ }
75
+ return chain;
76
+ }
77
+ function resolveTranslation(translations, localeKey, locales) {
78
+ var candidates = resolveLocaleChain(localeKey, locales).reverse();
79
+ for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
80
+ var candidate = candidates_1[_i];
81
+ if (typeof (translations === null || translations === void 0 ? void 0 : translations[candidate]) !== "undefined") {
82
+ return {
83
+ value: translations[candidate],
84
+ sourceLocale: candidate,
85
+ };
86
+ }
87
+ }
88
+ }
89
+ function isAvailable(message) {
90
+ return !message.archived;
91
+ }
92
+ function hasContent(value) {
93
+ return value.trim().length > 0;
94
+ }
95
+ function toDuplicateLocaleResult(locale, messages, locales) {
96
+ var entriesByValue = new Map();
97
+ for (var _i = 0, _a = Object.entries(messages); _i < _a.length; _i++) {
98
+ var _b = _a[_i], messageKey = _b[0], message = _b[1];
99
+ if (!isAvailable(message)) {
100
+ continue;
101
+ }
102
+ var resolved = resolveTranslation(message.translations, locale, locales);
103
+ if (!resolved || !hasContent(resolved.value)) {
104
+ continue;
105
+ }
106
+ var existing = entriesByValue.get(resolved.value) || [];
107
+ existing.push({
108
+ messageKey: messageKey,
109
+ locale: resolved.sourceLocale,
110
+ });
111
+ entriesByValue.set(resolved.value, existing);
112
+ }
113
+ var duplicateValues = Array.from(entriesByValue.entries())
114
+ .filter(function (_a) {
115
+ var entries = _a[1];
116
+ return entries.length > 1;
117
+ })
118
+ .map(function (_a) {
119
+ var value = _a[0], sources = _a[1];
120
+ return ({
121
+ value: value,
122
+ messageKeys: sources.map(function (source) { return source.messageKey; }).sort(),
123
+ sources: sources
124
+ .slice()
125
+ .sort(function (a, b) { return a.messageKey.localeCompare(b.messageKey) || a.locale.localeCompare(b.locale); }),
126
+ });
127
+ })
128
+ .sort(function (a, b) { return a.value.localeCompare(b.value); });
129
+ return {
130
+ locale: locale,
131
+ duplicateValues: duplicateValues,
132
+ };
133
+ }
134
+ function findDuplicatesInDatasource(datasource, set, options) {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ var _a, localeKeys, messageKeys, selectedLocales, _b, locales, messages;
137
+ return __generator(this, function (_c) {
138
+ switch (_c.label) {
139
+ case 0: return [4 /*yield*/, Promise.all([
140
+ datasource.listLocales(),
141
+ datasource.listMessages(),
142
+ ])];
143
+ case 1:
144
+ _a = _c.sent(), localeKeys = _a[0], messageKeys = _a[1];
145
+ if (options.locale && !localeKeys.includes(options.locale)) {
146
+ throw new error_1.MessagevisorCLIError("Unknown locale \"".concat(options.locale, "\". Available locales: ").concat(localeKeys.join(", ") || "none", "."));
147
+ }
148
+ selectedLocales = options.locale ? [options.locale] : localeKeys;
149
+ return [4 /*yield*/, Promise.all([
150
+ readAll(localeKeys, function (key) { return datasource.readLocale(key); }),
151
+ readAll(messageKeys, function (key) { return datasource.readMessage(key); }),
152
+ ])];
153
+ case 2:
154
+ _b = _c.sent(), locales = _b[0], messages = _b[1];
155
+ return [2 /*return*/, {
156
+ set: set,
157
+ locales: selectedLocales
158
+ .map(function (locale) { return toDuplicateLocaleResult(locale, messages, locales); })
159
+ .filter(function (result) { return result.duplicateValues.length > 0; }),
160
+ }];
161
+ }
162
+ });
163
+ });
164
+ }
165
+ function summarize(results) {
166
+ var duplicateValues = results.reduce(function (sum, result) {
167
+ return sum +
168
+ result.locales.reduce(function (localeSum, locale) { return localeSum + locale.duplicateValues.length; }, 0);
169
+ }, 0);
170
+ var duplicateMessageKeys = results.reduce(function (sum, result) {
171
+ return sum +
172
+ result.locales.reduce(function (localeSum, locale) {
173
+ return localeSum +
174
+ locale.duplicateValues.reduce(function (valueSum, duplicate) { return valueSum + duplicate.messageKeys.length; }, 0);
175
+ }, 0);
176
+ }, 0);
177
+ return {
178
+ sets: results.length,
179
+ locales: results.reduce(function (sum, result) { return sum + result.locales.length; }, 0),
180
+ duplicateValues: duplicateValues,
181
+ duplicateMessageKeys: duplicateMessageKeys,
182
+ };
183
+ }
184
+ function findDuplicateTranslations(projectConfig_1, datasource_1) {
185
+ return __awaiter(this, arguments, void 0, function (projectConfig, datasource, options) {
186
+ var executions, results;
187
+ if (options === void 0) { options = {}; }
188
+ return __generator(this, function (_a) {
189
+ switch (_a.label) {
190
+ case 0:
191
+ if (!projectConfig.sets && options.set) {
192
+ throw new error_1.MessagevisorCLIError("Option --set can only be used when project sets are enabled.");
193
+ }
194
+ return [4 /*yield*/, (0, sets_1.getProjectSetExecutions)(projectConfig, datasource, options.set)];
195
+ case 1:
196
+ executions = _a.sent();
197
+ return [4 /*yield*/, Promise.all(executions.map(function (execution) {
198
+ return findDuplicatesInDatasource(execution.datasource, projectConfig.sets ? execution.set : null, options);
199
+ }))];
200
+ case 2:
201
+ results = _a.sent();
202
+ return [2 /*return*/, {
203
+ summary: summarize(results),
204
+ results: results,
205
+ }];
206
+ }
207
+ });
208
+ });
209
+ }
210
+ function printDuplicateSources(locale, duplicate) {
211
+ for (var _i = 0, _a = duplicate.sources; _i < _a.length; _i++) {
212
+ var source = _a[_i];
213
+ var inheritedSuffix = source.locale !== locale ? (0, cliFormat_1.colorize)(" (from ".concat(source.locale, ")"), 2) : "";
214
+ console.log(" - ".concat((0, cliFormat_1.colorize)(source.messageKey, 1)).concat(inheritedSuffix));
215
+ }
216
+ }
217
+ function printPlainResult(result, hasSets) {
218
+ console.log("");
219
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Finding duplicate Messagevisor translations");
220
+ console.log(" Sets: ".concat(result.summary.sets));
221
+ console.log(" Locales: ".concat(result.summary.locales));
222
+ console.log(" Duplicate values: ".concat(result.summary.duplicateValues));
223
+ console.log(" Message key hits: ".concat(result.summary.duplicateMessageKeys));
224
+ console.log("");
225
+ if (result.summary.duplicateValues === 0) {
226
+ console.log(cliFormat_1.CLI_FORMAT_GREEN, "No duplicate translations found.");
227
+ return;
228
+ }
229
+ for (var _i = 0, _a = result.results; _i < _a.length; _i++) {
230
+ var setResult = _a[_i];
231
+ if (setResult.locales.length === 0) {
232
+ continue;
233
+ }
234
+ if (hasSets) {
235
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Set \"".concat(setResult.set, "\""));
236
+ }
237
+ for (var _b = 0, _c = setResult.locales; _b < _c.length; _b++) {
238
+ var localeResult = _c[_b];
239
+ console.log(cliFormat_1.CLI_FORMAT_CYAN, "Locale \"".concat(localeResult.locale, "\""));
240
+ for (var _d = 0, _e = localeResult.duplicateValues; _d < _e.length; _d++) {
241
+ var duplicate = _e[_d];
242
+ console.log(" ".concat((0, cliFormat_1.colorize)(JSON.stringify(duplicate.value), 33)));
243
+ printDuplicateSources(localeResult.locale, duplicate);
244
+ }
245
+ console.log("");
246
+ }
247
+ }
248
+ console.log(cliFormat_1.CLI_FORMAT_GREEN, "Duplicate scan complete: ".concat(result.summary.duplicateValues, " value(s) across ").concat(result.summary.locales, " locale(s)."));
249
+ }
250
+ exports.findDuplicatesPlugin = {
251
+ command: "find-duplicates",
252
+ handler: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
253
+ var result, error_2;
254
+ var projectConfig = _b.projectConfig, datasource = _b.datasource, parsed = _b.parsed;
255
+ return __generator(this, function (_c) {
256
+ switch (_c.label) {
257
+ case 0:
258
+ _c.trys.push([0, 2, , 3]);
259
+ return [4 /*yield*/, findDuplicateTranslations(projectConfig, datasource, {
260
+ set: parsed.set,
261
+ locale: parsed.locale,
262
+ })];
263
+ case 1:
264
+ result = _c.sent();
265
+ if (parsed.json) {
266
+ console.log(parsed.pretty ? JSON.stringify(result, null, 2) : JSON.stringify(result));
267
+ return [2 /*return*/];
268
+ }
269
+ printPlainResult(result, projectConfig.sets);
270
+ return [3 /*break*/, 3];
271
+ case 2:
272
+ error_2 = _c.sent();
273
+ if ((0, error_1.printMessagevisorCLIError)(error_2)) {
274
+ return [2 /*return*/, false];
275
+ }
276
+ throw error_2;
277
+ case 3: return [2 /*return*/];
278
+ }
279
+ });
280
+ }); },
281
+ examples: [
282
+ { command: "find-duplicates", description: "find duplicate translation values" },
283
+ {
284
+ command: "find-duplicates --locale=en-US",
285
+ description: "find duplicates for one locale",
286
+ },
287
+ {
288
+ command: "find-duplicates --set=staging",
289
+ description: "find duplicates in one set",
290
+ },
291
+ {
292
+ command: "find-duplicates --locale=en-US --json --pretty",
293
+ description: "print duplicate translations as JSON",
294
+ },
295
+ ],
296
+ };
297
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/find-duplicates/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Plugin } from "../cli";
2
+ import type { ProjectConfig } from "../config";
3
+ import type { Datasource } from "../datasource";
4
+ import { type TypeScriptCodeGenerationOptions } from "./typescript";
5
+ export declare const ALLOWED_LANGUAGES_FOR_CODE_GENERATION: string[];
6
+ export interface GenerateCodeOptions extends TypeScriptCodeGenerationOptions {
7
+ language?: string;
8
+ outDir?: string;
9
+ }
10
+ export declare function generateCodeForProject(projectConfig: ProjectConfig, datasource: Datasource, rootDirectoryPath: string, options: GenerateCodeOptions): Promise<import("./typescript").TypeScriptCodeGenerationResult>;
11
+ export declare const generateCodePlugin: Plugin;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __generator = (this && this.__generator) || function (thisArg, body) {
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
47
+ function verb(n) { return function (v) { return step([n, v]); }; }
48
+ function step(op) {
49
+ if (f) throw new TypeError("Generator is already executing.");
50
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
51
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52
+ if (y = 0, t) op = [op[0] & 2, t.value];
53
+ switch (op[0]) {
54
+ case 0: case 1: t = op; break;
55
+ case 4: _.label++; return { value: op[1], done: false };
56
+ case 5: _.label++; y = op[1]; op = [0]; continue;
57
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
58
+ default:
59
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
60
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
61
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
62
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
63
+ if (t[2]) _.ops.pop();
64
+ _.trys.pop(); continue;
65
+ }
66
+ op = body.call(thisArg, _);
67
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
68
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
69
+ }
70
+ };
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.generateCodePlugin = exports.ALLOWED_LANGUAGES_FOR_CODE_GENERATION = void 0;
73
+ exports.generateCodeForProject = generateCodeForProject;
74
+ var fs = __importStar(require("fs"));
75
+ var path = __importStar(require("path"));
76
+ var error_1 = require("../error");
77
+ var typescript_1 = require("./typescript");
78
+ exports.ALLOWED_LANGUAGES_FOR_CODE_GENERATION = ["typescript"];
79
+ function generateCodeForProject(projectConfig, datasource, rootDirectoryPath, options) {
80
+ return __awaiter(this, void 0, void 0, function () {
81
+ var outDir, result;
82
+ return __generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0:
85
+ if (!options.language) {
86
+ throw new error_1.MessagevisorCLIError("Option --language is required.");
87
+ }
88
+ if (!options.outDir) {
89
+ throw new error_1.MessagevisorCLIError("Option --out-dir is required.");
90
+ }
91
+ if (exports.ALLOWED_LANGUAGES_FOR_CODE_GENERATION.indexOf(options.language) === -1) {
92
+ throw new error_1.MessagevisorCLIError("Language ".concat(options.language, " is not supported. Supported languages: ").concat(exports.ALLOWED_LANGUAGES_FOR_CODE_GENERATION.join(", "), "."));
93
+ }
94
+ outDir = path.isAbsolute(options.outDir)
95
+ ? options.outDir
96
+ : path.join(rootDirectoryPath, options.outDir);
97
+ return [4 /*yield*/, fs.promises.mkdir(outDir, { recursive: true })];
98
+ case 1:
99
+ _a.sent();
100
+ return [4 /*yield*/, (0, typescript_1.generateTypeScriptCodeForProject)(projectConfig, datasource, outDir, {
101
+ set: options.set,
102
+ target: options.target,
103
+ includeMessages: options.includeMessages,
104
+ excludeMessages: options.excludeMessages,
105
+ react: options.react,
106
+ })];
107
+ case 2:
108
+ result = _a.sent();
109
+ console.log("Generated ".concat(result.files.length, " TypeScript file(s) for ").concat(result.messageKeys.length, " message key(s) in ").concat(outDir));
110
+ return [2 /*return*/, result];
111
+ }
112
+ });
113
+ });
114
+ }
115
+ exports.generateCodePlugin = {
116
+ command: "generate-code",
117
+ handler: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
118
+ var error_2;
119
+ var rootDirectoryPath = _b.rootDirectoryPath, projectConfig = _b.projectConfig, datasource = _b.datasource, parsed = _b.parsed;
120
+ return __generator(this, function (_c) {
121
+ switch (_c.label) {
122
+ case 0:
123
+ _c.trys.push([0, 2, , 3]);
124
+ return [4 /*yield*/, generateCodeForProject(projectConfig, datasource, rootDirectoryPath, {
125
+ language: parsed.language,
126
+ outDir: parsed.outDir,
127
+ set: parsed.set,
128
+ target: parsed.target,
129
+ includeMessages: parsed.includeMessages,
130
+ excludeMessages: parsed.excludeMessages,
131
+ react: parsed.react,
132
+ })];
133
+ case 1:
134
+ _c.sent();
135
+ return [3 /*break*/, 3];
136
+ case 2:
137
+ error_2 = _c.sent();
138
+ if ((0, error_1.printMessagevisorCLIError)(error_2)) {
139
+ return [2 /*return*/, false];
140
+ }
141
+ throw error_2;
142
+ case 3: return [2 /*return*/];
143
+ }
144
+ });
145
+ }); },
146
+ examples: [
147
+ {
148
+ command: "generate-code --language typescript --out-dir src/generated",
149
+ description: "Generate TypeScript message key helpers",
150
+ },
151
+ {
152
+ command: "generate-code --language typescript --out-dir src/generated --react",
153
+ description: "Generate TypeScript and React message key helpers",
154
+ },
155
+ ],
156
+ };
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generate-code/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ProjectConfig } from "../config";
2
+ import type { Datasource } from "../datasource";
3
+ export interface TypeScriptCodeGenerationOptions {
4
+ set?: string | string[];
5
+ target?: string | string[];
6
+ includeMessages?: string | string[];
7
+ excludeMessages?: string | string[];
8
+ react?: boolean;
9
+ }
10
+ export interface TypeScriptCodeGenerationResult {
11
+ messageKeys: string[];
12
+ files: string[];
13
+ }
14
+ export declare function generateTypeScriptCodeForProject(projectConfig: ProjectConfig, datasource: Datasource, outDir: string, options?: TypeScriptCodeGenerationOptions): Promise<TypeScriptCodeGenerationResult>;