@vxrn/vite-plugin-metro 2.0.0-beta.53.1 → 2.0.0-beta.57.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/index.cjs +0 -2
  2. package/dist/cjs/index.native.cjs +0 -2
  3. package/dist/cjs/index.native.js +0 -2
  4. package/dist/cjs/index.native.js.map +1 -1
  5. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +48 -38
  6. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +62 -42
  7. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +62 -42
  8. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  9. package/dist/cjs/transformer/babel-transformer.cjs +53 -4
  10. package/dist/cjs/transformer/babel-transformer.native.cjs +65 -6
  11. package/dist/cjs/transformer/babel-transformer.native.js +65 -6
  12. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  13. package/dist/cjs/transformer/expoVirtualEnv.cjs +92 -0
  14. package/dist/cjs/transformer/expoVirtualEnv.native.cjs +113 -0
  15. package/dist/cjs/transformer/expoVirtualEnv.native.js +115 -0
  16. package/dist/cjs/transformer/expoVirtualEnv.native.js.map +1 -0
  17. package/dist/cjs/transformer/loadBabelConfig.cjs +1 -1
  18. package/dist/cjs/transformer/loadBabelConfig.native.cjs +1 -1
  19. package/dist/cjs/transformer/loadBabelConfig.native.js +1 -1
  20. package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
  21. package/dist/cjs/transformer/metroNativeWorker.cjs +8 -20
  22. package/dist/cjs/transformer/metroNativeWorker.native.cjs +8 -20
  23. package/dist/cjs/transformer/metroNativeWorker.native.js +8 -20
  24. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  25. package/dist/cjs/transformer/transformSync.cjs +3 -3
  26. package/dist/cjs/transformer/transformSync.native.cjs +3 -3
  27. package/dist/cjs/transformer/transformSync.native.js +3 -3
  28. package/dist/cjs/transformer/transformSync.native.js.map +1 -1
  29. package/dist/cjs/utils/exit.cjs +1 -1
  30. package/dist/cjs/utils/exit.native.cjs +1 -1
  31. package/dist/cjs/utils/exit.native.js +1 -1
  32. package/dist/cjs/utils/exit.native.js.map +1 -1
  33. package/dist/esm/index.js +1 -2
  34. package/dist/esm/index.mjs +1 -2
  35. package/dist/esm/index.native.js +1 -2
  36. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +48 -38
  37. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  38. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +62 -42
  39. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  40. package/dist/esm/transformer/babel-transformer.mjs +133 -96
  41. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  42. package/dist/esm/transformer/babel-transformer.native.js +147 -103
  43. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  44. package/dist/esm/transformer/expoVirtualEnv.mjs +67 -0
  45. package/dist/esm/transformer/expoVirtualEnv.mjs.map +1 -0
  46. package/dist/esm/transformer/expoVirtualEnv.native.js +86 -0
  47. package/dist/esm/transformer/expoVirtualEnv.native.js.map +1 -0
  48. package/dist/esm/transformer/loadBabelConfig.mjs +1 -1
  49. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
  50. package/dist/esm/transformer/loadBabelConfig.native.js +1 -1
  51. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
  52. package/dist/esm/transformer/metroNativeWorker.mjs +8 -20
  53. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  54. package/dist/esm/transformer/metroNativeWorker.native.js +8 -20
  55. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  56. package/dist/esm/transformer/transformSync.mjs +3 -3
  57. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  58. package/dist/esm/transformer/transformSync.native.js +3 -3
  59. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  60. package/dist/esm/utils/exit.mjs +1 -1
  61. package/dist/esm/utils/exit.mjs.map +1 -1
  62. package/dist/esm/utils/exit.native.js +1 -1
  63. package/dist/esm/utils/exit.native.js.map +1 -1
  64. package/package.json +7 -9
  65. package/src/index.ts +0 -2
  66. package/src/metro-config/getMetroConfigFromViteConfig.test.ts +5 -0
  67. package/src/metro-config/getMetroConfigFromViteConfig.ts +81 -96
  68. package/src/plugins/metroPlugin.ts +3 -6
  69. package/src/transformer/babel-transformer.test.ts +118 -0
  70. package/src/transformer/babel-transformer.ts +82 -15
  71. package/src/transformer/expoVirtualEnv.integration.test.ts +106 -0
  72. package/src/transformer/expoVirtualEnv.test.ts +72 -0
  73. package/src/transformer/expoVirtualEnv.ts +115 -0
  74. package/src/transformer/loadBabelConfig.ts +1 -1
  75. package/src/transformer/metroNativeWorker.test.ts +105 -1
  76. package/src/transformer/metroNativeWorker.ts +12 -33
  77. package/src/transformer/transformSync.test.ts +22 -0
  78. package/src/transformer/transformSync.ts +4 -4
  79. package/src/utils/exit.ts +2 -2
  80. package/src/utils/getTerminalReporter.ts +1 -1
  81. package/src/utils/projectImport.ts +2 -2
  82. package/types/index.d.ts +0 -2
  83. package/types/index.d.ts.map +1 -1
  84. package/types/metro-config/getMetroConfigFromViteConfig.d.ts +2 -2
  85. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  86. package/types/plugins/metroPlugin.d.ts +2 -4
  87. package/types/plugins/metroPlugin.d.ts.map +1 -1
  88. package/types/transformer/babel-transformer.d.ts +10 -1
  89. package/types/transformer/babel-transformer.d.ts.map +1 -1
  90. package/types/transformer/expoVirtualEnv.d.ts +8 -0
  91. package/types/transformer/expoVirtualEnv.d.ts.map +1 -0
  92. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  93. package/types/utils/projectImport.d.ts +2 -2
  94. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -59
  95. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +0 -62
  96. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -64
  97. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  98. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -35
  99. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +0 -37
  100. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -39
  101. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  102. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +0 -40
  103. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
  104. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -41
  105. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  106. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -15
  107. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
  108. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -15
  109. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  110. package/src/plugins/expoManifestRequestHandlerPlugin.ts +0 -88
  111. package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +0 -28
  112. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +0 -14
  113. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
  114. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
  115. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
@@ -1,12 +1,18 @@
1
+ import { searchForWorkspaceRoot } from "vite";
1
2
  import { spawn } from "child_process";
2
3
  import { resolve } from "path";
3
4
  import micromatch from "micromatch";
5
+ import { getDefaultConfig } from "@react-native/metro-config";
4
6
  import { findUserBabelConfig } from "@vxrn/compiler";
5
7
  import { projectImport, projectResolve } from "../utils/projectImport.native.js";
6
8
  import { getTerminalReporter } from "../utils/getTerminalReporter.native.js";
7
- import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js";
8
9
 
9
10
  var WATCHMAN_PROBE_TIMEOUT_MS = 2e3;
11
+ var expoEnvAdditionalExts = [
12
+ "env",
13
+ "local",
14
+ "development"
15
+ ];
10
16
  var watchmanResponsivePromises = /* @__PURE__ */ new Map();
11
17
  var didWarnAboutWatchmanFallback = false;
12
18
  var rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
@@ -17,6 +23,27 @@ var metroWatchExclusions = [
17
23
  /[/\\]\.vite(?:[/\\]|$)/,
18
24
  /[/\\]node_modules[/\\]\.vxrn(?:[/\\]|$)/
19
25
  ];
26
+ function enforceWorkspaceVisibility(config, projectRoot) {
27
+ var _config_watchFolders, _ref;
28
+ var _config_resolver;
29
+ var workspaceRoot = searchForWorkspaceRoot(projectRoot);
30
+ if (workspaceRoot === projectRoot) return config;
31
+ return {
32
+ ...config,
33
+ watchFolders: [.../* @__PURE__ */ new Set([...(_config_watchFolders = config.watchFolders) !== null && _config_watchFolders !== void 0 ? _config_watchFolders : [], workspaceRoot])],
34
+ resolver: {
35
+ ...config.resolver,
36
+ nodeModulesPaths: [.../* @__PURE__ */ new Set([
37
+ ...(_ref = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.nodeModulesPaths) !== null && _ref !== void 0 ? _ref : [],
38
+ resolve(projectRoot, "node_modules"),
39
+ resolve(workspaceRoot, "node_modules")
40
+ ])]
41
+ }
42
+ };
43
+ }
44
+ function getReactNativeDefaultConfig(projectRoot) {
45
+ return enforceWorkspaceVisibility(getDefaultConfig(projectRoot), projectRoot);
46
+ }
20
47
  function getPlatformFromBundleUrl(url) {
21
48
  var _url_match;
22
49
  var platform = (_url_match = url.match(/[?&]platform=(ios|android)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];
@@ -24,9 +51,6 @@ function getPlatformFromBundleUrl(url) {
24
51
  }
25
52
  function rewriteMainModuleBundleUrl(url, resolveMainModuleName) {
26
53
  var resolvedMainModulePath = resolveMainModuleName({ platform: getPlatformFromBundleUrl(url) });
27
- if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
28
- return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
29
- }
30
54
  return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`);
31
55
  }
32
56
  function isBareSpecifier(name) {
@@ -94,8 +118,8 @@ function resolveNativeTransforms(projectRoot, metroPluginOptions) {
94
118
  };
95
119
  }
96
120
  async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
97
- var _ref;
98
- var _metroPluginOptions_argv, _defaultConfig_resolver;
121
+ var _ref, _ref1;
122
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
99
123
  var extraConfig = {};
100
124
  var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);
101
125
  var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -104,27 +128,20 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
104
128
  didWarnAboutWatchmanFallback = true;
105
129
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
106
130
  }
107
- var { getDefaultConfig } = await projectImport(projectRoot, "@expo/metro-config");
108
- var _defaultConfig = getDefaultConfig(projectRoot);
131
+ var _defaultConfig = getReactNativeDefaultConfig(projectRoot);
109
132
  if (mainModuleName) {
110
- var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
111
- var resolveMainModuleName = await (async function() {
112
- var ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
113
- var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
114
- patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName);
115
- return function(p) {
116
- return manifestHandlerMiddleware.resolveMainModuleName({
117
- pkg: { main: mainModuleName },
118
- platform: p.platform
119
- });
120
- };
121
- })();
133
+ var _defaultConfig_server;
134
+ var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
135
+ var resolveMainModuleName = function() {
136
+ return mainModuleName;
137
+ };
122
138
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
123
139
  _defaultConfig.server.rewriteRequestUrl = function(url) {
124
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
140
+ var _ref2;
141
+ if (rootIndexBundleRequestPattern.test(url)) {
125
142
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
126
143
  }
127
- return origRewriteRequestUrl(url);
144
+ return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
128
145
  };
129
146
  }
130
147
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -136,6 +153,10 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
136
153
  }
137
154
  var defaultConfig = {
138
155
  ..._defaultConfig,
156
+ watcher: {
157
+ ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,
158
+ additionalExts: [.../* @__PURE__ */ new Set([...(_ref1 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_watcher = _defaultConfig.watcher) === null || _defaultConfig_watcher === void 0 ? void 0 : _defaultConfig_watcher.additionalExts) !== null && _ref1 !== void 0 ? _ref1 : [], ...expoEnvAdditionalExts])]
159
+ },
139
160
  resolver: {
140
161
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
141
162
  useWatchman,
@@ -171,6 +192,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
171
192
  },
172
193
  transformer: {
173
194
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,
195
+ unstable_allowRequireContext: true,
174
196
  babelTransformerPath: projectResolve(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
175
197
  },
176
198
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -181,14 +203,14 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
181
203
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
182
204
  };
183
205
  return {
184
- defaultConfig: enforceBareMainModuleEntry(merged, mainModuleName),
206
+ defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
185
207
  projectRoot,
186
208
  extraConfig
187
209
  };
188
210
  }
189
211
  async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
190
- var _ref;
191
- var _metroPluginOptions_argv, _defaultConfig_resolver;
212
+ var _ref, _ref1;
213
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
192
214
  var extraConfig = {};
193
215
  var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);
194
216
  var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -198,27 +220,20 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
198
220
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
199
221
  }
200
222
  var { loadConfig } = await projectImport(projectRoot, "metro");
201
- var { getDefaultConfig } = await projectImport(projectRoot, "@expo/metro-config");
202
- var _defaultConfig = getDefaultConfig(projectRoot);
223
+ var _defaultConfig = getReactNativeDefaultConfig(projectRoot);
203
224
  if (mainModuleName) {
204
- var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
205
- var resolveMainModuleName = await (async function() {
206
- var ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
207
- var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
208
- patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName);
209
- return function(p) {
210
- return manifestHandlerMiddleware.resolveMainModuleName({
211
- pkg: { main: mainModuleName },
212
- platform: p.platform
213
- });
214
- };
215
- })();
225
+ var _defaultConfig_server;
226
+ var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
227
+ var resolveMainModuleName = function() {
228
+ return mainModuleName;
229
+ };
216
230
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
217
231
  _defaultConfig.server.rewriteRequestUrl = function(url) {
218
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
232
+ var _ref2;
233
+ if (rootIndexBundleRequestPattern.test(url)) {
219
234
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
220
235
  }
221
- return origRewriteRequestUrl(url);
236
+ return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
222
237
  };
223
238
  }
224
239
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -230,6 +245,10 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
230
245
  }
231
246
  var defaultConfig = {
232
247
  ..._defaultConfig,
248
+ watcher: {
249
+ ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,
250
+ additionalExts: [.../* @__PURE__ */ new Set([...(_ref1 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_watcher = _defaultConfig.watcher) === null || _defaultConfig_watcher === void 0 ? void 0 : _defaultConfig_watcher.additionalExts) !== null && _ref1 !== void 0 ? _ref1 : [], ...expoEnvAdditionalExts])]
251
+ },
233
252
  resolver: {
234
253
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
235
254
  useWatchman,
@@ -265,6 +284,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
265
284
  },
266
285
  transformer: {
267
286
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,
287
+ unstable_allowRequireContext: true,
268
288
  babelTransformerPath: projectResolve(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
269
289
  },
270
290
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -280,7 +300,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
280
300
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
281
301
  });
282
302
  return {
283
- ...enforceBareMainModuleEntry(metroConfig, mainModuleName),
303
+ ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
284
304
  ...extraConfig
285
305
  };
286
306
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getMetroConfigFromViteConfig.native.js","names":[],"sources":["esm/metro-config/getMetroConfigFromViteConfig.native.js"],"sourcesContent":["import { spawn } from \"child_process\";\nimport { resolve } from \"path\";\nimport micromatch from \"micromatch\";\nimport { findUserBabelConfig } from \"@vxrn/compiler\";\nimport { projectImport, projectResolve } from \"../utils/projectImport\";\nimport { getTerminalReporter } from \"../utils/getTerminalReporter\";\nimport { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from \"../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName\";\nvar WATCHMAN_PROBE_TIMEOUT_MS = 2e3;\nvar watchmanResponsivePromises = /* @__PURE__ */ new Map();\nvar didWarnAboutWatchmanFallback = false;\nvar rootIndexBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/index\\.bundle(?=$|[?#])/;\nvar metroWatchExclusions = [\n /[/\\\\]dist[/\\\\](?:static|server)(?:[/\\\\]|$)/,\n /[/\\\\]tests[/\\\\][^/\\\\]+[/\\\\]dist(?:[/\\\\]|$)/,\n /[/\\\\]\\.docker(?:[/\\\\]|$)/,\n /[/\\\\]\\.vite(?:[/\\\\]|$)/,\n /[/\\\\]node_modules[/\\\\]\\.vxrn(?:[/\\\\]|$)/\n];\nfunction getPlatformFromBundleUrl(url) {\n var _url_match;\n var platform = (_url_match = url.match(/[?&]platform=(ios|android)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];\n return platform === \"android\" ? \"android\" : \"ios\";\n}\nfunction rewriteMainModuleBundleUrl(url, resolveMainModuleName) {\n var resolvedMainModulePath = resolveMainModuleName({\n platform: getPlatformFromBundleUrl(url)\n });\n if (url.includes(\"/.expo/.virtual-metro-entry.bundle?\")) {\n return url.replace(\".expo/.virtual-metro-entry\", resolvedMainModulePath);\n }\n return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`);\n}\nfunction isBareSpecifier(name) {\n return name !== \"\" && !name.startsWith(\".\") && !name.startsWith(\"/\");\n}\nfunction bareMainModuleForRequest(moduleName, mainModuleName) {\n if (!mainModuleName || !isBareSpecifier(mainModuleName)) return void 0;\n if (moduleName === `./${mainModuleName}`) return mainModuleName;\n return void 0;\n}\nfunction enforceBareMainModuleEntry(config, mainModuleName) {\n var _config_resolver;\n if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;\n var innerResolveRequest = config === null || config === void 0 ? void 0 : (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;\n return {\n ...config,\n resolver: {\n ...config === null || config === void 0 ? void 0 : config.resolver,\n resolveRequest: function(context, moduleName, platform) {\n var bareMain = bareMainModuleForRequest(moduleName, mainModuleName);\n var resolveRequest = innerResolveRequest || context.resolveRequest;\n return resolveRequest(context, bareMain !== null && bareMain !== void 0 ? bareMain : moduleName, platform);\n }\n }\n };\n}\nasync function isWatchmanResponsive(projectRoot) {\n var probe = watchmanResponsivePromises.get(projectRoot);\n if (probe) {\n return probe;\n }\n probe = new Promise(function(resolve2) {\n var settled = false;\n var finish = function(value) {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve2(value);\n };\n var child = spawn(\"watchman\", [\n \"watch-project\",\n projectRoot\n ], {\n stdio: \"ignore\"\n });\n var timeout = setTimeout(function() {\n child.kill();\n finish(false);\n }, WATCHMAN_PROBE_TIMEOUT_MS);\n child.once(\"error\", function() {\n finish(false);\n });\n child.once(\"exit\", function(code) {\n finish(code === 0);\n });\n });\n watchmanResponsivePromises.set(projectRoot, probe);\n return probe;\n}\nfunction resolveNativeTransforms(projectRoot, metroPluginOptions) {\n var userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null;\n var hasUserBabelConfig = Boolean(userBabelConfigPath);\n var isNativeTransforms = process.env.ONE_METRO_NATIVE_TRANSFORMS === \"0\" ? false : process.env.ONE_METRO_NATIVE_TRANSFORMS === \"1\" ? true : metroPluginOptions.nativeTransforms === false ? false : metroPluginOptions.nativeTransforms === true ? true : hasUserBabelConfig ? false : true;\n if (userBabelConfigPath && isNativeTransforms) {\n console.warn(`[vxrn/metro] Ignoring user babel config at ${userBabelConfigPath} because native transforms are explicitly enabled (nativeTransforms: true or ONE_METRO_NATIVE_TRANSFORMS=1). Port its plugins to nativeTransformModules, or set nativeTransforms: false (or ONE_METRO_NATIVE_TRANSFORMS=0) to use the babel transformer.`);\n }\n return {\n isNativeTransforms,\n userBabelConfigPath\n };\n}\nasync function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {\n var _ref;\n var _metroPluginOptions_argv, _defaultConfig_resolver;\n var extraConfig = {};\n var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);\n var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n var useWatchman = watchman !== null && watchman !== void 0 ? watchman : await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\");\n }\n var { getDefaultConfig } = await projectImport(projectRoot, \"@expo/metro-config\");\n var _defaultConfig = getDefaultConfig(projectRoot);\n if (mainModuleName) {\n var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;\n var resolveMainModuleName = await (async function() {\n var ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, \"@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js\")).default.ExpoGoManifestHandlerMiddleware;\n var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});\n patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName);\n return function(p) {\n return manifestHandlerMiddleware.resolveMainModuleName({\n pkg: {\n main: mainModuleName\n },\n platform: p.platform\n });\n };\n })();\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = function(url) {\n if (url.includes(\"/.expo/.virtual-metro-entry.bundle?\") || rootIndexBundleRequestPattern.test(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl(url);\n };\n }\n var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;\n var blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [\n existingBlockList\n ] : [],\n ...metroWatchExclusions\n ];\n var { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n var nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\");\n }\n var defaultConfig = {\n ..._defaultConfig,\n resolver: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,\n useWatchman,\n blockList,\n sourceExts: [\n \"js\",\n \"jsx\",\n \"json\",\n \"ts\",\n \"tsx\",\n \"mjs\",\n \"cjs\"\n ],\n // `one` related packages are using `.mjs` extensions. This fixes `.native` files not being resolved correctly when `.mjs` files are present.\n resolveRequest: function(context, moduleName, platform) {\n var _defaultConfig_resolver2;\n var origResolveRequestFn = (_defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver2 = _defaultConfig.resolver) === null || _defaultConfig_resolver2 === void 0 ? void 0 : _defaultConfig_resolver2.resolveRequest) || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(context, \"@vxrn/vite-plugin-metro/empty\", platform);\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n var contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(function(c) {\n return c !== \"import\";\n })\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,\n babelTransformerPath: projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/babel-transformer\")\n },\n // transformerPath is a TOP-LEVEL metro config key, not a transformer option.\n // nesting it under transformer silently leaves metro on its default worker.\n ...nativeWorkerPath ? {\n transformerPath: nativeWorkerPath\n } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n var merged = {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n };\n return {\n defaultConfig: enforceBareMainModuleEntry(merged, mainModuleName),\n projectRoot,\n extraConfig\n };\n}\nasync function getMetroConfigFromViteConfig(config, metroPluginOptions) {\n var _ref;\n var _metroPluginOptions_argv, _defaultConfig_resolver;\n var extraConfig = {};\n var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);\n var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n var useWatchman = watchman !== null && watchman !== void 0 ? watchman : await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\");\n }\n var { loadConfig } = await projectImport(projectRoot, \"metro\");\n var { getDefaultConfig } = await projectImport(projectRoot, \"@expo/metro-config\");\n var _defaultConfig = getDefaultConfig(projectRoot);\n if (mainModuleName) {\n var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;\n var resolveMainModuleName = await (async function() {\n var ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, \"@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js\")).default.ExpoGoManifestHandlerMiddleware;\n var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});\n patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName);\n return function(p) {\n return manifestHandlerMiddleware.resolveMainModuleName({\n pkg: {\n main: mainModuleName\n },\n platform: p.platform\n });\n };\n })();\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = function(url) {\n if (url.includes(\"/.expo/.virtual-metro-entry.bundle?\") || rootIndexBundleRequestPattern.test(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl(url);\n };\n }\n var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;\n var blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [\n existingBlockList\n ] : [],\n ...metroWatchExclusions\n ];\n var { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n var nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\");\n }\n var defaultConfig = {\n ..._defaultConfig,\n resolver: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,\n useWatchman,\n blockList,\n sourceExts: [\n \"js\",\n \"jsx\",\n \"json\",\n \"ts\",\n \"tsx\",\n \"mjs\",\n \"cjs\"\n ],\n // `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.\n resolveRequest: function(context, moduleName, platform) {\n var _defaultConfig_resolver2;\n var origResolveRequestFn = (_defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver2 = _defaultConfig.resolver) === null || _defaultConfig_resolver2 === void 0 ? void 0 : _defaultConfig_resolver2.resolveRequest) || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(context, \"@vxrn/vite-plugin-metro/empty\", platform);\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n var contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(function(c) {\n return c !== \"import\";\n })\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,\n babelTransformerPath: projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/babel-transformer\")\n },\n // transformerPath is a TOP-LEVEL metro config key, not a transformer option.\n // nesting it under transformer silently leaves metro on its default worker.\n ...nativeWorkerPath ? {\n transformerPath: nativeWorkerPath\n } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n var metroConfig = await loadConfig({\n cwd: projectRoot,\n projectRoot,\n \"reset-cache\": !!process.env.METRO_RESET_CACHE,\n ...argv\n }, {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n });\n return {\n ...enforceBareMainModuleEntry(metroConfig, mainModuleName),\n ...extraConfig\n };\n}\nexport {\n buildMetroConfigInputFromViteConfig,\n getMetroConfigFromViteConfig\n};\n//# sourceMappingURL=getMetroConfigFromViteConfig.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"getMetroConfigFromViteConfig.native.js","names":[],"sources":["esm/metro-config/getMetroConfigFromViteConfig.native.js"],"sourcesContent":["import { searchForWorkspaceRoot } from \"vite\";\nimport { spawn } from \"child_process\";\nimport { resolve } from \"path\";\nimport micromatch from \"micromatch\";\nimport { getDefaultConfig } from \"@react-native/metro-config\";\nimport { findUserBabelConfig } from \"@vxrn/compiler\";\nimport { projectImport, projectResolve } from \"../utils/projectImport\";\nimport { getTerminalReporter } from \"../utils/getTerminalReporter\";\nvar WATCHMAN_PROBE_TIMEOUT_MS = 2e3;\nvar expoEnvAdditionalExts = [\n \"env\",\n \"local\",\n \"development\"\n];\nvar watchmanResponsivePromises = /* @__PURE__ */ new Map();\nvar didWarnAboutWatchmanFallback = false;\nvar rootIndexBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/index\\.bundle(?=$|[?#])/;\nvar metroWatchExclusions = [\n /[/\\\\]dist[/\\\\](?:static|server)(?:[/\\\\]|$)/,\n /[/\\\\]tests[/\\\\][^/\\\\]+[/\\\\]dist(?:[/\\\\]|$)/,\n /[/\\\\]\\.docker(?:[/\\\\]|$)/,\n /[/\\\\]\\.vite(?:[/\\\\]|$)/,\n /[/\\\\]node_modules[/\\\\]\\.vxrn(?:[/\\\\]|$)/\n];\nfunction enforceWorkspaceVisibility(config, projectRoot) {\n var _config_watchFolders, _ref;\n var _config_resolver;\n var workspaceRoot = searchForWorkspaceRoot(projectRoot);\n if (workspaceRoot === projectRoot) return config;\n return {\n ...config,\n watchFolders: [\n .../* @__PURE__ */ new Set([\n ...(_config_watchFolders = config.watchFolders) !== null && _config_watchFolders !== void 0 ? _config_watchFolders : [],\n workspaceRoot\n ])\n ],\n resolver: {\n ...config.resolver,\n nodeModulesPaths: [\n .../* @__PURE__ */ new Set([\n ...(_ref = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.nodeModulesPaths) !== null && _ref !== void 0 ? _ref : [],\n resolve(projectRoot, \"node_modules\"),\n resolve(workspaceRoot, \"node_modules\")\n ])\n ]\n }\n };\n}\nfunction getReactNativeDefaultConfig(projectRoot) {\n return enforceWorkspaceVisibility(getDefaultConfig(projectRoot), projectRoot);\n}\nfunction getPlatformFromBundleUrl(url) {\n var _url_match;\n var platform = (_url_match = url.match(/[?&]platform=(ios|android)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];\n return platform === \"android\" ? \"android\" : \"ios\";\n}\nfunction rewriteMainModuleBundleUrl(url, resolveMainModuleName) {\n var resolvedMainModulePath = resolveMainModuleName({\n platform: getPlatformFromBundleUrl(url)\n });\n return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`);\n}\nfunction isBareSpecifier(name) {\n return name !== \"\" && !name.startsWith(\".\") && !name.startsWith(\"/\");\n}\nfunction bareMainModuleForRequest(moduleName, mainModuleName) {\n if (!mainModuleName || !isBareSpecifier(mainModuleName)) return void 0;\n if (moduleName === `./${mainModuleName}`) return mainModuleName;\n return void 0;\n}\nfunction enforceBareMainModuleEntry(config, mainModuleName) {\n var _config_resolver;\n if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;\n var innerResolveRequest = config === null || config === void 0 ? void 0 : (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;\n return {\n ...config,\n resolver: {\n ...config === null || config === void 0 ? void 0 : config.resolver,\n resolveRequest: function(context, moduleName, platform) {\n var bareMain = bareMainModuleForRequest(moduleName, mainModuleName);\n var resolveRequest = innerResolveRequest || context.resolveRequest;\n return resolveRequest(context, bareMain !== null && bareMain !== void 0 ? bareMain : moduleName, platform);\n }\n }\n };\n}\nasync function isWatchmanResponsive(projectRoot) {\n var probe = watchmanResponsivePromises.get(projectRoot);\n if (probe) {\n return probe;\n }\n probe = new Promise(function(resolve2) {\n var settled = false;\n var finish = function(value) {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve2(value);\n };\n var child = spawn(\"watchman\", [\n \"watch-project\",\n projectRoot\n ], {\n stdio: \"ignore\"\n });\n var timeout = setTimeout(function() {\n child.kill();\n finish(false);\n }, WATCHMAN_PROBE_TIMEOUT_MS);\n child.once(\"error\", function() {\n finish(false);\n });\n child.once(\"exit\", function(code) {\n finish(code === 0);\n });\n });\n watchmanResponsivePromises.set(projectRoot, probe);\n return probe;\n}\nfunction resolveNativeTransforms(projectRoot, metroPluginOptions) {\n var userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null;\n var hasUserBabelConfig = Boolean(userBabelConfigPath);\n var isNativeTransforms = process.env.ONE_METRO_NATIVE_TRANSFORMS === \"0\" ? false : process.env.ONE_METRO_NATIVE_TRANSFORMS === \"1\" ? true : metroPluginOptions.nativeTransforms === false ? false : metroPluginOptions.nativeTransforms === true ? true : hasUserBabelConfig ? false : true;\n if (userBabelConfigPath && isNativeTransforms) {\n console.warn(`[vxrn/metro] Ignoring user babel config at ${userBabelConfigPath} because native transforms are explicitly enabled (nativeTransforms: true or ONE_METRO_NATIVE_TRANSFORMS=1). Port its plugins to nativeTransformModules, or set nativeTransforms: false (or ONE_METRO_NATIVE_TRANSFORMS=0) to use the babel transformer.`);\n }\n return {\n isNativeTransforms,\n userBabelConfigPath\n };\n}\nasync function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {\n var _ref, _ref1;\n var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;\n var extraConfig = {};\n var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);\n var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n var useWatchman = watchman !== null && watchman !== void 0 ? watchman : await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\");\n }\n var _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n var _defaultConfig_server;\n var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;\n var resolveMainModuleName = function() {\n return mainModuleName;\n };\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = function(url) {\n var _ref2;\n if (rootIndexBundleRequestPattern.test(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;\n };\n }\n var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;\n var blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [\n existingBlockList\n ] : [],\n ...metroWatchExclusions\n ];\n var { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n var nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\");\n }\n var defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ...(_ref1 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_watcher = _defaultConfig.watcher) === null || _defaultConfig_watcher === void 0 ? void 0 : _defaultConfig_watcher.additionalExts) !== null && _ref1 !== void 0 ? _ref1 : [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,\n useWatchman,\n blockList,\n sourceExts: [\n \"js\",\n \"jsx\",\n \"json\",\n \"ts\",\n \"tsx\",\n \"mjs\",\n \"cjs\"\n ],\n // `one` related packages are using `.mjs` extensions. This fixes `.native` files not being resolved correctly when `.mjs` files are present.\n resolveRequest: function(context, moduleName, platform) {\n var _defaultConfig_resolver2;\n var origResolveRequestFn = (_defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver2 = _defaultConfig.resolver) === null || _defaultConfig_resolver2 === void 0 ? void 0 : _defaultConfig_resolver2.resolveRequest) || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(context, \"@vxrn/vite-plugin-metro/empty\", platform);\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n var contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(function(c) {\n return c !== \"import\";\n })\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,\n // one's router and Expo's optional development env module both use\n // require.context. Metro installs a throwing runtime stub unless this\n // graph feature is enabled.\n unstable_allowRequireContext: true,\n babelTransformerPath: projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/babel-transformer\")\n },\n // transformerPath is a TOP-LEVEL metro config key, not a transformer option.\n // nesting it under transformer silently leaves metro on its default worker.\n ...nativeWorkerPath ? {\n transformerPath: nativeWorkerPath\n } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n var merged = {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n };\n return {\n defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),\n projectRoot,\n extraConfig\n };\n}\nasync function getMetroConfigFromViteConfig(config, metroPluginOptions) {\n var _ref, _ref1;\n var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;\n var extraConfig = {};\n var projectRoot = resolve((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);\n var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n var useWatchman = watchman !== null && watchman !== void 0 ? watchman : await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\");\n }\n var { loadConfig } = await projectImport(projectRoot, \"metro\");\n var _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n var _defaultConfig_server;\n var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;\n var resolveMainModuleName = function() {\n return mainModuleName;\n };\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = function(url) {\n var _ref2;\n if (rootIndexBundleRequestPattern.test(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;\n };\n }\n var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;\n var blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [\n existingBlockList\n ] : [],\n ...metroWatchExclusions\n ];\n var { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n var nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\");\n }\n var defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ...(_ref1 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_watcher = _defaultConfig.watcher) === null || _defaultConfig_watcher === void 0 ? void 0 : _defaultConfig_watcher.additionalExts) !== null && _ref1 !== void 0 ? _ref1 : [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,\n useWatchman,\n blockList,\n sourceExts: [\n \"js\",\n \"jsx\",\n \"json\",\n \"ts\",\n \"tsx\",\n \"mjs\",\n \"cjs\"\n ],\n // `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.\n resolveRequest: function(context, moduleName, platform) {\n var _defaultConfig_resolver2;\n var origResolveRequestFn = (_defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver2 = _defaultConfig.resolver) === null || _defaultConfig_resolver2 === void 0 ? void 0 : _defaultConfig_resolver2.resolveRequest) || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(context, \"@vxrn/vite-plugin-metro/empty\", platform);\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n var contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(function(c) {\n return c !== \"import\";\n })\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,\n // one's router and Expo's optional development env module both use\n // require.context. Metro installs a throwing runtime stub unless this\n // graph feature is enabled.\n unstable_allowRequireContext: true,\n babelTransformerPath: projectResolve(projectRoot, \"@vxrn/vite-plugin-metro/babel-transformer\")\n },\n // transformerPath is a TOP-LEVEL metro config key, not a transformer option.\n // nesting it under transformer silently leaves metro on its default worker.\n ...nativeWorkerPath ? {\n transformerPath: nativeWorkerPath\n } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n var metroConfig = await loadConfig({\n cwd: projectRoot,\n projectRoot,\n \"reset-cache\": !!process.env.METRO_RESET_CACHE,\n ...argv\n }, {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n });\n return {\n ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),\n ...extraConfig\n };\n}\nexport {\n buildMetroConfigInputFromViteConfig,\n getMetroConfigFromViteConfig\n};\n//# sourceMappingURL=getMetroConfigFromViteConfig.js.map\n"],"mappings":"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"}
@@ -1,112 +1,149 @@
1
1
  import assert from "node:assert";
2
+ import { createHash } from "node:crypto";
3
+ import { readFileSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { substituteExpoVirtualEnvSource } from "./expoVirtualEnv.mjs";
2
6
  import { loadBabelConfig } from "./loadBabelConfig.mjs";
3
7
  import { transformSync } from "./transformSync.mjs";
4
8
 
5
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
6
-
7
- var require_babel_transformer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
8
- const debug = require("debug")("expo:metro-config:babel-transformer");
9
- function isCustomTruthy(value) {
10
- return String(value) === "true";
11
- }
12
- function memoize(fn) {
13
- const cache = /* @__PURE__ */ new Map();
14
- return ((...args) => {
15
- const key = JSON.stringify(args);
16
- if (cache.has(key)) {
17
- return cache.get(key);
18
- }
19
- const result = fn(...args);
20
- cache.set(key, result);
21
- return result;
22
- });
9
+ const debug = require("debug")("vxrn:metro-config:babel-transformer");
10
+ function isCustomTruthy(value) {
11
+ return String(value) === "true";
12
+ }
13
+ function memoize(fn) {
14
+ const cache = /* @__PURE__ */ new Map();
15
+ return ((...args) => {
16
+ const key = JSON.stringify(args);
17
+ if (cache.has(key)) {
18
+ return cache.get(key);
19
+ }
20
+ const result = fn(...args);
21
+ cache.set(key, result);
22
+ return result;
23
+ });
24
+ }
25
+ const memoizeWarning = memoize((message) => {
26
+ debug(message);
27
+ });
28
+ function getBabelCaller({ filename, options, oneViteMetroBabelConfig }) {
29
+ const isNodeModule = filename.includes("node_modules");
30
+ const isReactServer = options.customTransformOptions?.environment === "react-server";
31
+ const isGenericServer = options.customTransformOptions?.environment === "node";
32
+ const isServer = isReactServer || isGenericServer;
33
+ const routerRoot = typeof options.customTransformOptions?.routerRoot === "string" ? decodeURI(options.customTransformOptions.routerRoot) : void 0;
34
+ if (routerRoot == null) {
35
+ memoizeWarning("Warning: Missing transform.routerRoot option in Metro bundling request, falling back to `app` as routes directory.");
23
36
  }
24
- const memoizeWarning = memoize((message) => {
25
- debug(message);
37
+ return {
38
+ name: "metro",
39
+ bundler: "metro",
40
+ platform: options.platform,
41
+ isServer,
42
+ isReactServer,
43
+ baseUrl: typeof options.customTransformOptions?.baseUrl === "string" ? decodeURI(options.customTransformOptions.baseUrl) : "",
44
+ routerRoot: routerRoot ?? "app",
45
+ isDev: options.dev,
46
+ preserveEnvVars: isCustomTruthy(options.customTransformOptions?.preserveEnvVars) ? true : void 0,
47
+ asyncRoutes: isCustomTruthy(options.customTransformOptions?.asyncRoutes) ? true : void 0,
48
+ engine: stringOrUndefined(options.customTransformOptions?.engine),
49
+ projectRoot: options.projectRoot,
50
+ oneViteMetroBabelConfig,
51
+ isNodeModule,
52
+ isHMREnabled: options.dev,
53
+ supportsStaticESM: isCustomTruthy(options.customTransformOptions?.optimize) || options.experimentalImportSupport,
54
+ supportsReactCompiler: isCustomTruthy(options.customTransformOptions?.reactCompiler) ? true : void 0
55
+ };
56
+ }
57
+ function stringOrUndefined(value) {
58
+ return typeof value === "string" ? value : void 0;
59
+ }
60
+ const transform = ({ filename, src: originalSrc, options, plugins }) => {
61
+ const src = substituteExpoVirtualEnvSource({
62
+ filename,
63
+ src: originalSrc,
64
+ projectRoot: options.projectRoot,
65
+ dev: options.dev,
66
+ environment: options.customTransformOptions?.environment
26
67
  });
27
- function getBabelCaller({ filename, options, oneViteMetroBabelConfig }) {
28
- const isNodeModule = filename.includes("node_modules");
29
- const isReactServer = options.customTransformOptions?.environment === "react-server";
30
- const isGenericServer = options.customTransformOptions?.environment === "node";
31
- const isServer = isReactServer || isGenericServer;
32
- const routerRoot = typeof options.customTransformOptions?.routerRoot === "string" ? decodeURI(options.customTransformOptions.routerRoot) : void 0;
33
- if (routerRoot == null) {
34
- memoizeWarning("Warning: Missing transform.routerRoot option in Metro bundling request, falling back to `app` as routes directory. This can occur if you bundle without Expo CLI or expo/metro-config.");
68
+ const viteCustomTransformOptions = options.customTransformOptions?.vite;
69
+ const customOptionsFromVite = (() => {
70
+ const c = viteCustomTransformOptions;
71
+ if (!c || typeof c !== "object") {
72
+ return { babelConfig: {} };
73
+ }
74
+ return c;
75
+ })();
76
+ const hasOneViteMetroBabelConfig = customOptionsFromVite.oneViteMetroBabelConfig === true;
77
+ const babelConfigFromVitePlugin = customOptionsFromVite.babelConfig || {};
78
+ const OLD_BABEL_ENV = process.env.BABEL_ENV;
79
+ process.env.BABEL_ENV = options.dev ? "development" : process.env.BABEL_ENV || "production";
80
+ try {
81
+ const babelConfig = {
82
+ sourceType: "unambiguous",
83
+ ast: true,
84
+ code: false,
85
+ cloneInputAst: false,
86
+ cwd: options.projectRoot,
87
+ filename,
88
+ highlightCode: true,
89
+ ...babelConfigFromVitePlugin,
90
+ ...loadBabelConfig(options),
91
+ babelrc: typeof options.enableBabelRCLookup === "boolean" ? options.enableBabelRCLookup : true,
92
+ plugins: [...babelConfigFromVitePlugin.plugins || [], ...plugins],
93
+ caller: getBabelCaller({
94
+ filename,
95
+ options,
96
+ oneViteMetroBabelConfig: hasOneViteMetroBabelConfig
97
+ })
98
+ };
99
+ const result = transformSync(src, babelConfig, options);
100
+ if (!result) {
101
+ return { ast: null };
35
102
  }
103
+ assert(result.ast);
36
104
  return {
37
- name: "metro",
38
- bundler: "metro",
39
- platform: options.platform,
40
- isServer,
41
- isReactServer,
42
- baseUrl: typeof options.customTransformOptions?.baseUrl === "string" ? decodeURI(options.customTransformOptions.baseUrl) : "",
43
- routerRoot: routerRoot ?? "app",
44
- isDev: options.dev,
45
- preserveEnvVars: isCustomTruthy(options.customTransformOptions?.preserveEnvVars) ? true : void 0,
46
- asyncRoutes: isCustomTruthy(options.customTransformOptions?.asyncRoutes) ? true : void 0,
47
- engine: stringOrUndefined(options.customTransformOptions?.engine),
48
- projectRoot: options.projectRoot,
49
- oneViteMetroBabelConfig,
50
- isNodeModule,
51
- isHMREnabled: options.dev,
52
- supportsStaticESM: isCustomTruthy(options.customTransformOptions?.optimize) || options.experimentalImportSupport,
53
- supportsReactCompiler: isCustomTruthy(options.customTransformOptions?.reactCompiler) ? true : void 0
105
+ ast: result.ast,
106
+ metadata: result.metadata
54
107
  };
108
+ } finally {
109
+ if (OLD_BABEL_ENV) {
110
+ process.env.BABEL_ENV = OLD_BABEL_ENV;
111
+ }
55
112
  }
56
- function stringOrUndefined(value) {
57
- return typeof value === "string" ? value : void 0;
113
+ };
114
+ function getCacheKey(options) {
115
+ const hash = createHash("sha256");
116
+ hash.update("vxrn-metro-babel-transformer-v1");
117
+ const projectRoot = options?.projectRoot;
118
+ if (!projectRoot) {
119
+ return hash.digest("hex");
58
120
  }
59
- const transform = ({ filename, src, options, plugins }) => {
60
- const viteCustomTransformOptions = options.customTransformOptions?.vite;
61
- const customOptionsFromVite = (() => {
62
- const c = viteCustomTransformOptions;
63
- if (!c || typeof c !== "object") {
64
- return { babelConfig: {} };
65
- }
66
- return c;
67
- })();
68
- const hasOneViteMetroBabelConfig = customOptionsFromVite.oneViteMetroBabelConfig === true;
69
- const babelConfigFromVitePlugin = customOptionsFromVite.babelConfig || {};
70
- const OLD_BABEL_ENV = process.env.BABEL_ENV;
71
- process.env.BABEL_ENV = options.dev ? "development" : process.env.BABEL_ENV || "production";
121
+ hash.update(projectRoot);
122
+ for (const file of [
123
+ ".env",
124
+ ".env.development",
125
+ ".env.local",
126
+ ".env.development.local"
127
+ ]) {
128
+ const filename = path.join(projectRoot, file);
129
+ hash.update(filename);
72
130
  try {
73
- const babelConfig = {
74
- sourceType: "unambiguous",
75
- ast: true,
76
- code: false,
77
- cloneInputAst: false,
78
- cwd: options.projectRoot,
79
- filename,
80
- highlightCode: true,
81
- ...babelConfigFromVitePlugin,
82
- ...loadBabelConfig(options),
83
- babelrc: typeof options.enableBabelRCLookup === "boolean" ? options.enableBabelRCLookup : true,
84
- plugins: [...babelConfigFromVitePlugin.plugins || [], ...plugins],
85
- caller: getBabelCaller({
86
- filename,
87
- options,
88
- oneViteMetroBabelConfig: hasOneViteMetroBabelConfig
89
- })
90
- };
91
- const result = transformSync(src, babelConfig, options);
92
- if (!result) {
93
- return { ast: null };
94
- }
95
- assert(result.ast);
96
- return {
97
- ast: result.ast,
98
- metadata: result.metadata
99
- };
100
- } finally {
101
- if (OLD_BABEL_ENV) {
102
- process.env.BABEL_ENV = OLD_BABEL_ENV;
131
+ hash.update(readFileSync(filename));
132
+ } catch (error) {
133
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
134
+ continue;
103
135
  }
136
+ throw error;
104
137
  }
105
- };
106
- const babelTransformer = { transform };
107
- module.exports = babelTransformer;
108
- }));
109
-
110
- export default require_babel_transformer();
138
+ }
139
+ hash.update(JSON.stringify(Object.entries(process.env).filter(([key]) => key.startsWith("ONE_PUBLIC_") || key.startsWith("EXPO_PUBLIC_")).sort(([left], [right]) => left.localeCompare(right))));
140
+ return hash.digest("hex");
141
+ }
142
+ const babelTransformer = {
143
+ transform,
144
+ getCacheKey
145
+ };
146
+ module.exports = babelTransformer;
111
147
 
148
+ export { getCacheKey };
112
149
  //# sourceMappingURL=babel-transformer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"babel-transformer.js","names":[],"sources":["esm/transformer/babel-transformer.js"],"sourcesContent":["import assert from \"node:assert\";\nimport { loadBabelConfig } from \"./loadBabelConfig\";\nimport { transformSync } from \"./transformSync\";\nconst debug = require(\"debug\")(\n \"expo:metro-config:babel-transformer\"\n);\nfunction isCustomTruthy(value) {\n return String(value) === \"true\";\n}\nfunction memoize(fn) {\n const cache = /* @__PURE__ */ new Map();\n return ((...args) => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = fn(...args);\n cache.set(key, result);\n return result;\n });\n}\nconst memoizeWarning = memoize((message) => {\n debug(message);\n});\nfunction getBabelCaller({\n filename,\n options,\n oneViteMetroBabelConfig\n}) {\n const isNodeModule = filename.includes(\"node_modules\");\n const isReactServer = options.customTransformOptions?.environment === \"react-server\";\n const isGenericServer = options.customTransformOptions?.environment === \"node\";\n const isServer = isReactServer || isGenericServer;\n const routerRoot = typeof options.customTransformOptions?.routerRoot === \"string\" ? decodeURI(options.customTransformOptions.routerRoot) : void 0;\n if (routerRoot == null) {\n memoizeWarning(\n \"Warning: Missing transform.routerRoot option in Metro bundling request, falling back to `app` as routes directory. This can occur if you bundle without Expo CLI or expo/metro-config.\"\n );\n }\n return {\n name: \"metro\",\n bundler: \"metro\",\n platform: options.platform,\n // Empower the babel preset to know the env it's bundling for.\n // Metro automatically updates the cache to account for the custom transform options.\n isServer,\n // Enable React Server Component rules for AST. The naming maps to the resolver property `--conditions=react-server`.\n isReactServer,\n // The base url to make requests from, used for hosting from non-standard locations.\n baseUrl: typeof options.customTransformOptions?.baseUrl === \"string\" ? decodeURI(options.customTransformOptions.baseUrl) : \"\",\n // Ensure we always use a mostly-valid router root.\n routerRoot: routerRoot ?? \"app\",\n isDev: options.dev,\n // This value indicates if the user has disabled the feature or not.\n // Other criteria may still cause the feature to be disabled, but all inputs used are\n // already considered in the cache key.\n preserveEnvVars: isCustomTruthy(options.customTransformOptions?.preserveEnvVars) ? true : void 0,\n asyncRoutes: isCustomTruthy(options.customTransformOptions?.asyncRoutes) ? true : void 0,\n // Pass the engine to babel so we can automatically transpile for the correct\n // target environment.\n engine: stringOrUndefined(options.customTransformOptions?.engine),\n // Provide the project root for accurately reading the Expo config.\n projectRoot: options.projectRoot,\n oneViteMetroBabelConfig,\n isNodeModule,\n isHMREnabled: options.dev,\n // Set the standard Babel flag to disable ESM transformations.\n supportsStaticESM: isCustomTruthy(options.customTransformOptions?.optimize) || options.experimentalImportSupport,\n // Enable React compiler support in Babel.\n // TODO: Remove this in the future when compiler is on by default.\n supportsReactCompiler: isCustomTruthy(options.customTransformOptions?.reactCompiler) ? true : void 0\n };\n}\nfunction stringOrUndefined(value) {\n return typeof value === \"string\" ? value : void 0;\n}\nconst transform = ({\n filename,\n src,\n options,\n // `plugins` is used for `functionMapBabelPlugin` from `metro-source-map`. Could make sense to move this to `babel-preset-expo` too.\n plugins\n}) => {\n const viteCustomTransformOptions = options.customTransformOptions?.vite;\n const customOptionsFromVite = (() => {\n const c = viteCustomTransformOptions;\n if (!c || typeof c !== \"object\") {\n return { babelConfig: {} };\n }\n return c;\n })();\n const hasOneViteMetroBabelConfig = customOptionsFromVite.oneViteMetroBabelConfig === true;\n const babelConfigFromVitePlugin = customOptionsFromVite.babelConfig || {};\n const OLD_BABEL_ENV = process.env.BABEL_ENV;\n process.env.BABEL_ENV = options.dev ? \"development\" : process.env.BABEL_ENV || \"production\";\n try {\n const babelConfig = {\n // ES modules require sourceType='module' but OSS may not always want that\n sourceType: \"unambiguous\",\n // The output we want from Babel methods\n ast: true,\n code: false,\n // NOTE(EvanBacon): We split the parse/transform steps up to accommodate\n // Hermes parsing, but this defaults to cloning the AST which increases\n // the transformation time by a fair amount.\n // You get this behavior by default when using Babel's `transform` method directly.\n cloneInputAst: false,\n // Options for debugging\n cwd: options.projectRoot,\n filename,\n highlightCode: true,\n ...babelConfigFromVitePlugin,\n ...loadBabelConfig(options),\n babelrc: typeof options.enableBabelRCLookup === \"boolean\" ? options.enableBabelRCLookup : true,\n plugins: [...babelConfigFromVitePlugin.plugins || [], ...plugins],\n // NOTE(EvanBacon): We heavily leverage the caller functionality to mutate the babel config.\n // This compensates for the lack of a format plugin system in Metro. Users can modify the\n // all (most) of the transforms in their local Babel config.\n // This also helps us keep the transform layers small and focused on a single task. We can also use this to\n // ensure the Babel config caching is more accurate.\n // Additionally, by moving everything Babel-related to the Babel preset, it makes it easier for users to reason\n // about the requirements of an Expo project, making it easier to migrate to other transpilers in the future.\n caller: getBabelCaller({\n filename,\n options,\n oneViteMetroBabelConfig: hasOneViteMetroBabelConfig\n })\n };\n const result = transformSync(src, babelConfig, options);\n if (!result) {\n return { ast: null };\n }\n assert(result.ast);\n return { ast: result.ast, metadata: result.metadata };\n } finally {\n if (OLD_BABEL_ENV) {\n process.env.BABEL_ENV = OLD_BABEL_ENV;\n }\n }\n};\nconst babelTransformer = {\n transform\n};\nmodule.exports = babelTransformer;\n//# sourceMappingURL=babel-transformer.js.map\n"],"mappings":";;;;;;;;;;;;;;CAGA,MAAM,kBAAgB,OAAO,CAAC,CAC5B,qCACF;CACA,SAAS,eAAe,OAAO;EAC7B,OAAO,OAAO,KAAK,MAAM;CAC3B;CACA,SAAS,QAAQ,IAAI;EACnB,MAAM,wBAAwB,IAAI,IAAI;EACtC,SAAS,GAAG,SAAS;GACnB,MAAM,MAAM,KAAK,UAAU,IAAI;GAC/B,IAAI,MAAM,IAAI,GAAG,GAAG;IAClB,OAAO,MAAM,IAAI,GAAG;GACtB;GACA,MAAM,SAAS,GAAG,GAAG,IAAI;GACzB,MAAM,IAAI,KAAK,MAAM;GACrB,OAAO;EACT;CACF;CACA,MAAM,iBAAiB,SAAS,YAAY;EAC1C,MAAM,OAAO;CACf,CAAC;CACD,SAAS,eAAe,EACtB,UACA,SACA,2BACC;EACD,MAAM,eAAe,SAAS,SAAS,cAAc;EACrD,MAAM,gBAAgB,QAAQ,wBAAwB,gBAAgB;EACtE,MAAM,kBAAkB,QAAQ,wBAAwB,gBAAgB;EACxE,MAAM,WAAW,iBAAiB;EAClC,MAAM,aAAa,OAAO,QAAQ,wBAAwB,eAAe,WAAW,UAAU,QAAQ,uBAAuB,UAAU,IAAI,KAAK;EAChJ,IAAI,cAAc,MAAM;GACtB,eACE,wLACF;EACF;EACA,OAAO;GACL,MAAM;GACN,SAAS;GACT,UAAU,QAAQ;GAGlB;GAEA;GAEA,SAAS,OAAO,QAAQ,wBAAwB,YAAY,WAAW,UAAU,QAAQ,uBAAuB,OAAO,IAAI;GAE3H,YAAY,cAAc;GAC1B,OAAO,QAAQ;GAIf,iBAAiB,eAAe,QAAQ,wBAAwB,eAAe,IAAI,OAAO,KAAK;GAC/F,aAAa,eAAe,QAAQ,wBAAwB,WAAW,IAAI,OAAO,KAAK;GAGvF,QAAQ,kBAAkB,QAAQ,wBAAwB,MAAM;GAEhE,aAAa,QAAQ;GACrB;GACA;GACA,cAAc,QAAQ;GAEtB,mBAAmB,eAAe,QAAQ,wBAAwB,QAAQ,KAAK,QAAQ;GAGvF,uBAAuB,eAAe,QAAQ,wBAAwB,aAAa,IAAI,OAAO,KAAK;EACrG;CACF;CACA,SAAS,kBAAkB,OAAO;EAChC,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK;CAClD;CACA,MAAM,aAAa,EACjB,UACA,KACA,SAEA,cACI;EACJ,MAAM,6BAA6B,QAAQ,wBAAwB;EACnE,MAAM,+BAA+B;GACnC,MAAM,IAAI;GACV,IAAI,CAAC,KAAK,OAAO,MAAM,UAAU;IAC/B,OAAO,EAAE,aAAa,CAAC,EAAE;GAC3B;GACA,OAAO;EACT,EAAC,CAAE;EACH,MAAM,6BAA6B,sBAAsB,4BAA4B;EACrF,MAAM,4BAA4B,sBAAsB,eAAe,CAAC;EACxE,MAAM,gBAAgB,QAAQ,IAAI;EAClC,QAAQ,IAAI,YAAY,QAAQ,MAAM,gBAAgB,QAAQ,IAAI,aAAa;EAC/E,IAAI;GACF,MAAM,cAAc;IAElB,YAAY;IAEZ,KAAK;IACL,MAAM;IAKN,eAAe;IAEf,KAAK,QAAQ;IACb;IACA,eAAe;IACf,GAAG;IACH,GAAG,gBAAgB,OAAO;IAC1B,SAAS,OAAO,QAAQ,wBAAwB,YAAY,QAAQ,sBAAsB;IAC1F,SAAS,CAAC,GAAG,0BAA0B,WAAW,CAAC,GAAG,GAAG,OAAO;IAQhE,QAAQ,eAAe;KACrB;KACA;KACA,yBAAyB;IAC3B,CAAC;GACH;GACA,MAAM,SAAS,cAAc,KAAK,aAAa,OAAO;GACtD,IAAI,CAAC,QAAQ;IACX,OAAO,EAAE,KAAK,KAAK;GACrB;GACA,OAAO,OAAO,GAAG;GACjB,OAAO;IAAE,KAAK,OAAO;IAAK,UAAU,OAAO;GAAS;EACtD,UAAU;GACR,IAAI,eAAe;IACjB,QAAQ,IAAI,YAAY;GAC1B;EACF;CACF;CACA,MAAM,mBAAmB,EACvB,UACF;CACA,OAAO,UAAU"}
1
+ {"version":3,"file":"babel-transformer.js","names":[],"sources":["esm/transformer/babel-transformer.js"],"sourcesContent":["import assert from \"node:assert\";\nimport { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { substituteExpoVirtualEnvSource } from \"./expoVirtualEnv\";\nimport { loadBabelConfig } from \"./loadBabelConfig\";\nimport { transformSync } from \"./transformSync\";\nconst debug = require(\"debug\")(\n \"vxrn:metro-config:babel-transformer\"\n);\nfunction isCustomTruthy(value) {\n return String(value) === \"true\";\n}\nfunction memoize(fn) {\n const cache = /* @__PURE__ */ new Map();\n return ((...args) => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = fn(...args);\n cache.set(key, result);\n return result;\n });\n}\nconst memoizeWarning = memoize((message) => {\n debug(message);\n});\nfunction getBabelCaller({\n filename,\n options,\n oneViteMetroBabelConfig\n}) {\n const isNodeModule = filename.includes(\"node_modules\");\n const isReactServer = options.customTransformOptions?.environment === \"react-server\";\n const isGenericServer = options.customTransformOptions?.environment === \"node\";\n const isServer = isReactServer || isGenericServer;\n const routerRoot = typeof options.customTransformOptions?.routerRoot === \"string\" ? decodeURI(options.customTransformOptions.routerRoot) : void 0;\n if (routerRoot == null) {\n memoizeWarning(\n \"Warning: Missing transform.routerRoot option in Metro bundling request, falling back to `app` as routes directory.\"\n );\n }\n return {\n name: \"metro\",\n bundler: \"metro\",\n platform: options.platform,\n // Empower the babel preset to know the env it's bundling for.\n // Metro automatically updates the cache to account for the custom transform options.\n isServer,\n // Enable React Server Component rules for AST. The naming maps to the resolver property `--conditions=react-server`.\n isReactServer,\n // The base url to make requests from, used for hosting from non-standard locations.\n baseUrl: typeof options.customTransformOptions?.baseUrl === \"string\" ? decodeURI(options.customTransformOptions.baseUrl) : \"\",\n // Ensure we always use a mostly-valid router root.\n routerRoot: routerRoot ?? \"app\",\n isDev: options.dev,\n // This value indicates if the user has disabled the feature or not.\n // Other criteria may still cause the feature to be disabled, but all inputs used are\n // already considered in the cache key.\n preserveEnvVars: isCustomTruthy(options.customTransformOptions?.preserveEnvVars) ? true : void 0,\n asyncRoutes: isCustomTruthy(options.customTransformOptions?.asyncRoutes) ? true : void 0,\n // Pass the engine to babel so we can automatically transpile for the correct\n // target environment.\n engine: stringOrUndefined(options.customTransformOptions?.engine),\n // provide the project root for reading the app babel config\n projectRoot: options.projectRoot,\n oneViteMetroBabelConfig,\n isNodeModule,\n isHMREnabled: options.dev,\n // Set the standard Babel flag to disable ESM transformations.\n supportsStaticESM: isCustomTruthy(options.customTransformOptions?.optimize) || options.experimentalImportSupport,\n // Enable React compiler support in Babel.\n // TODO: Remove this in the future when compiler is on by default.\n supportsReactCompiler: isCustomTruthy(options.customTransformOptions?.reactCompiler) ? true : void 0\n };\n}\nfunction stringOrUndefined(value) {\n return typeof value === \"string\" ? value : void 0;\n}\nconst transform = ({\n filename,\n src: originalSrc,\n options,\n // `plugins` is used for `functionMapBabelPlugin` from `metro-source-map`.\n plugins\n}) => {\n const src = substituteExpoVirtualEnvSource({\n filename,\n src: originalSrc,\n projectRoot: options.projectRoot,\n dev: options.dev,\n environment: options.customTransformOptions?.environment\n });\n const viteCustomTransformOptions = options.customTransformOptions?.vite;\n const customOptionsFromVite = (() => {\n const c = viteCustomTransformOptions;\n if (!c || typeof c !== \"object\") {\n return { babelConfig: {} };\n }\n return c;\n })();\n const hasOneViteMetroBabelConfig = customOptionsFromVite.oneViteMetroBabelConfig === true;\n const babelConfigFromVitePlugin = customOptionsFromVite.babelConfig || {};\n const OLD_BABEL_ENV = process.env.BABEL_ENV;\n process.env.BABEL_ENV = options.dev ? \"development\" : process.env.BABEL_ENV || \"production\";\n try {\n const babelConfig = {\n // ES modules require sourceType='module' but OSS may not always want that\n sourceType: \"unambiguous\",\n // The output we want from Babel methods\n ast: true,\n code: false,\n // NOTE(EvanBacon): We split the parse/transform steps up to accommodate\n // Hermes parsing, but this defaults to cloning the AST which increases\n // the transformation time by a fair amount.\n // You get this behavior by default when using Babel's `transform` method directly.\n cloneInputAst: false,\n // Options for debugging\n cwd: options.projectRoot,\n filename,\n highlightCode: true,\n ...babelConfigFromVitePlugin,\n ...loadBabelConfig(options),\n babelrc: typeof options.enableBabelRCLookup === \"boolean\" ? options.enableBabelRCLookup : true,\n plugins: [...babelConfigFromVitePlugin.plugins || [], ...plugins],\n // NOTE(EvanBacon): We heavily leverage the caller functionality to mutate the babel config.\n // This compensates for the lack of a format plugin system in Metro. Users can modify the\n // all (most) of the transforms in their local Babel config.\n // This also helps us keep the transform layers small and focused on a single task. We can also use this to\n // ensure the Babel config caching is more accurate.\n // moving everything babel-related to the preset also keeps the transform\n // requirements explicit for users who opt into babel.\n caller: getBabelCaller({\n filename,\n options,\n oneViteMetroBabelConfig: hasOneViteMetroBabelConfig\n })\n };\n const result = transformSync(src, babelConfig, options);\n if (!result) {\n return { ast: null };\n }\n assert(result.ast);\n return { ast: result.ast, metadata: result.metadata };\n } finally {\n if (OLD_BABEL_ENV) {\n process.env.BABEL_ENV = OLD_BABEL_ENV;\n }\n }\n};\nfunction getCacheKey(options) {\n const hash = createHash(\"sha256\");\n hash.update(\"vxrn-metro-babel-transformer-v1\");\n const projectRoot = options?.projectRoot;\n if (!projectRoot) {\n return hash.digest(\"hex\");\n }\n hash.update(projectRoot);\n for (const file of [\n \".env\",\n \".env.development\",\n \".env.local\",\n \".env.development.local\"\n ]) {\n const filename = path.join(projectRoot, file);\n hash.update(filename);\n try {\n hash.update(readFileSync(filename));\n } catch (error) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") {\n continue;\n }\n throw error;\n }\n }\n hash.update(\n JSON.stringify(\n Object.entries(process.env).filter(\n ([key]) => key.startsWith(\"ONE_PUBLIC_\") || key.startsWith(\"EXPO_PUBLIC_\")\n ).sort(([left], [right]) => left.localeCompare(right))\n )\n );\n return hash.digest(\"hex\");\n}\nconst babelTransformer = {\n transform,\n getCacheKey\n};\nmodule.exports = babelTransformer;\nexport {\n getCacheKey\n};\n//# sourceMappingURL=babel-transformer.js.map\n"],"mappings":"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"}