@vxrn/vite-plugin-metro 2.0.0-beta.51.1 → 2.0.0-beta.56.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 (142) hide show
  1. package/dist/cjs/env/platformEnv.cjs +2 -0
  2. package/dist/cjs/env/platformEnv.native.cjs +2 -0
  3. package/dist/cjs/env/platformEnv.native.js +2 -0
  4. package/dist/cjs/env/platformEnv.native.js.map +1 -1
  5. package/dist/cjs/index.cjs +0 -2
  6. package/dist/cjs/index.native.cjs +0 -2
  7. package/dist/cjs/index.native.js +0 -2
  8. package/dist/cjs/index.native.js.map +1 -1
  9. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +10 -15
  10. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +27 -48
  11. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +27 -48
  12. package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  13. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +71 -38
  14. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +86 -42
  15. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
  16. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  17. package/dist/cjs/transformer/babel-transformer.cjs +53 -4
  18. package/dist/cjs/transformer/babel-transformer.native.cjs +65 -6
  19. package/dist/cjs/transformer/babel-transformer.native.js +65 -6
  20. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  21. package/dist/cjs/transformer/expoVirtualEnv.cjs +92 -0
  22. package/dist/cjs/transformer/expoVirtualEnv.native.cjs +113 -0
  23. package/dist/cjs/transformer/expoVirtualEnv.native.js +115 -0
  24. package/dist/cjs/transformer/expoVirtualEnv.native.js.map +1 -0
  25. package/dist/cjs/transformer/loadBabelConfig.cjs +1 -1
  26. package/dist/cjs/transformer/loadBabelConfig.native.cjs +1 -1
  27. package/dist/cjs/transformer/loadBabelConfig.native.js +1 -1
  28. package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
  29. package/dist/cjs/transformer/metroNativeWorker.cjs +20 -29
  30. package/dist/cjs/transformer/metroNativeWorker.native.cjs +24 -30
  31. package/dist/cjs/transformer/metroNativeWorker.native.js +24 -30
  32. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  33. package/dist/cjs/transformer/transformSync.cjs +3 -3
  34. package/dist/cjs/transformer/transformSync.native.cjs +3 -3
  35. package/dist/cjs/transformer/transformSync.native.js +3 -3
  36. package/dist/cjs/transformer/transformSync.native.js.map +1 -1
  37. package/dist/cjs/utils/exit.cjs +1 -1
  38. package/dist/cjs/utils/exit.native.cjs +1 -1
  39. package/dist/cjs/utils/exit.native.js +1 -1
  40. package/dist/cjs/utils/exit.native.js.map +1 -1
  41. package/dist/esm/env/platformEnv.mjs +2 -0
  42. package/dist/esm/env/platformEnv.mjs.map +1 -1
  43. package/dist/esm/env/platformEnv.native.js +2 -0
  44. package/dist/esm/env/platformEnv.native.js.map +1 -1
  45. package/dist/esm/index.js +1 -2
  46. package/dist/esm/index.mjs +1 -2
  47. package/dist/esm/index.native.js +1 -2
  48. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +11 -15
  49. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
  50. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +28 -48
  51. package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
  52. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +71 -38
  53. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  54. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
  55. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  56. package/dist/esm/transformer/babel-transformer.mjs +133 -96
  57. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  58. package/dist/esm/transformer/babel-transformer.native.js +147 -103
  59. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  60. package/dist/esm/transformer/expoVirtualEnv.mjs +67 -0
  61. package/dist/esm/transformer/expoVirtualEnv.mjs.map +1 -0
  62. package/dist/esm/transformer/expoVirtualEnv.native.js +86 -0
  63. package/dist/esm/transformer/expoVirtualEnv.native.js.map +1 -0
  64. package/dist/esm/transformer/loadBabelConfig.mjs +1 -1
  65. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
  66. package/dist/esm/transformer/loadBabelConfig.native.js +1 -1
  67. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
  68. package/dist/esm/transformer/metroNativeWorker.mjs +20 -29
  69. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  70. package/dist/esm/transformer/metroNativeWorker.native.js +24 -30
  71. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  72. package/dist/esm/transformer/transformSync.mjs +3 -3
  73. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  74. package/dist/esm/transformer/transformSync.native.js +3 -3
  75. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  76. package/dist/esm/utils/exit.mjs +1 -1
  77. package/dist/esm/utils/exit.mjs.map +1 -1
  78. package/dist/esm/utils/exit.native.js +1 -1
  79. package/dist/esm/utils/exit.native.js.map +1 -1
  80. package/package.json +7 -9
  81. package/src/babel-plugins/import-meta-env-plugin.ts +1 -1
  82. package/src/env/platformEnv.test.ts +12 -2
  83. package/src/env/platformEnv.ts +3 -0
  84. package/src/index.ts +0 -2
  85. package/src/metro-config/getMetroBabelConfigFromViteConfig.test.ts +19 -25
  86. package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +8 -27
  87. package/src/metro-config/getMetroConfigFromViteConfig.test.ts +60 -0
  88. package/src/metro-config/getMetroConfigFromViteConfig.ts +119 -96
  89. package/src/plugins/metroPlugin.ts +3 -6
  90. package/src/transformer/babel-transformer.test.ts +118 -0
  91. package/src/transformer/babel-transformer.ts +82 -15
  92. package/src/transformer/expoVirtualEnv.integration.test.ts +106 -0
  93. package/src/transformer/expoVirtualEnv.test.ts +72 -0
  94. package/src/transformer/expoVirtualEnv.ts +115 -0
  95. package/src/transformer/loadBabelConfig.ts +1 -1
  96. package/src/transformer/metroNativeWorker.test.ts +134 -17
  97. package/src/transformer/metroNativeWorker.ts +43 -51
  98. package/src/transformer/transformSync.test.ts +22 -0
  99. package/src/transformer/transformSync.ts +4 -4
  100. package/src/utils/exit.ts +2 -2
  101. package/src/utils/getTerminalReporter.ts +1 -1
  102. package/src/utils/projectImport.ts +2 -2
  103. package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
  104. package/types/env/platformEnv.d.ts +1 -0
  105. package/types/env/platformEnv.d.ts.map +1 -1
  106. package/types/index.d.ts +0 -2
  107. package/types/index.d.ts.map +1 -1
  108. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts +1 -1
  109. package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts.map +1 -1
  110. package/types/metro-config/getMetroConfigFromViteConfig.d.ts +2 -2
  111. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  112. package/types/plugins/metroPlugin.d.ts +2 -4
  113. package/types/plugins/metroPlugin.d.ts.map +1 -1
  114. package/types/transformer/babel-transformer.d.ts +10 -1
  115. package/types/transformer/babel-transformer.d.ts.map +1 -1
  116. package/types/transformer/expoVirtualEnv.d.ts +8 -0
  117. package/types/transformer/expoVirtualEnv.d.ts.map +1 -0
  118. package/types/transformer/metroNativeWorker.d.ts +3 -5
  119. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  120. package/types/utils/projectImport.d.ts +2 -2
  121. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -59
  122. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +0 -62
  123. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -64
  124. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  125. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -35
  126. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +0 -37
  127. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -39
  128. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  129. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +0 -40
  130. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
  131. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -41
  132. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
  133. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -15
  134. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
  135. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -15
  136. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
  137. package/src/plugins/expoManifestRequestHandlerPlugin.ts +0 -88
  138. package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +0 -28
  139. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +0 -14
  140. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
  141. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
  142. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
@@ -30,14 +30,20 @@ __export(getMetroConfigFromViteConfig_exports, {
30
30
  getMetroConfigFromViteConfig: () => getMetroConfigFromViteConfig
31
31
  });
32
32
  module.exports = __toCommonJS(getMetroConfigFromViteConfig_exports);
33
+ var import_vite = require("vite");
33
34
  var import_node_child_process = require("node:child_process");
34
35
  var import_node_path = require("node:path");
35
36
  var import_micromatch = __toESM(require("micromatch"), 1);
37
+ var import_metro_config = require("@react-native/metro-config");
36
38
  var import_compiler = require("@vxrn/compiler");
37
39
  var import_projectImport = require("../utils/projectImport.cjs");
38
40
  var import_getTerminalReporter = require("../utils/getTerminalReporter.cjs");
39
- var import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName = require("../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs");
40
41
  const WATCHMAN_PROBE_TIMEOUT_MS = 2e3;
42
+ const expoEnvAdditionalExts = [
43
+ "env",
44
+ "local",
45
+ "development"
46
+ ];
41
47
  const watchmanResponsivePromises = /* @__PURE__ */ new Map();
42
48
  let didWarnAboutWatchmanFallback = false;
43
49
  const rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
@@ -48,17 +54,56 @@ const metroWatchExclusions = [
48
54
  /[/\\]\.vite(?:[/\\]|$)/,
49
55
  /[/\\]node_modules[/\\]\.vxrn(?:[/\\]|$)/
50
56
  ];
57
+ function enforceWorkspaceVisibility(config, projectRoot) {
58
+ const workspaceRoot = (0, import_vite.searchForWorkspaceRoot)(projectRoot);
59
+ if (workspaceRoot === projectRoot) return config;
60
+ return {
61
+ ...config,
62
+ watchFolders: [.../* @__PURE__ */ new Set([...config.watchFolders ?? [], workspaceRoot])],
63
+ resolver: {
64
+ ...config.resolver,
65
+ nodeModulesPaths: [.../* @__PURE__ */ new Set([
66
+ ...config.resolver?.nodeModulesPaths ?? [],
67
+ (0, import_node_path.resolve)(projectRoot, "node_modules"),
68
+ (0, import_node_path.resolve)(workspaceRoot, "node_modules")
69
+ ])]
70
+ }
71
+ };
72
+ }
73
+ function getReactNativeDefaultConfig(projectRoot) {
74
+ return enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
75
+ }
51
76
  function getPlatformFromBundleUrl(url) {
52
77
  const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1];
53
78
  return platform === "android" ? "android" : "ios";
54
79
  }
55
80
  function rewriteMainModuleBundleUrl(url, resolveMainModuleName) {
56
81
  const resolvedMainModulePath = resolveMainModuleName({ platform: getPlatformFromBundleUrl(url) });
57
- if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
58
- return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
59
- }
60
82
  return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`);
61
83
  }
84
+ function isBareSpecifier(name) {
85
+ return name !== "" && !name.startsWith(".") && !name.startsWith("/");
86
+ }
87
+ function bareMainModuleForRequest(moduleName, mainModuleName) {
88
+ if (!mainModuleName || !isBareSpecifier(mainModuleName)) return void 0;
89
+ if (moduleName === `./${mainModuleName}`) return mainModuleName;
90
+ return void 0;
91
+ }
92
+ function enforceBareMainModuleEntry(config, mainModuleName) {
93
+ if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;
94
+ const innerResolveRequest = config?.resolver?.resolveRequest;
95
+ return {
96
+ ...config,
97
+ resolver: {
98
+ ...config?.resolver,
99
+ resolveRequest: (context, moduleName, platform) => {
100
+ const bareMain = bareMainModuleForRequest(moduleName, mainModuleName);
101
+ const resolveRequest = innerResolveRequest || context.resolveRequest;
102
+ return resolveRequest(context, bareMain ?? moduleName, platform);
103
+ }
104
+ }
105
+ };
106
+ }
62
107
  async function isWatchmanResponsive(projectRoot) {
63
108
  let probe = watchmanResponsivePromises.get(projectRoot);
64
109
  if (probe) {
@@ -108,27 +153,16 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
108
153
  didWarnAboutWatchmanFallback = true;
109
154
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
110
155
  }
111
- const { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config");
112
- const _defaultConfig = getDefaultConfig(projectRoot);
156
+ const _defaultConfig = getReactNativeDefaultConfig(projectRoot);
113
157
  if (mainModuleName) {
114
- const origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
115
- const resolveMainModuleName = await (async () => {
116
- const ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
117
- const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
118
- (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(manifestHandlerMiddleware, mainModuleName);
119
- return (p) => {
120
- return manifestHandlerMiddleware.resolveMainModuleName({
121
- pkg: { main: mainModuleName },
122
- platform: p.platform
123
- });
124
- };
125
- })();
158
+ const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;
159
+ const resolveMainModuleName = () => mainModuleName;
126
160
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
127
161
  _defaultConfig.server.rewriteRequestUrl = (url) => {
128
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
162
+ if (rootIndexBundleRequestPattern.test(url)) {
129
163
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
130
164
  }
131
- return origRewriteRequestUrl(url);
165
+ return origRewriteRequestUrl?.(url) ?? url;
132
166
  };
133
167
  }
134
168
  const existingBlockList = _defaultConfig?.resolver?.blockList;
@@ -140,6 +174,10 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
140
174
  }
141
175
  const defaultConfig = {
142
176
  ..._defaultConfig,
177
+ watcher: {
178
+ ..._defaultConfig?.watcher,
179
+ additionalExts: [.../* @__PURE__ */ new Set([..._defaultConfig?.watcher?.additionalExts ?? [], ...expoEnvAdditionalExts])]
180
+ },
143
181
  resolver: {
144
182
  ..._defaultConfig?.resolver,
145
183
  useWatchman,
@@ -172,6 +210,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
172
210
  },
173
211
  transformer: {
174
212
  ..._defaultConfig?.transformer,
213
+ unstable_allowRequireContext: true,
175
214
  babelTransformerPath: (0, import_projectImport.projectResolve)(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
176
215
  },
177
216
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -182,7 +221,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
182
221
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
183
222
  };
184
223
  return {
185
- defaultConfig: merged,
224
+ defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
186
225
  projectRoot,
187
226
  extraConfig
188
227
  };
@@ -197,27 +236,16 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
197
236
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
198
237
  }
199
238
  const { loadConfig } = await (0, import_projectImport.projectImport)(projectRoot, "metro");
200
- const { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config");
201
- const _defaultConfig = getDefaultConfig(projectRoot);
239
+ const _defaultConfig = getReactNativeDefaultConfig(projectRoot);
202
240
  if (mainModuleName) {
203
- const origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
204
- const resolveMainModuleName = await (async () => {
205
- const ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
206
- const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
207
- (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(manifestHandlerMiddleware, mainModuleName);
208
- return (p) => {
209
- return manifestHandlerMiddleware.resolveMainModuleName({
210
- pkg: { main: mainModuleName },
211
- platform: p.platform
212
- });
213
- };
214
- })();
241
+ const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;
242
+ const resolveMainModuleName = () => mainModuleName;
215
243
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
216
244
  _defaultConfig.server.rewriteRequestUrl = (url) => {
217
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
245
+ if (rootIndexBundleRequestPattern.test(url)) {
218
246
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
219
247
  }
220
- return origRewriteRequestUrl(url);
248
+ return origRewriteRequestUrl?.(url) ?? url;
221
249
  };
222
250
  }
223
251
  const existingBlockList = _defaultConfig?.resolver?.blockList;
@@ -229,6 +257,10 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
229
257
  }
230
258
  const defaultConfig = {
231
259
  ..._defaultConfig,
260
+ watcher: {
261
+ ..._defaultConfig?.watcher,
262
+ additionalExts: [.../* @__PURE__ */ new Set([..._defaultConfig?.watcher?.additionalExts ?? [], ...expoEnvAdditionalExts])]
263
+ },
232
264
  resolver: {
233
265
  ..._defaultConfig?.resolver,
234
266
  useWatchman,
@@ -261,6 +293,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
261
293
  },
262
294
  transformer: {
263
295
  ..._defaultConfig?.transformer,
296
+ unstable_allowRequireContext: true,
264
297
  babelTransformerPath: (0, import_projectImport.projectResolve)(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
265
298
  },
266
299
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -276,7 +309,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
276
309
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
277
310
  });
278
311
  return {
279
- ...metroConfig,
312
+ ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
280
313
  ...extraConfig
281
314
  };
282
315
  }
@@ -32,14 +32,20 @@ __export(getMetroConfigFromViteConfig_exports, {
32
32
  getMetroConfigFromViteConfig: () => getMetroConfigFromViteConfig
33
33
  });
34
34
  module.exports = __toCommonJS(getMetroConfigFromViteConfig_exports);
35
+ var import_vite = require("vite");
35
36
  var import_child_process = require("child_process");
36
37
  var import_path = require("path");
37
38
  var import_micromatch = __toESM(require("micromatch"), 1);
39
+ var import_metro_config = require("@react-native/metro-config");
38
40
  var import_compiler = require("@vxrn/compiler");
39
41
  var import_projectImport = require("../utils/projectImport.native.js");
40
42
  var import_getTerminalReporter = require("../utils/getTerminalReporter.native.js");
41
- var import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName = require("../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js");
42
43
  var WATCHMAN_PROBE_TIMEOUT_MS = 2e3;
44
+ var expoEnvAdditionalExts = [
45
+ "env",
46
+ "local",
47
+ "development"
48
+ ];
43
49
  var watchmanResponsivePromises = /* @__PURE__ */ new Map();
44
50
  var didWarnAboutWatchmanFallback = false;
45
51
  var rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
@@ -50,6 +56,27 @@ var metroWatchExclusions = [
50
56
  /[/\\]\.vite(?:[/\\]|$)/,
51
57
  /[/\\]node_modules[/\\]\.vxrn(?:[/\\]|$)/
52
58
  ];
59
+ function enforceWorkspaceVisibility(config, projectRoot) {
60
+ var _config_watchFolders, _ref;
61
+ var _config_resolver;
62
+ var workspaceRoot = (0, import_vite.searchForWorkspaceRoot)(projectRoot);
63
+ if (workspaceRoot === projectRoot) return config;
64
+ return {
65
+ ...config,
66
+ watchFolders: [.../* @__PURE__ */ new Set([...(_config_watchFolders = config.watchFolders) !== null && _config_watchFolders !== void 0 ? _config_watchFolders : [], workspaceRoot])],
67
+ resolver: {
68
+ ...config.resolver,
69
+ nodeModulesPaths: [.../* @__PURE__ */ new Set([
70
+ ...(_ref = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.nodeModulesPaths) !== null && _ref !== void 0 ? _ref : [],
71
+ (0, import_path.resolve)(projectRoot, "node_modules"),
72
+ (0, import_path.resolve)(workspaceRoot, "node_modules")
73
+ ])]
74
+ }
75
+ };
76
+ }
77
+ function getReactNativeDefaultConfig(projectRoot) {
78
+ return enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
79
+ }
53
80
  function getPlatformFromBundleUrl(url) {
54
81
  var _url_match;
55
82
  var platform = (_url_match = url.match(/[?&]platform=(ios|android)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];
@@ -57,11 +84,32 @@ function getPlatformFromBundleUrl(url) {
57
84
  }
58
85
  function rewriteMainModuleBundleUrl(url, resolveMainModuleName) {
59
86
  var resolvedMainModulePath = resolveMainModuleName({ platform: getPlatformFromBundleUrl(url) });
60
- if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
61
- return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
62
- }
63
87
  return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`);
64
88
  }
89
+ function isBareSpecifier(name) {
90
+ return name !== "" && !name.startsWith(".") && !name.startsWith("/");
91
+ }
92
+ function bareMainModuleForRequest(moduleName, mainModuleName) {
93
+ if (!mainModuleName || !isBareSpecifier(mainModuleName)) return void 0;
94
+ if (moduleName === `./${mainModuleName}`) return mainModuleName;
95
+ return void 0;
96
+ }
97
+ function enforceBareMainModuleEntry(config, mainModuleName) {
98
+ var _config_resolver;
99
+ if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;
100
+ var innerResolveRequest = config === null || config === void 0 ? void 0 : (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;
101
+ return {
102
+ ...config,
103
+ resolver: {
104
+ ...config === null || config === void 0 ? void 0 : config.resolver,
105
+ resolveRequest: function(context, moduleName, platform) {
106
+ var bareMain = bareMainModuleForRequest(moduleName, mainModuleName);
107
+ var resolveRequest = innerResolveRequest || context.resolveRequest;
108
+ return resolveRequest(context, bareMain !== null && bareMain !== void 0 ? bareMain : moduleName, platform);
109
+ }
110
+ }
111
+ };
112
+ }
65
113
  async function isWatchmanResponsive(projectRoot) {
66
114
  var probe = watchmanResponsivePromises.get(projectRoot);
67
115
  if (probe) {
@@ -103,8 +151,8 @@ function resolveNativeTransforms(projectRoot, metroPluginOptions) {
103
151
  };
104
152
  }
105
153
  async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
106
- var _ref;
107
- var _metroPluginOptions_argv, _defaultConfig_resolver;
154
+ var _ref, _ref1;
155
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
108
156
  var extraConfig = {};
109
157
  var projectRoot = (0, import_path.resolve)((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);
110
158
  var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -113,27 +161,20 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
113
161
  didWarnAboutWatchmanFallback = true;
114
162
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
115
163
  }
116
- var { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config");
117
- var _defaultConfig = getDefaultConfig(projectRoot);
164
+ var _defaultConfig = getReactNativeDefaultConfig(projectRoot);
118
165
  if (mainModuleName) {
119
- var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
120
- var resolveMainModuleName = await (async function() {
121
- var ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
122
- var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
123
- (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(manifestHandlerMiddleware, mainModuleName);
124
- return function(p) {
125
- return manifestHandlerMiddleware.resolveMainModuleName({
126
- pkg: { main: mainModuleName },
127
- platform: p.platform
128
- });
129
- };
130
- })();
166
+ var _defaultConfig_server;
167
+ var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
168
+ var resolveMainModuleName = function() {
169
+ return mainModuleName;
170
+ };
131
171
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
132
172
  _defaultConfig.server.rewriteRequestUrl = function(url) {
133
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
173
+ var _ref2;
174
+ if (rootIndexBundleRequestPattern.test(url)) {
134
175
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
135
176
  }
136
- return origRewriteRequestUrl(url);
177
+ return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
137
178
  };
138
179
  }
139
180
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -145,6 +186,10 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
145
186
  }
146
187
  var defaultConfig = {
147
188
  ..._defaultConfig,
189
+ watcher: {
190
+ ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,
191
+ 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])]
192
+ },
148
193
  resolver: {
149
194
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
150
195
  useWatchman,
@@ -180,6 +225,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
180
225
  },
181
226
  transformer: {
182
227
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,
228
+ unstable_allowRequireContext: true,
183
229
  babelTransformerPath: (0, import_projectImport.projectResolve)(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
184
230
  },
185
231
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -190,14 +236,14 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
190
236
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
191
237
  };
192
238
  return {
193
- defaultConfig: merged,
239
+ defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
194
240
  projectRoot,
195
241
  extraConfig
196
242
  };
197
243
  }
198
244
  async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
199
- var _ref;
200
- var _metroPluginOptions_argv, _defaultConfig_resolver;
245
+ var _ref, _ref1;
246
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
201
247
  var extraConfig = {};
202
248
  var projectRoot = (0, import_path.resolve)((_ref = (_metroPluginOptions_argv = metroPluginOptions.argv) === null || _metroPluginOptions_argv === void 0 ? void 0 : _metroPluginOptions_argv.projectRoot) !== null && _ref !== void 0 ? _ref : config.root);
203
249
  var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -207,27 +253,20 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
207
253
  console.warn("[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.");
208
254
  }
209
255
  var { loadConfig } = await (0, import_projectImport.projectImport)(projectRoot, "metro");
210
- var { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config");
211
- var _defaultConfig = getDefaultConfig(projectRoot);
256
+ var _defaultConfig = getReactNativeDefaultConfig(projectRoot);
212
257
  if (mainModuleName) {
213
- var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl;
214
- var resolveMainModuleName = await (async function() {
215
- var ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
216
- var manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
217
- (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(manifestHandlerMiddleware, mainModuleName);
218
- return function(p) {
219
- return manifestHandlerMiddleware.resolveMainModuleName({
220
- pkg: { main: mainModuleName },
221
- platform: p.platform
222
- });
223
- };
224
- })();
258
+ var _defaultConfig_server;
259
+ var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
260
+ var resolveMainModuleName = function() {
261
+ return mainModuleName;
262
+ };
225
263
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
226
264
  _defaultConfig.server.rewriteRequestUrl = function(url) {
227
- if (url.includes("/.expo/.virtual-metro-entry.bundle?") || rootIndexBundleRequestPattern.test(url)) {
265
+ var _ref2;
266
+ if (rootIndexBundleRequestPattern.test(url)) {
228
267
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
229
268
  }
230
- return origRewriteRequestUrl(url);
269
+ return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
231
270
  };
232
271
  }
233
272
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -239,6 +278,10 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
239
278
  }
240
279
  var defaultConfig = {
241
280
  ..._defaultConfig,
281
+ watcher: {
282
+ ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.watcher,
283
+ 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])]
284
+ },
242
285
  resolver: {
243
286
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
244
287
  useWatchman,
@@ -274,6 +317,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
274
317
  },
275
318
  transformer: {
276
319
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.transformer,
320
+ unstable_allowRequireContext: true,
277
321
  babelTransformerPath: (0, import_projectImport.projectResolve)(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer")
278
322
  },
279
323
  ...nativeWorkerPath ? { transformerPath: nativeWorkerPath } : {},
@@ -289,7 +333,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
289
333
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
290
334
  });
291
335
  return {
292
- ...metroConfig,
336
+ ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
293
337
  ...extraConfig
294
338
  };
295
339
  }