@vxrn/vite-plugin-metro 2.9.2 → 2.11.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 (48) hide show
  1. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +36 -2
  2. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +46 -12
  3. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +46 -12
  4. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  5. package/dist/cjs/transformer/babel-transformer.cjs +3 -1
  6. package/dist/cjs/transformer/babel-transformer.native.cjs +3 -1
  7. package/dist/cjs/transformer/babel-transformer.native.js +3 -1
  8. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  9. package/dist/cjs/transformer/metroNativeWorker.cjs +4 -2
  10. package/dist/cjs/transformer/metroNativeWorker.native.cjs +4 -2
  11. package/dist/cjs/transformer/metroNativeWorker.native.js +4 -2
  12. package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
  13. package/dist/cjs/transformer/rejectDOMDirective.cjs +34 -0
  14. package/dist/cjs/transformer/rejectDOMDirective.native.cjs +53 -0
  15. package/dist/cjs/transformer/rejectDOMDirective.native.js +55 -0
  16. package/dist/cjs/transformer/rejectDOMDirective.native.js.map +1 -0
  17. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +36 -2
  18. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  19. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +46 -12
  20. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  21. package/dist/esm/transformer/babel-transformer.mjs +3 -1
  22. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  23. package/dist/esm/transformer/babel-transformer.native.js +3 -1
  24. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  25. package/dist/esm/transformer/metroNativeWorker.mjs +4 -2
  26. package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
  27. package/dist/esm/transformer/metroNativeWorker.native.js +4 -2
  28. package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
  29. package/dist/esm/transformer/rejectDOMDirective.mjs +15 -0
  30. package/dist/esm/transformer/rejectDOMDirective.mjs.map +1 -0
  31. package/dist/esm/transformer/rejectDOMDirective.native.js +32 -0
  32. package/dist/esm/transformer/rejectDOMDirective.native.js.map +1 -0
  33. package/package.json +6 -6
  34. package/src/metro-config/getMetroConfigFromViteConfig.ts +71 -4
  35. package/src/metro-config/types.ts +1 -1
  36. package/src/rn-commands/bundle/types.ts +1 -1
  37. package/src/transformer/babel-transformer.ts +4 -3
  38. package/src/transformer/metroNativeWorker.ts +4 -3
  39. package/src/transformer/rejectDOMDirective.ts +32 -0
  40. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  41. package/types/metro-config/types.d.ts +1 -1
  42. package/types/metro-config/types.d.ts.map +1 -1
  43. package/types/rn-commands/bundle/types.d.ts +1 -1
  44. package/types/rn-commands/bundle/types.d.ts.map +1 -1
  45. package/types/transformer/babel-transformer.d.ts.map +1 -1
  46. package/types/transformer/metroNativeWorker.d.ts.map +1 -1
  47. package/types/transformer/rejectDOMDirective.d.ts +3 -0
  48. package/types/transformer/rejectDOMDirective.d.ts.map +1 -0
@@ -0,0 +1,34 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var rejectDOMDirective_exports = {};
22
+ __export(rejectDOMDirective_exports, { rejectDOMDirective: () => rejectDOMDirective });
23
+ module.exports = __toCommonJS(rejectDOMDirective_exports);
24
+ var import_oxc_parser = require("oxc-parser");
25
+ function rejectDOMDirective(code, filename, platform) {
26
+ if (platform !== "ios" && platform !== "android" || !code.includes("use dom") || !/\.[cm]?[jt]sx?$/.test(filename)) return;
27
+ const parsed = (0, import_oxc_parser.parseSync)(filename, code, { lang: /\.[cm]?tsx?$/.test(filename) ? filename.endsWith("x") ? "tsx" : "ts" : "jsx" });
28
+ for (const node of parsed.program.body) {
29
+ if (node.type !== "ExpressionStatement" || !("directive" in node) || typeof node.directive !== "string") break;
30
+ if (node.directive === "use dom") {
31
+ throw new Error(`[one/use-dom] ${filename}: "use dom" requires native.bundler: "vite"; Metro is unsupported`);
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var rejectDOMDirective_exports = {};
24
+ __export(rejectDOMDirective_exports, { rejectDOMDirective: () => rejectDOMDirective });
25
+ module.exports = __toCommonJS(rejectDOMDirective_exports);
26
+ var import_oxc_parser = require("oxc-parser");
27
+ function rejectDOMDirective(code, filename, platform) {
28
+ if (platform !== "ios" && platform !== "android" || !code.includes("use dom") || !/\.[cm]?[jt]sx?$/.test(filename)) return;
29
+ var parsed = (0, import_oxc_parser.parseSync)(filename, code, { lang: /\.[cm]?tsx?$/.test(filename) ? filename.endsWith("x") ? "tsx" : "ts" : "jsx" });
30
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
31
+ try {
32
+ for (var _iterator = parsed.program.body[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
33
+ var node = _step.value;
34
+ if (node.type !== "ExpressionStatement" || !("directive" in node) || typeof node.directive !== "string") break;
35
+ if (node.directive === "use dom") {
36
+ throw new Error(`[one/use-dom] ${filename}: "use dom" requires native.bundler: "vite"; Metro is unsupported`);
37
+ }
38
+ }
39
+ } catch (err) {
40
+ _didIteratorError = true;
41
+ _iteratorError = err;
42
+ } finally {
43
+ try {
44
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
45
+ _iterator.return();
46
+ }
47
+ } finally {
48
+ if (_didIteratorError) {
49
+ throw _iteratorError;
50
+ }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var rejectDOMDirective_exports = {};
24
+ __export(rejectDOMDirective_exports, { rejectDOMDirective: () => rejectDOMDirective });
25
+ module.exports = __toCommonJS(rejectDOMDirective_exports);
26
+ var import_oxc_parser = require("oxc-parser");
27
+ function rejectDOMDirective(code, filename, platform) {
28
+ if (platform !== "ios" && platform !== "android" || !code.includes("use dom") || !/\.[cm]?[jt]sx?$/.test(filename)) return;
29
+ var parsed = (0, import_oxc_parser.parseSync)(filename, code, { lang: /\.[cm]?tsx?$/.test(filename) ? filename.endsWith("x") ? "tsx" : "ts" : "jsx" });
30
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
31
+ try {
32
+ for (var _iterator = parsed.program.body[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
33
+ var node = _step.value;
34
+ if (node.type !== "ExpressionStatement" || !("directive" in node) || typeof node.directive !== "string") break;
35
+ if (node.directive === "use dom") {
36
+ throw new Error(`[one/use-dom] ${filename}: "use dom" requires native.bundler: "vite"; Metro is unsupported`);
37
+ }
38
+ }
39
+ } catch (err) {
40
+ _didIteratorError = true;
41
+ _iteratorError = err;
42
+ } finally {
43
+ try {
44
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
45
+ _iterator.return();
46
+ }
47
+ } finally {
48
+ if (_didIteratorError) {
49
+ throw _iteratorError;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ //# sourceMappingURL=rejectDOMDirective.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejectDOMDirective.native.js","names":[],"sources":["cjs/transformer/rejectDOMDirective.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar rejectDOMDirective_exports = {};\n__export(rejectDOMDirective_exports, {\n rejectDOMDirective: () => rejectDOMDirective\n});\nmodule.exports = __toCommonJS(rejectDOMDirective_exports);\nvar import_oxc_parser = require(\"oxc-parser\");\nfunction rejectDOMDirective(code, filename, platform) {\n if (platform !== \"ios\" && platform !== \"android\" || !code.includes(\"use dom\") || !/\\.[cm]?[jt]sx?$/.test(filename)) return;\n var parsed = (0, import_oxc_parser.parseSync)(filename, code, {\n lang: /\\.[cm]?tsx?$/.test(filename) ? filename.endsWith(\"x\") ? \"tsx\" : \"ts\" : \"jsx\"\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = parsed.program.body[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var node = _step.value;\n if (node.type !== \"ExpressionStatement\" || !(\"directive\" in node) || typeof node.directive !== \"string\") break;\n if (node.directive === \"use dom\") {\n throw new Error(`[one/use-dom] ${filename}: \"use dom\" requires native.bundler: \"vite\"; Metro is unsupported`);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n//# sourceMappingURL=rejectDOMDirective.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,6BAA6B,CAAC;AAClC,SAAS,4BAA4B,EACnC,0BAA0B,mBAC5B,CAAC;AACD,OAAO,UAAU,aAAa,0BAA0B;AACxD,IAAI,oBAAoB,QAAQ,YAAY;AAC5C,SAAS,mBAAmB,MAAM,UAAU,UAAU;CACpD,IAAI,aAAa,SAAS,aAAa,aAAa,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,kBAAkB,KAAK,QAAQ,GAAG;CACpH,IAAI,UAAU,GAAG,kBAAkB,UAAS,CAAE,UAAU,MAAM,EAC5D,MAAM,eAAe,KAAK,QAAQ,IAAI,SAAS,SAAS,GAAG,IAAI,QAAQ,OAAO,MAChF,CAAC;CACD,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,OAAO,QAAQ,KAAK,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACpK,IAAI,OAAO,MAAM;GACjB,IAAI,KAAK,SAAS,yBAAyB,EAAE,eAAe,SAAS,OAAO,KAAK,cAAc,UAAU;GACzG,IAAI,KAAK,cAAc,WAAW;IAChC,MAAM,IAAI,MAAM,iBAAiB,SAAS,kEAAkE;GAC9G;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;AACF"}
@@ -4,6 +4,7 @@ import { resolve } from "node:path";
4
4
  import micromatch from "micromatch";
5
5
  import { getDefaultConfig } from "@react-native/metro-config";
6
6
  import { findUserBabelConfig } from "@vxrn/compiler";
7
+ import { desktopReactNativeFile, requireOnePackageRoot } from "@vxrn/utils/desktopReactNativeResolve";
7
8
  import { projectImport, projectResolve } from "../utils/projectImport.mjs";
8
9
  import { getTerminalReporter } from "../utils/getTerminalReporter.mjs";
9
10
 
@@ -61,9 +62,28 @@ function getReactNativeDefaultConfig(projectRoot) {
61
62
  }
62
63
  };
63
64
  }
65
+ const oneRoots = /* @__PURE__ */ new Map();
66
+ function redirectDesktopReactNative(projectRoot, origin, moduleName, platform) {
67
+ if (platform !== "macos" && platform !== "linux") return null;
68
+ const file = desktopReactNativeFile(origin, moduleName, oneRootFor(projectRoot, platform), platform);
69
+ if (!file) return null;
70
+ return {
71
+ type: "sourceFile",
72
+ filePath: file
73
+ };
74
+ }
75
+ function oneRootFor(projectRoot, platform) {
76
+ let root = oneRoots.get(projectRoot);
77
+ if (!root) {
78
+ root = requireOnePackageRoot(projectRoot, platform);
79
+ oneRoots.set(projectRoot, root);
80
+ }
81
+ return root;
82
+ }
64
83
  function getPlatformFromBundleUrl(url) {
65
- const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1];
66
- return platform === "android" ? "android" : "ios";
84
+ const platform = url.match(/[?&]platform=(ios|android|macos|linux)(?:&|$)/)?.[1];
85
+ if (platform === "ios" || platform === "android" || platform === "macos" || platform === "linux") return platform;
86
+ return "ios";
67
87
  }
68
88
  function rewriteMainModuleBundleUrl(url, resolveMainModuleName) {
69
89
  const resolvedMainModulePath = resolveMainModuleName({ platform: getPlatformFromBundleUrl(url) });
@@ -188,6 +208,11 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
188
208
  useWatchman,
189
209
  blockList,
190
210
  sourceExts: metroSourceExts,
211
+ platforms: [.../* @__PURE__ */ new Set([
212
+ ..._defaultConfig?.resolver?.platforms ?? [],
213
+ "macos",
214
+ "linux"
215
+ ])],
191
216
  resolveRequest: (context, moduleName, platform) => {
192
217
  const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
193
218
  if (excludeModules && excludeModules.length > 0) {
@@ -202,6 +227,8 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
202
227
  };
203
228
  return origResolveRequestFn(contextOverride, moduleName, platform);
204
229
  }
230
+ const desktopRedirect = redirectDesktopReactNative(projectRoot, context.originModulePath, moduleName, platform);
231
+ if (desktopRedirect) return desktopRedirect;
205
232
  return origResolveRequestFn(context, moduleName, platform);
206
233
  }
207
234
  },
@@ -263,6 +290,11 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
263
290
  useWatchman,
264
291
  blockList,
265
292
  sourceExts: metroSourceExts,
293
+ platforms: [.../* @__PURE__ */ new Set([
294
+ ..._defaultConfig?.resolver?.platforms ?? [],
295
+ "macos",
296
+ "linux"
297
+ ])],
266
298
  resolveRequest: (context, moduleName, platform) => {
267
299
  const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
268
300
  if (excludeModules && excludeModules.length > 0) {
@@ -277,6 +309,8 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
277
309
  };
278
310
  return origResolveRequestFn(contextOverride, moduleName, platform);
279
311
  }
312
+ const desktopRedirect = redirectDesktopReactNative(projectRoot, context.originModulePath, moduleName, platform);
313
+ if (desktopRedirect) return desktopRedirect;
280
314
  return origResolveRequestFn(context, moduleName, platform);
281
315
  }
282
316
  },
@@ -1 +1 @@
1
- {"version":3,"file":"getMetroConfigFromViteConfig.js","names":[],"sources":["esm/metro-config/getMetroConfigFromViteConfig.js"],"sourcesContent":["import { searchForWorkspaceRoot } from \"vite\";\nimport { spawn } from \"node:child_process\";\nimport { resolve } from \"node: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\";\nconst WATCHMAN_PROBE_TIMEOUT_MS = 2e3;\nconst expoEnvAdditionalExts = [\"env\", \"local\", \"development\"];\nconst metroSourceExts = [\"js\", \"jsx\", \"json\", \"ts\", \"tsx\", \"mjs\", \"cjs\", \"swift\", \"kt\"];\nconst watchmanResponsivePromises = /* @__PURE__ */ new Map();\nlet didWarnAboutWatchmanFallback = false;\nconst rootIndexBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/index\\.bundle(?=$|[?#])/;\nconst expoVirtualEntryBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/\\.expo\\/\\.virtual-metro-entry\\.bundle(?=$|[?#])/;\nconst metroWatchExclusions = [\n /^(?!.*[/\\\\]node_modules[/\\\\]).*[/\\\\]dist[/\\\\](?:static|server)(?:[/\\\\]|$)/,\n /[/\\\\]tests[/\\\\][^/\\\\]+[/\\\\]dist(?:[/\\\\]|$)/,\n /[/\\\\]\\.docker(?:[/\\\\]|$)/,\n /[/\\\\]\\.vite(?:[/\\\\]|$)/,\n /[/\\\\]node_modules[/\\\\]\\.vxrn(?:[/\\\\]|$)/\n];\nfunction enforceWorkspaceVisibility(config, projectRoot) {\n const workspaceRoot = searchForWorkspaceRoot(projectRoot);\n if (workspaceRoot === projectRoot) return config;\n return {\n ...config,\n watchFolders: [.../* @__PURE__ */ new Set([...config.watchFolders ?? [], workspaceRoot])],\n resolver: {\n ...config.resolver,\n nodeModulesPaths: [\n .../* @__PURE__ */ new Set([\n ...config.resolver?.nodeModulesPaths ?? [],\n resolve(projectRoot, \"node_modules\"),\n resolve(workspaceRoot, \"node_modules\")\n ])\n ]\n }\n };\n}\nfunction getReactNativeDefaultConfig(projectRoot) {\n const config = enforceWorkspaceVisibility(\n getDefaultConfig(projectRoot),\n projectRoot\n );\n return {\n ...config,\n resolver: {\n ...config.resolver,\n assetExts: [.../* @__PURE__ */ new Set([...config.resolver?.assetExts ?? [], \"glb\"])]\n }\n };\n}\nfunction getPlatformFromBundleUrl(url) {\n const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1];\n return platform === \"android\" ? \"android\" : \"ios\";\n}\nfunction rewriteMainModuleBundleUrl(url, resolveMainModuleName) {\n const resolvedMainModulePath = resolveMainModuleName({\n platform: getPlatformFromBundleUrl(url)\n });\n if (rootIndexBundleRequestPattern.test(url)) {\n return url.replace(\n rootIndexBundleRequestPattern,\n `$1/${resolvedMainModulePath}.bundle`\n );\n }\n return url.replace(\n expoVirtualEntryBundleRequestPattern,\n `$1/${resolvedMainModulePath}.bundle`\n );\n}\nfunction isMainModuleBundleRequest(url) {\n return rootIndexBundleRequestPattern.test(url) || expoVirtualEntryBundleRequestPattern.test(url);\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 enforcePackageResolution(config, mainModuleName, dedupe, projectRoot) {\n const dedupedPackages = new Set(dedupe);\n if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {\n return config;\n }\n const rootOrigin = resolve(projectRoot, \"package.json\");\n const innerResolveRequest = config.resolver?.resolveRequest;\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: (context, moduleName, platform) => {\n const bareMain = bareMainModuleForRequest(moduleName, mainModuleName);\n const request = bareMain ?? moduleName;\n const packageEnd = request.indexOf(\n \"/\",\n request.startsWith(\"@\") ? request.indexOf(\"/\") + 1 : 0\n );\n const packageName = packageEnd === -1 ? request : request.slice(0, packageEnd);\n const resolutionContext = isBareSpecifier(request) && dedupedPackages.has(packageName) ? { ...context, originModulePath: rootOrigin } : context;\n const resolveRequest = innerResolveRequest || context.resolveRequest;\n return resolveRequest(resolutionContext, request, platform);\n }\n }\n };\n}\nasync function isWatchmanResponsive(projectRoot) {\n let probe = watchmanResponsivePromises.get(projectRoot);\n if (probe) {\n return probe;\n }\n probe = new Promise((resolve2) => {\n let settled = false;\n const finish = (value) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve2(value);\n };\n const child = spawn(\"watchman\", [\"watch-project\", projectRoot], {\n stdio: \"ignore\"\n });\n const timeout = setTimeout(() => {\n child.kill();\n finish(false);\n }, WATCHMAN_PROBE_TIMEOUT_MS);\n child.once(\"error\", () => {\n finish(false);\n });\n child.once(\"exit\", (code) => {\n finish(code === 0);\n });\n });\n watchmanResponsivePromises.set(projectRoot, probe);\n return probe;\n}\nfunction resolveNativeTransforms(projectRoot, metroPluginOptions) {\n const userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null;\n const hasUserBabelConfig = Boolean(userBabelConfigPath);\n const 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(\n `[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 }\n return { isNativeTransforms, userBabelConfigPath };\n}\nasync function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {\n const extraConfig = {};\n const projectRoot = resolve(metroPluginOptions.argv?.projectRoot ?? config.root);\n const { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n const useWatchman = watchman ?? await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\n \"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\"\n );\n }\n const _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;\n const resolveMainModuleName = () => mainModuleName;\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = (url) => {\n if (isMainModuleBundleRequest(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl?.(url) ?? url;\n };\n }\n const existingBlockList = _defaultConfig?.resolver?.blockList;\n const blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [existingBlockList] : [],\n ...metroWatchExclusions\n ];\n const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n let nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(\n projectRoot,\n \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\"\n );\n }\n const defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig?.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.watcher?.additionalExts ?? [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig?.resolver,\n useWatchman,\n blockList,\n sourceExts: metroSourceExts,\n resolveRequest: (context, moduleName, platform) => {\n const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(\n context,\n \"@vxrn/utils/empty\",\n platform\n );\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n const contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(\n (c) => c !== \"import\"\n )\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._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(\n projectRoot,\n \"@vxrn/vite-plugin-metro/babel-transformer\"\n )\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 ? { transformerPath: nativeWorkerPath } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n const merged = {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n };\n return {\n defaultConfig: enforcePackageResolution(\n enforceWorkspaceVisibility(merged, projectRoot),\n mainModuleName,\n config.resolve?.dedupe ?? [],\n projectRoot\n ),\n projectRoot,\n extraConfig\n };\n}\nasync function getMetroConfigFromViteConfig(config, metroPluginOptions) {\n const extraConfig = {};\n const projectRoot = resolve(metroPluginOptions.argv?.projectRoot ?? config.root);\n const { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n const useWatchman = watchman ?? await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\n \"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\"\n );\n }\n const { loadConfig } = await projectImport(projectRoot, \"metro\");\n const _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;\n const resolveMainModuleName = () => mainModuleName;\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = (url) => {\n if (isMainModuleBundleRequest(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl?.(url) ?? url;\n };\n }\n const existingBlockList = _defaultConfig?.resolver?.blockList;\n const blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [existingBlockList] : [],\n ...metroWatchExclusions\n ];\n const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n let nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(\n projectRoot,\n \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\"\n );\n }\n const defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig?.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.watcher?.additionalExts ?? [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig?.resolver,\n useWatchman,\n blockList,\n sourceExts: metroSourceExts,\n resolveRequest: (context, moduleName, platform) => {\n const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(\n context,\n \"@vxrn/utils/empty\",\n platform\n );\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n const contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(\n (c) => c !== \"import\"\n )\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._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(\n projectRoot,\n \"@vxrn/vite-plugin-metro/babel-transformer\"\n )\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 ? { transformerPath: nativeWorkerPath } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n const metroConfig = await loadConfig(\n {\n cwd: projectRoot,\n projectRoot,\n \"reset-cache\": !!process.env.METRO_RESET_CACHE,\n ...argv\n },\n {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n }\n );\n return {\n ...enforcePackageResolution(\n enforceWorkspaceVisibility(metroConfig, projectRoot),\n mainModuleName,\n config.resolve?.dedupe ?? [],\n projectRoot\n ),\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.js","names":[],"sources":["esm/metro-config/getMetroConfigFromViteConfig.js"],"sourcesContent":["import { searchForWorkspaceRoot } from \"vite\";\nimport { spawn } from \"node:child_process\";\nimport { resolve } from \"node:path\";\nimport micromatch from \"micromatch\";\nimport { getDefaultConfig } from \"@react-native/metro-config\";\nimport { findUserBabelConfig } from \"@vxrn/compiler\";\nimport {\n desktopReactNativeFile,\n requireOnePackageRoot\n} from \"@vxrn/utils/desktopReactNativeResolve\";\nimport { projectImport, projectResolve } from \"../utils/projectImport\";\nimport { getTerminalReporter } from \"../utils/getTerminalReporter\";\nconst WATCHMAN_PROBE_TIMEOUT_MS = 2e3;\nconst expoEnvAdditionalExts = [\"env\", \"local\", \"development\"];\nconst metroSourceExts = [\"js\", \"jsx\", \"json\", \"ts\", \"tsx\", \"mjs\", \"cjs\", \"swift\", \"kt\"];\nconst watchmanResponsivePromises = /* @__PURE__ */ new Map();\nlet didWarnAboutWatchmanFallback = false;\nconst rootIndexBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/index\\.bundle(?=$|[?#])/;\nconst expoVirtualEntryBundleRequestPattern = /^(https?:\\/\\/[^/]+)?\\/\\.expo\\/\\.virtual-metro-entry\\.bundle(?=$|[?#])/;\nconst metroWatchExclusions = [\n /^(?!.*[/\\\\]node_modules[/\\\\]).*[/\\\\]dist[/\\\\](?:static|server)(?:[/\\\\]|$)/,\n /[/\\\\]tests[/\\\\][^/\\\\]+[/\\\\]dist(?:[/\\\\]|$)/,\n /[/\\\\]\\.docker(?:[/\\\\]|$)/,\n /[/\\\\]\\.vite(?:[/\\\\]|$)/,\n /[/\\\\]node_modules[/\\\\]\\.vxrn(?:[/\\\\]|$)/\n];\nfunction enforceWorkspaceVisibility(config, projectRoot) {\n const workspaceRoot = searchForWorkspaceRoot(projectRoot);\n if (workspaceRoot === projectRoot) return config;\n return {\n ...config,\n watchFolders: [.../* @__PURE__ */ new Set([...config.watchFolders ?? [], workspaceRoot])],\n resolver: {\n ...config.resolver,\n nodeModulesPaths: [\n .../* @__PURE__ */ new Set([\n ...config.resolver?.nodeModulesPaths ?? [],\n resolve(projectRoot, \"node_modules\"),\n resolve(workspaceRoot, \"node_modules\")\n ])\n ]\n }\n };\n}\nfunction getReactNativeDefaultConfig(projectRoot) {\n const config = enforceWorkspaceVisibility(\n getDefaultConfig(projectRoot),\n projectRoot\n );\n return {\n ...config,\n resolver: {\n ...config.resolver,\n assetExts: [.../* @__PURE__ */ new Set([...config.resolver?.assetExts ?? [], \"glb\"])]\n }\n };\n}\nconst oneRoots = /* @__PURE__ */ new Map();\nfunction redirectDesktopReactNative(projectRoot, origin, moduleName, platform) {\n if (platform !== \"macos\" && platform !== \"linux\") return null;\n const file = desktopReactNativeFile(\n origin,\n moduleName,\n oneRootFor(projectRoot, platform),\n platform\n );\n if (!file) return null;\n return { type: \"sourceFile\", filePath: file };\n}\nfunction oneRootFor(projectRoot, platform) {\n let root = oneRoots.get(projectRoot);\n if (!root) {\n root = requireOnePackageRoot(projectRoot, platform);\n oneRoots.set(projectRoot, root);\n }\n return root;\n}\nfunction getPlatformFromBundleUrl(url) {\n const platform = url.match(/[?&]platform=(ios|android|macos|linux)(?:&|$)/)?.[1];\n if (platform === \"ios\" || platform === \"android\" || platform === \"macos\" || platform === \"linux\")\n return platform;\n return \"ios\";\n}\nfunction rewriteMainModuleBundleUrl(url, resolveMainModuleName) {\n const resolvedMainModulePath = resolveMainModuleName({\n platform: getPlatformFromBundleUrl(url)\n });\n if (rootIndexBundleRequestPattern.test(url)) {\n return url.replace(\n rootIndexBundleRequestPattern,\n `$1/${resolvedMainModulePath}.bundle`\n );\n }\n return url.replace(\n expoVirtualEntryBundleRequestPattern,\n `$1/${resolvedMainModulePath}.bundle`\n );\n}\nfunction isMainModuleBundleRequest(url) {\n return rootIndexBundleRequestPattern.test(url) || expoVirtualEntryBundleRequestPattern.test(url);\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 enforcePackageResolution(config, mainModuleName, dedupe, projectRoot) {\n const dedupedPackages = new Set(dedupe);\n if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {\n return config;\n }\n const rootOrigin = resolve(projectRoot, \"package.json\");\n const innerResolveRequest = config.resolver?.resolveRequest;\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest: (context, moduleName, platform) => {\n const bareMain = bareMainModuleForRequest(moduleName, mainModuleName);\n const request = bareMain ?? moduleName;\n const packageEnd = request.indexOf(\n \"/\",\n request.startsWith(\"@\") ? request.indexOf(\"/\") + 1 : 0\n );\n const packageName = packageEnd === -1 ? request : request.slice(0, packageEnd);\n const resolutionContext = isBareSpecifier(request) && dedupedPackages.has(packageName) ? { ...context, originModulePath: rootOrigin } : context;\n const resolveRequest = innerResolveRequest || context.resolveRequest;\n return resolveRequest(resolutionContext, request, platform);\n }\n }\n };\n}\nasync function isWatchmanResponsive(projectRoot) {\n let probe = watchmanResponsivePromises.get(projectRoot);\n if (probe) {\n return probe;\n }\n probe = new Promise((resolve2) => {\n let settled = false;\n const finish = (value) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n resolve2(value);\n };\n const child = spawn(\"watchman\", [\"watch-project\", projectRoot], {\n stdio: \"ignore\"\n });\n const timeout = setTimeout(() => {\n child.kill();\n finish(false);\n }, WATCHMAN_PROBE_TIMEOUT_MS);\n child.once(\"error\", () => {\n finish(false);\n });\n child.once(\"exit\", (code) => {\n finish(code === 0);\n });\n });\n watchmanResponsivePromises.set(projectRoot, probe);\n return probe;\n}\nfunction resolveNativeTransforms(projectRoot, metroPluginOptions) {\n const userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null;\n const hasUserBabelConfig = Boolean(userBabelConfigPath);\n const 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(\n `[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 }\n return { isNativeTransforms, userBabelConfigPath };\n}\nasync function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {\n const extraConfig = {};\n const projectRoot = resolve(metroPluginOptions.argv?.projectRoot ?? config.root);\n const { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n const useWatchman = watchman ?? await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\n \"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\"\n );\n }\n const _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;\n const resolveMainModuleName = () => mainModuleName;\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = (url) => {\n if (isMainModuleBundleRequest(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl?.(url) ?? url;\n };\n }\n const existingBlockList = _defaultConfig?.resolver?.blockList;\n const blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [existingBlockList] : [],\n ...metroWatchExclusions\n ];\n const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n let nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(\n projectRoot,\n \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\"\n );\n }\n const defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig?.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.watcher?.additionalExts ?? [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig?.resolver,\n useWatchman,\n blockList,\n sourceExts: metroSourceExts,\n platforms: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.resolver?.platforms ?? [],\n \"macos\",\n \"linux\"\n ])\n ],\n resolveRequest: (context, moduleName, platform) => {\n const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(\n context,\n \"@vxrn/utils/empty\",\n platform\n );\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n const contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(\n (c) => c !== \"import\"\n )\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n const desktopRedirect = redirectDesktopReactNative(\n projectRoot,\n context.originModulePath,\n moduleName,\n platform\n );\n if (desktopRedirect) return desktopRedirect;\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._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(\n projectRoot,\n \"@vxrn/vite-plugin-metro/babel-transformer\"\n )\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 ? { transformerPath: nativeWorkerPath } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n const merged = {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n };\n return {\n defaultConfig: enforcePackageResolution(\n enforceWorkspaceVisibility(merged, projectRoot),\n mainModuleName,\n config.resolve?.dedupe ?? [],\n projectRoot\n ),\n projectRoot,\n extraConfig\n };\n}\nasync function getMetroConfigFromViteConfig(config, metroPluginOptions) {\n const extraConfig = {};\n const projectRoot = resolve(metroPluginOptions.argv?.projectRoot ?? config.root);\n const { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;\n const useWatchman = watchman ?? await isWatchmanResponsive(projectRoot);\n if (watchman === void 0 && !useWatchman && !didWarnAboutWatchmanFallback) {\n didWarnAboutWatchmanFallback = true;\n console.warn(\n \"[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.\"\n );\n }\n const { loadConfig } = await projectImport(projectRoot, \"metro\");\n const _defaultConfig = getReactNativeDefaultConfig(projectRoot);\n if (mainModuleName) {\n const origRewriteRequestUrl = _defaultConfig.server?.rewriteRequestUrl;\n const resolveMainModuleName = () => mainModuleName;\n extraConfig.getResolveMainModuleName = resolveMainModuleName;\n _defaultConfig.server.rewriteRequestUrl = (url) => {\n if (isMainModuleBundleRequest(url)) {\n return rewriteMainModuleBundleUrl(url, resolveMainModuleName);\n }\n return origRewriteRequestUrl?.(url) ?? url;\n };\n }\n const existingBlockList = _defaultConfig?.resolver?.blockList;\n const blockList = [\n ...existingBlockList ? Array.isArray(existingBlockList) ? existingBlockList : [existingBlockList] : [],\n ...metroWatchExclusions\n ];\n const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions);\n let nativeWorkerPath;\n if (isNativeTransforms) {\n nativeWorkerPath = projectResolve(\n projectRoot,\n \"@vxrn/vite-plugin-metro/transformer/metroNativeWorker\"\n );\n }\n const defaultConfig = {\n ..._defaultConfig,\n watcher: {\n ..._defaultConfig?.watcher,\n additionalExts: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.watcher?.additionalExts ?? [],\n ...expoEnvAdditionalExts\n ])\n ]\n },\n resolver: {\n ..._defaultConfig?.resolver,\n useWatchman,\n blockList,\n sourceExts: metroSourceExts,\n platforms: [\n .../* @__PURE__ */ new Set([\n ..._defaultConfig?.resolver?.platforms ?? [],\n \"macos\",\n \"linux\"\n ])\n ],\n resolveRequest: (context, moduleName, platform) => {\n const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;\n if (excludeModules && excludeModules.length > 0) {\n if (micromatch.isMatch(moduleName, excludeModules)) {\n return origResolveRequestFn(\n context,\n \"@vxrn/utils/empty\",\n platform\n );\n }\n }\n if (moduleName.startsWith(\"@babel/runtime\")) {\n const contextOverride = {\n ...context,\n unstable_conditionNames: context.unstable_conditionNames.filter(\n (c) => c !== \"import\"\n )\n };\n return origResolveRequestFn(contextOverride, moduleName, platform);\n }\n const desktopRedirect = redirectDesktopReactNative(\n projectRoot,\n context.originModulePath,\n moduleName,\n platform\n );\n if (desktopRedirect) return desktopRedirect;\n return origResolveRequestFn(context, moduleName, platform);\n }\n },\n transformer: {\n ..._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(\n projectRoot,\n \"@vxrn/vite-plugin-metro/babel-transformer\"\n )\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 ? { transformerPath: nativeWorkerPath } : {},\n reporter: await getTerminalReporter(projectRoot)\n };\n const metroConfig = await loadConfig(\n {\n cwd: projectRoot,\n projectRoot,\n \"reset-cache\": !!process.env.METRO_RESET_CACHE,\n ...argv\n },\n {\n ...defaultConfig,\n ...typeof defaultConfigOverrides === \"function\" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides\n }\n );\n return {\n ...enforcePackageResolution(\n enforceWorkspaceVisibility(metroConfig, projectRoot),\n mainModuleName,\n config.resolve?.dedupe ?? [],\n projectRoot\n ),\n ...extraConfig\n };\n}\nexport {\n buildMetroConfigInputFromViteConfig,\n getMetroConfigFromViteConfig\n};\n//# sourceMappingURL=getMetroConfigFromViteConfig.js.map\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { resolve } from "path";
4
4
  import micromatch from "micromatch";
5
5
  import { getDefaultConfig } from "@react-native/metro-config";
6
6
  import { findUserBabelConfig } from "@vxrn/compiler";
7
+ import { desktopReactNativeFile, requireOnePackageRoot } from "@vxrn/utils/desktopReactNativeResolve";
7
8
  import { projectImport, projectResolve } from "../utils/projectImport.native.js";
8
9
  import { getTerminalReporter } from "../utils/getTerminalReporter.native.js";
9
10
 
@@ -65,10 +66,29 @@ function getReactNativeDefaultConfig(projectRoot) {
65
66
  }
66
67
  };
67
68
  }
69
+ var oneRoots = /* @__PURE__ */ new Map();
70
+ function redirectDesktopReactNative(projectRoot, origin, moduleName, platform) {
71
+ if (platform !== "macos" && platform !== "linux") return null;
72
+ var file = desktopReactNativeFile(origin, moduleName, oneRootFor(projectRoot, platform), platform);
73
+ if (!file) return null;
74
+ return {
75
+ type: "sourceFile",
76
+ filePath: file
77
+ };
78
+ }
79
+ function oneRootFor(projectRoot, platform) {
80
+ var root = oneRoots.get(projectRoot);
81
+ if (!root) {
82
+ root = requireOnePackageRoot(projectRoot, platform);
83
+ oneRoots.set(projectRoot, root);
84
+ }
85
+ return root;
86
+ }
68
87
  function getPlatformFromBundleUrl(url) {
69
88
  var _url_match;
70
- var platform = (_url_match = url.match(/[?&]platform=(ios|android)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];
71
- return platform === "android" ? "android" : "ios";
89
+ var platform = (_url_match = url.match(/[?&]platform=(ios|android|macos|linux)(?:&|$)/)) === null || _url_match === void 0 ? void 0 : _url_match[1];
90
+ if (platform === "ios" || platform === "android" || platform === "macos" || platform === "linux") return platform;
91
+ return "ios";
72
92
  }
73
93
  function rewriteMainModuleBundleUrl(url, resolveMainModuleName) {
74
94
  var resolvedMainModulePath = resolveMainModuleName({ platform: getPlatformFromBundleUrl(url) });
@@ -156,8 +176,8 @@ function resolveNativeTransforms(projectRoot, metroPluginOptions) {
156
176
  };
157
177
  }
158
178
  async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
159
- var _ref, _ref1, _ref2;
160
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
179
+ var _ref, _ref1, _ref2, _ref3;
180
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _defaultConfig_resolver1, _config_resolve;
161
181
  var extraConfig = {};
162
182
  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);
163
183
  var { mainModuleName, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -175,11 +195,11 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
175
195
  };
176
196
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
177
197
  _defaultConfig.server.rewriteRequestUrl = function(url) {
178
- var _ref3;
198
+ var _ref4;
179
199
  if (isMainModuleBundleRequest(url)) {
180
200
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
181
201
  }
182
- return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
202
+ return (_ref4 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref4 !== void 0 ? _ref4 : url;
183
203
  };
184
204
  }
185
205
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -200,6 +220,11 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
200
220
  useWatchman,
201
221
  blockList,
202
222
  sourceExts: metroSourceExts,
223
+ platforms: [.../* @__PURE__ */ new Set([
224
+ ...(_ref2 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver1 = _defaultConfig.resolver) === null || _defaultConfig_resolver1 === void 0 ? void 0 : _defaultConfig_resolver1.platforms) !== null && _ref2 !== void 0 ? _ref2 : [],
225
+ "macos",
226
+ "linux"
227
+ ])],
203
228
  resolveRequest: function resolveRequest(context, moduleName, platform) {
204
229
  var _defaultConfig_resolver2;
205
230
  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;
@@ -217,6 +242,8 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
217
242
  };
218
243
  return origResolveRequestFn(contextOverride, moduleName, platform);
219
244
  }
245
+ var desktopRedirect = redirectDesktopReactNative(projectRoot, context.originModulePath, moduleName, platform);
246
+ if (desktopRedirect) return desktopRedirect;
220
247
  return origResolveRequestFn(context, moduleName, platform);
221
248
  }
222
249
  },
@@ -233,14 +260,14 @@ async function buildMetroConfigInputFromViteConfig(config, metroPluginOptions) {
233
260
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
234
261
  };
235
262
  return {
236
- 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),
263
+ defaultConfig: enforcePackageResolution(enforceWorkspaceVisibility(merged, projectRoot), mainModuleName, (_ref3 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref3 !== void 0 ? _ref3 : [], projectRoot),
237
264
  projectRoot,
238
265
  extraConfig
239
266
  };
240
267
  }
241
268
  async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
242
- var _ref, _ref1, _ref2;
243
- var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _config_resolve;
269
+ var _ref, _ref1, _ref2, _ref3;
270
+ var _metroPluginOptions_argv, _defaultConfig_resolver, _defaultConfig_watcher, _defaultConfig_resolver1, _config_resolve;
244
271
  var extraConfig = {};
245
272
  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);
246
273
  var { mainModuleName, argv, defaultConfigOverrides, watchman, excludeModules } = metroPluginOptions;
@@ -259,11 +286,11 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
259
286
  };
260
287
  extraConfig.getResolveMainModuleName = resolveMainModuleName;
261
288
  _defaultConfig.server.rewriteRequestUrl = function(url) {
262
- var _ref3;
289
+ var _ref4;
263
290
  if (isMainModuleBundleRequest(url)) {
264
291
  return rewriteMainModuleBundleUrl(url, resolveMainModuleName);
265
292
  }
266
- return (_ref3 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref3 !== void 0 ? _ref3 : url;
293
+ return (_ref4 = origRewriteRequestUrl === null || origRewriteRequestUrl === void 0 ? void 0 : origRewriteRequestUrl(url)) !== null && _ref4 !== void 0 ? _ref4 : url;
267
294
  };
268
295
  }
269
296
  var existingBlockList = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.blockList;
@@ -284,6 +311,11 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
284
311
  useWatchman,
285
312
  blockList,
286
313
  sourceExts: metroSourceExts,
314
+ platforms: [.../* @__PURE__ */ new Set([
315
+ ...(_ref2 = _defaultConfig === null || _defaultConfig === void 0 ? void 0 : (_defaultConfig_resolver1 = _defaultConfig.resolver) === null || _defaultConfig_resolver1 === void 0 ? void 0 : _defaultConfig_resolver1.platforms) !== null && _ref2 !== void 0 ? _ref2 : [],
316
+ "macos",
317
+ "linux"
318
+ ])],
287
319
  resolveRequest: function resolveRequest(context, moduleName, platform) {
288
320
  var _defaultConfig_resolver2;
289
321
  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;
@@ -301,6 +333,8 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
301
333
  };
302
334
  return origResolveRequestFn(contextOverride, moduleName, platform);
303
335
  }
336
+ var desktopRedirect = redirectDesktopReactNative(projectRoot, context.originModulePath, moduleName, platform);
337
+ if (desktopRedirect) return desktopRedirect;
304
338
  return origResolveRequestFn(context, moduleName, platform);
305
339
  }
306
340
  },
@@ -322,7 +356,7 @@ async function getMetroConfigFromViteConfig(config, metroPluginOptions) {
322
356
  ...typeof defaultConfigOverrides === "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
323
357
  });
324
358
  return {
325
- ...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),
359
+ ...enforcePackageResolution(enforceWorkspaceVisibility(metroConfig, projectRoot), mainModuleName, (_ref3 = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe) !== null && _ref3 !== void 0 ? _ref3 : [], projectRoot),
326
360
  ...extraConfig
327
361
  };
328
362
  }