@vxrn/compiler 2.0.0-beta.33.1 → 2.0.0-beta.362.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 (115) 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 +428 -438
  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 +247 -221
  9. package/dist/cjs/transformHermesAsync.cjs +36 -47
  10. package/dist/cjs/transformHermesClasses.cjs +51 -0
  11. package/dist/cjs/transformHermesLoops.cjs +279 -281
  12. package/dist/cjs/transformSWC.cjs +183 -200
  13. package/dist/cjs/transformWorklets.cjs +107 -95
  14. package/dist/cjs/types.cjs +9 -11
  15. package/dist/cjs/workletUtils.cjs +30 -0
  16. package/dist/cjs/worklets/autoworklet.cjs +277 -222
  17. package/dist/cjs/worklets/globals.cjs +145 -60
  18. package/dist/cjs/worklets/hash.cjs +23 -27
  19. package/dist/cjs/worklets/scope.cjs +338 -359
  20. package/dist/cjs/worklets/serialize.cjs +73 -75
  21. package/dist/cjs/worklets/transform.cjs +217 -222
  22. package/dist/cjs/worklets/types.cjs +9 -11
  23. package/dist/esm/cache.mjs +96 -89
  24. package/dist/esm/cache.mjs.map +1 -1
  25. package/dist/esm/configure.mjs +11 -10
  26. package/dist/esm/configure.mjs.map +1 -1
  27. package/dist/esm/constants.mjs +41 -41
  28. package/dist/esm/constants.mjs.map +1 -1
  29. package/dist/esm/index.js +426 -420
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/index.mjs +426 -420
  32. package/dist/esm/index.mjs.map +1 -1
  33. package/dist/esm/reactNativeCodegen.mjs +90 -88
  34. package/dist/esm/reactNativeCodegen.mjs.map +1 -1
  35. package/dist/esm/reactNativeViewConfig.mjs +347 -362
  36. package/dist/esm/reactNativeViewConfig.mjs.map +1 -1
  37. package/dist/esm/refresh-runtime.mjs +372 -376
  38. package/dist/esm/refresh-runtime.mjs.map +1 -1
  39. package/dist/esm/transformBabel.mjs +231 -198
  40. package/dist/esm/transformBabel.mjs.map +1 -1
  41. package/dist/esm/transformHermesAsync.mjs +20 -21
  42. package/dist/esm/transformHermesAsync.mjs.map +1 -1
  43. package/dist/esm/transformHermesClasses.mjs +25 -0
  44. package/dist/esm/transformHermesClasses.mjs.map +1 -0
  45. package/dist/esm/transformHermesLoops.mjs +264 -255
  46. package/dist/esm/transformHermesLoops.mjs.map +1 -1
  47. package/dist/esm/transformSWC.mjs +163 -171
  48. package/dist/esm/transformSWC.mjs.map +1 -1
  49. package/dist/esm/transformWorklets.mjs +89 -69
  50. package/dist/esm/transformWorklets.mjs.map +1 -1
  51. package/dist/esm/types.mjs +0 -2
  52. package/dist/esm/workletUtils.mjs +5 -0
  53. package/dist/esm/worklets/autoworklet.mjs +258 -200
  54. package/dist/esm/worklets/autoworklet.mjs.map +1 -1
  55. package/dist/esm/worklets/globals.mjs +130 -42
  56. package/dist/esm/worklets/globals.mjs.map +1 -1
  57. package/dist/esm/worklets/hash.mjs +10 -9
  58. package/dist/esm/worklets/hash.mjs.map +1 -1
  59. package/dist/esm/worklets/scope.mjs +325 -341
  60. package/dist/esm/worklets/scope.mjs.map +1 -1
  61. package/dist/esm/worklets/serialize.mjs +60 -58
  62. package/dist/esm/worklets/serialize.mjs.map +1 -1
  63. package/dist/esm/worklets/transform.mjs +201 -197
  64. package/dist/esm/worklets/transform.mjs.map +1 -1
  65. package/dist/esm/worklets/types.mjs +0 -2
  66. package/package.json +15 -6
  67. package/src/cache.ts +37 -7
  68. package/src/index.ts +44 -19
  69. package/src/reactNativeViewConfig.ts +6 -1
  70. package/src/transformBabel.test.ts +351 -17
  71. package/src/transformBabel.ts +137 -96
  72. package/src/transformHermesClasses.ts +34 -0
  73. package/src/transformSWC.ts +12 -1
  74. package/src/transformWorklets.test.ts +80 -5
  75. package/src/workletUtils.ts +4 -0
  76. package/src/worklets/autoworklet.ts +5 -2
  77. package/src/worklets/globals.ts +23 -0
  78. package/src/worklets/serialize.ts +1 -1
  79. package/types/cache.d.ts +2 -2
  80. package/types/cache.d.ts.map +1 -1
  81. package/types/index.d.ts +1 -0
  82. package/types/index.d.ts.map +1 -1
  83. package/types/reactNativeViewConfig.d.ts.map +1 -1
  84. package/types/transformBabel.d.ts +16 -1
  85. package/types/transformBabel.d.ts.map +1 -1
  86. package/types/transformHermesClasses.d.ts +5 -0
  87. package/types/transformHermesClasses.d.ts.map +1 -0
  88. package/types/transformSWC.d.ts +1 -4
  89. package/types/transformSWC.d.ts.map +1 -1
  90. package/types/workletUtils.d.ts +4 -0
  91. package/types/workletUtils.d.ts.map +1 -0
  92. package/types/worklets/autoworklet.d.ts.map +1 -1
  93. package/types/worklets/globals.d.ts.map +1 -1
  94. package/dist/cjs/transformBabel.test.cjs +0 -360
  95. package/dist/cjs/transformHermesLoops.test.cjs +0 -257
  96. package/dist/cjs/transformSWC.test.cjs +0 -117
  97. package/dist/cjs/transformWorklets.test.cjs +0 -604
  98. package/dist/esm/transformBabel.test.mjs +0 -337
  99. package/dist/esm/transformBabel.test.mjs.map +0 -1
  100. package/dist/esm/transformHermesLoops.test.mjs +0 -234
  101. package/dist/esm/transformHermesLoops.test.mjs.map +0 -1
  102. package/dist/esm/transformSWC.test.mjs +0 -118
  103. package/dist/esm/transformSWC.test.mjs.map +0 -1
  104. package/dist/esm/transformWorklets.test.mjs +0 -581
  105. package/dist/esm/transformWorklets.test.mjs.map +0 -1
  106. package/dist/esm/types.mjs.map +0 -1
  107. package/dist/esm/worklets/types.mjs.map +0 -1
  108. package/types/transformBabel.test.d.ts +0 -2
  109. package/types/transformBabel.test.d.ts.map +0 -1
  110. package/types/transformHermesLoops.test.d.ts +0 -2
  111. package/types/transformHermesLoops.test.d.ts.map +0 -1
  112. package/types/transformSWC.test.d.ts +0 -2
  113. package/types/transformSWC.test.d.ts.map +0 -1
  114. package/types/transformWorklets.test.d.ts +0 -2
  115. package/types/transformWorklets.test.d.ts.map +0 -1
@@ -5,250 +5,276 @@ 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
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
- value: mod,
29
- enumerable: true
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
30
25
  }) : target, mod));
31
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: true
33
- }), mod);
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
27
  var transformBabel_exports = {};
35
28
  __export(transformBabel_exports, {
36
- getBabelOptions: () => getBabelOptions,
37
- transformBabel: () => transformBabel,
38
- transformOxcReactCompiler: () => transformOxcReactCompiler
29
+ findUserBabelConfig: () => findUserBabelConfig,
30
+ getBabelOptions: () => getBabelOptions,
31
+ stripFlowTypes: () => stripFlowTypes,
32
+ transformBabel: () => transformBabel,
33
+ transformOxcReactCompiler: () => transformOxcReactCompiler
39
34
  });
40
35
  module.exports = __toCommonJS(transformBabel_exports);
36
+ var import_node_fs = require("node:fs");
41
37
  var import_node_path = require("node:path");
42
38
  var import_utils = require("@vxrn/utils");
43
39
  var import_vite = require("vite");
44
40
  var import_configure = require("./configure.cjs");
45
41
  var import_constants = require("./constants.cjs");
42
+ const USER_BABEL_CONFIG_FILES = [
43
+ "babel.config.js",
44
+ "babel.config.cjs",
45
+ "babel.config.mjs",
46
+ "babel.config.json",
47
+ ".babelrc",
48
+ ".babelrc.js",
49
+ ".babelrc.json"
50
+ ];
51
+ const ONE_GENERATED_MARKER = "@one/generated bundler-config";
52
+ function findUserBabelConfig(projectRoot) {
53
+ if (!projectRoot) return null;
54
+ for (const name of USER_BABEL_CONFIG_FILES) {
55
+ const fullPath = (0, import_node_path.join)(projectRoot, name);
56
+ if ((0, import_node_fs.existsSync)(fullPath)) {
57
+ try {
58
+ const content = (0, import_node_fs.readFileSync)(fullPath, "utf8");
59
+ if (content.includes(ONE_GENERATED_MARKER)) {
60
+ continue;
61
+ }
62
+ } catch {
63
+ continue;
64
+ }
65
+ return fullPath;
66
+ }
67
+ }
68
+ return null;
69
+ }
46
70
  function getBabelOptions(props) {
47
- props = {
48
- ...props,
49
- id: (0, import_vite.normalizePath)(props.id.split("?")[0])
50
- };
51
- if (props.userSetting === "babel") {
52
- return getOptions(props, true);
53
- }
54
- if (typeof props.userSetting === "undefined" || typeof props.userSetting === "object" && props.userSetting.transform === "babel") {
55
- if (props.userSetting?.excludeDefaultPlugins) {
56
- return props.userSetting;
57
- }
58
- return getOptions(props);
59
- }
60
- return null;
71
+ props = {
72
+ ...props,
73
+ id: (0, import_vite.normalizePath)(props.id.split("?")[0])
74
+ };
75
+ const isProjectFile = !props.id.includes("node_modules");
76
+ const userBabelConfig = isProjectFile && props.projectRoot ? findUserBabelConfig(props.projectRoot) : null;
77
+ if (props.userSetting === "babel") {
78
+ return getOptions(props, true, userBabelConfig);
79
+ }
80
+ if (typeof props.userSetting === "undefined" || typeof props.userSetting === "object" && props.userSetting.transform === "babel") {
81
+ if (props.userSetting?.excludeDefaultPlugins) {
82
+ return {
83
+ caller: getBabelCaller(props),
84
+ ...props.userSetting,
85
+ ...userBabelConfig ? {
86
+ configFile: userBabelConfig,
87
+ babelrc: true
88
+ } : {}
89
+ };
90
+ }
91
+ return getOptions(props, false, userBabelConfig);
92
+ }
93
+ const userSetting = props.userSetting;
94
+ if (userSetting === "swc" || userSetting === "oxc" || userSetting === false || typeof userSetting === "object" && userSetting !== null && (userSetting.transform === "swc" || userSetting.transform === "oxc")) {
95
+ return null;
96
+ }
97
+ if (userBabelConfig) {
98
+ return getOptions(props, false, userBabelConfig);
99
+ }
100
+ return null;
61
101
  }
62
- const getOptions = (props, force = false) => {
63
- let plugins = [];
64
- if (force || shouldBabelGenerators(props)) {
65
- plugins = getBasePlugins(props);
66
- }
67
- const enableNativewind = import_configure.configuration.enableNativewind && (props.environment === "ios" || props.environment === "android") &&
68
- // if reanimated gets wrapped in transform it causes circular dep issues
69
- !/node_modules/.test(props.id) &&
70
- // only needed for createElement calls, so be a bit conservative
71
- props.code.includes("createElement");
72
- if (enableNativewind) {
73
- if (!props.id.includes("node_modules")) {
74
- plugins.push((0, import_utils.resolvePath)("react-native-css-interop/dist/babel-plugin.js"));
75
- }
76
- }
77
- if (enableNativewind || shouldBabelReanimated(props)) {
78
- try {
79
- const workletsPlugin = (0, import_utils.resolvePath)("react-native-worklets/plugin", props.projectRoot);
80
- (0, import_constants.debug)?.(`Using babel worklets on file ${props.id}`);
81
- plugins.push(workletsPlugin);
82
- } catch {}
83
- }
84
- if (shouldBabelReactCompiler(props)) {
85
- (0, import_constants.debug)?.(`Using babel react compiler on file`);
86
- plugins.push(getBabelReactCompilerPlugin(props));
87
- }
88
- if (plugins.length) {
89
- return {
90
- plugins
91
- };
92
- }
93
- return null;
102
+ const getOptions = (props, force = false, userBabelConfig = null) => {
103
+ let plugins = [];
104
+ if (force || shouldBabelGenerators(props)) {
105
+ plugins = getBasePlugins(props);
106
+ }
107
+ const enableNativewind = import_configure.configuration.enableNativewind && (props.environment === "ios" || props.environment === "android") && !/node_modules/.test(props.id) && props.code.includes("createElement");
108
+ if (enableNativewind) {
109
+ if (!props.id.includes("node_modules")) {
110
+ plugins.push((0, import_utils.resolvePath)("react-native-css-interop/dist/babel-plugin.js"));
111
+ }
112
+ }
113
+ if (shouldBabelReactCompiler(props)) {
114
+ (0, import_constants.debug)?.(`Using babel react compiler on file`);
115
+ plugins.push(getBabelReactCompilerPlugin(props));
116
+ }
117
+ if (plugins.length || userBabelConfig) {
118
+ return {
119
+ plugins,
120
+ caller: getBabelCaller(props),
121
+ ...userBabelConfig ? {
122
+ configFile: userBabelConfig,
123
+ babelrc: true
124
+ } : {}
125
+ };
126
+ }
127
+ return null;
94
128
  };
95
- async function transformOxcReactCompiler(id, code, target, sourceMap = false) {
96
- const {
97
- transform
98
- } = await import("oxc-transform-react");
99
- const result = await transform(id, code, {
100
- jsx: "preserve",
101
- sourcemap: sourceMap,
102
- reactCompiler: {
103
- target
104
- }
105
- });
106
- if (result.fatal) {
107
- throw new Error(`[vxrn:compiler] oxc react compiler failed on ${id}: ${(result.errors ?? []).map(e => e.message ?? String(e)).join(", ")}`);
108
- }
109
- if (result.errors?.length) {
110
- (0, import_constants.debug)?.(`[compiler/bailout] ${id}: ${result.errors.map(e => e.message ?? String(e)).join(", ")}`);
111
- }
112
- return {
113
- code: result.code,
114
- map: sourceMap ? result.map : void 0
115
- };
129
+ function getBabelCaller(props) {
130
+ const caller = {
131
+ name: "vxrn",
132
+ platform: props.environment === "ios" || props.environment === "android" ? props.environment : "web",
133
+ isDev: props.development
134
+ };
135
+ return caller;
136
+ }
137
+ async function transformOxcReactCompiler(id, code, optionsOrTarget = "19", sourceMap = false) {
138
+ const { transform } = await import("oxc-transform-react");
139
+ const compilerOptions = typeof optionsOrTarget === "string" ? { target: optionsOrTarget } : optionsOrTarget || {};
140
+ const target = compilerOptions.target ?? "19";
141
+ const result = await transform(id, code, {
142
+ jsx: "preserve",
143
+ sourcemap: sourceMap,
144
+ reactCompiler: {
145
+ target,
146
+ ...compilerOptions,
147
+ environment: {
148
+ enableCustomTypeDefinitionForReanimated: true,
149
+ ...compilerOptions.environment
150
+ }
151
+ }
152
+ });
153
+ if (result.fatal) {
154
+ throw new Error(`[vxrn:compiler] oxc react compiler failed on ${id}: ${(result.errors ?? []).map((e) => e.message ?? String(e)).join(", ")}`);
155
+ }
156
+ if (result.errors?.length) {
157
+ (0, import_constants.debug)?.(`[compiler/bailout] ${id}: ${result.errors.map((e) => e.message ?? String(e)).join(", ")}`);
158
+ }
159
+ return {
160
+ code: result.code,
161
+ map: sourceMap ? result.map : void 0
162
+ };
116
163
  }
117
164
  async function transformBabel(id, code, options) {
118
- const [{
119
- default: babelCore
120
- }, {
121
- default: hermesParserPlugin
122
- }] = await Promise.all([import("@babel/core"), import("babel-plugin-syntax-hermes-parser")]);
123
- const extension = (0, import_node_path.extname)(id);
124
- const isTSX = extension === ".tsx";
125
- const isTS = isTSX || extension === ".ts";
126
- const babelOptions = {
127
- filename: id,
128
- compact: false,
129
- babelrc: false,
130
- configFile: false,
131
- sourceMaps: false,
132
- minified: false,
133
- ...options,
134
- presets: [isTS ? ["@babel/preset-typescript", {
135
- isTSX,
136
- allExtensions: isTSX
137
- }] : "", ...(options.presets || [])].filter(Boolean),
138
- // non-TS files use React Native's Flow dialect. RN's own component specs are
139
- // Flow `.js` (`import type`, `codegenNativeComponent<T>(…)`, `(expr: Type)` casts).
140
- // enable Hermes Flow parsing + stripping, mirroring the TypeScript preset above
141
- // (`@react-native/babel-preset` uses the same parser for JS). without it babel
142
- // can't parse current RN Flow syntax such as `call<T>(...) as HostComponent<T>`, so
143
- // plugins like
144
- // @react-native/babel-plugin-codegen silently fail on RN specs and the runtime
145
- // "Codegen didn't run" warning fires. TS path is byte-identical (empty slice).
146
- plugins: [...(isTS ? [] : [[hermesParserPlugin, {
147
- parseLangTypes: "flow",
148
- reactRuntimeTarget: "19"
149
- }]]), ...(options.plugins || []), ...(isTS ? [] : ["@babel/plugin-transform-flow-strip-types"])]
150
- };
151
- return await new Promise((res, rej) => {
152
- babelCore.transform(code, babelOptions, (err, result) => {
153
- if (!result || err) {
154
- return rej(err || new Error(`[vxrn:compiler] babel returned no result for ${id}`));
155
- }
156
- res(result);
157
- });
158
- });
165
+ const [{ default: babelCore }, { default: hermesParserPlugin }] = await Promise.all([import("@babel/core"), import("babel-plugin-syntax-hermes-parser")]);
166
+ const extension = (0, import_node_path.extname)(id);
167
+ const isTSX = extension === ".tsx";
168
+ const isTS = isTSX || extension === ".ts";
169
+ const babelOptions = {
170
+ filename: id,
171
+ compact: false,
172
+ babelrc: options.babelrc ?? false,
173
+ configFile: options.configFile ?? false,
174
+ sourceMaps: false,
175
+ minified: false,
176
+ ...options,
177
+ ...!isTS ? { parserOpts: {
178
+ ...options.parserOpts,
179
+ plugins: [...options.parserOpts?.plugins || [], "jsx"]
180
+ } } : {},
181
+ caller: {
182
+ name: "vxrn",
183
+ ...options.caller,
184
+ supportsStaticESM: true,
185
+ supportsDynamicImport: true
186
+ },
187
+ presets: [isTS ? ["@babel/preset-typescript", {
188
+ isTSX,
189
+ allExtensions: isTSX
190
+ }] : "", ...options.presets || []].filter(Boolean),
191
+ plugins: [
192
+ ...isTS ? [] : [[hermesParserPlugin, {
193
+ parseLangTypes: "flow",
194
+ reactRuntimeTarget: "19"
195
+ }], "babel-plugin-transform-flow-enums"],
196
+ ...options.plugins || [],
197
+ ...isTS ? [] : ["@babel/plugin-transform-flow-strip-types"]
198
+ ]
199
+ };
200
+ return await new Promise((res, rej) => {
201
+ babelCore.transform(code, babelOptions, (err, result) => {
202
+ if (!result || err) {
203
+ return rej(err || new Error(`[vxrn:compiler] babel returned no result for ${id}`));
204
+ }
205
+ res(result);
206
+ });
207
+ });
208
+ }
209
+ async function stripFlowTypes(id, code, sourceMaps = true) {
210
+ const result = await transformBabel(id, code, { sourceMaps });
211
+ return {
212
+ code: result.code,
213
+ map: result.map
214
+ };
159
215
  }
160
- const getBasePlugins = ({
161
- development
162
- }) => [["@babel/plugin-transform-destructuring"], ["@babel/plugin-transform-react-jsx", {
163
- development
164
- }], ["@babel/plugin-transform-async-generator-functions"], ["@babel/plugin-transform-async-to-generator"], ["@babel/plugin-transform-runtime", {
165
- helpers: true,
166
- // NOTE THIS WAS SPELLED WRONG BEFOER THIS COMMIT MAYBE IT WAS UNINTENTIONALLY WORKING
167
- regenerator: false
168
- }]];
169
- const shouldBabelReactCompiler = props => {
170
- if (props.environment === "ssr") {
171
- return false;
172
- }
173
- if (!import_configure.configuration.enableCompiler) {
174
- return false;
175
- }
176
- const {
177
- enableCompiler
178
- } = import_configure.configuration;
179
- if (typeof enableCompiler === "object" && !Array.isArray(enableCompiler) && !(enableCompiler instanceof RegExp)) {
180
- const isNative = props.environment === "ios" || props.environment === "android";
181
- const filter = isNative ? enableCompiler.native : enableCompiler.web;
182
- if (!filter) return false;
183
- return applyCompilerFilter(filter, props);
184
- }
185
- if (typeof enableCompiler === "function") {
186
- return enableCompiler(props.id, props.environment);
187
- }
188
- if (enableCompiler instanceof RegExp) {
189
- return enableCompiler.test(props.id);
190
- }
191
- if (Array.isArray(enableCompiler)) {
192
- if (!enableCompiler.includes(props.environment)) {
193
- return false;
194
- }
195
- }
196
- return applyDefaultFilters(props);
216
+ const getBasePlugins = ({ development }) => [
217
+ ["@babel/plugin-transform-destructuring"],
218
+ ["@babel/plugin-transform-react-jsx", { development }],
219
+ ["@babel/plugin-transform-async-generator-functions"],
220
+ ["@babel/plugin-transform-async-to-generator"],
221
+ ["@babel/plugin-transform-runtime", {
222
+ helpers: true,
223
+ regenerator: false
224
+ }]
225
+ ];
226
+ const shouldBabelReactCompiler = (props) => {
227
+ if (props.environment === "ssr") {
228
+ return false;
229
+ }
230
+ if (!import_configure.configuration.enableCompiler) {
231
+ return false;
232
+ }
233
+ const { enableCompiler } = import_configure.configuration;
234
+ if (typeof enableCompiler === "object" && !Array.isArray(enableCompiler) && !(enableCompiler instanceof RegExp)) {
235
+ const isNative = props.environment === "ios" || props.environment === "android";
236
+ const filter = isNative ? enableCompiler.native : enableCompiler.web;
237
+ if (!filter) return false;
238
+ return applyCompilerFilter(filter, props);
239
+ }
240
+ if (typeof enableCompiler === "function") {
241
+ return enableCompiler(props.id, props.environment);
242
+ }
243
+ if (enableCompiler instanceof RegExp) {
244
+ return enableCompiler.test(props.id);
245
+ }
246
+ if (Array.isArray(enableCompiler)) {
247
+ if (!enableCompiler.includes(props.environment)) {
248
+ return false;
249
+ }
250
+ }
251
+ return applyDefaultFilters(props);
197
252
  };
198
253
  function applyCompilerFilter(filter, props) {
199
- if (typeof filter === "function") {
200
- return filter(props.id, props.environment);
201
- }
202
- if (filter instanceof RegExp) {
203
- return filter.test(props.id);
204
- }
205
- if (filter === true) {
206
- return applyDefaultFilters(props);
207
- }
208
- return false;
254
+ if (typeof filter === "function") {
255
+ return filter(props.id, props.environment);
256
+ }
257
+ if (filter instanceof RegExp) {
258
+ return filter.test(props.id);
259
+ }
260
+ if (filter === true) {
261
+ return applyDefaultFilters(props);
262
+ }
263
+ return false;
209
264
  }
210
265
  function applyDefaultFilters(props) {
211
- if (!/(\.tsx?)$/.test(props.id)) return false;
212
- if (props.id.includes("node_modules")) return false;
213
- if (props.id.includes("+api.")) return false;
214
- if (props.code.startsWith("// disable-compiler")) return false;
215
- return true;
266
+ if (!/(\.tsx?)$/.test(props.id)) return false;
267
+ if (props.id.includes("node_modules")) return false;
268
+ if (props.id.includes("+api.")) return false;
269
+ if (props.code.startsWith("// disable-compiler")) return false;
270
+ return true;
216
271
  }
217
- const getBabelReactCompilerPlugin = props => {
218
- const target = props.reactForRNVersion === "18" && (props.environment === "ios" || props.environment === "android") ? "18" : "19";
219
- return ["babel-plugin-react-compiler", {
220
- target
221
- }];
272
+ const getBabelReactCompilerPlugin = (props) => {
273
+ const target = props.reactForRNVersion === "18" && (props.environment === "ios" || props.environment === "android") ? "18" : "19";
274
+ return ["babel-plugin-react-compiler", { target }];
222
275
  };
223
- function shouldBabelGenerators({
224
- code
225
- }) {
226
- if (process.env.VXRN_USE_BABEL_FOR_GENERATORS) {
227
- return import_constants.asyncGeneratorRegex.test(code);
228
- }
276
+ function shouldBabelGenerators({ code }) {
277
+ if (process.env.VXRN_USE_BABEL_FOR_GENERATORS) {
278
+ return import_constants.asyncGeneratorRegex.test(code);
279
+ }
229
280
  }
230
- const REANIMATED_AUTOWORKLETIZATION_KEYWORDS = ["worklet", "useAnimatedGestureHandler", "useAnimatedScrollHandler", "useFrameCallback", "useAnimatedStyle", "useAnimatedProps", "createAnimatedPropAdapter", "useDerivedValue", "useAnimatedReaction", "useWorkletCallback", "withTiming", "withSpring", "withDecay", "withRepeat", "runOnUI", "executeOnUIRuntimeSync"];
231
- const REANIMATED_REGEX = new RegExp(REANIMATED_AUTOWORKLETIZATION_KEYWORDS.join("|"));
232
- const REANIMATED_IGNORED_PATHS = [
233
- // Prebuilt/vendored react-native that shouldn't be transformed
234
- "react-native-prebuilt", "node_modules/.vxrn/react-native",
235
- // Known false positives - they mention worklet keywords in comments/strings but don't use them
236
- "node_modules/react/", "node_modules/react-dom/", "node_modules/react-native/", "node_modules/react-native-web/"];
237
- const REANIMATED_IGNORED_PATHS_REGEX = new RegExp(REANIMATED_IGNORED_PATHS.join("|"));
238
- function shouldBabelReanimated({
239
- code,
240
- id
241
- }) {
242
- if (!import_configure.configuration.enableReanimated) {
243
- return false;
244
- }
245
- if (REANIMATED_IGNORED_PATHS_REGEX.test(id)) {
246
- return false;
247
- }
248
- if (REANIMATED_REGEX.test(code)) {
249
- const location = id.includes("node_modules") ? "node_modules" : "user-code";
250
- (0, import_constants.debug)?.(` \u{1FA84} [reanimated/${location}] ${(0, import_node_path.relative)(process.cwd(), id)}`);
251
- return true;
252
- }
253
- return false;
254
- }
@@ -5,57 +5,46 @@ 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
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
- value: mod,
29
- enumerable: true
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
30
25
  }) : target, mod));
31
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: true
33
- }), mod);
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
27
  var transformHermesAsync_exports = {};
35
- __export(transformHermesAsync_exports, {
36
- transformHermesAsync: () => transformHermesAsync
37
- });
28
+ __export(transformHermesAsync_exports, { transformHermesAsync: () => transformHermesAsync });
38
29
  module.exports = __toCommonJS(transformHermesAsync_exports);
39
30
  async function transformHermesAsync(code, filename, sourceMaps = false, format) {
40
- if (!format && !code.includes("async")) return;
41
- const {
42
- transformSync
43
- } = await import("esbuild");
44
- const cleanId = filename.split("?")[0];
45
- const result = transformSync(code, {
46
- loader: /\.[cm]?ts$/.test(cleanId) ? "ts" : cleanId.endsWith(".tsx") ? "tsx" : "jsx",
47
- jsx: "preserve",
48
- format,
49
- supported: {
50
- "async-await": false,
51
- "async-generator": false,
52
- "for-await": false
53
- },
54
- sourcefile: filename,
55
- sourcemap: sourceMaps ? "external" : false
56
- });
57
- return {
58
- code: result.code,
59
- map: result.map ? JSON.parse(result.map) : void 0
60
- };
61
- }
31
+ if (!format && !code.includes("async")) return;
32
+ const { transformSync } = await import("esbuild");
33
+ const cleanId = filename.split("?")[0];
34
+ const result = transformSync(code, {
35
+ loader: /\.[cm]?ts$/.test(cleanId) ? "ts" : cleanId.endsWith(".tsx") ? "tsx" : "jsx",
36
+ jsx: "preserve",
37
+ format,
38
+ supported: {
39
+ "async-await": false,
40
+ "async-generator": false,
41
+ "for-await": false
42
+ },
43
+ sourcefile: filename,
44
+ sourcemap: sourceMaps ? "external" : false
45
+ });
46
+ return {
47
+ code: result.code,
48
+ map: result.map ? JSON.parse(result.map) : void 0
49
+ };
50
+ }
@@ -0,0 +1,51 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
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;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var transformHermesClasses_exports = {};
28
+ __export(transformHermesClasses_exports, { transformHermesClasses: () => transformHermesClasses });
29
+ module.exports = __toCommonJS(transformHermesClasses_exports);
30
+ async function transformHermesClasses(code, filename, sourceMaps = false) {
31
+ if (!/\b(?:class(?:\s|\{)|(?:let|const)\s)/.test(code)) return;
32
+ const [{ transformAsync }, { default: transformClasses }, { default: transformBlockScoping }] = await Promise.all([
33
+ import("@babel/core"),
34
+ import("@babel/plugin-transform-classes"),
35
+ import("@babel/plugin-transform-block-scoping")
36
+ ]);
37
+ const result = await transformAsync(code, {
38
+ filename,
39
+ babelrc: false,
40
+ configFile: false,
41
+ sourceMaps,
42
+ inputSourceMap: false,
43
+ parserOpts: { plugins: ["jsx"] },
44
+ plugins: [transformClasses, transformBlockScoping]
45
+ });
46
+ if (!result?.code) return;
47
+ return {
48
+ code: result.code,
49
+ map: result.map
50
+ };
51
+ }