@formatjs/cli-lib 5.1.8 → 5.1.10

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 (80) hide show
  1. package/index.d.ts +8 -0
  2. package/index.d.ts.map +1 -0
  3. package/index.js +12 -0
  4. package/main.d.ts +2 -0
  5. package/main.d.ts.map +1 -0
  6. package/main.js +3 -0
  7. package/package.json +1 -1
  8. package/src/cli.d.ts +3 -0
  9. package/src/cli.d.ts.map +1 -0
  10. package/src/cli.js +165 -0
  11. package/src/compile.d.ts +48 -0
  12. package/src/compile.d.ts.map +1 -0
  13. package/src/compile.js +97 -0
  14. package/src/compile_folder.d.ts +3 -0
  15. package/src/compile_folder.d.ts.map +1 -0
  16. package/src/compile_folder.js +11 -0
  17. package/src/console_utils.d.ts +10 -0
  18. package/src/console_utils.d.ts.map +1 -0
  19. package/src/console_utils.js +76 -0
  20. package/src/extract.d.ts +75 -0
  21. package/src/extract.d.ts.map +1 -0
  22. package/src/extract.js +177 -0
  23. package/src/formatters/crowdin.d.ts +8 -0
  24. package/src/formatters/crowdin.d.ts.map +1 -0
  25. package/src/formatters/crowdin.js +27 -0
  26. package/src/formatters/default.d.ts +6 -0
  27. package/src/formatters/default.d.ts.map +1 -0
  28. package/src/formatters/default.js +13 -0
  29. package/src/formatters/index.d.ts +9 -0
  30. package/src/formatters/index.d.ts.map +1 -0
  31. package/src/formatters/index.js +42 -0
  32. package/src/formatters/lokalise.d.ts +10 -0
  33. package/src/formatters/lokalise.d.ts.map +1 -0
  34. package/src/formatters/lokalise.js +24 -0
  35. package/src/formatters/simple.d.ts +5 -0
  36. package/src/formatters/simple.d.ts.map +1 -0
  37. package/src/formatters/simple.js +12 -0
  38. package/src/formatters/smartling.d.ts +24 -0
  39. package/src/formatters/smartling.d.ts.map +1 -0
  40. package/src/formatters/smartling.js +50 -0
  41. package/src/formatters/transifex.d.ts +10 -0
  42. package/src/formatters/transifex.d.ts.map +1 -0
  43. package/src/formatters/transifex.js +24 -0
  44. package/src/parse_script.d.ts +8 -0
  45. package/src/parse_script.d.ts.map +1 -0
  46. package/src/parse_script.js +51 -0
  47. package/src/pseudo_locale.d.ts +7 -0
  48. package/src/pseudo_locale.d.ts.map +1 -0
  49. package/src/pseudo_locale.js +100 -0
  50. package/src/vue_extractor.d.ts +3 -0
  51. package/src/vue_extractor.d.ts.map +1 -0
  52. package/src/vue_extractor.js +62 -0
  53. package/BUILD +0 -118
  54. package/CHANGELOG.md +0 -1147
  55. package/index.ts +0 -7
  56. package/main.ts +0 -5
  57. package/src/cli.ts +0 -240
  58. package/src/compile.ts +0 -141
  59. package/src/compile_folder.ts +0 -15
  60. package/src/console_utils.ts +0 -78
  61. package/src/extract.ts +0 -273
  62. package/src/formatters/crowdin.ts +0 -34
  63. package/src/formatters/default.ts +0 -19
  64. package/src/formatters/index.ts +0 -46
  65. package/src/formatters/lokalise.ts +0 -33
  66. package/src/formatters/simple.ts +0 -12
  67. package/src/formatters/smartling.ts +0 -73
  68. package/src/formatters/transifex.ts +0 -33
  69. package/src/parse_script.ts +0 -49
  70. package/src/pseudo_locale.ts +0 -113
  71. package/src/vue_extractor.ts +0 -96
  72. package/tests/unit/__snapshots__/pseudo_locale.test.ts.snap +0 -24
  73. package/tests/unit/__snapshots__/unit.test.ts.snap +0 -42
  74. package/tests/unit/__snapshots__/vue_extractor.test.ts.snap +0 -36
  75. package/tests/unit/fixtures/bind.vue +0 -46
  76. package/tests/unit/fixtures/comp.vue +0 -17
  77. package/tests/unit/pseudo_locale.test.ts +0 -7
  78. package/tests/unit/unit.test.ts +0 -44
  79. package/tests/unit/vue_extractor.test.ts +0 -38
  80. package/tsconfig.json +0 -5
package/src/extract.js ADDED
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extract = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const console_utils_1 = require("./console_utils");
6
+ const fs_extra_1 = require("fs-extra");
7
+ const ts_transformer_1 = require("@formatjs/ts-transformer");
8
+ const formatters_1 = require("./formatters");
9
+ const json_stable_stringify_1 = tslib_1.__importDefault(require("json-stable-stringify"));
10
+ const parse_script_1 = require("./parse_script");
11
+ const printer_1 = require("@formatjs/icu-messageformat-parser/printer");
12
+ const manipulator_1 = require("@formatjs/icu-messageformat-parser/manipulator");
13
+ const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
14
+ function calculateLineColFromOffset(text, start) {
15
+ if (!start) {
16
+ return { line: 1, col: 1 };
17
+ }
18
+ const chunk = text.slice(0, start);
19
+ const lines = chunk.split('\n');
20
+ const lastLine = lines[lines.length - 1];
21
+ return { line: lines.length, col: lastLine.length };
22
+ }
23
+ async function processFile(source, fn, { idInterpolationPattern, ...opts }) {
24
+ let messages = [];
25
+ let meta;
26
+ opts = {
27
+ ...opts,
28
+ additionalComponentNames: [
29
+ '$formatMessage',
30
+ ...(opts.additionalComponentNames || []),
31
+ ],
32
+ onMsgExtracted(_, msgs) {
33
+ if (opts.extractSourceLocation) {
34
+ msgs = msgs.map(msg => ({
35
+ ...msg,
36
+ ...calculateLineColFromOffset(source, msg.start),
37
+ }));
38
+ }
39
+ messages = messages.concat(msgs);
40
+ },
41
+ onMetaExtracted(_, m) {
42
+ meta = m;
43
+ },
44
+ };
45
+ if (!opts.overrideIdFn && idInterpolationPattern) {
46
+ opts = {
47
+ ...opts,
48
+ overrideIdFn: (id, defaultMessage, description, fileName) => id ||
49
+ (0, ts_transformer_1.interpolateName)({
50
+ resourcePath: fileName,
51
+ }, idInterpolationPattern, {
52
+ content: description
53
+ ? `${defaultMessage}#${typeof description === 'string'
54
+ ? description
55
+ : (0, json_stable_stringify_1.default)(description)}`
56
+ : defaultMessage,
57
+ }),
58
+ };
59
+ }
60
+ (0, console_utils_1.debug)('Processing opts for %s: %s', fn, opts);
61
+ const scriptParseFn = (0, parse_script_1.parseScript)(opts, fn);
62
+ if (fn.endsWith('.vue')) {
63
+ (0, console_utils_1.debug)('Processing %s using vue extractor', fn);
64
+ const { parseFile } = await Promise.resolve().then(() => tslib_1.__importStar(require('./vue_extractor')));
65
+ parseFile(source, fn, scriptParseFn);
66
+ }
67
+ else {
68
+ (0, console_utils_1.debug)('Processing %s using typescript extractor', fn);
69
+ scriptParseFn(source);
70
+ }
71
+ (0, console_utils_1.debug)('Done extracting %s messages: %s', fn, messages);
72
+ if (meta) {
73
+ (0, console_utils_1.debug)('Extracted meta:', meta);
74
+ messages.forEach(m => (m.meta = meta));
75
+ }
76
+ return { messages, meta };
77
+ }
78
+ /**
79
+ * Extract strings from source files
80
+ * @param files list of files
81
+ * @param extractOpts extract options
82
+ * @returns messages serialized as JSON string since key order
83
+ * matters for some `format`
84
+ */
85
+ async function extract(files, extractOpts) {
86
+ const { throws, readFromStdin, flatten, ...opts } = extractOpts;
87
+ let rawResults;
88
+ if (readFromStdin) {
89
+ (0, console_utils_1.debug)(`Reading input from stdin`);
90
+ // Read from stdin
91
+ if (process.stdin.isTTY) {
92
+ (0, console_utils_1.warn)('Reading source file from TTY.');
93
+ }
94
+ const stdinSource = await (0, console_utils_1.getStdinAsString)();
95
+ rawResults = [await processFile(stdinSource, 'dummy', opts)];
96
+ }
97
+ else {
98
+ rawResults = await Promise.all(files.map(async (fn) => {
99
+ (0, console_utils_1.debug)('Extracting file:', fn);
100
+ try {
101
+ const source = await (0, fs_extra_1.readFile)(fn, 'utf8');
102
+ return processFile(source, fn, opts);
103
+ }
104
+ catch (e) {
105
+ if (throws) {
106
+ throw e;
107
+ }
108
+ else {
109
+ (0, console_utils_1.warn)(String(e));
110
+ }
111
+ }
112
+ }));
113
+ }
114
+ const formatter = await (0, formatters_1.resolveBuiltinFormatter)(opts.format);
115
+ const extractionResults = rawResults.filter((r) => !!r);
116
+ const extractedMessages = new Map();
117
+ for (const { messages } of extractionResults) {
118
+ for (const message of messages) {
119
+ const { id, description, defaultMessage } = message;
120
+ if (!id) {
121
+ const error = new Error(`[FormatJS CLI] Missing message id for message:
122
+ ${JSON.stringify(message, undefined, 2)}`);
123
+ if (throws) {
124
+ throw error;
125
+ }
126
+ else {
127
+ (0, console_utils_1.warn)(error.message);
128
+ }
129
+ continue;
130
+ }
131
+ if (extractedMessages.has(id)) {
132
+ const existing = extractedMessages.get(id);
133
+ if ((0, json_stable_stringify_1.default)(description) !== (0, json_stable_stringify_1.default)(existing.description) ||
134
+ defaultMessage !== existing.defaultMessage) {
135
+ const error = new Error(`[FormatJS CLI] Duplicate message id: "${id}", ` +
136
+ 'but the `description` and/or `defaultMessage` are different.');
137
+ if (throws) {
138
+ throw error;
139
+ }
140
+ else {
141
+ (0, console_utils_1.warn)(error.message);
142
+ }
143
+ }
144
+ }
145
+ extractedMessages.set(id, message);
146
+ }
147
+ }
148
+ const results = {};
149
+ const messages = Array.from(extractedMessages.values());
150
+ for (const { id, ...msg } of messages) {
151
+ if (flatten && msg.defaultMessage) {
152
+ msg.defaultMessage = (0, printer_1.printAST)((0, manipulator_1.hoistSelectors)((0, icu_messageformat_parser_1.parse)(msg.defaultMessage)));
153
+ }
154
+ results[id] = msg;
155
+ }
156
+ return (0, json_stable_stringify_1.default)(formatter.format(results), {
157
+ space: 2,
158
+ cmp: formatter.compareMessages || undefined,
159
+ });
160
+ }
161
+ exports.extract = extract;
162
+ /**
163
+ * Extract strings from source files, also writes to a file.
164
+ * @param files list of files
165
+ * @param extractOpts extract options
166
+ * @returns A Promise that resolves if output file was written successfully
167
+ */
168
+ async function extractAndWrite(files, extractOpts) {
169
+ const { outFile, ...opts } = extractOpts;
170
+ const serializedResult = (await extract(files, opts)) + '\n';
171
+ if (outFile) {
172
+ (0, console_utils_1.debug)('Writing output file:', outFile);
173
+ return (0, fs_extra_1.outputFile)(outFile, serializedResult);
174
+ }
175
+ await (0, console_utils_1.writeStdout)(serializedResult);
176
+ }
177
+ exports.default = extractAndWrite;
@@ -0,0 +1,8 @@
1
+ import { CompileFn, FormatFn } from './default';
2
+ export type SmartlingJson = Record<string, {
3
+ message: string;
4
+ description?: string;
5
+ }>;
6
+ export declare const format: FormatFn<SmartlingJson>;
7
+ export declare const compile: CompileFn<SmartlingJson>;
8
+ //# sourceMappingURL=crowdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crowdin.d.ts","sourceRoot":"","sources":["crowdin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAE7C,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN;IACE,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,aAAa,CAY1C,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CAS5C,CAAA"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.format = void 0;
4
+ const format = msgs => {
5
+ const results = {};
6
+ for (const [id, msg] of Object.entries(msgs)) {
7
+ results[id] = {
8
+ message: msg.defaultMessage,
9
+ description: typeof msg.description === 'string'
10
+ ? msg.description
11
+ : JSON.stringify(msg.description),
12
+ };
13
+ }
14
+ return results;
15
+ };
16
+ exports.format = format;
17
+ const compile = msgs => {
18
+ const results = {};
19
+ for (const [id, msg] of Object.entries(msgs)) {
20
+ if (id === 'smartling') {
21
+ continue;
22
+ }
23
+ results[id] = msg.message;
24
+ }
25
+ return results;
26
+ };
27
+ exports.compile = compile;
@@ -0,0 +1,6 @@
1
+ import { MessageDescriptor } from '@formatjs/ts-transformer';
2
+ export type FormatFn<T = Record<string, MessageDescriptor>> = (msgs: Record<string, MessageDescriptor>) => T;
3
+ export type CompileFn<T = Record<string, MessageDescriptor>> = (msgs: T) => Record<string, string>;
4
+ export declare const format: FormatFn;
5
+ export declare const compile: CompileFn;
6
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AAE1D,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAC5D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KACpC,CAAC,CAAA;AAEN,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAC7D,IAAI,EAAE,CAAC,KACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE3B,eAAO,MAAM,MAAM,EAAE,QAAuB,CAAA;AAE5C,eAAO,MAAM,OAAO,EAAE,SAMrB,CAAA"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.format = void 0;
4
+ const format = msgs => msgs;
5
+ exports.format = format;
6
+ const compile = msgs => {
7
+ const results = {};
8
+ for (const k in msgs) {
9
+ results[k] = msgs[k].defaultMessage;
10
+ }
11
+ return results;
12
+ };
13
+ exports.compile = compile;
@@ -0,0 +1,9 @@
1
+ import { FormatFn, CompileFn } from './default';
2
+ import { Comparator } from 'json-stable-stringify';
3
+ export interface Formatter {
4
+ format: FormatFn;
5
+ compile: CompileFn;
6
+ compareMessages?: Comparator;
7
+ }
8
+ export declare function resolveBuiltinFormatter(format?: string | Formatter): Promise<any>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,WAAW,CAAA;AAM7C,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAIhD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,EAAE,SAAS,CAAA;IAClB,eAAe,CAAC,EAAE,UAAU,CAAA;CAC7B;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,GAAG,CAAC,CA0Bd"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.resolveBuiltinFormatter = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const defaultFormatter = tslib_1.__importStar(require("./default"));
7
+ const transifex = tslib_1.__importStar(require("./transifex"));
8
+ const smartling = tslib_1.__importStar(require("./smartling"));
9
+ const simple = tslib_1.__importStar(require("./simple"));
10
+ const lokalise = tslib_1.__importStar(require("./lokalise"));
11
+ const crowdin = tslib_1.__importStar(require("./crowdin"));
12
+ const path_1 = require("path");
13
+ const url_1 = require("url");
14
+ async function resolveBuiltinFormatter(format) {
15
+ if (!format) {
16
+ return defaultFormatter;
17
+ }
18
+ if (typeof format !== 'string') {
19
+ return format;
20
+ }
21
+ switch (format) {
22
+ case 'transifex':
23
+ return transifex;
24
+ case 'smartling':
25
+ return smartling;
26
+ case 'simple':
27
+ return simple;
28
+ case 'lokalise':
29
+ return lokalise;
30
+ case 'crowdin':
31
+ return crowdin;
32
+ }
33
+ try {
34
+ // eslint-disable-next-line import/dynamic-import-chunkname
35
+ return _a = (0, url_1.pathToFileURL)((0, path_1.resolve)(process.cwd(), format)).href, Promise.resolve().then(() => tslib_1.__importStar(require(_a)));
36
+ }
37
+ catch (e) {
38
+ console.error(`Cannot resolve formatter ${format}`);
39
+ throw e;
40
+ }
41
+ }
42
+ exports.resolveBuiltinFormatter = resolveBuiltinFormatter;
@@ -0,0 +1,10 @@
1
+ import { CompileFn, FormatFn } from './default';
2
+ export type StructuredJson = Record<string, {
3
+ translation: string;
4
+ notes?: string;
5
+ context?: string;
6
+ limit?: string;
7
+ }>;
8
+ export declare const format: FormatFn<StructuredJson>;
9
+ export declare const compile: CompileFn<StructuredJson>;
10
+ //# sourceMappingURL=lokalise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lokalise.d.ts","sourceRoot":"","sources":["lokalise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAE7C,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN;IACE,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CACF,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,cAAc,CAY3C,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,cAAc,CAM7C,CAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.format = void 0;
4
+ const format = msgs => {
5
+ const results = {};
6
+ for (const [id, msg] of Object.entries(msgs)) {
7
+ results[id] = {
8
+ translation: msg.defaultMessage,
9
+ notes: typeof msg.description === 'string'
10
+ ? msg.description
11
+ : JSON.stringify(msg.description),
12
+ };
13
+ }
14
+ return results;
15
+ };
16
+ exports.format = format;
17
+ const compile = msgs => {
18
+ const results = {};
19
+ for (const [id, msg] of Object.entries(msgs)) {
20
+ results[id] = msg.translation;
21
+ }
22
+ return results;
23
+ };
24
+ exports.compile = compile;
@@ -0,0 +1,5 @@
1
+ import { CompileFn, FormatFn } from './default';
2
+ export type PhraseJson = Record<string, string>;
3
+ export declare const format: FormatFn<PhraseJson>;
4
+ export declare const compile: CompileFn<PhraseJson>;
5
+ //# sourceMappingURL=simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.d.ts","sourceRoot":"","sources":["simple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE/C,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,UAAU,CAKvC,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,UAAU,CAAgB,CAAA"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.format = void 0;
4
+ const format = msgs => {
5
+ return Object.keys(msgs).reduce((all, k) => {
6
+ all[k] = msgs[k].defaultMessage;
7
+ return all;
8
+ }, {});
9
+ };
10
+ exports.format = format;
11
+ const compile = msgs => msgs;
12
+ exports.compile = compile;
@@ -0,0 +1,24 @@
1
+ import { Comparator } from 'json-stable-stringify';
2
+ import { CompileFn, FormatFn } from './default';
3
+ export interface SmartlingDirectives {
4
+ translate_paths: [
5
+ {
6
+ path: string;
7
+ key: string;
8
+ instruction: string;
9
+ }
10
+ ];
11
+ variants_enabled: boolean;
12
+ string_format: string;
13
+ [k: string]: any;
14
+ }
15
+ export type SmartlingJson = {
16
+ smartling: SmartlingDirectives;
17
+ } & Record<string, {
18
+ message: string;
19
+ description?: string;
20
+ }>;
21
+ export declare const format: FormatFn<SmartlingJson>;
22
+ export declare const compareMessages: Comparator;
23
+ export declare const compile: CompileFn<SmartlingJson>;
24
+ //# sourceMappingURL=smartling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartling.d.ts","sourceRoot":"","sources":["smartling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAE7C,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE;QACf;YACE,IAAI,EAAE,MAAM,CAAA;YACZ,GAAG,EAAE,MAAM,CAAA;YACX,WAAW,EAAE,MAAM,CAAA;SACpB;KACF,CAAA;IACD,gBAAgB,EAAE,OAAO,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,mBAAmB,CAAA;CAC/B,GAAG,MAAM,CACR,MAAM,EACN;IACE,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,aAAa,CAwB1C,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,UAS7B,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CAS5C,CAAA"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.compareMessages = exports.format = void 0;
4
+ const format = msgs => {
5
+ const results = {
6
+ smartling: {
7
+ translate_paths: [
8
+ {
9
+ path: '*/message',
10
+ key: '{*}/message',
11
+ instruction: '*/description',
12
+ },
13
+ ],
14
+ variants_enabled: true,
15
+ string_format: 'icu',
16
+ },
17
+ };
18
+ for (const [id, msg] of Object.entries(msgs)) {
19
+ results[id] = {
20
+ message: msg.defaultMessage,
21
+ description: typeof msg.description === 'string'
22
+ ? msg.description
23
+ : JSON.stringify(msg.description),
24
+ };
25
+ }
26
+ return results;
27
+ };
28
+ exports.format = format;
29
+ const compareMessages = (el1, el2) => {
30
+ // `smartling` has to be the 1st key
31
+ if (el1.key === 'smartling') {
32
+ return -1;
33
+ }
34
+ if (el2.key === 'smartling') {
35
+ return 1;
36
+ }
37
+ return el1.key < el2.key ? -1 : el1.key === el2.key ? 0 : 1;
38
+ };
39
+ exports.compareMessages = compareMessages;
40
+ const compile = msgs => {
41
+ const results = {};
42
+ for (const [id, msg] of Object.entries(msgs)) {
43
+ if (id === 'smartling') {
44
+ continue;
45
+ }
46
+ results[id] = msg.message;
47
+ }
48
+ return results;
49
+ };
50
+ exports.compile = compile;
@@ -0,0 +1,10 @@
1
+ import { CompileFn, FormatFn } from './default';
2
+ export type StructuredJson = Record<string, {
3
+ string: string;
4
+ developer_comment?: string;
5
+ context?: string;
6
+ character_limit?: string;
7
+ }>;
8
+ export declare const format: FormatFn<StructuredJson>;
9
+ export declare const compile: CompileFn<StructuredJson>;
10
+ //# sourceMappingURL=transifex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transifex.d.ts","sourceRoot":"","sources":["transifex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAE7C,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN;IACE,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CACF,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,cAAc,CAY3C,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,cAAc,CAM7C,CAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = exports.format = void 0;
4
+ const format = msgs => {
5
+ const results = {};
6
+ for (const [id, msg] of Object.entries(msgs)) {
7
+ results[id] = {
8
+ string: msg.defaultMessage,
9
+ developer_comment: typeof msg.description === 'string'
10
+ ? msg.description
11
+ : JSON.stringify(msg.description),
12
+ };
13
+ }
14
+ return results;
15
+ };
16
+ exports.format = format;
17
+ const compile = msgs => {
18
+ const results = {};
19
+ for (const [id, msg] of Object.entries(msgs)) {
20
+ results[id] = msg.string;
21
+ }
22
+ return results;
23
+ };
24
+ exports.compile = compile;
@@ -0,0 +1,8 @@
1
+ import { Opts } from '@formatjs/ts-transformer';
2
+ /**
3
+ * Invoid TypeScript module transpilation with our TS transformer
4
+ * @param opts Formatjs TS Transformer opt
5
+ * @param fn filename
6
+ */
7
+ export declare function parseScript(opts: Opts, fn?: string): (source: string) => void;
8
+ //# sourceMappingURL=parse_script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_script.d.ts","sourceRoot":"","sources":["parse_script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAkB,MAAM,0BAA0B,CAAA;AAG9D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,YACjC,MAAM,UAuCvB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseScript = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ts_transformer_1 = require("@formatjs/ts-transformer");
6
+ const typescript_1 = tslib_1.__importDefault(require("typescript"));
7
+ const console_utils_1 = require("./console_utils");
8
+ /**
9
+ * Invoid TypeScript module transpilation with our TS transformer
10
+ * @param opts Formatjs TS Transformer opt
11
+ * @param fn filename
12
+ */
13
+ function parseScript(opts, fn) {
14
+ return (source) => {
15
+ let output;
16
+ try {
17
+ (0, console_utils_1.debug)('Using TS compiler to process file', fn);
18
+ output = typescript_1.default.transpileModule(source, {
19
+ compilerOptions: {
20
+ allowJs: true,
21
+ target: typescript_1.default.ScriptTarget.ESNext,
22
+ noEmit: true,
23
+ experimentalDecorators: true,
24
+ },
25
+ reportDiagnostics: true,
26
+ fileName: fn,
27
+ transformers: {
28
+ before: [(0, ts_transformer_1.transformWithTs)(typescript_1.default, opts)],
29
+ },
30
+ });
31
+ }
32
+ catch (e) {
33
+ if (e instanceof Error) {
34
+ e.message = `Error processing file ${fn}
35
+ ${e.message || ''}`;
36
+ }
37
+ throw e;
38
+ }
39
+ if (output.diagnostics) {
40
+ const errs = output.diagnostics.filter(d => d.category === typescript_1.default.DiagnosticCategory.Error);
41
+ if (errs.length) {
42
+ throw new Error(typescript_1.default.formatDiagnosticsWithColorAndContext(errs, {
43
+ getCanonicalFileName: fileName => fileName,
44
+ getCurrentDirectory: () => process.cwd(),
45
+ getNewLine: () => typescript_1.default.sys.newLine,
46
+ }));
47
+ }
48
+ }
49
+ };
50
+ }
51
+ exports.parseScript = parseScript;
@@ -0,0 +1,7 @@
1
+ import { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
2
+ export declare function generateXXLS(msg: string | MessageFormatElement[]): MessageFormatElement[];
3
+ export declare function generateXXAC(msg: string | MessageFormatElement[]): MessageFormatElement[];
4
+ export declare function generateXXHA(msg: string | MessageFormatElement[]): MessageFormatElement[];
5
+ export declare function generateENXA(msg: string | MessageFormatElement[]): MessageFormatElement[];
6
+ export declare function generateENXB(msg: string | MessageFormatElement[]): MessageFormatElement[];
7
+ //# sourceMappingURL=pseudo_locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pseudo_locale.d.ts","sourceRoot":"","sources":["pseudo_locale.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAMrB,MAAM,oCAAoC,CAAA;AAE3C,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CAQxB;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CAcxB;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CAQxB;AAKD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CAuBxB;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CA4BxB"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateENXB = exports.generateENXA = exports.generateXXHA = exports.generateXXAC = exports.generateXXLS = void 0;
4
+ const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
5
+ function generateXXLS(msg) {
6
+ const ast = typeof msg === 'string' ? (0, icu_messageformat_parser_1.parse)(msg) : msg;
7
+ const lastChunk = ast[ast.length - 1];
8
+ if (lastChunk && (0, icu_messageformat_parser_1.isLiteralElement)(lastChunk)) {
9
+ lastChunk.value += 'SSSSSSSSSSSSSSSSSSSSSSSSS';
10
+ return ast;
11
+ }
12
+ return [...ast, { type: icu_messageformat_parser_1.TYPE.literal, value: 'SSSSSSSSSSSSSSSSSSSSSSSSS' }];
13
+ }
14
+ exports.generateXXLS = generateXXLS;
15
+ function generateXXAC(msg) {
16
+ const ast = typeof msg === 'string' ? (0, icu_messageformat_parser_1.parse)(msg) : msg;
17
+ ast.forEach(el => {
18
+ if ((0, icu_messageformat_parser_1.isLiteralElement)(el)) {
19
+ el.value = el.value.toUpperCase();
20
+ }
21
+ else if ((0, icu_messageformat_parser_1.isPluralElement)(el) || (0, icu_messageformat_parser_1.isSelectElement)(el)) {
22
+ for (const opt of Object.values(el.options)) {
23
+ generateXXAC(opt.value);
24
+ }
25
+ }
26
+ else if ((0, icu_messageformat_parser_1.isTagElement)(el)) {
27
+ generateXXAC(el.children);
28
+ }
29
+ });
30
+ return ast;
31
+ }
32
+ exports.generateXXAC = generateXXAC;
33
+ function generateXXHA(msg) {
34
+ const ast = typeof msg === 'string' ? (0, icu_messageformat_parser_1.parse)(msg) : msg;
35
+ const firstChunk = ast.shift();
36
+ if (firstChunk && (0, icu_messageformat_parser_1.isLiteralElement)(firstChunk)) {
37
+ firstChunk.value = '[javascript]' + firstChunk.value;
38
+ return [firstChunk, ...ast];
39
+ }
40
+ return [{ type: icu_messageformat_parser_1.TYPE.literal, value: '[javascript]' }, ...ast];
41
+ }
42
+ exports.generateXXHA = generateXXHA;
43
+ const ASCII = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
44
+ const ACCENTED_ASCII = 'âḃćḋèḟĝḫíĵǩĺṁńŏṗɋŕśṭůṿẘẋẏẓḀḂḈḊḔḞḠḢḬĴḴĻḾŊÕṔɊŔṠṮŨṼẄẌŸƵ';
45
+ function generateENXA(msg) {
46
+ const ast = typeof msg === 'string' ? (0, icu_messageformat_parser_1.parse)(msg) : msg;
47
+ ast.forEach(el => {
48
+ if ((0, icu_messageformat_parser_1.isLiteralElement)(el)) {
49
+ el.value = el.value
50
+ .split('')
51
+ .map(c => {
52
+ const i = ASCII.indexOf(c);
53
+ if (i < 0) {
54
+ return c;
55
+ }
56
+ return ACCENTED_ASCII[i];
57
+ })
58
+ .join('');
59
+ }
60
+ else if ((0, icu_messageformat_parser_1.isPluralElement)(el) || (0, icu_messageformat_parser_1.isSelectElement)(el)) {
61
+ for (const opt of Object.values(el.options)) {
62
+ generateENXA(opt.value);
63
+ }
64
+ }
65
+ else if ((0, icu_messageformat_parser_1.isTagElement)(el)) {
66
+ generateENXA(el.children);
67
+ }
68
+ });
69
+ return ast;
70
+ }
71
+ exports.generateENXA = generateENXA;
72
+ function generateENXB(msg) {
73
+ const ast = typeof msg === 'string' ? (0, icu_messageformat_parser_1.parse)(msg) : msg;
74
+ ast.forEach(el => {
75
+ if ((0, icu_messageformat_parser_1.isLiteralElement)(el)) {
76
+ const pseudoString = el.value
77
+ .split('')
78
+ .map((c, index) => {
79
+ const i = ASCII.indexOf(c);
80
+ const canPad = (index + 1) % 3 === 0;
81
+ if (i < 0) {
82
+ return c;
83
+ }
84
+ return canPad ? ACCENTED_ASCII[i].repeat(3) : ACCENTED_ASCII[i];
85
+ })
86
+ .join('');
87
+ el.value = `[!! ${pseudoString} !!]`;
88
+ }
89
+ else if ((0, icu_messageformat_parser_1.isPluralElement)(el) || (0, icu_messageformat_parser_1.isSelectElement)(el)) {
90
+ for (const opt of Object.values(el.options)) {
91
+ generateENXB(opt.value);
92
+ }
93
+ }
94
+ else if ((0, icu_messageformat_parser_1.isTagElement)(el)) {
95
+ generateENXB(el.children);
96
+ }
97
+ });
98
+ return ast;
99
+ }
100
+ exports.generateENXB = generateENXB;