@vxrn/vite-plugin-metro 2.0.0-beta.99.1 → 2.6.0

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 (61) hide show
  1. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +40 -27
  2. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +57 -42
  3. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +57 -42
  4. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  5. package/dist/cjs/plugins/metroPlugin.cjs +1 -0
  6. package/dist/cjs/plugins/metroPlugin.native.cjs +5 -4
  7. package/dist/cjs/plugins/metroPlugin.native.js +5 -4
  8. package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
  9. package/dist/cjs/rn-commands/bundle/buildBundle.native.cjs +1 -1
  10. package/dist/cjs/rn-commands/bundle/buildBundle.native.js +1 -1
  11. package/dist/cjs/rn-commands/bundle/buildBundle.native.js.map +1 -1
  12. package/dist/cjs/rn-commands/bundle/saveAssets.native.cjs +2 -2
  13. package/dist/cjs/rn-commands/bundle/saveAssets.native.js +2 -2
  14. package/dist/cjs/rn-commands/bundle/saveAssets.native.js.map +1 -1
  15. package/dist/cjs/transformer/babel-transformer.cjs +7 -1
  16. package/dist/cjs/transformer/babel-transformer.native.cjs +9 -2
  17. package/dist/cjs/transformer/babel-transformer.native.js +9 -2
  18. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  19. package/dist/cjs/transformer/metroNativeWorker.cjs +6 -1
  20. package/dist/cjs/transformer/metroNativeWorker.native.cjs +9 -7
  21. package/dist/cjs/transformer/metroNativeWorker.native.js +9 -7
  22. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  23. package/dist/cjs/utils/exit.native.cjs +2 -2
  24. package/dist/cjs/utils/exit.native.js +2 -2
  25. package/dist/cjs/utils/exit.native.js.map +1 -1
  26. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +40 -27
  27. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  28. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +57 -42
  29. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  30. package/dist/esm/plugins/metroPlugin.mjs +1 -0
  31. package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
  32. package/dist/esm/plugins/metroPlugin.native.js +5 -4
  33. package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
  34. package/dist/esm/rn-commands/bundle/buildBundle.native.js +1 -1
  35. package/dist/esm/rn-commands/bundle/buildBundle.native.js.map +1 -1
  36. package/dist/esm/rn-commands/bundle/saveAssets.native.js +2 -2
  37. package/dist/esm/rn-commands/bundle/saveAssets.native.js.map +1 -1
  38. package/dist/esm/transformer/babel-transformer.mjs +7 -1
  39. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  40. package/dist/esm/transformer/babel-transformer.native.js +9 -2
  41. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  42. package/dist/esm/transformer/metroNativeWorker.mjs +6 -1
  43. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  44. package/dist/esm/transformer/metroNativeWorker.native.js +9 -7
  45. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  46. package/dist/esm/utils/exit.native.js +2 -2
  47. package/dist/esm/utils/exit.native.js.map +1 -1
  48. package/package.json +6 -5
  49. package/src/__tests__/getMetroConfigFromViteConfig.test.ts +269 -0
  50. package/src/metro-config/getMetroConfigFromViteConfig.ts +55 -18
  51. package/src/metro-config/glbAssets.test.ts +57 -0
  52. package/src/plugins/metroPlugin.ts +6 -1
  53. package/src/transformer/babel-transformer.ts +21 -1
  54. package/src/transformer/metroNativeWorker.test.ts +4 -18
  55. package/src/transformer/metroNativeWorker.ts +18 -2
  56. package/src/transformer/swiftPackageTransform.test.ts +111 -0
  57. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  58. package/types/plugins/metroPlugin.d.ts.map +1 -1
  59. package/types/transformer/babel-transformer.d.ts.map +1 -1
  60. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  61. package/src/metro-config/getMetroConfigFromViteConfig.test.ts +0 -60
@@ -44,12 +44,23 @@ const expoEnvAdditionalExts = [
44
44
  "local",
45
45
  "development"
46
46
  ];
47
+ const metroSourceExts = [
48
+ "js",
49
+ "jsx",
50
+ "json",
51
+ "ts",
52
+ "tsx",
53
+ "mjs",
54
+ "cjs",
55
+ "swift",
56
+ "kt"
57
+ ];
47
58
  const watchmanResponsivePromises = /* @__PURE__ */ new Map();
48
59
  let didWarnAboutWatchmanFallback = false;
49
60
  const rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
50
61
  const expoVirtualEntryBundleRequestPattern = /^(https?:\/\/[^/]+)?\/\.expo\/\.virtual-metro-entry\.bundle(?=$|[?#])/;
51
62
  const metroWatchExclusions = [
52
- /[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
63
+ /^(?!.*[/\\]node_modules[/\\]).*[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
53
64
  /[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
54
65
  /[/\\]\.docker(?:[/\\]|$)/,
55
66
  /[/\\]\.vite(?:[/\\]|$)/,
@@ -72,7 +83,14 @@ function enforceWorkspaceVisibility(config, projectRoot) {
72
83
  };
73
84
  }
74
85
  function getReactNativeDefaultConfig(projectRoot) {
75
- return enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
86
+ const config = enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
87
+ return {
88
+ ...config,
89
+ resolver: {
90
+ ...config.resolver,
91
+ assetExts: [.../* @__PURE__ */ new Set([...config.resolver?.assetExts ?? [], "glb"])]
92
+ }
93
+ };
76
94
  }
77
95
  function getPlatformFromBundleUrl(url) {
78
96
  const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1];
@@ -96,17 +114,28 @@ function bareMainModuleForRequest(moduleName, mainModuleName) {
96
114
  if (moduleName === `./${mainModuleName}`) return mainModuleName;
97
115
  return void 0;
98
116
  }
99
- function enforceBareMainModuleEntry(config, mainModuleName) {
100
- if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;
101
- const innerResolveRequest = config?.resolver?.resolveRequest;
117
+ function enforcePackageResolution(config, mainModuleName, dedupe, projectRoot) {
118
+ const dedupedPackages = new Set(dedupe);
119
+ if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {
120
+ return config;
121
+ }
122
+ const rootOrigin = (0, import_node_path.resolve)(projectRoot, "package.json");
123
+ const innerResolveRequest = config.resolver?.resolveRequest;
102
124
  return {
103
125
  ...config,
104
126
  resolver: {
105
- ...config?.resolver,
127
+ ...config.resolver,
106
128
  resolveRequest: (context, moduleName, platform) => {
107
129
  const bareMain = bareMainModuleForRequest(moduleName, mainModuleName);
130
+ const request = bareMain ?? moduleName;
131
+ const packageEnd = request.indexOf("/", request.startsWith("@") ? request.indexOf("/") + 1 : 0);
132
+ const packageName = packageEnd === -1 ? request : request.slice(0, packageEnd);
133
+ const resolutionContext = isBareSpecifier(request) && dedupedPackages.has(packageName) ? {
134
+ ...context,
135
+ originModulePath: rootOrigin
136
+ } : context;
108
137
  const resolveRequest = innerResolveRequest || context.resolveRequest;
109
- return resolveRequest(context, bareMain ?? moduleName, platform);
138
+ return resolveRequest(resolutionContext, request, platform);
110
139
  }
111
140
  }
112
141
  };
@@ -189,15 +218,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
189
218
  ..._defaultConfig?.resolver,
190
219
  useWatchman,
191
220
  blockList,
192
- sourceExts: [
193
- "js",
194
- "jsx",
195
- "json",
196
- "ts",
197
- "tsx",
198
- "mjs",
199
- "cjs"
200
- ],
221
+ sourceExts: metroSourceExts,
201
222
  resolveRequest: (context, moduleName, platform) => {
202
223
  const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
203
224
  if (excludeModules && excludeModules.length > 0) {
@@ -228,7 +249,7 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
228
249
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
229
250
  };
230
251
  return {
231
- defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
252
+ defaultConfig: enforcePackageResolution(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName, config.resolve?.dedupe ?? [], projectRoot),
232
253
  projectRoot,
233
254
  extraConfig
234
255
  };
@@ -272,15 +293,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
272
293
  ..._defaultConfig?.resolver,
273
294
  useWatchman,
274
295
  blockList,
275
- sourceExts: [
276
- "js",
277
- "jsx",
278
- "json",
279
- "ts",
280
- "tsx",
281
- "mjs",
282
- "cjs"
283
- ],
296
+ sourceExts: metroSourceExts,
284
297
  resolveRequest: (context, moduleName, platform) => {
285
298
  const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
286
299
  if (excludeModules && excludeModules.length > 0) {
@@ -316,7 +329,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
316
329
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
317
330
  });
318
331
  return {
319
- ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
332
+ ...enforcePackageResolution(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName, config.resolve?.dedupe ?? [], projectRoot),
320
333
  ...extraConfig
321
334
  };
322
335
  }
@@ -46,12 +46,23 @@ var expoEnvAdditionalExts = [
46
46
  "local",
47
47
  "development"
48
48
  ];
49
+ var metroSourceExts = [
50
+ "js",
51
+ "jsx",
52
+ "json",
53
+ "ts",
54
+ "tsx",
55
+ "mjs",
56
+ "cjs",
57
+ "swift",
58
+ "kt"
59
+ ];
49
60
  var watchmanResponsivePromises = /* @__PURE__ */ new Map();
50
61
  var didWarnAboutWatchmanFallback = false;
51
62
  var rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
52
63
  var expoVirtualEntryBundleRequestPattern = /^(https?:\/\/[^/]+)?\/\.expo\/\.virtual-metro-entry\.bundle(?=$|[?#])/;
53
64
  var metroWatchExclusions = [
54
- /[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
65
+ /^(?!.*[/\\]node_modules[/\\]).*[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
55
66
  /[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
56
67
  /[/\\]\.docker(?:[/\\]|$)/,
57
68
  /[/\\]\.vite(?:[/\\]|$)/,
@@ -76,7 +87,16 @@ function enforceWorkspaceVisibility(config, projectRoot) {
76
87
  };
77
88
  }
78
89
  function getReactNativeDefaultConfig(projectRoot) {
79
- return enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
90
+ var _ref;
91
+ var _config_resolver;
92
+ var config = enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
93
+ return {
94
+ ...config,
95
+ resolver: {
96
+ ...config.resolver,
97
+ assetExts: [.../* @__PURE__ */ new Set([...(_ref = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.assetExts) !== null && _ref !== void 0 ? _ref : [], "glb"])]
98
+ }
99
+ };
80
100
  }
81
101
  function getPlatformFromBundleUrl(url) {
82
102
  var _url_match;
@@ -101,18 +121,29 @@ function bareMainModuleForRequest(moduleName, mainModuleName) {
101
121
  if (moduleName === `./${mainModuleName}`) return mainModuleName;
102
122
  return void 0;
103
123
  }
104
- function enforceBareMainModuleEntry(config, mainModuleName) {
124
+ function enforcePackageResolution(config, mainModuleName, dedupe, projectRoot) {
105
125
  var _config_resolver;
106
- if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;
107
- var innerResolveRequest = config === null || config === void 0 ? void 0 : (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;
126
+ var dedupedPackages = new Set(dedupe);
127
+ if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {
128
+ return config;
129
+ }
130
+ var rootOrigin = (0, import_path.resolve)(projectRoot, "package.json");
131
+ var innerResolveRequest = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;
108
132
  return {
109
133
  ...config,
110
134
  resolver: {
111
- ...config === null || config === void 0 ? void 0 : config.resolver,
112
- resolveRequest: function(context, moduleName, platform) {
135
+ ...config.resolver,
136
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
113
137
  var bareMain = bareMainModuleForRequest(moduleName, mainModuleName);
114
- var resolveRequest = innerResolveRequest || context.resolveRequest;
115
- return resolveRequest(context, bareMain !== null && bareMain !== void 0 ? bareMain : moduleName, platform);
138
+ var request = bareMain !== null && bareMain !== void 0 ? bareMain : moduleName;
139
+ var packageEnd = request.indexOf("/", request.startsWith("@") ? request.indexOf("/") + 1 : 0);
140
+ var packageName = packageEnd === -1 ? request : request.slice(0, packageEnd);
141
+ var resolutionContext = isBareSpecifier(request) && dedupedPackages.has(packageName) ? {
142
+ ...context,
143
+ originModulePath: rootOrigin
144
+ } : context;
145
+ var resolveRequest2 = innerResolveRequest || context.resolveRequest;
146
+ return resolveRequest2(resolutionContext, request, platform);
116
147
  }
117
148
  }
118
149
  };
@@ -124,7 +155,7 @@ async function isWatchmanResponsive(projectRoot) {
124
155
  }
125
156
  probe = new Promise(function(resolve2) {
126
157
  var settled = false;
127
- var finish = function(value) {
158
+ var finish = function finish2(value) {
128
159
  if (settled) return;
129
160
  settled = true;
130
161
  clearTimeout(timeout);
@@ -158,8 +189,8 @@ function resolveNativeTransforms(projectRoot, metroPluginOptions) {
158
189
  };
159
190
  }
160
191
  async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
161
- var _ref, _ref1;
162
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
192
+ var _ref, _ref1, _ref2;
193
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
163
194
  var extraConfig = {};
164
195
  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);
165
196
  var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -172,16 +203,16 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
172
203
  if (mainModuleName) {
173
204
  var _defaultConfig_server;
174
205
  var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
175
- var resolveMainModuleName = function() {
206
+ var resolveMainModuleName = function resolveMainModuleName2() {
176
207
  return mainModuleName;
177
208
  };
178
209
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
179
210
  _defaultConfig.server.rewriteRequestUrl = function(url) {
180
- var _ref2;
211
+ var _ref3;
181
212
  if (isMainModuleBundleRequest(url)) {
182
213
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
183
214
  }
184
- return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
215
+ return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
185
216
  };
186
217
  }
187
218
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -201,16 +232,8 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
201
232
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
202
233
  useWatchman,
203
234
  blockList,
204
- sourceExts: [
205
- "js",
206
- "jsx",
207
- "json",
208
- "ts",
209
- "tsx",
210
- "mjs",
211
- "cjs"
212
- ],
213
- resolveRequest: function(context, moduleName, platform) {
235
+ sourceExts: metroSourceExts,
236
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
214
237
  var _defaultConfig_resolver2;
215
238
  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;
216
239
  if (excludeModules && excludeModules.length > 0) {
@@ -243,14 +266,14 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
243
266
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
244
267
  };
245
268
  return {
246
- defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
269
+ defaultConfig: enforcePackageResolution(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName, (_ref2 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref2 !== void 0 ? _ref2 : [], projectRoot),
247
270
  projectRoot,
248
271
  extraConfig
249
272
  };
250
273
  }
251
274
  async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
252
- var _ref, _ref1;
253
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
275
+ var _ref, _ref1, _ref2;
276
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
254
277
  var extraConfig = {};
255
278
  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);
256
279
  var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -264,16 +287,16 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
264
287
  if (mainModuleName) {
265
288
  var _defaultConfig_server;
266
289
  var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
267
- var resolveMainModuleName = function() {
290
+ var resolveMainModuleName = function resolveMainModuleName2() {
268
291
  return mainModuleName;
269
292
  };
270
293
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
271
294
  _defaultConfig.server.rewriteRequestUrl = function(url) {
272
- var _ref2;
295
+ var _ref3;
273
296
  if (isMainModuleBundleRequest(url)) {
274
297
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
275
298
  }
276
- return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
299
+ return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
277
300
  };
278
301
  }
279
302
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -293,16 +316,8 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
293
316
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
294
317
  useWatchman,
295
318
  blockList,
296
- sourceExts: [
297
- "js",
298
- "jsx",
299
- "json",
300
- "ts",
301
- "tsx",
302
- "mjs",
303
- "cjs"
304
- ],
305
- resolveRequest: function(context, moduleName, platform) {
319
+ sourceExts: metroSourceExts,
320
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
306
321
  var _defaultConfig_resolver2;
307
322
  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;
308
323
  if (excludeModules && excludeModules.length > 0) {
@@ -340,7 +355,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
340
355
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
341
356
  });
342
357
  return {
343
- ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
358
+ ...enforcePackageResolution(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName, (_ref2 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref2 !== void 0 ? _ref2 : [], projectRoot),
344
359
  ...extraConfig
345
360
  };
346
361
  }
@@ -46,12 +46,23 @@ var expoEnvAdditionalExts = [
46
46
  "local",
47
47
  "development"
48
48
  ];
49
+ var metroSourceExts = [
50
+ "js",
51
+ "jsx",
52
+ "json",
53
+ "ts",
54
+ "tsx",
55
+ "mjs",
56
+ "cjs",
57
+ "swift",
58
+ "kt"
59
+ ];
49
60
  var watchmanResponsivePromises = /* @__PURE__ */ new Map();
50
61
  var didWarnAboutWatchmanFallback = false;
51
62
  var rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/;
52
63
  var expoVirtualEntryBundleRequestPattern = /^(https?:\/\/[^/]+)?\/\.expo\/\.virtual-metro-entry\.bundle(?=$|[?#])/;
53
64
  var metroWatchExclusions = [
54
- /[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
65
+ /^(?!.*[/\\]node_modules[/\\]).*[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
55
66
  /[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
56
67
  /[/\\]\.docker(?:[/\\]|$)/,
57
68
  /[/\\]\.vite(?:[/\\]|$)/,
@@ -76,7 +87,16 @@ function enforceWorkspaceVisibility(config, projectRoot) {
76
87
  };
77
88
  }
78
89
  function getReactNativeDefaultConfig(projectRoot) {
79
- return enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
90
+ var _ref;
91
+ var _config_resolver;
92
+ var config = enforceWorkspaceVisibility((0, import_metro_config.getDefaultConfig)(projectRoot), projectRoot);
93
+ return {
94
+ ...config,
95
+ resolver: {
96
+ ...config.resolver,
97
+ assetExts: [.../* @__PURE__ */ new Set([...(_ref = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.assetExts) !== null && _ref !== void 0 ? _ref : [], "glb"])]
98
+ }
99
+ };
80
100
  }
81
101
  function getPlatformFromBundleUrl(url) {
82
102
  var _url_match;
@@ -101,18 +121,29 @@ function bareMainModuleForRequest(moduleName, mainModuleName) {
101
121
  if (moduleName === `./${mainModuleName}`) return mainModuleName;
102
122
  return void 0;
103
123
  }
104
- function enforceBareMainModuleEntry(config, mainModuleName) {
124
+ function enforcePackageResolution(config, mainModuleName, dedupe, projectRoot) {
105
125
  var _config_resolver;
106
- if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config;
107
- var innerResolveRequest = config === null || config === void 0 ? void 0 : (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;
126
+ var dedupedPackages = new Set(dedupe);
127
+ if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {
128
+ return config;
129
+ }
130
+ var rootOrigin = (0, import_path.resolve)(projectRoot, "package.json");
131
+ var innerResolveRequest = (_config_resolver = config.resolver) === null || _config_resolver === void 0 ? void 0 : _config_resolver.resolveRequest;
108
132
  return {
109
133
  ...config,
110
134
  resolver: {
111
- ...config === null || config === void 0 ? void 0 : config.resolver,
112
- resolveRequest: function(context, moduleName, platform) {
135
+ ...config.resolver,
136
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
113
137
  var bareMain = bareMainModuleForRequest(moduleName, mainModuleName);
114
- var resolveRequest = innerResolveRequest || context.resolveRequest;
115
- return resolveRequest(context, bareMain !== null && bareMain !== void 0 ? bareMain : moduleName, platform);
138
+ var request = bareMain !== null && bareMain !== void 0 ? bareMain : moduleName;
139
+ var packageEnd = request.indexOf("/", request.startsWith("@") ? request.indexOf("/") + 1 : 0);
140
+ var packageName = packageEnd === -1 ? request : request.slice(0, packageEnd);
141
+ var resolutionContext = isBareSpecifier(request) && dedupedPackages.has(packageName) ? {
142
+ ...context,
143
+ originModulePath: rootOrigin
144
+ } : context;
145
+ var resolveRequest2 = innerResolveRequest || context.resolveRequest;
146
+ return resolveRequest2(resolutionContext, request, platform);
116
147
  }
117
148
  }
118
149
  };
@@ -124,7 +155,7 @@ async function isWatchmanResponsive(projectRoot) {
124
155
  }
125
156
  probe = new Promise(function(resolve2) {
126
157
  var settled = false;
127
- var finish = function(value) {
158
+ var finish = function finish2(value) {
128
159
  if (settled) return;
129
160
  settled = true;
130
161
  clearTimeout(timeout);
@@ -158,8 +189,8 @@ function resolveNativeTransforms(projectRoot, metroPluginOptions) {
158
189
  };
159
190
  }
160
191
  async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
161
- var _ref, _ref1;
162
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
192
+ var _ref, _ref1, _ref2;
193
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
163
194
  var extraConfig = {};
164
195
  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);
165
196
  var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -172,16 +203,16 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
172
203
  if (mainModuleName) {
173
204
  var _defaultConfig_server;
174
205
  var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
175
- var resolveMainModuleName = function() {
206
+ var resolveMainModuleName = function resolveMainModuleName2() {
176
207
  return mainModuleName;
177
208
  };
178
209
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
179
210
  _defaultConfig.server.rewriteRequestUrl = function(url) {
180
- var _ref2;
211
+ var _ref3;
181
212
  if (isMainModuleBundleRequest(url)) {
182
213
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
183
214
  }
184
- return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
215
+ return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
185
216
  };
186
217
  }
187
218
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -201,16 +232,8 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
201
232
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
202
233
  useWatchman,
203
234
  blockList,
204
- sourceExts: [
205
- "js",
206
- "jsx",
207
- "json",
208
- "ts",
209
- "tsx",
210
- "mjs",
211
- "cjs"
212
- ],
213
- resolveRequest: function(context, moduleName, platform) {
235
+ sourceExts: metroSourceExts,
236
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
214
237
  var _defaultConfig_resolver2;
215
238
  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;
216
239
  if (excludeModules && excludeModules.length > 0) {
@@ -243,14 +266,14 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
243
266
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
244
267
  };
245
268
  return {
246
- defaultConfig: enforceBareMainModuleEntry(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName),
269
+ defaultConfig: enforcePackageResolution(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName, (_ref2 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref2 !== void 0 ? _ref2 : [], projectRoot),
247
270
  projectRoot,
248
271
  extraConfig
249
272
  };
250
273
  }
251
274
  async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
252
- var _ref, _ref1;
253
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher;
275
+ var _ref, _ref1, _ref2;
276
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
254
277
  var extraConfig = {};
255
278
  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);
256
279
  var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -264,16 +287,16 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
264
287
  if (mainModuleName) {
265
288
  var _defaultConfig_server;
266
289
  var origRewriteRequestUrl = (_defaultConfig_server = _defaultConfig.server) === null || _defaultConfig_server === void 0 ? void 0 : _defaultConfig_server.rewriteRequestUrl;
267
- var resolveMainModuleName = function() {
290
+ var resolveMainModuleName = function resolveMainModuleName2() {
268
291
  return mainModuleName;
269
292
  };
270
293
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
271
294
  _defaultConfig.server.rewriteRequestUrl = function(url) {
272
- var _ref2;
295
+ var _ref3;
273
296
  if (isMainModuleBundleRequest(url)) {
274
297
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
275
298
  }
276
- return (_ref2 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref2 !== void 0 ? _ref2 : url;
299
+ return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
277
300
  };
278
301
  }
279
302
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -293,16 +316,8 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
293
316
  ..._defaultConfig === null || _defaultConfig === void 0 ? void 0 : _defaultConfig.resolver,
294
317
  useWatchman,
295
318
  blockList,
296
- sourceExts: [
297
- "js",
298
- "jsx",
299
- "json",
300
- "ts",
301
- "tsx",
302
- "mjs",
303
- "cjs"
304
- ],
305
- resolveRequest: function(context, moduleName, platform) {
319
+ sourceExts: metroSourceExts,
320
+ resolveRequest: function resolveRequest(context, moduleName, platform) {
306
321
  var _defaultConfig_resolver2;
307
322
  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;
308
323
  if (excludeModules && excludeModules.length > 0) {
@@ -340,7 +355,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
340
355
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
341
356
  });
342
357
  return {
343
- ...enforceBareMainModuleEntry(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName),
358
+ ...enforcePackageResolution(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName, (_ref2 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref2 !== void 0 ? _ref2 : [], projectRoot),
344
359
  ...extraConfig
345
360
  };
346
361
  }