@formatjs/cli-lib 5.1.6 → 5.1.8

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/BUILD +118 -0
  2. package/CHANGELOG.md +1147 -0
  3. package/index.ts +7 -0
  4. package/main.ts +5 -0
  5. package/package.json +4 -4
  6. package/src/cli.ts +240 -0
  7. package/src/compile.ts +141 -0
  8. package/src/compile_folder.ts +15 -0
  9. package/src/console_utils.ts +78 -0
  10. package/src/extract.ts +273 -0
  11. package/src/formatters/crowdin.ts +34 -0
  12. package/src/formatters/default.ts +19 -0
  13. package/src/formatters/index.ts +46 -0
  14. package/src/formatters/lokalise.ts +33 -0
  15. package/src/formatters/simple.ts +12 -0
  16. package/src/formatters/smartling.ts +73 -0
  17. package/src/formatters/transifex.ts +33 -0
  18. package/src/parse_script.ts +49 -0
  19. package/src/pseudo_locale.ts +113 -0
  20. package/src/vue_extractor.ts +96 -0
  21. package/tests/unit/__snapshots__/pseudo_locale.test.ts.snap +24 -0
  22. package/tests/unit/__snapshots__/unit.test.ts.snap +42 -0
  23. package/tests/unit/__snapshots__/vue_extractor.test.ts.snap +36 -0
  24. package/tests/unit/fixtures/bind.vue +46 -0
  25. package/tests/unit/fixtures/comp.vue +17 -0
  26. package/tests/unit/pseudo_locale.test.ts +7 -0
  27. package/tests/unit/unit.test.ts +44 -0
  28. package/tests/unit/vue_extractor.test.ts +38 -0
  29. package/tsconfig.json +5 -0
  30. package/index.d.ts +0 -8
  31. package/index.d.ts.map +0 -1
  32. package/index.js +0 -12
  33. package/main.d.ts +0 -2
  34. package/main.d.ts.map +0 -1
  35. package/main.js +0 -3
  36. package/src/cli.d.ts +0 -3
  37. package/src/cli.d.ts.map +0 -1
  38. package/src/cli.js +0 -165
  39. package/src/compile.d.ts +0 -48
  40. package/src/compile.d.ts.map +0 -1
  41. package/src/compile.js +0 -97
  42. package/src/compile_folder.d.ts +0 -3
  43. package/src/compile_folder.d.ts.map +0 -1
  44. package/src/compile_folder.js +0 -11
  45. package/src/console_utils.d.ts +0 -10
  46. package/src/console_utils.d.ts.map +0 -1
  47. package/src/console_utils.js +0 -76
  48. package/src/extract.d.ts +0 -75
  49. package/src/extract.d.ts.map +0 -1
  50. package/src/extract.js +0 -177
  51. package/src/formatters/crowdin.d.ts +0 -8
  52. package/src/formatters/crowdin.d.ts.map +0 -1
  53. package/src/formatters/crowdin.js +0 -27
  54. package/src/formatters/default.d.ts +0 -6
  55. package/src/formatters/default.d.ts.map +0 -1
  56. package/src/formatters/default.js +0 -13
  57. package/src/formatters/index.d.ts +0 -9
  58. package/src/formatters/index.d.ts.map +0 -1
  59. package/src/formatters/index.js +0 -42
  60. package/src/formatters/lokalise.d.ts +0 -10
  61. package/src/formatters/lokalise.d.ts.map +0 -1
  62. package/src/formatters/lokalise.js +0 -24
  63. package/src/formatters/simple.d.ts +0 -5
  64. package/src/formatters/simple.d.ts.map +0 -1
  65. package/src/formatters/simple.js +0 -12
  66. package/src/formatters/smartling.d.ts +0 -24
  67. package/src/formatters/smartling.d.ts.map +0 -1
  68. package/src/formatters/smartling.js +0 -50
  69. package/src/formatters/transifex.d.ts +0 -10
  70. package/src/formatters/transifex.d.ts.map +0 -1
  71. package/src/formatters/transifex.js +0 -24
  72. package/src/parse_script.d.ts +0 -8
  73. package/src/parse_script.d.ts.map +0 -1
  74. package/src/parse_script.js +0 -51
  75. package/src/pseudo_locale.d.ts +0 -7
  76. package/src/pseudo_locale.d.ts.map +0 -1
  77. package/src/pseudo_locale.js +0 -100
  78. package/src/vue_extractor.d.ts +0 -3
  79. package/src/vue_extractor.d.ts.map +0 -1
  80. package/src/vue_extractor.js +0 -62
package/src/compile.js DELETED
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compile = void 0;
4
- const tslib_1 = require("tslib");
5
- const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
6
- const fs_extra_1 = require("fs-extra");
7
- const json_stable_stringify_1 = tslib_1.__importDefault(require("json-stable-stringify"));
8
- const console_utils_1 = require("./console_utils");
9
- const formatters_1 = require("./formatters");
10
- const pseudo_locale_1 = require("./pseudo_locale");
11
- /**
12
- * Aggregate `inputFiles` into a single JSON blob and compile.
13
- * Also checks for conflicting IDs.
14
- * Then returns the serialized result as a `string` since key order
15
- * makes a difference in some vendor.
16
- * @param inputFiles Input files
17
- * @param opts Options
18
- * @returns serialized result in string format
19
- */
20
- async function compile(inputFiles, opts = {}) {
21
- (0, console_utils_1.debug)('Compiling files:', inputFiles);
22
- const { ast, format, pseudoLocale, skipErrors } = opts;
23
- const formatter = await (0, formatters_1.resolveBuiltinFormatter)(format);
24
- const messages = {};
25
- const messageAsts = {};
26
- const idsWithFileName = {};
27
- const compiledFiles = await Promise.all(inputFiles.map(f => (0, fs_extra_1.readJSON)(f).then(formatter.compile)));
28
- (0, console_utils_1.debug)('Compiled files:', compiledFiles);
29
- for (let i = 0; i < inputFiles.length; i++) {
30
- const inputFile = inputFiles[i];
31
- (0, console_utils_1.debug)('Processing file:', inputFile);
32
- const compiled = compiledFiles[i];
33
- for (const id in compiled) {
34
- if (messages[id] && messages[id] !== compiled[id]) {
35
- throw new Error(`Conflicting ID "${id}" with different translation found in these 2 files:
36
- ID: ${id}
37
- Message from ${idsWithFileName[id]}: ${messages[id]}
38
- Message from ${compiled[id]}: ${inputFile}
39
- `);
40
- }
41
- try {
42
- const msgAst = (0, icu_messageformat_parser_1.parse)(compiled[id]);
43
- messages[id] = compiled[id];
44
- switch (pseudoLocale) {
45
- case 'xx-LS':
46
- messageAsts[id] = (0, pseudo_locale_1.generateXXLS)(msgAst);
47
- break;
48
- case 'xx-AC':
49
- messageAsts[id] = (0, pseudo_locale_1.generateXXAC)(msgAst);
50
- break;
51
- case 'xx-HA':
52
- messageAsts[id] = (0, pseudo_locale_1.generateXXHA)(msgAst);
53
- break;
54
- case 'en-XA':
55
- messageAsts[id] = (0, pseudo_locale_1.generateENXA)(msgAst);
56
- break;
57
- case 'en-XB':
58
- messageAsts[id] = (0, pseudo_locale_1.generateENXB)(msgAst);
59
- break;
60
- default:
61
- messageAsts[id] = msgAst;
62
- break;
63
- }
64
- idsWithFileName[id] = inputFile;
65
- }
66
- catch (e) {
67
- (0, console_utils_1.warn)('Error validating message "%s" with ID "%s" in file "%s"', compiled[id], id, inputFile);
68
- if (!skipErrors) {
69
- throw e;
70
- }
71
- }
72
- }
73
- }
74
- return (0, json_stable_stringify_1.default)(ast ? messageAsts : messages, {
75
- space: 2,
76
- cmp: formatter.compareMessages || undefined,
77
- });
78
- }
79
- exports.compile = compile;
80
- /**
81
- * Aggregate `inputFiles` into a single JSON blob and compile.
82
- * Also checks for conflicting IDs and write output to `outFile`.
83
- * @param inputFiles Input files
84
- * @param compileOpts options
85
- * @returns A `Promise` that resolves if file was written successfully
86
- */
87
- async function compileAndWrite(inputFiles, compileOpts = {}) {
88
- const { outFile, ...opts } = compileOpts;
89
- const serializedResult = await compile(inputFiles, opts);
90
- if (outFile) {
91
- (0, console_utils_1.debug)('Writing output file:', outFile);
92
- return (0, fs_extra_1.outputFile)(outFile, serializedResult);
93
- }
94
- await (0, console_utils_1.writeStdout)(serializedResult);
95
- await (0, console_utils_1.writeStdout)('\n');
96
- }
97
- exports.default = compileAndWrite;
@@ -1,3 +0,0 @@
1
- import { Opts } from './compile';
2
- export default function compileFolder(files: string[], outFolder: string, opts?: Opts): Promise<void[]>;
3
- //# sourceMappingURL=compile_folder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile_folder.d.ts","sourceRoot":"","sources":["compile_folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAU,MAAM,WAAW,CAAA;AAGvC,wBAA8B,aAAa,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,IAAS,mBAQhB"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const compile_1 = require("./compile");
4
- const path_1 = require("path");
5
- const fs_extra_1 = require("fs-extra");
6
- async function compileFolder(files, outFolder, opts = {}) {
7
- const results = await Promise.all(files.map(f => (0, compile_1.compile)([f], opts)));
8
- const outFiles = files.map(f => (0, path_1.join)(outFolder, (0, path_1.basename)(f)));
9
- return Promise.all(outFiles.map((outFile, i) => (0, fs_extra_1.outputFile)(outFile, results[i])));
10
- }
11
- exports.default = compileFolder;
@@ -1,10 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- export declare const writeStderr: (arg1: string | Uint8Array) => Promise<void>;
4
- export declare const writeStdout: (arg1: string | Uint8Array) => Promise<void>;
5
- export declare function clearLine(terminal: typeof process['stderr']): Promise<void>;
6
- export declare function debug(message: string, ...args: any[]): Promise<void>;
7
- export declare function warn(message: string, ...args: any[]): Promise<void>;
8
- export declare function error(message: string, ...args: any[]): Promise<void>;
9
- export declare function getStdinAsString(): Promise<string>;
10
- //# sourceMappingURL=console_utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console_utils.d.ts","sourceRoot":"","sources":["console_utils.ts"],"names":[],"mappings":";;AAMA,eAAO,MAAM,WAAW,8CAAuD,CAAA;AAC/E,eAAO,MAAM,WAAW,8CAAuD,CAAA;AAO/E,wBAAsB,SAAS,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,iBAcjE;AAcD,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,iBAO1D;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,iBAIzD;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,iBAI1D;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAclD"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStdinAsString = exports.error = exports.warn = exports.debug = exports.clearLine = exports.writeStdout = exports.writeStderr = void 0;
4
- const tslib_1 = require("tslib");
5
- const chalk_1 = require("chalk");
6
- const readline_1 = tslib_1.__importDefault(require("readline"));
7
- const util_1 = require("util");
8
- const CLEAR_WHOLE_LINE = 0;
9
- exports.writeStderr = (0, util_1.promisify)(process.stderr.write).bind(process.stderr);
10
- exports.writeStdout = (0, util_1.promisify)(process.stdout.write).bind(process.stdout);
11
- const nativeClearLine = (0, util_1.promisify)(readline_1.default.clearLine).bind(readline_1.default);
12
- const nativeCursorTo = (0, util_1.promisify)(readline_1.default.cursorTo).bind(readline_1.default);
13
- // From:
14
- // https://github.com/yarnpkg/yarn/blob/53d8004229f543f342833310d5af63a4b6e59c8a/src/reporters/console/util.js
15
- async function clearLine(terminal) {
16
- if (!chalk_1.supportsColor) {
17
- if (terminal.isTTY) {
18
- // terminal
19
- if (terminal.columns > 0) {
20
- await (0, exports.writeStderr)(`\r${' '.repeat(terminal.columns - 1)}`);
21
- }
22
- await (0, exports.writeStderr)(`\r`);
23
- }
24
- // ignore piping to file
25
- }
26
- else {
27
- await nativeClearLine(terminal, CLEAR_WHOLE_LINE);
28
- await nativeCursorTo(terminal, 0, undefined);
29
- }
30
- }
31
- exports.clearLine = clearLine;
32
- const LEVEL_COLORS = {
33
- debug: chalk_1.green,
34
- warn: chalk_1.yellow,
35
- error: chalk_1.red,
36
- };
37
- function label(level, message) {
38
- return `[@formatjs/cli] [${LEVEL_COLORS[level](level.toUpperCase())}] ${message}`;
39
- }
40
- async function debug(message, ...args) {
41
- if (process.env.LOG_LEVEL !== 'debug') {
42
- return;
43
- }
44
- await clearLine(process.stderr);
45
- await (0, exports.writeStderr)((0, util_1.format)(label('debug', message), ...args));
46
- await (0, exports.writeStderr)('\n');
47
- }
48
- exports.debug = debug;
49
- async function warn(message, ...args) {
50
- await clearLine(process.stderr);
51
- await (0, exports.writeStderr)((0, util_1.format)(label('warn', message), ...args));
52
- await (0, exports.writeStderr)('\n');
53
- }
54
- exports.warn = warn;
55
- async function error(message, ...args) {
56
- await clearLine(process.stderr);
57
- await (0, exports.writeStderr)((0, util_1.format)(label('error', message), ...args));
58
- await (0, exports.writeStderr)('\n');
59
- }
60
- exports.error = error;
61
- function getStdinAsString() {
62
- let result = '';
63
- return new Promise(resolve => {
64
- process.stdin.setEncoding('utf-8');
65
- process.stdin.on('readable', () => {
66
- let chunk;
67
- while ((chunk = process.stdin.read())) {
68
- result += chunk;
69
- }
70
- });
71
- process.stdin.on('end', () => {
72
- resolve(result);
73
- });
74
- });
75
- }
76
- exports.getStdinAsString = getStdinAsString;
package/src/extract.d.ts DELETED
@@ -1,75 +0,0 @@
1
- import { Opts, MessageDescriptor } from '@formatjs/ts-transformer';
2
- import { Formatter } from './formatters';
3
- export interface ExtractionResult<M = Record<string, string>> {
4
- /**
5
- * List of extracted messages
6
- */
7
- messages: MessageDescriptor[];
8
- /**
9
- * Metadata extracted w/ `pragma`
10
- */
11
- meta?: M;
12
- }
13
- export interface ExtractedMessageDescriptor extends MessageDescriptor {
14
- /**
15
- * Line number
16
- */
17
- line?: number;
18
- /**
19
- * Column number
20
- */
21
- col?: number;
22
- /**
23
- * Metadata extracted from pragma
24
- */
25
- meta?: Record<string, string>;
26
- }
27
- export type ExtractCLIOptions = Omit<ExtractOpts, 'overrideIdFn' | 'onMsgExtracted' | 'onMetaExtracted'> & {
28
- /**
29
- * Output File
30
- */
31
- outFile?: string;
32
- /**
33
- * Ignore file glob pattern
34
- */
35
- ignore?: string[];
36
- };
37
- export type ExtractOpts = Opts & {
38
- /**
39
- * Whether to throw an error if we had any issues with
40
- * 1 of the source files
41
- */
42
- throws?: boolean;
43
- /**
44
- * Message ID interpolation pattern
45
- */
46
- idInterpolationPattern?: string;
47
- /**
48
- * Whether we read from stdin instead of a file
49
- */
50
- readFromStdin?: boolean;
51
- /**
52
- * Path to a formatter file that controls the shape of JSON file from `outFile`.
53
- */
54
- format?: string | Formatter;
55
- /**
56
- * Whether to hoist selectors & flatten sentences
57
- */
58
- flatten?: boolean;
59
- } & Pick<Opts, 'onMsgExtracted' | 'onMetaExtracted'>;
60
- /**
61
- * Extract strings from source files
62
- * @param files list of files
63
- * @param extractOpts extract options
64
- * @returns messages serialized as JSON string since key order
65
- * matters for some `format`
66
- */
67
- export declare function extract(files: readonly string[], extractOpts: ExtractOpts): Promise<string>;
68
- /**
69
- * Extract strings from source files, also writes to a file.
70
- * @param files list of files
71
- * @param extractOpts extract options
72
- * @returns A Promise that resolves if output file was written successfully
73
- */
74
- export default function extractAndWrite(files: readonly string[], extractOpts: ExtractCLIOptions): Promise<void>;
75
- //# sourceMappingURL=extract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["extract.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,IAAI,EACJ,iBAAiB,EAClB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAA0B,SAAS,EAAC,MAAM,cAAc,CAAA;AAM/D,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1D;;OAEG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B;;OAEG;IACH,IAAI,CAAC,EAAE,CAAC,CAAA;CACT;AAED,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACnE;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,WAAW,EACX,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CACtD,GAAG;IACF;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,CAAA;AAqFpD;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,WAAW,mBAmFzB;AAED;;;;;GAKG;AACH,wBAA8B,eAAe,CAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,iBAAiB,iBAS/B"}
package/src/extract.js DELETED
@@ -1,177 +0,0 @@
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;
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,27 +0,0 @@
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;
@@ -1,6 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,13 +0,0 @@
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;
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,42 +0,0 @@
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;
@@ -1,10 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,24 +0,0 @@
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;
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,12 +0,0 @@
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;