Skip to content

Commit 5def0d3

Browse files
fix
1 parent ddaf462 commit 5def0d3

7 files changed

Lines changed: 38 additions & 40 deletions

File tree

packages/babel-plugin-extract-messages/test/extract-messages.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const transformCode = (
4747
[
4848
linguiMacroPlugin,
4949
{
50-
extract: true,
50+
descriptorFields: "all",
5151
} satisfies LinguiPluginOpts,
5252
],
5353
[plugin, pluginOpts],

packages/babel-plugin-lingui-macro/src/index.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,34 @@
1-
import type { PluginObj, Visitor, PluginPass } from "@babel/core"
1+
import type { PluginObj, PluginPass, Visitor } from "@babel/core"
22
import type * as babelTypes from "@babel/types"
3-
import { Program, Identifier } from "@babel/types"
3+
import { Identifier, Program } from "@babel/types"
44
import { MacroJSX } from "./macroJsx"
55
import type { NodePath } from "@babel/traverse"
66
import { MacroJs } from "./macroJs"
77
import { JsMacroName } from "./constants"
88
import {
9-
type LinguiConfigNormalized,
109
getConfig as loadConfig,
1110
LinguiConfig,
11+
type LinguiConfigNormalized,
1212
} from "@lingui/conf"
13+
import { ResolvedDescriptorFields } from "./messageDescriptorUtils"
1314

1415
let config: LinguiConfigNormalized
1516

16-
/**
17-
* Controls which descriptor fields are preserved in the transformed code.
18-
*
19-
* - `"auto"` (default): In production (`NODE_ENV === "production"`), keeps only the `id`.
20-
* Otherwise, behaves like `"all"`.
21-
* - `"all"`: Keeps every field: `id`, `message`, `context`, and `comment`.
22-
* Used by Lingui CLI during extraction.
23-
* - `"id-only"`: Strips everything except the `id`. Most optimized for production.
24-
* - `"message"`: Keeps `id`, `message`, and `context` (but not `comment`).
25-
* Use when you need runtime access to message and context.
26-
*/
27-
export type DescriptorFields = "auto" | "all" | "id-only" | "message"
28-
29-
/**
30-
* The resolved mode after evaluating `"auto"` against the current environment.
31-
*/
32-
export type ResolvedDescriptorFields = "all" | "id-only" | "message"
33-
3417
export type LinguiPluginOpts = {
3518
/**
3619
* Controls which descriptor fields are preserved in the transformed code.
3720
*
38-
* - `"auto"` (default): In production, keeps only the `id`. Otherwise, keeps all fields.
39-
* - `"all"`: Keeps `id`, `message`, `context`, and `comment`. Used by CLI during extraction.
40-
* - `"id-only"`: Strips everything except `id`. Most optimized for production.
21+
* - `"auto"` (default): In production (`NODE_ENV === "production"`), keeps only the `id`.
22+
* Otherwise, behaves like `"all"`.
23+
* - `"all"`: Keeps every field: `id`, `message`, `context`, and `comment`.
24+
* Used by Lingui CLI during extraction.
25+
* - `"id-only"`: Strips everything except the `id`. Most optimized for production.
4126
* - `"message"`: Keeps `id`, `message`, and `context` (but not `comment`).
27+
* Use when you need runtime access to message and context.
4228
*
4329
* @default "auto"
4430
*/
45-
descriptorFields?: DescriptorFields
31+
descriptorFields?: "auto" | "all" | "id-only" | "message"
4632

4733
/**
4834
* Resolved and normalized Lingui Configuration

packages/babel-plugin-lingui-macro/src/macroJs.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import type { NodePath } from "@babel/traverse"
1313

1414
import { Tokens } from "./icu"
1515
import { JsMacroName } from "./constants"
16-
import { createMessageDescriptorFromTokens } from "./messageDescriptorUtils"
16+
import {
17+
createMessageDescriptorFromTokens,
18+
ResolvedDescriptorFields,
19+
} from "./messageDescriptorUtils"
1720
import {
1821
isLinguiIdentifier,
1922
isDefineMessage,
@@ -23,7 +26,6 @@ import {
2326
createMacroJsContext,
2427
MacroJsContext,
2528
} from "./macroJsAst"
26-
import type { ResolvedDescriptorFields } from "./index"
2729

2830
export type MacroJsOpts = {
2931
i18nImportName: string

packages/babel-plugin-lingui-macro/src/macroJsAst.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import {
1111
} from "@babel/types"
1212
import { JsMacroName, MsgDescriptorPropKey } from "./constants"
1313
import { ArgToken, TextToken, Token } from "./icu"
14-
import { createMessageDescriptorFromTokens } from "./messageDescriptorUtils"
14+
import {
15+
createMessageDescriptorFromTokens,
16+
ResolvedDescriptorFields,
17+
} from "./messageDescriptorUtils"
1518
import { makeCounter } from "./utils"
16-
import type { ResolvedDescriptorFields } from "./index"
1719

1820
export type MacroJsContext = {
1921
// Positional expressions counter (e.g. for placeholders `Hello {0}, today is {1}`)

packages/babel-plugin-lingui-macro/src/macroJsx.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@ import { ArgToken, ElementToken, TextToken, Token } from "./icu"
2020
import { makeCounter } from "./utils"
2121
import { JsxMacroName, MsgDescriptorPropKey, JsMacroName } from "./constants"
2222
import cleanJSXElementLiteralChild from "./utils/cleanJSXElementLiteralChild"
23-
import { createMessageDescriptorFromTokens } from "./messageDescriptorUtils"
23+
import {
24+
createMessageDescriptorFromTokens,
25+
ResolvedDescriptorFields,
26+
} from "./messageDescriptorUtils"
2427
import {
2528
createMacroJsContext,
2629
MacroJsContext,
2730
tokenizeExpression,
2831
} from "./macroJsAst"
2932
import { LinguiConfigNormalized } from "@lingui/conf"
3033
import { PluginPass } from "@babel/core"
31-
import type { ResolvedDescriptorFields } from "./index"
3234

3335
const pluralRuleRe = /(_[\d\w]+|zero|one|two|few|many|other)/
3436
const jsx2icuExactChoice = (value: string) =>

packages/babel-plugin-lingui-macro/src/messageDescriptorUtils.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import { ICUMessageFormat, Tokens, ParsedResult } from "./icu"
1+
import { ICUMessageFormat, ParsedResult, Tokens } from "./icu"
2+
import * as types from "@babel/types"
23
import {
3-
SourceLocation,
4-
ObjectProperty,
5-
ObjectExpression,
64
Expression,
5+
ObjectExpression,
6+
ObjectProperty,
7+
SourceLocation,
78
} from "@babel/types"
89
import { EXTRACT_MARK, MsgDescriptorPropKey } from "./constants"
9-
import * as types from "@babel/types"
1010
import { generateMessageId } from "@lingui/message-utils/generateMessageId"
11-
import type { ResolvedDescriptorFields } from "./index"
1211

1312
function buildICUFromTokens(tokens: Tokens) {
1413
const messageFormat = new ICUMessageFormat()
@@ -26,6 +25,13 @@ function isObjectProperty(
2625
return "type" in node
2726
}
2827

28+
/**
29+
* The resolved mode after evaluating `"auto"` against the current environment.
30+
*
31+
* @see LinguiPluginOpts.descriptorFields
32+
*/
33+
export type ResolvedDescriptorFields = "all" | "id-only" | "message"
34+
2935
export function createMessageDescriptorFromTokens(
3036
tokens: Tokens,
3137
oldLoc: SourceLocation,

website/docs/guides/optimizing-bundle-size.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ You want to keep original messages, context, and use runtime compilation, even i
151151

152152
```ts
153153
// Macro config
154-
descriptorFields: "message"
154+
descriptorFields: "message";
155155

156156
// Runtime setup
157157
i18n.setMessagesCompiler(compileMessage);
@@ -167,7 +167,7 @@ You want everything to be stripped in both environments. Useful for catching iss
167167

168168
```ts
169169
// Macro config
170-
descriptorFields: "id-only"
170+
descriptorFields: "id-only";
171171

172172
// Runtime setup
173173
i18n.setMessagesCompiler(null);

0 commit comments

Comments
 (0)