Skip to content
This repository was archived by the owner on May 4, 2020. It is now read-only.

Commit 45fc546

Browse files
author
Long Ho
committed
fix(@formatjs/cli): export raw extraction method that returns all messages
1 parent 1419526 commit 45fc546

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

packages/babel-plugin-react-intl/src/options.schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"messagesDir": {"type": "string"},
77
"overrideIdFn": {
88
"instanceof": "Function",
9-
"tsType": "(id: string, defaultMessage: string, descriptor: string, filePath: string) => string"
9+
"tsType": "(id: string, defaultMessage: string, description: string, filePath: string) => string"
1010
},
1111
"removeDefaultMessage": {"type": "boolean"},
1212
"extractFromFormatMessageCall": {"type": "boolean"},

packages/cli/src/extract.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ export type ExtractCLIOptions = Omit<OptionsSchema, 'overrideIdFn'> & {
1313
ignore?: GlobOptions['ignore'];
1414
};
1515

16+
export type ExtractOptions = OptionsSchema & {
17+
idInterpolationPattern?: string;
18+
ignore?: GlobOptions['ignore'];
19+
};
20+
1621
function getBabelConfig(
1722
reactIntlOptions: ExtractCLIOptions,
1823
extraBabelOptions: Partial<babel.TransformOptions> = {}
@@ -80,20 +85,15 @@ function getReactIntlMessages(
8085
}
8186
}
8287

83-
export default async function extract(
88+
export async function extract(
8489
files: readonly string[],
85-
{outFile, idInterpolationPattern, ...extractOpts}: ExtractCLIOptions
90+
{idInterpolationPattern, ...babelOpts}: ExtractOptions
8691
) {
87-
let babelOpts: OptionsSchema = extractOpts;
88-
if (outFile) {
89-
babelOpts.messagesDir = undefined;
90-
}
91-
const printMessagesToStdout = babelOpts.messagesDir == null && !outFile;
9292
let extractedMessages: Record<string, ExtractedMessageDescriptor> = {};
9393

9494
if (files.length > 0) {
9595
for (const file of files) {
96-
if (idInterpolationPattern) {
96+
if (!babelOpts.overrideIdFn && idInterpolationPattern) {
9797
babelOpts = {
9898
...babelOpts,
9999
overrideIdFn: (id, defaultMessage, description) =>
@@ -109,16 +109,14 @@ export default async function extract(
109109
}
110110
const babelResult = extractSingleFile(file, babelOpts);
111111
const singleFileExtractedMessages = getReactIntlMessages(babelResult);
112-
// Aggregate result when we have to output to a single file
113-
if (outFile || printMessagesToStdout) {
114-
Object.assign(extractedMessages, singleFileExtractedMessages);
115-
}
112+
113+
Object.assign(extractedMessages, singleFileExtractedMessages);
116114
}
117115
} else {
118116
if (files.length === 0 && process.stdin.isTTY) {
119117
warn('Reading source file from TTY.');
120118
}
121-
if (idInterpolationPattern) {
119+
if (!babelOpts.overrideIdFn && idInterpolationPattern) {
122120
babelOpts = {
123121
...babelOpts,
124122
overrideIdFn: (id, defaultMessage, description) =>
@@ -137,10 +135,22 @@ export default async function extract(
137135
stdinSource,
138136
getBabelConfig(babelOpts)
139137
);
140-
if (printMessagesToStdout) {
141-
extractedMessages = getReactIntlMessages(babelResult);
142-
}
138+
139+
extractedMessages = getReactIntlMessages(babelResult);
140+
}
141+
return Object.values(extractedMessages);
142+
}
143+
144+
export default async function extractAndWrite(
145+
files: readonly string[],
146+
opts: ExtractCLIOptions
147+
) {
148+
const {outFile, ...extractOpts} = opts;
149+
if (outFile) {
150+
extractOpts.messagesDir = undefined;
143151
}
152+
const extractedMessages = extract(files, extractOpts);
153+
const printMessagesToStdout = extractOpts.messagesDir == null && !outFile;
144154
if (outFile) {
145155
outputJSONSync(outFile, Object.values(extractedMessages), {
146156
spaces: 2,

packages/cli/src/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
export {default as extract, ExtractCLIOptions} from './extract';
1+
export {
2+
default as extractAndWrite,
3+
extract,
4+
ExtractCLIOptions,
5+
} from './extract';

0 commit comments

Comments
 (0)