Skip to content

Commit 720bb13

Browse files
authored
[compiler] Export PluginOptions as a type that can be used in input positions (#34550)
1 parent 1eca9a2 commit 720bb13

File tree

12 files changed

+37
-27
lines changed

12 files changed

+37
-27
lines changed

compiler/apps/playground/lib/defaultStore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import type { PluginOptions } from 'babel-plugin-react-compiler/dist';
1818
1919
({
2020
//compilationMode: "all"
21-
} satisfies Partial<PluginOptions>);`;
21+
} satisfies PluginOptions);`;
2222

2323
export const defaultStore: Store = {
2424
source: index,

compiler/packages/babel-plugin-react-compiler/src/Babel/RunReactCompilerBabelPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export function runBabelPluginReactCompiler(
1717
text: string,
1818
file: string,
1919
language: 'flow' | 'typescript',
20-
options: Partial<PluginOptions> | null,
20+
options: PluginOptions | null,
2121
includeAst: boolean = false,
2222
): BabelCore.BabelFileResult {
2323
const ast = BabelParser.parse(text, {

compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Imports.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
import {getOrInsertWith} from '../Utils/utils';
1919
import {ExternalFunction, isHookName} from '../HIR/Environment';
2020
import {Err, Ok, Result} from '../Utils/Result';
21-
import {LoggerEvent, PluginOptions} from './Options';
21+
import {LoggerEvent, ParsedPluginOptions} from './Options';
2222
import {BabelFn, getReactCompilerRuntimeModule} from './Program';
2323
import {SuppressionRange} from './Suppression';
2424

@@ -56,7 +56,7 @@ export function validateRestrictedImports(
5656
type ProgramContextOptions = {
5757
program: NodePath<t.Program>;
5858
suppressions: Array<SuppressionRange>;
59-
opts: PluginOptions;
59+
opts: ParsedPluginOptions;
6060
filename: string | null;
6161
code: string | null;
6262
hasModuleScopeOptOut: boolean;
@@ -66,7 +66,7 @@ export class ProgramContext {
6666
* Program and environment context
6767
*/
6868
scope: BabelScope;
69-
opts: PluginOptions;
69+
opts: ParsedPluginOptions;
7070
filename: string | null;
7171
code: string | null;
7272
reactRuntimeModule: string;

compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Options.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ const CustomOptOutDirectiveSchema = z
5151
.default(null);
5252
type CustomOptOutDirective = z.infer<typeof CustomOptOutDirectiveSchema>;
5353

54-
export type PluginOptions = {
55-
environment: EnvironmentConfig;
54+
export type PluginOptions = Partial<{
55+
environment: Partial<EnvironmentConfig>;
5656

5757
logger: Logger | null;
5858

@@ -166,7 +166,11 @@ export type PluginOptions = {
166166
* a userspace approximation of runtime APIs.
167167
*/
168168
target: CompilerReactTarget;
169-
};
169+
}>;
170+
171+
export type ParsedPluginOptions = Required<
172+
Omit<PluginOptions, 'environment'>
173+
> & {environment: EnvironmentConfig};
170174

171175
const CompilerReactTargetSchema = z.union([
172176
z.literal('17'),
@@ -282,7 +286,7 @@ export type Logger = {
282286
debugLogIRs?: (value: CompilerPipelineValue) => void;
283287
};
284288

285-
export const defaultOptions: PluginOptions = {
289+
export const defaultOptions: ParsedPluginOptions = {
286290
compilationMode: 'infer',
287291
panicThreshold: 'none',
288292
environment: parseEnvironmentConfig({}).unwrap(),
@@ -299,9 +303,9 @@ export const defaultOptions: PluginOptions = {
299303
enableReanimatedCheck: true,
300304
customOptOutDirectives: null,
301305
target: '19',
302-
} as const;
306+
};
303307

304-
export function parsePluginOptions(obj: unknown): PluginOptions {
308+
export function parsePluginOptions(obj: unknown): ParsedPluginOptions {
305309
if (obj == null || typeof obj !== 'object') {
306310
return defaultOptions;
307311
}

compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Program.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ import {
2323
ProgramContext,
2424
validateRestrictedImports,
2525
} from './Imports';
26-
import {CompilerReactTarget, PluginOptions} from './Options';
26+
import {
27+
CompilerReactTarget,
28+
ParsedPluginOptions,
29+
PluginOptions,
30+
} from './Options';
2731
import {compileFn} from './Pipeline';
2832
import {
2933
filterSuppressionsThatAffectFunction,
@@ -34,7 +38,7 @@ import {GeneratedSource} from '../HIR';
3438
import {Err, Ok, Result} from '../Utils/Result';
3539

3640
export type CompilerPass = {
37-
opts: PluginOptions;
41+
opts: ParsedPluginOptions;
3842
filename: string | null;
3943
comments: Array<t.CommentBlock | t.CommentLine>;
4044
code: string | null;
@@ -45,7 +49,7 @@ const DYNAMIC_GATING_DIRECTIVE = new RegExp('^use memo if\\(([^\\)]*)\\)$');
4549

4650
export function tryFindDirectiveEnablingMemoization(
4751
directives: Array<t.Directive>,
48-
opts: PluginOptions,
52+
opts: ParsedPluginOptions,
4953
): Result<t.Directive | null, CompilerError> {
5054
const optIn = directives.find(directive =>
5155
OPT_IN_DIRECTIVES.has(directive.value.value),
@@ -81,7 +85,7 @@ export function findDirectiveDisablingMemoization(
8185
}
8286
function findDirectivesDynamicGating(
8387
directives: Array<t.Directive>,
84-
opts: PluginOptions,
88+
opts: ParsedPluginOptions,
8589
): Result<
8690
{
8791
gating: ExternalFunction;

compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Reanimated.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import type * as BabelCore from '@babel/core';
99
import {hasOwnProperty} from '../Utils/utils';
10-
import {PluginOptions} from './Options';
10+
import {ParsedPluginOptions} from './Options';
1111

1212
function hasModule(name: string): boolean {
1313
if (typeof require === 'undefined') {
@@ -52,7 +52,9 @@ export function pipelineUsesReanimatedPlugin(
5252
return hasModule('react-native-reanimated');
5353
}
5454

55-
export function injectReanimatedFlag(options: PluginOptions): PluginOptions {
55+
export function injectReanimatedFlag(
56+
options: ParsedPluginOptions,
57+
): ParsedPluginOptions {
5658
return {
5759
...options,
5860
environment: {

compiler/packages/babel-plugin-react-compiler/src/Utils/TestUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ function parseConfigPragmaEnvironmentForTest(
175175
});
176176
}
177177

178-
const testComplexPluginOptionDefaults: Partial<PluginOptions> = {
178+
const testComplexPluginOptionDefaults: PluginOptions = {
179179
gating: {
180180
source: 'ReactForgetFeatureFlag',
181181
importSpecifierName: 'isForgetEnabled_Fixtures',

compiler/packages/eslint-plugin-react-compiler/src/shared/RunReactCompiler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import * as HermesParser from 'hermes-parser';
2424
import {isDeepStrictEqual} from 'util';
2525
import type {ParseResult} from '@babel/parser';
2626

27-
const COMPILER_OPTIONS: Partial<PluginOptions> = {
27+
const COMPILER_OPTIONS: PluginOptions = {
2828
noEmit: true,
2929
panicThreshold: 'none',
3030
// Don't emit errors on Flow suppressions--Flow already gave a signal

compiler/packages/react-compiler-healthcheck/src/checks/reactCompiler.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const logger = {
4646
},
4747
};
4848

49-
const COMPILER_OPTIONS: Partial<PluginOptions> = {
49+
const COMPILER_OPTIONS: PluginOptions = {
5050
noEmit: true,
5151
compilationMode: 'infer',
5252
panicThreshold: 'critical_errors',
@@ -72,7 +72,7 @@ function runBabelPluginReactCompiler(
7272
text: string,
7373
file: string,
7474
language: 'flow' | 'typescript',
75-
options: Partial<PluginOptions> | null,
75+
options: PluginOptions | null,
7676
): BabelCore.BabelFileResult {
7777
const ast = BabelParser.parse(text, {
7878
sourceFilename: file,

compiler/packages/react-mcp-server/src/compiler/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export type PrintedCompilerPipelineValue =
2727
type CompileOptions = {
2828
text: string;
2929
file: string;
30-
options: Partial<PluginOptions> | null;
30+
options: PluginOptions | null;
3131
};
3232
export async function compile({
3333
text,

0 commit comments

Comments
 (0)