14
import assert from "assert";
15
import type {
16
CompilationMode,
17
+ Logger,
18
+ LoggerEvent,
19
PanicThresholdOptions,
20
PluginOptions,
21
} from "babel-plugin-react-compiler/src/Entrypoint";
34
function makePluginOptions(
35
firstLine: string,
36
parseConfigPragmaFn: typeof ParseConfigPragma
35
-): PluginOptions {
37
+): [PluginOptions, Array<{ filename: string | null; event: LoggerEvent }>] {
38
let gating = null;
39
let enableEmitInstrumentForget = null;
40
let enableEmitFreeze = null;
142
);
143
}
144
145
+ let logs: Array<{ filename: string | null; event: LoggerEvent }> = [];
146
+ let logger: Logger | null = null;
147
+ if (firstLine.includes("@logger")) {
148
+ logger = {
149
+ logEvent(filename: string | null, event: LoggerEvent): void {
150
+ logs.push({ filename, event });
151
+ },
152
+ };
153
+ }
154
+
155
const config = parseConfigPragmaFn(firstLine);
144
- return {
156
+ const options = {
157
environment: {
158
...config,
159
customHooks: new Map([
195
enableChangeDetectionForDebugging,
196
},
197
compilationMode,
186
- logger: null,
198
+ logger,
199
gating,
200
panicThreshold,
201
noEmit: false,
205
ignoreUseNoForget,
206
enableReanimatedCheck: false,
207
};
208
+ return [options, logs];
209
}
210
211
export function parseInput(
307
308
export type TransformResult = {
309
forgetOutput: string;
310
+ logs: string | null;
311
evaluatorCode: {
312
original: string;
313
forget: string;
344
/**
345
* Get Forget compiled code
346
*/
347
+ const [options, logs] = makePluginOptions(firstLine, parseConfigPragmaFn);
348
const forgetResult = transformFromAstSync(inputAst, input, {
349
filename: virtualFilepath,
350
highlightCode: false,
351
retainLines: true,
352
plugins: [
338
- [plugin, makePluginOptions(firstLine, parseConfigPragmaFn)],
353
+ [plugin, options],
354
"babel-plugin-fbt",
355
"babel-plugin-fbt-runtime",
356
],
364
forgetResult?.code != null,
365
"Expected BabelPluginReactForget to codegen successfully."
366
);
352
- const forgetOutput = forgetResult.code;
367
+ const forgetCode = forgetResult.code;
368
let evaluatorCode = null;
369
370
if (
378
forgetResult?.ast != null,
379
"Expected BabelPluginReactForget ast."
380
);
366
- const result = transformFromAstSync(forgetResult.ast, forgetOutput, {
381
+ const result = transformFromAstSync(forgetResult.ast, forgetCode, {
382
presets,
383
filename: virtualFilepath,
384
configFile: false,
430
original: originalEval,
431
};
432
}
433
+ const forgetOutput = await format(forgetCode, language);
434
+ let formattedLogs = null;
435
+ if (logs.length !== 0) {
436
+ formattedLogs = logs
437
+ .map(({ event }) => {
438
+ return JSON.stringify(event);
439
+ })
440
+ .join("\n");
441
+ }
442
return {
443
kind: "ok",
444
value: {
421
- forgetOutput: await format(forgetOutput, language),
445
+ forgetOutput,
446
+ logs: formattedLogs,
447
evaluatorCode,
448
},
449
};