@vxrn/compiler 1.27.0 → 1.27.1-1789509973946

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 (95) hide show
  1. package/dist/cjs/cache.cjs +112 -109
  2. package/dist/cjs/configure.cjs +26 -28
  3. package/dist/cjs/constants.cjs +56 -60
  4. package/dist/cjs/index.cjs +420 -442
  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 -259
  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 +96 -89
  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 -424
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/index.mjs +417 -424
  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 -233
  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/cache.ts +37 -7
  63. package/src/index.ts +7 -3
  64. package/src/transformBabel.test.ts +209 -9
  65. package/src/transformBabel.ts +41 -12
  66. package/src/transformWorklets.test.ts +7 -1
  67. package/types/cache.d.ts +2 -2
  68. package/types/cache.d.ts.map +1 -1
  69. package/types/index.d.ts.map +1 -1
  70. package/types/transformBabel.d.ts +12 -0
  71. package/types/transformBabel.d.ts.map +1 -1
  72. package/types/transformSWC.d.ts +1 -4
  73. package/types/transformSWC.d.ts.map +1 -1
  74. package/dist/cjs/transformBabel.test.cjs +0 -448
  75. package/dist/cjs/transformHermesLoops.test.cjs +0 -257
  76. package/dist/cjs/transformSWC.test.cjs +0 -117
  77. package/dist/cjs/transformWorklets.test.cjs +0 -604
  78. package/dist/esm/transformBabel.test.mjs +0 -425
  79. package/dist/esm/transformBabel.test.mjs.map +0 -1
  80. package/dist/esm/transformHermesLoops.test.mjs +0 -234
  81. package/dist/esm/transformHermesLoops.test.mjs.map +0 -1
  82. package/dist/esm/transformSWC.test.mjs +0 -118
  83. package/dist/esm/transformSWC.test.mjs.map +0 -1
  84. package/dist/esm/transformWorklets.test.mjs +0 -581
  85. package/dist/esm/transformWorklets.test.mjs.map +0 -1
  86. package/dist/esm/types.mjs.map +0 -1
  87. package/dist/esm/worklets/types.mjs.map +0 -1
  88. package/types/transformBabel.test.d.ts +0 -2
  89. package/types/transformBabel.test.d.ts.map +0 -1
  90. package/types/transformHermesLoops.test.d.ts +0 -2
  91. package/types/transformHermesLoops.test.d.ts.map +0 -1
  92. package/types/transformSWC.test.d.ts +0 -2
  93. package/types/transformSWC.test.d.ts.map +0 -1
  94. package/types/transformWorklets.test.d.ts +0 -2
  95. package/types/transformWorklets.test.d.ts.map +0 -1
@@ -5,39 +5,32 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
12
  };
13
13
  var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
21
  };
22
22
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
29
- value: mod,
30
- enumerable: true
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
24
+ value: mod,
25
+ enumerable: true
31
26
  }) : target, mod));
32
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
33
- value: true
34
- }), mod);
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
28
  var index_exports = {};
36
29
  __export(index_exports, {
37
- JS_GLOBALS: () => import_globals.JS_GLOBALS,
38
- clearTransformCache: () => import_cache2.clearTransformCache,
39
- createVXRNCompilerPlugin: () => createVXRNCompilerPlugin,
40
- getClosureVariables: () => import_scope.getClosureVariables
30
+ JS_GLOBALS: () => import_globals.JS_GLOBALS,
31
+ clearTransformCache: () => import_cache2.clearTransformCache,
32
+ createVXRNCompilerPlugin: () => createVXRNCompilerPlugin,
33
+ getClosureVariables: () => import_scope.getClosureVariables
41
34
  });
42
35
  module.exports = __toCommonJS(index_exports);
43
36
  var import_node_fs = require("node:fs");
@@ -64,442 +57,426 @@ var import_globals = require("./worklets/globals.cjs");
64
57
  var import_scope = require("./worklets/scope.cjs");
65
58
  const import_meta = {};
66
59
  const perfStats = {
67
- babel: {
68
- totalCalls: 0,
69
- totalTransforms: 0,
70
- totalTime: 0,
71
- byEnvironment: {}
72
- },
73
- optimizeDeps: {
74
- byEnvironment: {}
75
- }
60
+ babel: {
61
+ totalCalls: 0,
62
+ totalTransforms: 0,
63
+ totalTime: 0,
64
+ byEnvironment: {}
65
+ },
66
+ optimizeDeps: { byEnvironment: {} }
76
67
  };
77
68
  function logPerfSummary() {
78
- if (!process.env.DEBUG_COMPILER_PERF) {
79
- return;
80
- }
81
- console.info("\n\u{1F4CA} [Compiler Performance Summary]");
82
- console.info(`Babel: ${perfStats.babel.totalTransforms} transforms / ${perfStats.babel.totalCalls} calls (${(perfStats.babel.totalTransforms / Math.max(perfStats.babel.totalCalls, 1) * 100).toFixed(1)}% transform rate)`);
83
- console.info(`Babel total time: ${perfStats.babel.totalTime}ms`);
84
- for (const [env, stats] of Object.entries(perfStats.babel.byEnvironment)) {
85
- if (stats.transforms > 0) {
86
- console.info(` ${env}: ${stats.transforms} transforms, ${stats.time}ms (${(stats.time / stats.transforms).toFixed(1)}ms avg)`);
87
- }
88
- }
89
- for (const [env, stats] of Object.entries(perfStats.optimizeDeps.byEnvironment)) {
90
- const elapsed = Date.now() - stats.startTime;
91
- console.info(`optimizeDeps ${env}: checked ${stats.filesChecked} files, transformed ${stats.filesTransformed} (${elapsed}ms)`);
92
- }
69
+ if (!process.env.DEBUG_COMPILER_PERF) {
70
+ return;
71
+ }
72
+ console.info("\n📊 [Compiler Performance Summary]");
73
+ console.info(`Babel: ${perfStats.babel.totalTransforms} transforms / ${perfStats.babel.totalCalls} calls (${(perfStats.babel.totalTransforms / Math.max(perfStats.babel.totalCalls, 1) * 100).toFixed(1)}% transform rate)`);
74
+ console.info(`Babel total time: ${perfStats.babel.totalTime}ms`);
75
+ for (const [env, stats] of Object.entries(perfStats.babel.byEnvironment)) {
76
+ if (stats.transforms > 0) {
77
+ console.info(` ${env}: ${stats.transforms} transforms, ${stats.time}ms (${(stats.time / stats.transforms).toFixed(1)}ms avg)`);
78
+ }
79
+ }
80
+ for (const [env, stats] of Object.entries(perfStats.optimizeDeps.byEnvironment)) {
81
+ const elapsed = Date.now() - stats.startTime;
82
+ console.info(`optimizeDeps ${env}: checked ${stats.filesChecked} files, transformed ${stats.filesTransformed} (${elapsed}ms)`);
83
+ }
93
84
  }
94
85
  const compilerLog = {
95
- compiled: 0,
96
- cached: 0,
97
- time: 0,
98
- // typed loose because the dom lib types setTimeout as number, but node gives
99
- // us a Timeout we need to unref so the debounce never holds the process open
100
- timer: null
86
+ compiled: 0,
87
+ cached: 0,
88
+ time: 0,
89
+ timer: null
101
90
  };
102
91
  function logCompiled(cached, ms) {
103
- if (cached) {
104
- compilerLog.cached++;
105
- } else {
106
- compilerLog.compiled++;
107
- compilerLog.time += ms;
108
- }
109
- if (compilerLog.timer) clearTimeout(compilerLog.timer);
110
- compilerLog.timer = setTimeout(() => {
111
- const total = compilerLog.compiled + compilerLog.cached;
112
- const detail = compilerLog.compiled ? `${compilerLog.compiled} compiled in ${compilerLog.time}ms${compilerLog.cached ? `, ${compilerLog.cached} cached` : ""}` : `all cached`;
113
- console.info(` \u{1FA84} [compiler] ${total} file${total === 1 ? "" : "s"} (${detail})`);
114
- compilerLog.compiled = 0;
115
- compilerLog.cached = 0;
116
- compilerLog.time = 0;
117
- compilerLog.timer = null;
118
- }, 500);
119
- compilerLog.timer.unref?.();
92
+ if (cached) {
93
+ compilerLog.cached++;
94
+ } else {
95
+ compilerLog.compiled++;
96
+ compilerLog.time += ms;
97
+ }
98
+ if (compilerLog.timer) clearTimeout(compilerLog.timer);
99
+ compilerLog.timer = setTimeout(() => {
100
+ const total = compilerLog.compiled + compilerLog.cached;
101
+ const detail = compilerLog.compiled ? `${compilerLog.compiled} compiled in ${compilerLog.time}ms${compilerLog.cached ? `, ${compilerLog.cached} cached` : ""}` : `all cached`;
102
+ console.info(` \u{1FA84} [compiler] ${total} file${total === 1 ? "" : "s"} (${detail})`);
103
+ compilerLog.compiled = 0;
104
+ compilerLog.cached = 0;
105
+ compilerLog.time = 0;
106
+ compilerLog.timer = null;
107
+ }, 500);
108
+ compilerLog.timer.unref?.();
120
109
  }
121
- async function performBabelTransform({
122
- id,
123
- code,
124
- projectRoot,
125
- environment,
126
- production,
127
- reactForRNVersion,
128
- optionsIn
129
- }) {
130
- perfStats.babel.totalCalls++;
131
- if (!perfStats.babel.byEnvironment[environment]) {
132
- perfStats.babel.byEnvironment[environment] = {
133
- calls: 0,
134
- transforms: 0,
135
- time: 0
136
- };
137
- }
138
- perfStats.babel.byEnvironment[environment].calls++;
139
- const transformProps = {
140
- id,
141
- code,
142
- projectRoot,
143
- development: !production,
144
- environment,
145
- reactForRNVersion
146
- };
147
- const userTransform = optionsIn?.transform?.(transformProps);
148
- if (userTransform === false) {
149
- return null;
150
- }
151
- if (userTransform !== "swc" && userTransform !== "oxc") {
152
- const babelOptions = (0, import_transformBabel.getBabelOptions)({
153
- ...transformProps,
154
- userSetting: userTransform
155
- });
156
- if (babelOptions) {
157
- const hasCompilerPlugin = babelOptions.plugins?.some(x => Array.isArray(x) && x[0] === "babel-plugin-react-compiler");
158
- const cached = (0, import_cache.getCachedTransform)(id, code, environment);
159
- if (cached) {
160
- perfStats.babel.byEnvironment[environment].transforms++;
161
- if (hasCompilerPlugin && (cached.code.includes("react/compiler-runtime") || cached.code.includes("react-compiler-runtime"))) {
162
- (0, import_constants.debug)?.(` \u{1FA84} [compiler] ${(0, import_node_path.relative)(process.cwd(), id)} (cached)`);
163
- logCompiled(true, 0);
164
- }
165
- (0, import_constants.debug)?.(`[babel/cached] ${id}`);
166
- return cached;
167
- }
168
- const isWorkletPlugin = entry => {
169
- if (!entry) return false;
170
- const name = typeof entry === "string" ? entry : Array.isArray(entry) ? entry[0] : null;
171
- return typeof name === "string" && (name.includes("react-native-worklets") || name.includes("react-native-reanimated"));
172
- };
173
- const workletEntry = babelOptions.plugins?.find(isWorkletPlugin);
174
- const workletPluginOptions = Array.isArray(workletEntry) ? workletEntry[1] : void 0;
175
- const useWorklets = (0, import_configure.isNativeWorkletsEnabled)() && (Boolean(workletEntry) || (0, import_transformWorklets.shouldTransformWorklets)({
176
- id,
177
- code
178
- }));
179
- let curCode = code;
180
- let workletPreparation = null;
181
- let compilerOut = null;
182
- const compilerPluginIndex = babelOptions.plugins?.findIndex(x => Array.isArray(x) && x[0] === "babel-plugin-react-compiler") ?? -1;
183
- if (compilerPluginIndex !== -1) {
184
- const compilerPluginConfig = babelOptions.plugins[compilerPluginIndex];
185
- const compilerPluginOptions = compilerPluginConfig[1] || {};
186
- const useBabelCompiler = compilerPluginOptions.compiler === "babel" || process.env.ONE_REACT_COMPILER === "babel" || process.env.VXRN_REACT_COMPILER === "babel";
187
- if (!useBabelCompiler) {
188
- if (useWorklets) {
189
- workletPreparation = (0, import_transformWorklets.prepareWorkletsForReactCompiler)(id, curCode, (0, import_transformSWC.shouldSourceMap)());
190
- if (workletPreparation) curCode = workletPreparation.code;
191
- }
192
- compilerOut = await (0, import_transformBabel.transformOxcReactCompiler)(id, curCode, compilerPluginOptions, (0, import_transformSWC.shouldSourceMap)());
193
- if (compilerOut) curCode = compilerOut.code;
194
- babelOptions.plugins.splice(compilerPluginIndex, 1);
195
- }
196
- }
197
- let workletsOut = null;
198
- if (useWorklets) {
199
- workletsOut = await (0, import_transformWorklets.transformWorklets)(id, curCode, (0, import_transformSWC.shouldSourceMap)(), {
200
- projectRoot,
201
- ...workletPluginOptions
202
- });
203
- babelOptions.plugins = babelOptions.plugins?.filter(entry => !isWorkletPlugin(entry));
204
- curCode = workletsOut.code;
205
- }
206
- const startTime = Date.now();
207
- let babelOut = null;
208
- if (babelOptions.plugins?.length === 0 && !babelOptions.configFile && !babelOptions.babelrc) {
209
- let finalMap = void 0;
210
- if ((0, import_transformSWC.shouldSourceMap)()) {
211
- const intermediateMaps = [workletPreparation?.map, compilerOut?.map, workletsOut?.map].filter(Boolean);
212
- if (intermediateMaps.length === 1) {
213
- finalMap = intermediateMaps[0];
214
- } else if (intermediateMaps.length > 1) {
215
- const remapping = (await import("@jridgewell/remapping")).default;
216
- finalMap = remapping(intermediateMaps.slice().reverse(), () => null);
217
- }
218
- }
219
- babelOut = {
220
- code: curCode,
221
- map: finalMap
222
- };
223
- } else {
224
- const babelOptsWithMap = (0, import_transformSWC.shouldSourceMap)() && (workletsOut?.map || compilerOut?.map || workletPreparation?.map) ? {
225
- ...babelOptions,
226
- sourceMaps: true
227
- } : babelOptions;
228
- babelOut = await (0, import_transformBabel.transformBabel)(id, curCode, babelOptsWithMap);
229
- if ((0, import_transformSWC.shouldSourceMap)() && babelOut?.map) {
230
- const priorMaps = [workletPreparation?.map, compilerOut?.map, workletsOut?.map].filter(Boolean);
231
- if (priorMaps.length > 0) {
232
- const remapping = (await import("@jridgewell/remapping")).default;
233
- babelOut.map = remapping([babelOut.map, ...priorMaps.slice().reverse()], () => null);
234
- }
235
- }
236
- }
237
- const babelTime = Date.now() - startTime;
238
- if (babelOut?.code) {
239
- perfStats.babel.totalTransforms++;
240
- perfStats.babel.totalTime += babelTime;
241
- perfStats.babel.byEnvironment[environment].transforms++;
242
- perfStats.babel.byEnvironment[environment].time += babelTime;
243
- if (hasCompilerPlugin && (babelOut.code.includes("react/compiler-runtime") || babelOut.code.includes("react-compiler-runtime"))) {
244
- (0, import_constants.debug)?.(` \u{1FA84} [compiler] ${(0, import_node_path.relative)(process.cwd(), id)} (${babelTime}ms)`);
245
- logCompiled(false, babelTime);
246
- }
247
- (0, import_constants.debug)?.(`[babel] ${id}`);
248
- const outCode = `${babelOut.code}
110
+ async function performBabelTransform({ id, code, projectRoot, environment, production, reactForRNVersion, optionsIn }) {
111
+ perfStats.babel.totalCalls++;
112
+ if (!perfStats.babel.byEnvironment[environment]) {
113
+ perfStats.babel.byEnvironment[environment] = {
114
+ calls: 0,
115
+ transforms: 0,
116
+ time: 0
117
+ };
118
+ }
119
+ perfStats.babel.byEnvironment[environment].calls++;
120
+ const transformProps = {
121
+ id,
122
+ code,
123
+ projectRoot,
124
+ development: !production,
125
+ environment,
126
+ reactForRNVersion
127
+ };
128
+ const userTransform = optionsIn?.transform?.(transformProps);
129
+ if (userTransform === false) {
130
+ return null;
131
+ }
132
+ if (userTransform !== "swc" && userTransform !== "oxc") {
133
+ const babelOptions = (0, import_transformBabel.getBabelOptions)({
134
+ ...transformProps,
135
+ userSetting: userTransform
136
+ });
137
+ if (babelOptions) {
138
+ const hasCompilerPlugin = babelOptions.plugins?.some((x) => Array.isArray(x) && x[0] === "babel-plugin-react-compiler");
139
+ const userBabelConfigPath = typeof babelOptions.configFile === "string" ? babelOptions.configFile : null;
140
+ const cached = (0, import_cache.getCachedTransform)(id, code, environment, userBabelConfigPath);
141
+ if (cached) {
142
+ perfStats.babel.byEnvironment[environment].transforms++;
143
+ if (hasCompilerPlugin && (cached.code.includes("react/compiler-runtime") || cached.code.includes("react-compiler-runtime"))) {
144
+ (0, import_constants.debug)?.(` \u{1FA84} [compiler] ${(0, import_node_path.relative)(process.cwd(), id)} (cached)`);
145
+ logCompiled(true, 0);
146
+ }
147
+ (0, import_constants.debug)?.(`[babel/cached] ${id}`);
148
+ return cached;
149
+ }
150
+ const isWorkletPlugin = (entry) => {
151
+ if (!entry) return false;
152
+ const name = typeof entry === "string" ? entry : Array.isArray(entry) ? entry[0] : null;
153
+ return typeof name === "string" && (name.includes("react-native-worklets") || name.includes("react-native-reanimated"));
154
+ };
155
+ const workletEntry = babelOptions.plugins?.find(isWorkletPlugin);
156
+ const workletPluginOptions = Array.isArray(workletEntry) ? workletEntry[1] : void 0;
157
+ const useWorklets = (0, import_configure.isNativeWorkletsEnabled)() && (Boolean(workletEntry) || (0, import_transformWorklets.shouldTransformWorklets)({
158
+ id,
159
+ code
160
+ }));
161
+ let curCode = code;
162
+ let workletPreparation = null;
163
+ let compilerOut = null;
164
+ const compilerPluginIndex = babelOptions.plugins?.findIndex((x) => Array.isArray(x) && x[0] === "babel-plugin-react-compiler") ?? -1;
165
+ if (compilerPluginIndex !== -1) {
166
+ const compilerPluginConfig = babelOptions.plugins[compilerPluginIndex];
167
+ const compilerPluginOptions = compilerPluginConfig[1] || {};
168
+ const useBabelCompiler = compilerPluginOptions.compiler === "babel" || process.env.ONE_REACT_COMPILER === "babel" || process.env.VXRN_REACT_COMPILER === "babel";
169
+ if (!useBabelCompiler) {
170
+ if (useWorklets) {
171
+ workletPreparation = (0, import_transformWorklets.prepareWorkletsForReactCompiler)(id, curCode, (0, import_transformSWC.shouldSourceMap)());
172
+ if (workletPreparation) curCode = workletPreparation.code;
173
+ }
174
+ compilerOut = await (0, import_transformBabel.transformOxcReactCompiler)(id, curCode, compilerPluginOptions, (0, import_transformSWC.shouldSourceMap)());
175
+ if (compilerOut) curCode = compilerOut.code;
176
+ babelOptions.plugins.splice(compilerPluginIndex, 1);
177
+ }
178
+ }
179
+ let workletsOut = null;
180
+ if (useWorklets) {
181
+ workletsOut = await (0, import_transformWorklets.transformWorklets)(id, curCode, (0, import_transformSWC.shouldSourceMap)(), {
182
+ projectRoot,
183
+ ...workletPluginOptions
184
+ });
185
+ babelOptions.plugins = babelOptions.plugins?.filter((entry) => !isWorkletPlugin(entry));
186
+ curCode = workletsOut.code;
187
+ }
188
+ const startTime = Date.now();
189
+ let babelOut = null;
190
+ if (babelOptions.plugins?.length === 0 && !babelOptions.configFile && !babelOptions.babelrc) {
191
+ let finalMap = void 0;
192
+ if ((0, import_transformSWC.shouldSourceMap)()) {
193
+ const intermediateMaps = [
194
+ workletPreparation?.map,
195
+ compilerOut?.map,
196
+ workletsOut?.map
197
+ ].filter(Boolean);
198
+ if (intermediateMaps.length === 1) {
199
+ finalMap = intermediateMaps[0];
200
+ } else if (intermediateMaps.length > 1) {
201
+ const remapping = (await import("@jridgewell/remapping")).default;
202
+ finalMap = remapping(intermediateMaps.slice().reverse(), () => null);
203
+ }
204
+ }
205
+ babelOut = {
206
+ code: curCode,
207
+ map: finalMap
208
+ };
209
+ } else {
210
+ const babelOptsWithMap = (0, import_transformSWC.shouldSourceMap)() && (workletsOut?.map || compilerOut?.map || workletPreparation?.map) ? {
211
+ ...babelOptions,
212
+ sourceMaps: true
213
+ } : babelOptions;
214
+ babelOut = await (0, import_transformBabel.transformBabel)(id, curCode, babelOptsWithMap);
215
+ if ((0, import_transformSWC.shouldSourceMap)() && babelOut?.map) {
216
+ const priorMaps = [
217
+ workletPreparation?.map,
218
+ compilerOut?.map,
219
+ workletsOut?.map
220
+ ].filter(Boolean);
221
+ if (priorMaps.length > 0) {
222
+ const remapping = (await import("@jridgewell/remapping")).default;
223
+ babelOut.map = remapping([babelOut.map, ...priorMaps.slice().reverse()], () => null);
224
+ }
225
+ }
226
+ }
227
+ const babelTime = Date.now() - startTime;
228
+ if (babelOut?.code) {
229
+ perfStats.babel.totalTransforms++;
230
+ perfStats.babel.totalTime += babelTime;
231
+ perfStats.babel.byEnvironment[environment].transforms++;
232
+ perfStats.babel.byEnvironment[environment].time += babelTime;
233
+ if (hasCompilerPlugin && (babelOut.code.includes("react/compiler-runtime") || babelOut.code.includes("react-compiler-runtime"))) {
234
+ (0, import_constants.debug)?.(` \u{1FA84} [compiler] ${(0, import_node_path.relative)(process.cwd(), id)} (${babelTime}ms)`);
235
+ logCompiled(false, babelTime);
236
+ }
237
+ (0, import_constants.debug)?.(`[babel] ${id}`);
238
+ const outCode = `${babelOut.code}
249
239
  // vxrn-did-babel`;
250
- const result = {
251
- code: outCode,
252
- map: babelOut.map
253
- };
254
- (0, import_cache.setCachedTransform)(id, code, result, environment);
255
- return result;
256
- }
257
- }
258
- }
259
- return null;
240
+ const result = {
241
+ code: outCode,
242
+ map: babelOut.map
243
+ };
244
+ (0, import_cache.setCachedTransform)(id, code, result, environment, userBabelConfigPath);
245
+ return result;
246
+ }
247
+ }
248
+ }
249
+ return null;
260
250
  }
261
251
  async function createVXRNCompilerPlugin(optionsIn) {
262
- const reactVersion = await (async () => {
263
- const path = (0, import_utils.resolvePath)("react/package.json");
264
- const json = JSON.parse(await (0, import_promises.readFile)(path, "utf-8"));
265
- return json.version;
266
- })();
267
- const envNames = {
268
- ios: true,
269
- android: true,
270
- client: true,
271
- ssr: true
272
- };
273
- function getEnvName(name) {
274
- if (name === "worker") return "ssr";
275
- if (!envNames[name]) throw new Error(`Invalid env: ${name}`);
276
- return name;
277
- }
278
- const reactForRNVersion = reactVersion.split(".")[0];
279
- const cssTransformCache = /* @__PURE__ */new Map();
280
- const rolldownPath = (0, import_utils.resolvePath)("rolldown");
281
- const rolldownNodeMods = rolldownPath.slice(0, rolldownPath.indexOf(import_node_path.sep + "node_modules"));
282
- let config;
283
- return [{
284
- name: "one:compiler-resolve-refresh-runtime",
285
- apply: "serve",
286
- enforce: "pre",
287
- // Run before Vite default resolve to avoid syscalls
288
- resolveId: id => id === import_constants.runtimePublicPath || id === `${import_constants.runtimePublicPath}.map` ? id : void 0,
289
- load: id => {
290
- const basePath = (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(import_meta.url));
291
- if (id === import_constants.runtimePublicPath) {
292
- return (0, import_node_fs.readFileSync)((0, import_node_path.join)(basePath, "refresh-runtime.mjs"), "utf-8").replace(/\/\/# sourceMappingURL=.*/, "");
293
- }
294
- if (id === `${import_constants.runtimePublicPath}.map`) {
295
- return JSON.stringify({
296
- version: 3,
297
- sources: [],
298
- mappings: ""
299
- });
300
- }
301
- return void 0;
302
- }
303
- }, {
304
- name: `one:compiler-css-to-js`,
305
- // only .css files can match, so let rust reject everything else
306
- transform: {
307
- filter: {
308
- id: /\.css$/
309
- },
310
- handler(codeIn, id) {
311
- const environment = getEnvName(this.environment.name);
312
- if (import_configure.configuration.enableNativeCSS && (environment === "ios" || environment === "android")) {
313
- {
314
- const data = JSON.stringify((0, import_css_to_rn.cssToReactNativeRuntime)(codeIn, {
315
- inlineRem: 16
316
- }));
317
- const code = `require("nativewind/dist/index.js").__require().StyleSheet.registerCompiled(${data})`;
318
- const newId = `${id}.js`;
319
- const cssId = newId.replace(rolldownNodeMods + import_node_path.sep, "");
320
- cssTransformCache.set(cssId, code);
321
- return {
322
- code,
323
- id: newId,
324
- map: null
325
- };
326
- }
327
- }
328
- }
329
- },
330
- generateBundle(_, bundle) {
331
- const environment = getEnvName(this.environment.name);
332
- if (import_configure.configuration.enableNativeCSS && (environment === "ios" || environment === "android")) {
333
- const rootJSName = Object.keys(bundle).find(i => {
334
- const chunk = bundle[i];
335
- return chunk.type == "chunk" && chunk.fileName.match(/.[cm]?js(?:\?.+)?$/) != null;
336
- });
337
- if (!rootJSName) {
338
- throw new Error(`Can't find root js, internal one error`);
339
- }
340
- const rootJS = bundle[rootJSName];
341
- const cssAssets = Object.keys(bundle).filter(i => bundle[i].fileName.endsWith(".css.js"));
342
- for (const name of cssAssets) {
343
- delete bundle[name];
344
- const jsCSS = cssTransformCache.get(name);
345
- rootJS.code = `
252
+ const reactVersion = await (async () => {
253
+ const path = (0, import_utils.resolvePath)("react/package.json");
254
+ const json = JSON.parse(await (0, import_promises.readFile)(path, "utf-8"));
255
+ return json.version;
256
+ })();
257
+ const envNames = {
258
+ ios: true,
259
+ android: true,
260
+ client: true,
261
+ ssr: true
262
+ };
263
+ function getEnvName(name) {
264
+ if (name === "worker") return "ssr";
265
+ if (!envNames[name]) throw new Error(`Invalid env: ${name}`);
266
+ return name;
267
+ }
268
+ const reactForRNVersion = reactVersion.split(".")[0];
269
+ const cssTransformCache = /* @__PURE__ */ new Map();
270
+ const rolldownPath = (0, import_utils.resolvePath)("rolldown");
271
+ const rolldownNodeMods = rolldownPath.slice(0, rolldownPath.indexOf(import_node_path.sep + "node_modules"));
272
+ let config;
273
+ return [
274
+ {
275
+ name: "one:compiler-resolve-refresh-runtime",
276
+ apply: "serve",
277
+ enforce: "pre",
278
+ resolveId: (id) => id === import_constants.runtimePublicPath || id === `${import_constants.runtimePublicPath}.map` ? id : void 0,
279
+ load: (id) => {
280
+ const basePath = (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(import_meta.url));
281
+ if (id === import_constants.runtimePublicPath) {
282
+ return (0, import_node_fs.readFileSync)((0, import_node_path.join)(basePath, "refresh-runtime.mjs"), "utf-8").replace(/\/\/# sourceMappingURL=.*/, "");
283
+ }
284
+ if (id === `${import_constants.runtimePublicPath}.map`) {
285
+ return JSON.stringify({
286
+ version: 3,
287
+ sources: [],
288
+ mappings: ""
289
+ });
290
+ }
291
+ return void 0;
292
+ }
293
+ },
294
+ {
295
+ name: `one:compiler-css-to-js`,
296
+ transform: {
297
+ filter: { id: /\.css$/ },
298
+ handler(codeIn, id) {
299
+ const environment = getEnvName(this.environment.name);
300
+ if (import_configure.configuration.enableNativeCSS && (environment === "ios" || environment === "android")) {
301
+ {
302
+ const data = JSON.stringify((0, import_css_to_rn.cssToReactNativeRuntime)(codeIn, { inlineRem: 16 }));
303
+ const code = `require("nativewind/dist/index.js").__require().StyleSheet.registerCompiled(${data})`;
304
+ const newId = `${id}.js`;
305
+ const cssId = newId.replace(rolldownNodeMods + import_node_path.sep, "");
306
+ cssTransformCache.set(cssId, code);
307
+ return {
308
+ code,
309
+ id: newId,
310
+ map: null
311
+ };
312
+ }
313
+ }
314
+ }
315
+ },
316
+ generateBundle(_, bundle) {
317
+ const environment = getEnvName(this.environment.name);
318
+ if (import_configure.configuration.enableNativeCSS && (environment === "ios" || environment === "android")) {
319
+ const rootJSName = Object.keys(bundle).find((i) => {
320
+ const chunk = bundle[i];
321
+ return chunk.type == "chunk" && chunk.fileName.match(/.[cm]?js(?:\?.+)?$/) != null;
322
+ });
323
+ if (!rootJSName) {
324
+ throw new Error(`Can't find root js, internal one error`);
325
+ }
326
+ const rootJS = bundle[rootJSName];
327
+ const cssAssets = Object.keys(bundle).filter((i) => bundle[i].fileName.endsWith(".css.js"));
328
+ for (const name of cssAssets) {
329
+ delete bundle[name];
330
+ const jsCSS = cssTransformCache.get(name);
331
+ rootJS.code = `
346
332
  ${jsCSS}
347
333
  ${rootJS.code}
348
334
  `;
349
- }
350
- }
351
- }
352
- }, {
353
- name: "one:compiler",
354
- enforce: "pre",
355
- config: () => {
356
- const nodeModulesFilter = /node_modules[/\\].*\.(tsx?|jsx?|mjs|cjs)$/;
357
- const createEnvironmentConfig = environment => {
358
- if (!perfStats.optimizeDeps.byEnvironment[environment]) {
359
- perfStats.optimizeDeps.byEnvironment[environment] = {
360
- filesChecked: 0,
361
- filesTransformed: 0,
362
- startTime: Date.now()
363
- };
364
- }
365
- return {
366
- optimizeDeps: {
367
- rolldownOptions: {
368
- plugins: [{
369
- name: `transform-before-optimize-deps-${environment}`,
370
- async transform(code, id) {
371
- if (!nodeModulesFilter.test(id)) {
372
- return null;
373
- }
374
- perfStats.optimizeDeps.byEnvironment[environment].filesChecked++;
375
- const production = process.env.NODE_ENV === "production" || process.env.NODE_ENV === "test";
376
- (0, import_constants.debug)?.(`[rolldown optimizeDeps] ${id}`);
377
- const result = await performBabelTransform({
378
- id,
379
- code,
380
- projectRoot: config.root,
381
- environment,
382
- production,
383
- reactForRNVersion,
384
- optionsIn
385
- });
386
- if (!result) {
387
- return null;
388
- }
389
- perfStats.optimizeDeps.byEnvironment[environment].filesTransformed++;
390
- return {
391
- code: result.code,
392
- map: result.map
393
- };
394
- },
395
- buildEnd() {
396
- if (process.env.DEBUG_COMPILER_PERF) {
397
- const stats = perfStats.optimizeDeps.byEnvironment[environment];
398
- const elapsed = Date.now() - stats.startTime;
399
- console.info(`[optimizeDeps ${environment}] Done: ${stats.filesChecked} files checked, ${stats.filesTransformed} transformed (${elapsed}ms)`);
400
- }
401
- const allDone = Object.keys(perfStats.optimizeDeps.byEnvironment).length >= 2;
402
- if (allDone) {
403
- (0, import_cache.logCacheStats)();
404
- logPerfSummary();
405
- }
406
- }
407
- }]
408
- }
409
- },
410
- define: {
411
- "process.env.NATIVEWIND_OS": JSON.stringify(environment === "ios" || environment === "android" ? "native" : "web")
412
- }
413
- };
414
- };
415
- return {
416
- environments: {
417
- ios: createEnvironmentConfig("ios"),
418
- android: createEnvironmentConfig("android"),
419
- client: createEnvironmentConfig("client"),
420
- ssr: createEnvironmentConfig("ssr")
421
- }
422
- };
423
- },
424
- configResolved(resolvedConfig) {
425
- config = resolvedConfig;
426
- },
427
- async transform(codeIn, _id) {
428
- let code = codeIn;
429
- const environment = getEnvName(this.environment.name);
430
- const isNative = environment === "ios" || environment === "android";
431
- const production = config.command === "build" || process.env.NODE_ENV === "production" || JSON.parse(this.environment.config?.define?.["process.env.NODE_ENV"] || '""') === "production";
432
- const isEntry = _id.includes("one-entry-native");
433
- if (isEntry) {
434
- if (isNative && !production) {
435
- code = `import '@vxrn/vite-native-client'
335
+ }
336
+ }
337
+ }
338
+ },
339
+ {
340
+ name: "one:compiler",
341
+ enforce: "pre",
342
+ config: () => {
343
+ const nodeModulesFilter = /node_modules[/\\].*\.(tsx?|jsx?|mjs|cjs)$/;
344
+ const createEnvironmentConfig = (environment) => {
345
+ if (!perfStats.optimizeDeps.byEnvironment[environment]) {
346
+ perfStats.optimizeDeps.byEnvironment[environment] = {
347
+ filesChecked: 0,
348
+ filesTransformed: 0,
349
+ startTime: Date.now()
350
+ };
351
+ }
352
+ return {
353
+ optimizeDeps: { rolldownOptions: { plugins: [{
354
+ name: `transform-before-optimize-deps-${environment}`,
355
+ async transform(code, id) {
356
+ if (!nodeModulesFilter.test(id)) {
357
+ return null;
358
+ }
359
+ perfStats.optimizeDeps.byEnvironment[environment].filesChecked++;
360
+ const production = process.env.NODE_ENV === "production" || process.env.NODE_ENV === "test";
361
+ (0, import_constants.debug)?.(`[rolldown optimizeDeps] ${id}`);
362
+ const result = await performBabelTransform({
363
+ id,
364
+ code,
365
+ projectRoot: config.root,
366
+ environment,
367
+ production,
368
+ reactForRNVersion,
369
+ optionsIn
370
+ });
371
+ if (!result) {
372
+ return null;
373
+ }
374
+ perfStats.optimizeDeps.byEnvironment[environment].filesTransformed++;
375
+ return {
376
+ code: result.code,
377
+ map: result.map
378
+ };
379
+ },
380
+ buildEnd() {
381
+ if (process.env.DEBUG_COMPILER_PERF) {
382
+ const stats = perfStats.optimizeDeps.byEnvironment[environment];
383
+ const elapsed = Date.now() - stats.startTime;
384
+ console.info(`[optimizeDeps ${environment}] Done: ${stats.filesChecked} files checked, ${stats.filesTransformed} transformed (${elapsed}ms)`);
385
+ }
386
+ const allDone = Object.keys(perfStats.optimizeDeps.byEnvironment).length >= 2;
387
+ if (allDone) {
388
+ (0, import_cache.logCacheStats)();
389
+ logPerfSummary();
390
+ }
391
+ }
392
+ }] } },
393
+ define: { "process.env.NATIVEWIND_OS": JSON.stringify(environment === "ios" || environment === "android" ? "native" : "web") }
394
+ };
395
+ };
396
+ return { environments: {
397
+ ios: createEnvironmentConfig("ios"),
398
+ android: createEnvironmentConfig("android"),
399
+ client: createEnvironmentConfig("client"),
400
+ ssr: createEnvironmentConfig("ssr")
401
+ } };
402
+ },
403
+ configResolved(resolvedConfig) {
404
+ config = resolvedConfig;
405
+ },
406
+ async transform(codeIn, _id) {
407
+ let code = codeIn;
408
+ const environment = getEnvName(this.environment.name);
409
+ const isNative = environment === "ios" || environment === "android";
410
+ const production = config.command === "build" || process.env.NODE_ENV === "production" || JSON.parse(this.environment.config?.define?.["process.env.NODE_ENV"] || "\"\"") === "production";
411
+ const isEntry = _id.includes("one-entry-native");
412
+ if (isEntry) {
413
+ if (isNative && !production) {
414
+ code = `import '@vxrn/vite-native-client'
436
415
  ${code}`;
437
- }
438
- if (isNative && import_configure.configuration.enableNativewind) {
439
- code = `import * as x from 'nativewind'
416
+ }
417
+ if (isNative && import_configure.configuration.enableNativewind) {
418
+ code = `import * as x from 'nativewind'
440
419
  ${code}`;
441
- }
442
- return code;
443
- }
444
- const id = _id.split("?")[0];
445
- const extension = (0, import_node_path.extname)(id);
446
- if (extension === ".css" || !import_constants.validParsers.has(extension)) {
447
- return;
448
- }
449
- if (id.includes(`virtual:`)) {
450
- return;
451
- }
452
- if (codeIn.endsWith(`// vxrn-did-babel`)) {
453
- (0, import_constants.debug)?.(`[skip babel] ${id}`);
454
- return;
455
- }
456
- return performBabelTransform({
457
- id,
458
- code: codeIn,
459
- projectRoot: config.root,
460
- environment,
461
- production,
462
- reactForRNVersion,
463
- optionsIn
464
- });
465
- }
466
- },
467
- // wraps client-side TSX/JSX with React Refresh preamble + import.meta.hot.accept
468
- // runs after vite:oxc (no enforce:'pre') so it sees the already-transformed code
469
- {
470
- name: "one:react-refresh-web",
471
- apply: "serve",
472
- transform(code, _id) {
473
- if (this.environment.name !== "client") return;
474
- if (code.includes(import_constants.runtimePublicPath)) return;
475
- const id = _id.split("?")[0];
476
- if (id.includes("node_modules")) return;
477
- if (id.includes("virtual:")) return;
478
- if (id === import_constants.runtimePublicPath) return;
479
- const ext = (0, import_node_path.extname)(id);
480
- if (ext !== ".tsx" && ext !== ".jsx") return;
481
- const hasRefreshCalls = /\$RefreshReg\$\(/.test(code);
482
- let out = `import * as RefreshRuntime from "${import_constants.runtimePublicPath}";
420
+ }
421
+ return code;
422
+ }
423
+ const id = _id.split("?")[0];
424
+ const extension = (0, import_node_path.extname)(id);
425
+ if (extension === ".css" || !import_constants.validParsers.has(extension)) {
426
+ return;
427
+ }
428
+ if (id.includes(`virtual:`)) {
429
+ return;
430
+ }
431
+ if (codeIn.endsWith(`// vxrn-did-babel`)) {
432
+ (0, import_constants.debug)?.(`[skip babel] ${id}`);
433
+ return;
434
+ }
435
+ return performBabelTransform({
436
+ id,
437
+ code: codeIn,
438
+ projectRoot: config.root,
439
+ environment,
440
+ production,
441
+ reactForRNVersion,
442
+ optionsIn
443
+ });
444
+ }
445
+ },
446
+ {
447
+ name: "one:react-refresh-web",
448
+ apply: "serve",
449
+ transform(code, _id) {
450
+ if (this.environment.name !== "client") return;
451
+ if (code.includes(import_constants.runtimePublicPath)) return;
452
+ const id = _id.split("?")[0];
453
+ if (id.includes("node_modules")) return;
454
+ if (id.includes("virtual:")) return;
455
+ if (id === import_constants.runtimePublicPath) return;
456
+ const ext = (0, import_node_path.extname)(id);
457
+ if (ext !== ".tsx" && ext !== ".jsx") return;
458
+ const hasRefreshCalls = /\$RefreshReg\$\(/.test(code);
459
+ let out = `import * as RefreshRuntime from "${import_constants.runtimePublicPath}";
483
460
 
484
461
  `;
485
- if (hasRefreshCalls) {
486
- out += `if (!window.$RefreshReg$) throw new Error("React refresh preamble was not loaded. Something is wrong.");
462
+ if (hasRefreshCalls) {
463
+ out += `if (!window.$RefreshReg$) throw new Error("React refresh preamble was not loaded. Something is wrong.");
487
464
  const prevRefreshReg = window.$RefreshReg$;
488
465
  const prevRefreshSig = window.$RefreshSig$;
489
466
  window.$RefreshReg$ = RefreshRuntime.getRefreshReg("${id}");
490
467
  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
491
468
 
492
469
  `;
493
- }
494
- out += code;
495
- if (hasRefreshCalls) {
496
- out += `
470
+ }
471
+ out += code;
472
+ if (hasRefreshCalls) {
473
+ out += `
497
474
 
498
475
  window.$RefreshReg$ = prevRefreshReg;
499
476
  window.$RefreshSig$ = prevRefreshSig;
500
477
  `;
501
- }
502
- out += `
478
+ }
479
+ out += `
503
480
  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
504
481
  RefreshRuntime.registerExportsForReactRefresh("${id}", currentExports);
505
482
  import.meta.hot.accept((nextExports) => {
@@ -509,10 +486,11 @@ RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
509
486
  });
510
487
  });
511
488
  `;
512
- return {
513
- code: out,
514
- map: null
515
- };
516
- }
517
- }];
518
- }
489
+ return {
490
+ code: out,
491
+ map: null
492
+ };
493
+ }
494
+ }
495
+ ];
496
+ }