@vxrn/compiler 1.27.1 → 2.0.0-beta.45.1

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.
Files changed (89) hide show
  1. package/dist/cjs/cache.cjs +106 -117
  2. package/dist/cjs/configure.cjs +26 -28
  3. package/dist/cjs/constants.cjs +56 -60
  4. package/dist/cjs/index.cjs +420 -443
  5. package/dist/cjs/reactNativeCodegen.cjs +105 -114
  6. package/dist/cjs/reactNativeViewConfig.cjs +362 -381
  7. package/dist/cjs/refresh-runtime.cjs +390 -397
  8. package/dist/cjs/transformBabel.cjs +273 -263
  9. package/dist/cjs/transformHermesAsync.cjs +36 -47
  10. package/dist/cjs/transformHermesLoops.cjs +279 -281
  11. package/dist/cjs/transformSWC.cjs +183 -200
  12. package/dist/cjs/transformWorklets.cjs +107 -95
  13. package/dist/cjs/types.cjs +9 -11
  14. package/dist/cjs/worklets/autoworklet.cjs +277 -222
  15. package/dist/cjs/worklets/globals.cjs +124 -60
  16. package/dist/cjs/worklets/hash.cjs +23 -27
  17. package/dist/cjs/worklets/scope.cjs +338 -359
  18. package/dist/cjs/worklets/serialize.cjs +73 -75
  19. package/dist/cjs/worklets/transform.cjs +217 -222
  20. package/dist/cjs/worklets/types.cjs +9 -11
  21. package/dist/esm/cache.mjs +90 -97
  22. package/dist/esm/cache.mjs.map +1 -1
  23. package/dist/esm/configure.mjs +11 -10
  24. package/dist/esm/configure.mjs.map +1 -1
  25. package/dist/esm/constants.mjs +41 -41
  26. package/dist/esm/constants.mjs.map +1 -1
  27. package/dist/esm/index.js +417 -425
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/index.mjs +417 -425
  30. package/dist/esm/index.mjs.map +1 -1
  31. package/dist/esm/reactNativeCodegen.mjs +90 -88
  32. package/dist/esm/reactNativeCodegen.mjs.map +1 -1
  33. package/dist/esm/reactNativeViewConfig.mjs +347 -362
  34. package/dist/esm/reactNativeViewConfig.mjs.map +1 -1
  35. package/dist/esm/refresh-runtime.mjs +372 -376
  36. package/dist/esm/refresh-runtime.mjs.map +1 -1
  37. package/dist/esm/transformBabel.mjs +255 -237
  38. package/dist/esm/transformBabel.mjs.map +1 -1
  39. package/dist/esm/transformHermesAsync.mjs +20 -21
  40. package/dist/esm/transformHermesAsync.mjs.map +1 -1
  41. package/dist/esm/transformHermesLoops.mjs +264 -255
  42. package/dist/esm/transformHermesLoops.mjs.map +1 -1
  43. package/dist/esm/transformSWC.mjs +163 -171
  44. package/dist/esm/transformSWC.mjs.map +1 -1
  45. package/dist/esm/transformWorklets.mjs +89 -69
  46. package/dist/esm/transformWorklets.mjs.map +1 -1
  47. package/dist/esm/types.mjs +0 -2
  48. package/dist/esm/worklets/autoworklet.mjs +258 -200
  49. package/dist/esm/worklets/autoworklet.mjs.map +1 -1
  50. package/dist/esm/worklets/globals.mjs +109 -42
  51. package/dist/esm/worklets/globals.mjs.map +1 -1
  52. package/dist/esm/worklets/hash.mjs +10 -9
  53. package/dist/esm/worklets/hash.mjs.map +1 -1
  54. package/dist/esm/worklets/scope.mjs +325 -341
  55. package/dist/esm/worklets/scope.mjs.map +1 -1
  56. package/dist/esm/worklets/serialize.mjs +60 -58
  57. package/dist/esm/worklets/serialize.mjs.map +1 -1
  58. package/dist/esm/worklets/transform.mjs +201 -197
  59. package/dist/esm/worklets/transform.mjs.map +1 -1
  60. package/dist/esm/worklets/types.mjs +0 -2
  61. package/package.json +7 -6
  62. package/src/transformBabel.test.ts +77 -17
  63. package/src/transformBabel.ts +28 -12
  64. package/types/transformBabel.d.ts +12 -0
  65. package/types/transformBabel.d.ts.map +1 -1
  66. package/types/transformSWC.d.ts +1 -4
  67. package/types/transformSWC.d.ts.map +1 -1
  68. package/dist/cjs/transformBabel.test.cjs +0 -652
  69. package/dist/cjs/transformHermesLoops.test.cjs +0 -257
  70. package/dist/cjs/transformSWC.test.cjs +0 -117
  71. package/dist/cjs/transformWorklets.test.cjs +0 -604
  72. package/dist/esm/transformBabel.test.mjs +0 -629
  73. package/dist/esm/transformBabel.test.mjs.map +0 -1
  74. package/dist/esm/transformHermesLoops.test.mjs +0 -234
  75. package/dist/esm/transformHermesLoops.test.mjs.map +0 -1
  76. package/dist/esm/transformSWC.test.mjs +0 -118
  77. package/dist/esm/transformSWC.test.mjs.map +0 -1
  78. package/dist/esm/transformWorklets.test.mjs +0 -581
  79. package/dist/esm/transformWorklets.test.mjs.map +0 -1
  80. package/dist/esm/types.mjs.map +0 -1
  81. package/dist/esm/worklets/types.mjs.map +0 -1
  82. package/types/transformBabel.test.d.ts +0 -2
  83. package/types/transformBabel.test.d.ts.map +0 -1
  84. package/types/transformHermesLoops.test.d.ts +0 -2
  85. package/types/transformHermesLoops.test.d.ts.map +0 -1
  86. package/types/transformSWC.test.d.ts +0 -2
  87. package/types/transformSWC.test.d.ts.map +0 -1
  88. package/types/transformWorklets.test.d.ts +0 -2
  89. package/types/transformWorklets.test.d.ts.map +0 -1
@@ -1,629 +0,0 @@
1
- import fs from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import { configureVXRNCompilerPlugin } from "./configure.mjs";
6
- import { findUserBabelConfig, getBabelOptions, transformBabel, transformOxcReactCompiler } from "./transformBabel.mjs";
7
- afterEach(() => {
8
- configureVXRNCompilerPlugin({
9
- enableReanimated: false
10
- });
11
- });
12
- describe("getBabelOptions Worklets resolution", () => {
13
- it("uses the app-installed Worklets Babel plugin", () => {
14
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-worklets-")));
15
- const packageRoot = path.join(projectRoot, "node_modules", "react-native-worklets");
16
- const pluginPath = path.join(packageRoot, "plugin.js");
17
- fs.mkdirSync(packageRoot, {
18
- recursive: true
19
- });
20
- fs.writeFileSync(path.join(packageRoot, "package.json"), JSON.stringify({
21
- name: "react-native-worklets",
22
- version: "99.0.0"
23
- }));
24
- fs.writeFileSync(pluginPath, "module.exports = () => ({ visitor: {} })");
25
- try {
26
- configureVXRNCompilerPlugin({
27
- enableReanimated: true
28
- });
29
- const options = getBabelOptions({
30
- id: path.join(projectRoot, "input.ts"),
31
- code: `export const worklet = () => {
32
- 'worklet'
33
- }`,
34
- development: true,
35
- environment: "ios",
36
- reactForRNVersion: "19",
37
- projectRoot
38
- });
39
- expect(options?.plugins).toContain(pluginPath);
40
- } finally {
41
- fs.rmSync(projectRoot, {
42
- recursive: true,
43
- force: true
44
- });
45
- }
46
- });
47
- });
48
- describe("transformBabel Flow parsing", () => {
49
- it("parses and strips React Native Flow as-casts", async () => {
50
- const result = await transformBabel("/project/VirtualViewNativeComponent.js", `
51
- // @flow strict-local
52
- import type { HostComponent } from './HostComponent'
53
- import codegenNativeComponent from './codegenNativeComponent'
54
-
55
- type Props = $ReadOnly<{ enabled?: boolean }>
56
-
57
- export default codegenNativeComponent<Props>('VirtualView') as HostComponent<Props>
58
- `, {
59
- plugins: []
60
- });
61
- expect(result?.code).toContain("codegenNativeComponent('VirtualView')");
62
- expect(result?.code).not.toContain("HostComponent");
63
- });
64
- it("rejects a required transform error instead of returning untransformed source", async () => {
65
- const negativeControl = () => ({
66
- visitor: {
67
- Program() {
68
- throw new Error("NATIVE_TRANSFORM_NEGATIVE_CONTROL");
69
- }
70
- }
71
- });
72
- await expect(transformBabel("/project/TransformProbe.ts", "export const marker = 1", {
73
- plugins: [negativeControl]
74
- })).rejects.toThrow("NATIVE_TRANSFORM_NEGATIVE_CONTROL");
75
- });
76
- });
77
- describe("transformOxcReactCompiler", () => {
78
- const componentCode = `
79
- import { useState } from 'react'
80
-
81
- export function Counter() {
82
- const [count, setCount] = useState(0)
83
- return <button onClick={() => setCount(count + 1)}>{count}</button>
84
- }
85
- `;
86
- it("compiles and memoizes React components with Rust React Compiler", async () => {
87
- const result = await transformOxcReactCompiler("/project/Counter.tsx", componentCode, "19", false);
88
- expect(result.code).toContain("_c(");
89
- expect(result.code).toContain("react/compiler-runtime");
90
- expect(result.map).toBeUndefined();
91
- });
92
- it("generates source maps when requested", async () => {
93
- const result = await transformOxcReactCompiler("/project/Counter.tsx", componentCode, "19", true);
94
- expect(result.code).toContain("_c(");
95
- expect(result.map).toBeDefined();
96
- expect(result.map?.mappings).toBeDefined();
97
- });
98
- it("supports target 18", async () => {
99
- const result = await transformOxcReactCompiler("/project/Counter.tsx", componentCode, "18", false);
100
- expect(result.code).toContain("_c(");
101
- });
102
- it("supports mutating useSharedValue in useEffect via Reanimated environment defaults", async () => {
103
- const reanimatedCode = `
104
- import { useEffect } from 'react'
105
- import { useSharedValue } from 'react-native-reanimated'
106
-
107
- export function ReanimatedComponent() {
108
- const val = useSharedValue(0)
109
- useEffect(() => {
110
- val.value = 1
111
- }, [val])
112
- return <div>{val.value}</div>
113
- }
114
- `;
115
- const result = await transformOxcReactCompiler("/project/ReanimatedComponent.tsx", reanimatedCode, {
116
- target: "19"
117
- }, false);
118
- expect(result.code).toContain("_c(");
119
- });
120
- });
121
- describe("compiler plugin multi-stage source map composition", () => {
122
- it("composes earlier compiler maps when Babel also runs", async () => {
123
- const {
124
- createVXRNCompilerPlugin
125
- } = await import("./index.mjs");
126
- const {
127
- TraceMap,
128
- originalPositionFor
129
- } = await import("@jridgewell/trace-mapping");
130
- const origSourceMap = process.env.VXRN_ENABLE_SOURCE_MAP;
131
- const origBabelGen = process.env.VXRN_USE_BABEL_FOR_GENERATORS;
132
- process.env.VXRN_ENABLE_SOURCE_MAP = "1";
133
- process.env.VXRN_USE_BABEL_FOR_GENERATORS = "1";
134
- configureVXRNCompilerPlugin({
135
- enableCompiler: true
136
- });
137
- const tempFile = path.join(os.tmpdir(), `Counter-${Date.now()}.tsx`);
138
- fs.writeFileSync(tempFile, `import { useState } from 'react'
139
-
140
- export function Counter() {
141
- const [count, setCount] = useState(0)
142
- return <button onClick={() => setCount(count + 1)}>{count}</button>
143
- }
144
-
145
- export async function* generatorProbe() {
146
- throw new Error("MARKER")
147
- }
148
- `);
149
- try {
150
- const plugins = await createVXRNCompilerPlugin();
151
- const plugin = plugins.find(p => p.name === "one:compiler");
152
- await plugin.configResolved({
153
- root: os.tmpdir(),
154
- build: {}
155
- });
156
- const hook = plugin.transform.handler || plugin.transform;
157
- const code = fs.readFileSync(tempFile, "utf8");
158
- const context = {
159
- environment: {
160
- name: "client"
161
- }
162
- };
163
- const result = await hook.call(context, code, tempFile);
164
- expect(result).toBeDefined();
165
- expect(result.map).toBeDefined();
166
- const tracer = new TraceMap(result.map);
167
- const lines = result.code.split("\n");
168
- const markerLineIndex = lines.findIndex(l => l.includes("MARKER"));
169
- expect(markerLineIndex).toBeGreaterThan(0);
170
- const markerCol = lines[markerLineIndex].indexOf("throw");
171
- const pos = originalPositionFor(tracer, {
172
- line: markerLineIndex + 1,
173
- column: markerCol
174
- });
175
- expect(pos.source).toBe(tempFile);
176
- expect(pos.line).toBe(9);
177
- } finally {
178
- if (origSourceMap !== void 0) {
179
- process.env.VXRN_ENABLE_SOURCE_MAP = origSourceMap;
180
- } else {
181
- delete process.env.VXRN_ENABLE_SOURCE_MAP;
182
- }
183
- if (origBabelGen !== void 0) {
184
- process.env.VXRN_USE_BABEL_FOR_GENERATORS = origBabelGen;
185
- } else {
186
- delete process.env.VXRN_USE_BABEL_FOR_GENERATORS;
187
- }
188
- configureVXRNCompilerPlugin({
189
- enableCompiler: false
190
- });
191
- fs.rmSync(tempFile, {
192
- force: true
193
- });
194
- }
195
- });
196
- });
197
- describe("shared compiler worklets backend selection", () => {
198
- it("retains Babel for worklets by default when enableNativeWorklets is false", async () => {
199
- const {
200
- vi
201
- } = await import("vitest");
202
- const {
203
- createVXRNCompilerPlugin
204
- } = await import("./index.mjs");
205
- const workletsModule = await import("./transformWorklets.mjs");
206
- const workletSpy = vi.spyOn(workletsModule, "transformWorklets");
207
- configureVXRNCompilerPlugin({
208
- enableReanimated: true,
209
- enableNativeWorklets: false
210
- });
211
- const tempFile = path.join(process.cwd(), `test-default-worklet-${Date.now()}.tsx`);
212
- const inputCode = `export function fn() { 'worklet'; return 1 }`;
213
- fs.writeFileSync(tempFile, inputCode);
214
- try {
215
- const plugins = await createVXRNCompilerPlugin();
216
- const plugin = plugins.find(p => p.name === "one:compiler");
217
- await plugin.configResolved({
218
- root: process.cwd(),
219
- build: {}
220
- });
221
- const hook = plugin.transform.handler || plugin.transform;
222
- const context = {
223
- environment: {
224
- name: "ios"
225
- }
226
- };
227
- const result = await hook.call(context, inputCode, tempFile);
228
- expect(result).toBeDefined();
229
- expect(workletSpy).not.toHaveBeenCalled();
230
- } finally {
231
- workletSpy.mockRestore();
232
- configureVXRNCompilerPlugin({
233
- enableReanimated: false,
234
- enableNativeWorklets: false
235
- });
236
- fs.rmSync(tempFile, {
237
- force: true
238
- });
239
- }
240
- });
241
- it("uses native SWC for worklets when enableNativeWorklets is true", async () => {
242
- const compiler = await import("./index.mjs");
243
- const {
244
- vi
245
- } = await import("vitest");
246
- const workletsModule = await import("./transformWorklets.mjs");
247
- const workletSpy = vi.spyOn(workletsModule, "transformWorklets");
248
- configureVXRNCompilerPlugin({
249
- enableReanimated: true,
250
- enableNativeWorklets: true
251
- });
252
- const tempFile = path.join(process.cwd(), `test-native-worklet-${Date.now()}.tsx`);
253
- const inputCode = `export function fn() { 'worklet'; return 1 }`;
254
- fs.writeFileSync(tempFile, inputCode);
255
- try {
256
- const plugins = await compiler.createVXRNCompilerPlugin();
257
- const plugin = plugins.find(p => p.name === "one:compiler");
258
- await plugin.configResolved({
259
- root: process.cwd(),
260
- build: {}
261
- });
262
- const hook = plugin.transform.handler || plugin.transform;
263
- const context = {
264
- environment: {
265
- name: "ios"
266
- }
267
- };
268
- const result = await hook.call(context, inputCode, tempFile);
269
- expect(result).toBeDefined();
270
- expect(workletSpy).toHaveBeenCalled();
271
- } finally {
272
- workletSpy.mockRestore();
273
- configureVXRNCompilerPlugin({
274
- enableReanimated: false,
275
- enableNativeWorklets: false
276
- });
277
- fs.rmSync(tempFile, {
278
- force: true
279
- });
280
- }
281
- });
282
- it("invalidates cache when toggling worklets backend on the same unchanged file", async () => {
283
- const compiler = await import("./index.mjs");
284
- const {
285
- vi
286
- } = await import("vitest");
287
- const workletsModule = await import("./transformWorklets.mjs");
288
- const workletSpy = vi.spyOn(workletsModule, "transformWorklets");
289
- const tempFile = path.join(process.cwd(), `test-cache-toggle-${Date.now()}.tsx`);
290
- const inputCode = `export function fn() { 'worklet'; return 1 }`;
291
- fs.writeFileSync(tempFile, inputCode);
292
- try {
293
- configureVXRNCompilerPlugin({
294
- enableReanimated: true,
295
- enableNativeWorklets: false
296
- });
297
- const plugins1 = await compiler.createVXRNCompilerPlugin();
298
- const plugin1 = plugins1.find(p => p.name === "one:compiler");
299
- await plugin1.configResolved({
300
- root: process.cwd(),
301
- build: {}
302
- });
303
- const hook1 = plugin1.transform.handler || plugin1.transform;
304
- const context = {
305
- environment: {
306
- name: "ios"
307
- }
308
- };
309
- const res1 = await hook1.call(context, inputCode, tempFile);
310
- expect(res1).toBeDefined();
311
- expect(workletSpy).toHaveBeenCalledTimes(0);
312
- configureVXRNCompilerPlugin({
313
- enableReanimated: true,
314
- enableNativeWorklets: true
315
- });
316
- const plugins2 = await compiler.createVXRNCompilerPlugin();
317
- const plugin2 = plugins2.find(p => p.name === "one:compiler");
318
- await plugin2.configResolved({
319
- root: process.cwd(),
320
- build: {}
321
- });
322
- const hook2 = plugin2.transform.handler || plugin2.transform;
323
- const res2 = await hook2.call(context, inputCode, tempFile);
324
- expect(res2).toBeDefined();
325
- expect(workletSpy).toHaveBeenCalledTimes(1);
326
- const res3 = await hook2.call(context, inputCode, tempFile);
327
- expect(res3).toBeDefined();
328
- expect(workletSpy).toHaveBeenCalledTimes(1);
329
- configureVXRNCompilerPlugin({
330
- enableReanimated: true,
331
- enableNativeWorklets: false
332
- });
333
- const plugins3 = await compiler.createVXRNCompilerPlugin();
334
- const plugin3 = plugins3.find(p => p.name === "one:compiler");
335
- await plugin3.configResolved({
336
- root: process.cwd(),
337
- build: {}
338
- });
339
- const hook3 = plugin3.transform.handler || plugin3.transform;
340
- const res4 = await hook3.call(context, inputCode, tempFile);
341
- expect(res4).toBeDefined();
342
- expect(workletSpy).toHaveBeenCalledTimes(1);
343
- } finally {
344
- workletSpy.mockRestore();
345
- configureVXRNCompilerPlugin({
346
- enableReanimated: false,
347
- enableNativeWorklets: false
348
- });
349
- fs.rmSync(tempFile, {
350
- force: true
351
- });
352
- }
353
- });
354
- });
355
- describe("findUserBabelConfig and user Babel config respect", () => {
356
- it("finds user babel config and ignores generated configs", () => {
357
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-conf-")));
358
- try {
359
- expect(findUserBabelConfig(projectRoot)).toBeNull();
360
- const generatedFile = path.join(projectRoot, "babel.config.js");
361
- fs.writeFileSync(generatedFile, "// @one-generated\nmodule.exports = {}");
362
- expect(findUserBabelConfig(projectRoot)).toBeNull();
363
- fs.writeFileSync(generatedFile, "module.exports = { plugins: [] }");
364
- expect(findUserBabelConfig(projectRoot)).toBe(generatedFile);
365
- } finally {
366
- fs.rmSync(projectRoot, {
367
- recursive: true,
368
- force: true
369
- });
370
- }
371
- });
372
- it("includes user configFile and babelrc in getBabelOptions for project files", () => {
373
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-conf-")));
374
- const userConfig = path.join(projectRoot, "babel.config.json");
375
- fs.writeFileSync(userConfig, '{"plugins": []}');
376
- try {
377
- const projectFileOptions = getBabelOptions({
378
- id: path.join(projectRoot, "src", "index.tsx"),
379
- code: `export const hello = () => 123`,
380
- projectRoot,
381
- development: true,
382
- environment: "client",
383
- reactForRNVersion: "19"
384
- });
385
- expect(projectFileOptions?.configFile).toBe(userConfig);
386
- expect(projectFileOptions?.babelrc).toBe(true);
387
- const nodeModulesOptions = getBabelOptions({
388
- id: path.join(projectRoot, "node_modules", "foo", "index.js"),
389
- code: `export const foo = 1`,
390
- projectRoot,
391
- development: true,
392
- environment: "client",
393
- reactForRNVersion: "19"
394
- });
395
- expect(nodeModulesOptions).toBeNull();
396
- } finally {
397
- fs.rmSync(projectRoot, {
398
- recursive: true,
399
- force: true
400
- });
401
- }
402
- });
403
- it("runs user babel config transforms via transformBabel", async () => {
404
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-conf-")));
405
- const userConfig = path.join(projectRoot, "babel.config.json");
406
- fs.writeFileSync(userConfig, JSON.stringify({
407
- comments: false
408
- }));
409
- try {
410
- const code = "/* remove me */ export const x = 1";
411
- const res = await transformBabel(path.join(projectRoot, "src", "index.ts"), code, {
412
- configFile: userConfig,
413
- babelrc: true
414
- });
415
- expect(res.code).not.toContain("remove me");
416
- expect(res.code).toContain("export const x = 1");
417
- } finally {
418
- fs.rmSync(projectRoot, {
419
- recursive: true,
420
- force: true
421
- });
422
- }
423
- });
424
- });
425
- describe("explicit swc/oxc per-file choice with a user babel config", () => {
426
- it("returns null for swc/oxc string and object forms", () => {
427
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-conf-")));
428
- const userConfig = path.join(projectRoot, "babel.config.js");
429
- fs.writeFileSync(userConfig, "module.exports = { plugins: [] }");
430
- try {
431
- const base = {
432
- id: path.join(projectRoot, "src", "index.tsx"),
433
- code: `export const x = 1`,
434
- projectRoot,
435
- development: true,
436
- environment: "client",
437
- reactForRNVersion: "19"
438
- };
439
- expect(getBabelOptions({
440
- ...base,
441
- userSetting: "swc"
442
- })).toBeNull();
443
- expect(getBabelOptions({
444
- ...base,
445
- userSetting: "oxc"
446
- })).toBeNull();
447
- expect(getBabelOptions({
448
- ...base,
449
- userSetting: {
450
- transform: "swc"
451
- }
452
- })).toBeNull();
453
- expect(getBabelOptions({
454
- ...base,
455
- userSetting: {
456
- transform: "oxc"
457
- }
458
- })).toBeNull();
459
- expect(getBabelOptions({
460
- ...base,
461
- userSetting: "babel"
462
- })?.configFile).toBe(userConfig);
463
- expect(getBabelOptions({
464
- ...base,
465
- userSetting: {
466
- transform: "babel"
467
- }
468
- })?.configFile).toBe(userConfig);
469
- expect(getBabelOptions(base)?.configFile).toBe(userConfig);
470
- } finally {
471
- fs.rmSync(projectRoot, {
472
- recursive: true,
473
- force: true
474
- });
475
- }
476
- });
477
- it("skips the transform end-to-end for object-form swc", async () => {
478
- const {
479
- createVXRNCompilerPlugin
480
- } = await import("./index.mjs");
481
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-conf-")));
482
- const srcDir = path.join(projectRoot, "src");
483
- fs.mkdirSync(srcDir, {
484
- recursive: true
485
- });
486
- const file = path.join(srcDir, "index.ts");
487
- const code = `export const x = 1`;
488
- fs.writeFileSync(file, code);
489
- fs.writeFileSync(path.join(projectRoot, "babel.config.js"), "module.exports = { plugins: [] }");
490
- configureVXRNCompilerPlugin({
491
- enableCompiler: false,
492
- enableReanimated: false
493
- });
494
- try {
495
- const plugins = await createVXRNCompilerPlugin({
496
- transform: () => ({
497
- transform: "swc"
498
- })
499
- });
500
- const plugin = plugins.find(p => p.name === "one:compiler");
501
- await plugin.configResolved({
502
- root: projectRoot,
503
- build: {}
504
- });
505
- const hook = plugin.transform.handler || plugin.transform;
506
- const result = await hook.call({
507
- environment: {
508
- name: "client"
509
- }
510
- }, code, file);
511
- expect(result == null).toBe(true);
512
- } finally {
513
- configureVXRNCompilerPlugin({
514
- enableCompiler: false,
515
- enableReanimated: false
516
- });
517
- fs.rmSync(projectRoot, {
518
- recursive: true,
519
- force: true
520
- });
521
- }
522
- });
523
- });
524
- describe("user babel config end-to-end through the compiler plugin", () => {
525
- it("runs the user config when default plugins are empty", async () => {
526
- const {
527
- createVXRNCompilerPlugin
528
- } = await import("./index.mjs");
529
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-e2e-")));
530
- const srcDir = path.join(projectRoot, "src");
531
- fs.mkdirSync(srcDir, {
532
- recursive: true
533
- });
534
- const file = path.join(srcDir, "index.ts");
535
- const marker = "babel-e2e-probe";
536
- const code = `/* ${marker} */ export const x = 1`;
537
- fs.writeFileSync(file, code);
538
- fs.writeFileSync(path.join(projectRoot, "babel.config.json"), JSON.stringify({
539
- comments: false
540
- }));
541
- configureVXRNCompilerPlugin({
542
- enableCompiler: false,
543
- enableReanimated: false
544
- });
545
- try {
546
- const plugins = await createVXRNCompilerPlugin();
547
- const plugin = plugins.find(p => p.name === "one:compiler");
548
- await plugin.configResolved({
549
- root: projectRoot,
550
- build: {}
551
- });
552
- const hook = plugin.transform.handler || plugin.transform;
553
- const result = await hook.call({
554
- environment: {
555
- name: "client"
556
- }
557
- }, code, file);
558
- expect(result).toBeDefined();
559
- expect(result.code).toContain("export const x = 1");
560
- expect(result.code).not.toContain(marker);
561
- } finally {
562
- configureVXRNCompilerPlugin({
563
- enableCompiler: false,
564
- enableReanimated: false
565
- });
566
- fs.rmSync(projectRoot, {
567
- recursive: true,
568
- force: true
569
- });
570
- }
571
- });
572
- it("invalidates the cache when the user babel config is added or edited", async () => {
573
- const {
574
- createVXRNCompilerPlugin
575
- } = await import("./index.mjs");
576
- const projectRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "vxrn-babel-cache-")));
577
- const srcDir = path.join(projectRoot, "src");
578
- fs.mkdirSync(srcDir, {
579
- recursive: true
580
- });
581
- const file = path.join(srcDir, "index.ts");
582
- const marker = "babel-cache-probe";
583
- const code = `/* ${marker} */ export const x = 1`;
584
- fs.writeFileSync(file, code);
585
- const userConfig = path.join(projectRoot, "babel.config.json");
586
- configureVXRNCompilerPlugin({
587
- enableCompiler: false,
588
- enableReanimated: false
589
- });
590
- try {
591
- const plugins = await createVXRNCompilerPlugin({
592
- transform: () => "babel"
593
- });
594
- const plugin = plugins.find(p => p.name === "one:compiler");
595
- await plugin.configResolved({
596
- root: projectRoot,
597
- build: {}
598
- });
599
- const hook = plugin.transform.handler || plugin.transform;
600
- const context = {
601
- environment: {
602
- name: "client"
603
- }
604
- };
605
- const res1 = await hook.call(context, code, file);
606
- expect(res1.code).toContain(marker);
607
- fs.writeFileSync(userConfig, JSON.stringify({
608
- comments: false
609
- }));
610
- const res2 = await hook.call(context, code, file);
611
- expect(res2.code).not.toContain(marker);
612
- fs.writeFileSync(userConfig, JSON.stringify({
613
- comments: true
614
- }));
615
- const res3 = await hook.call(context, code, file);
616
- expect(res3.code).toContain(marker);
617
- } finally {
618
- configureVXRNCompilerPlugin({
619
- enableCompiler: false,
620
- enableReanimated: false
621
- });
622
- fs.rmSync(projectRoot, {
623
- recursive: true,
624
- force: true
625
- });
626
- }
627
- });
628
- });
629
- //# sourceMappingURL=transformBabel.test.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["fs","os","path","afterEach","describe","expect","it","configureVXRNCompilerPlugin","findUserBabelConfig","getBabelOptions","transformBabel","transformOxcReactCompiler","enableReanimated","projectRoot","realpathSync","mkdtempSync","join","tmpdir","packageRoot","pluginPath","mkdirSync","recursive","writeFileSync","JSON","stringify","name","version","options","id","code","development","environment","reactForRNVersion","plugins","toContain","rmSync","force","result","not","negativeControl","visitor","Program","Error","rejects","toThrow","componentCode","map","toBeUndefined","toBeDefined","mappings","reanimatedCode","target","createVXRNCompilerPlugin","TraceMap","originalPositionFor","origSourceMap","process","env","VXRN_ENABLE_SOURCE_MAP","origBabelGen","VXRN_USE_BABEL_FOR_GENERATORS","enableCompiler","tempFile","Date","now","plugin","find","p","configResolved","root","build","hook","transform","handler","readFileSync","context","call","tracer","lines","split","markerLineIndex","findIndex","l","includes","toBeGreaterThan","markerCol","indexOf","pos","line","column","source","toBe","vi","workletsModule","workletSpy","spyOn","enableNativeWorklets","cwd","inputCode","toHaveBeenCalled","mockRestore","compiler","plugins1","plugin1","hook1","res1","toHaveBeenCalledTimes","plugins2","plugin2","hook2","res2","res3","plugins3","plugin3","hook3","res4","toBeNull","generatedFile","userConfig","projectFileOptions","configFile","babelrc","nodeModulesOptions","comments","res","base","userSetting","srcDir","file","marker"],"sources":["../../src/transformBabel.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}