@formatjs/cli-lib 5.1.7 → 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.
- package/BUILD +118 -0
- package/CHANGELOG.md +1147 -0
- package/index.ts +7 -0
- package/main.ts +5 -0
- package/package.json +1 -1
- package/src/cli.ts +240 -0
- package/src/compile.ts +141 -0
- package/src/compile_folder.ts +15 -0
- package/src/console_utils.ts +78 -0
- package/src/extract.ts +273 -0
- package/src/formatters/crowdin.ts +34 -0
- package/src/formatters/default.ts +19 -0
- package/src/formatters/index.ts +46 -0
- package/src/formatters/lokalise.ts +33 -0
- package/src/formatters/simple.ts +12 -0
- package/src/formatters/smartling.ts +73 -0
- package/src/formatters/transifex.ts +33 -0
- package/src/parse_script.ts +49 -0
- package/src/pseudo_locale.ts +113 -0
- package/src/vue_extractor.ts +96 -0
- package/tests/unit/__snapshots__/pseudo_locale.test.ts.snap +24 -0
- package/tests/unit/__snapshots__/unit.test.ts.snap +42 -0
- package/tests/unit/__snapshots__/vue_extractor.test.ts.snap +36 -0
- package/tests/unit/fixtures/bind.vue +46 -0
- package/tests/unit/fixtures/comp.vue +17 -0
- package/tests/unit/pseudo_locale.test.ts +7 -0
- package/tests/unit/unit.test.ts +44 -0
- package/tests/unit/vue_extractor.test.ts +38 -0
- package/tsconfig.json +5 -0
- package/index.d.ts +0 -8
- package/index.d.ts.map +0 -1
- package/index.js +0 -12
- package/main.d.ts +0 -2
- package/main.d.ts.map +0 -1
- package/main.js +0 -3
- package/src/cli.d.ts +0 -3
- package/src/cli.d.ts.map +0 -1
- package/src/cli.js +0 -165
- package/src/compile.d.ts +0 -48
- package/src/compile.d.ts.map +0 -1
- package/src/compile.js +0 -97
- package/src/compile_folder.d.ts +0 -3
- package/src/compile_folder.d.ts.map +0 -1
- package/src/compile_folder.js +0 -11
- package/src/console_utils.d.ts +0 -10
- package/src/console_utils.d.ts.map +0 -1
- package/src/console_utils.js +0 -76
- package/src/extract.d.ts +0 -75
- package/src/extract.d.ts.map +0 -1
- package/src/extract.js +0 -177
- package/src/formatters/crowdin.d.ts +0 -8
- package/src/formatters/crowdin.d.ts.map +0 -1
- package/src/formatters/crowdin.js +0 -27
- package/src/formatters/default.d.ts +0 -6
- package/src/formatters/default.d.ts.map +0 -1
- package/src/formatters/default.js +0 -13
- package/src/formatters/index.d.ts +0 -9
- package/src/formatters/index.d.ts.map +0 -1
- package/src/formatters/index.js +0 -42
- package/src/formatters/lokalise.d.ts +0 -10
- package/src/formatters/lokalise.d.ts.map +0 -1
- package/src/formatters/lokalise.js +0 -24
- package/src/formatters/simple.d.ts +0 -5
- package/src/formatters/simple.d.ts.map +0 -1
- package/src/formatters/simple.js +0 -12
- package/src/formatters/smartling.d.ts +0 -24
- package/src/formatters/smartling.d.ts.map +0 -1
- package/src/formatters/smartling.js +0 -50
- package/src/formatters/transifex.d.ts +0 -10
- package/src/formatters/transifex.d.ts.map +0 -1
- package/src/formatters/transifex.js +0 -24
- package/src/parse_script.d.ts +0 -8
- package/src/parse_script.d.ts.map +0 -1
- package/src/parse_script.js +0 -51
- package/src/pseudo_locale.d.ts +0 -7
- package/src/pseudo_locale.d.ts.map +0 -1
- package/src/pseudo_locale.js +0 -100
- package/src/vue_extractor.d.ts +0 -3
- package/src/vue_extractor.d.ts.map +0 -1
- 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;
|
package/src/compile_folder.d.ts
DELETED
|
@@ -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"}
|
package/src/compile_folder.js
DELETED
|
@@ -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;
|
package/src/console_utils.d.ts
DELETED
|
@@ -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"}
|
package/src/console_utils.js
DELETED
|
@@ -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
|
package/src/extract.d.ts.map
DELETED
|
@@ -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"}
|
package/src/formatters/index.js
DELETED
|
@@ -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 +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"}
|
package/src/formatters/simple.js
DELETED
|
@@ -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;
|