@vxrn/vite-plugin-metro 1.1.501-1751155612296

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/index.cjs +28 -0
  2. package/dist/cjs/index.js +22 -0
  3. package/dist/cjs/index.js.map +6 -0
  4. package/dist/cjs/index.native.js +28 -0
  5. package/dist/cjs/index.native.js.map +6 -0
  6. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +56 -0
  7. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.js +49 -0
  8. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.js.map +6 -0
  9. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +48 -0
  10. package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +6 -0
  11. package/dist/cjs/plugins/metroPlugin.cjs +214 -0
  12. package/dist/cjs/plugins/metroPlugin.js +186 -0
  13. package/dist/cjs/plugins/metroPlugin.js.map +6 -0
  14. package/dist/cjs/plugins/metroPlugin.native.js +179 -0
  15. package/dist/cjs/plugins/metroPlugin.native.js.map +6 -0
  16. package/dist/cjs/transformer/babel-core.cjs +27 -0
  17. package/dist/cjs/transformer/babel-core.js +22 -0
  18. package/dist/cjs/transformer/babel-core.js.map +6 -0
  19. package/dist/cjs/transformer/babel-core.native.js +28 -0
  20. package/dist/cjs/transformer/babel-core.native.js.map +6 -0
  21. package/dist/cjs/transformer/babel-transformer.cjs +148 -0
  22. package/dist/cjs/transformer/babel-transformer.js +129 -0
  23. package/dist/cjs/transformer/babel-transformer.js.map +6 -0
  24. package/dist/cjs/transformer/babel-transformer.native.js +135 -0
  25. package/dist/cjs/transformer/babel-transformer.native.js.map +6 -0
  26. package/dist/cjs/transformer/loadBabelConfig.cjs +53 -0
  27. package/dist/cjs/transformer/loadBabelConfig.js +46 -0
  28. package/dist/cjs/transformer/loadBabelConfig.js.map +6 -0
  29. package/dist/cjs/transformer/loadBabelConfig.native.js +55 -0
  30. package/dist/cjs/transformer/loadBabelConfig.native.js.map +6 -0
  31. package/dist/cjs/transformer/transformSync.cjs +64 -0
  32. package/dist/cjs/transformer/transformSync.js +53 -0
  33. package/dist/cjs/transformer/transformSync.js.map +6 -0
  34. package/dist/cjs/transformer/transformSync.native.js +58 -0
  35. package/dist/cjs/transformer/transformSync.native.js.map +6 -0
  36. package/dist/cjs/utils/getTerminalReporter.cjs +59 -0
  37. package/dist/cjs/utils/getTerminalReporter.js +48 -0
  38. package/dist/cjs/utils/getTerminalReporter.js.map +6 -0
  39. package/dist/cjs/utils/getTerminalReporter.native.js +53 -0
  40. package/dist/cjs/utils/getTerminalReporter.native.js.map +6 -0
  41. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +35 -0
  42. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js +30 -0
  43. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js.map +6 -0
  44. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +37 -0
  45. package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +6 -0
  46. package/dist/cjs/utils/projectImport.cjs +56 -0
  47. package/dist/cjs/utils/projectImport.js +43 -0
  48. package/dist/cjs/utils/projectImport.js.map +6 -0
  49. package/dist/cjs/utils/projectImport.native.js +54 -0
  50. package/dist/cjs/utils/projectImport.native.js.map +6 -0
  51. package/dist/esm/index.js +7 -0
  52. package/dist/esm/index.js.map +6 -0
  53. package/dist/esm/index.mjs +4 -0
  54. package/dist/esm/index.mjs.map +1 -0
  55. package/dist/esm/index.native.js +4 -0
  56. package/dist/esm/index.native.js.map +1 -0
  57. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.js +35 -0
  58. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.js.map +6 -0
  59. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +33 -0
  60. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +1 -0
  61. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +34 -0
  62. package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -0
  63. package/dist/esm/plugins/metroPlugin.js +168 -0
  64. package/dist/esm/plugins/metroPlugin.js.map +6 -0
  65. package/dist/esm/plugins/metroPlugin.mjs +180 -0
  66. package/dist/esm/plugins/metroPlugin.mjs.map +1 -0
  67. package/dist/esm/plugins/metroPlugin.native.js +189 -0
  68. package/dist/esm/plugins/metroPlugin.native.js.map +1 -0
  69. package/dist/esm/transformer/babel-core.js +9 -0
  70. package/dist/esm/transformer/babel-core.js.map +6 -0
  71. package/dist/esm/transformer/babel-core.mjs +3 -0
  72. package/dist/esm/transformer/babel-core.mjs.map +1 -0
  73. package/dist/esm/transformer/babel-core.native.js +3 -0
  74. package/dist/esm/transformer/babel-core.native.js.map +1 -0
  75. package/dist/esm/transformer/babel-transformer.js +110 -0
  76. package/dist/esm/transformer/babel-transformer.js.map +6 -0
  77. package/dist/esm/transformer/babel-transformer.mjs +122 -0
  78. package/dist/esm/transformer/babel-transformer.mjs.map +1 -0
  79. package/dist/esm/transformer/babel-transformer.native.js +136 -0
  80. package/dist/esm/transformer/babel-transformer.native.js.map +1 -0
  81. package/dist/esm/transformer/loadBabelConfig.js +23 -0
  82. package/dist/esm/transformer/loadBabelConfig.js.map +6 -0
  83. package/dist/esm/transformer/loadBabelConfig.mjs +19 -0
  84. package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -0
  85. package/dist/esm/transformer/loadBabelConfig.native.js +23 -0
  86. package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -0
  87. package/dist/esm/transformer/transformSync.js +29 -0
  88. package/dist/esm/transformer/transformSync.js.map +6 -0
  89. package/dist/esm/transformer/transformSync.mjs +30 -0
  90. package/dist/esm/transformer/transformSync.mjs.map +1 -0
  91. package/dist/esm/transformer/transformSync.native.js +31 -0
  92. package/dist/esm/transformer/transformSync.native.js.map +1 -0
  93. package/dist/esm/utils/getTerminalReporter.js +25 -0
  94. package/dist/esm/utils/getTerminalReporter.js.map +6 -0
  95. package/dist/esm/utils/getTerminalReporter.mjs +25 -0
  96. package/dist/esm/utils/getTerminalReporter.mjs.map +1 -0
  97. package/dist/esm/utils/getTerminalReporter.native.js +26 -0
  98. package/dist/esm/utils/getTerminalReporter.native.js.map +1 -0
  99. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js +14 -0
  100. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js.map +6 -0
  101. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +12 -0
  102. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +1 -0
  103. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +14 -0
  104. package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -0
  105. package/dist/esm/utils/projectImport.js +20 -0
  106. package/dist/esm/utils/projectImport.js.map +6 -0
  107. package/dist/esm/utils/projectImport.mjs +20 -0
  108. package/dist/esm/utils/projectImport.mjs.map +1 -0
  109. package/dist/esm/utils/projectImport.native.js +22 -0
  110. package/dist/esm/utils/projectImport.native.js.map +1 -0
  111. package/empty.js +0 -0
  112. package/package.json +68 -0
  113. package/src/index.ts +4 -0
  114. package/src/plugins/expoManifestRequestHandlerPlugin.ts +75 -0
  115. package/src/plugins/metroPlugin.ts +314 -0
  116. package/src/transformer/babel-core.ts +7 -0
  117. package/src/transformer/babel-transformer.ts +211 -0
  118. package/src/transformer/loadBabelConfig.ts +53 -0
  119. package/src/transformer/transformSync.ts +54 -0
  120. package/src/utils/getTerminalReporter.ts +42 -0
  121. package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +27 -0
  122. package/src/utils/projectImport.ts +32 -0
  123. package/types/index.d.ts +5 -0
  124. package/types/index.d.ts.map +1 -0
  125. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +14 -0
  126. package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +1 -0
  127. package/types/plugins/metroPlugin.d.ts +22 -0
  128. package/types/plugins/metroPlugin.d.ts.map +1 -0
  129. package/types/transformer/babel-core.d.ts +2 -0
  130. package/types/transformer/babel-core.d.ts.map +1 -0
  131. package/types/transformer/babel-transformer.d.ts +18 -0
  132. package/types/transformer/babel-transformer.d.ts.map +1 -0
  133. package/types/transformer/loadBabelConfig.d.ts +10 -0
  134. package/types/transformer/loadBabelConfig.d.ts.map +1 -0
  135. package/types/transformer/transformSync.d.ts +11 -0
  136. package/types/transformer/transformSync.d.ts.map +1 -0
  137. package/types/utils/getTerminalReporter.d.ts +3 -0
  138. package/types/utils/getTerminalReporter.d.ts.map +1 -0
  139. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +5 -0
  140. package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +1 -0
  141. package/types/utils/projectImport.d.ts +12 -0
  142. package/types/utils/projectImport.d.ts.map +1 -0
@@ -0,0 +1,186 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
+ // If the importer is in node compatibility mode or this is not an ESM
17
+ // file that has been converted to a CommonJS file using a Babel-
18
+ // compatible transform (i.e. "__esModule" has not been set), then set
19
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
21
+ mod
22
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
23
+ var metroPlugin_exports = {};
24
+ __export(metroPlugin_exports, {
25
+ metroPlugin: () => metroPlugin
26
+ });
27
+ module.exports = __toCommonJS(metroPlugin_exports);
28
+ var import_node_fs = require("node:fs"), import_promises = require("node:fs/promises"), import_node_url = require("node:url"), import_launch_editor = __toESM(require("launch-editor"), 1), import_projectImport = require("../utils/projectImport"), import_getTerminalReporter = require("../utils/getTerminalReporter"), import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName = require("../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName");
29
+ function metroPlugin({
30
+ argv,
31
+ defaultConfigOverrides,
32
+ babelConfig,
33
+ mainModuleName
34
+ } = {}) {
35
+ return {
36
+ name: "metro",
37
+ // configResolved(config) {
38
+ // projectRoot = config.root
39
+ // },
40
+ async configureServer(server) {
41
+ const { logger, root: projectRoot } = server.config, { default: Metro, loadConfig } = await (0, import_projectImport.projectImport)(projectRoot, "metro"), { default: MetroHmrServer } = await (0, import_projectImport.projectImport)(projectRoot, "metro/src/HmrServer"), { default: createWebsocketServer } = await (0, import_projectImport.projectImport)(projectRoot, "metro/src/lib/createWebsocketServer"), { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config"), { createDevMiddleware } = await (0, import_projectImport.projectImport)(projectRoot, "@react-native/dev-middleware"), _defaultConfig = getDefaultConfig(projectRoot);
42
+ if (mainModuleName) {
43
+ const origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl, resolveMainModuleName = await (async () => {
44
+ const ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(
45
+ projectRoot,
46
+ "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js"
47
+ )).default.ExpoGoManifestHandlerMiddleware, manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
48
+ return (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(
49
+ manifestHandlerMiddleware,
50
+ mainModuleName
51
+ ), (p) => manifestHandlerMiddleware.resolveMainModuleName({
52
+ pkg: { main: mainModuleName },
53
+ platform: p.platform
54
+ });
55
+ })();
56
+ _defaultConfig.server.rewriteRequestUrl = (url) => {
57
+ if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
58
+ const resolvedMainModulePath = resolveMainModuleName({
59
+ platform: "ios"
60
+ // we probably need to handle android here, but currently in our use case this won't affect the result
61
+ });
62
+ return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
63
+ }
64
+ return origRewriteRequestUrl(url);
65
+ };
66
+ }
67
+ const defaultConfig = {
68
+ ..._defaultConfig,
69
+ resolver: {
70
+ ..._defaultConfig?.resolver,
71
+ sourceExts: ["js", "jsx", "json", "ts", "tsx", "mjs", "cjs"],
72
+ // `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.
73
+ resolveRequest: (context, moduleName, platform) => {
74
+ const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
75
+ if (moduleName.startsWith("@babel/runtime")) {
76
+ const contextOverride = {
77
+ ...context,
78
+ unstable_conditionNames: context.unstable_conditionNames.filter(
79
+ (c) => c !== "import"
80
+ )
81
+ };
82
+ return origResolveRequestFn(contextOverride, moduleName, platform);
83
+ }
84
+ return origResolveRequestFn(context, moduleName, platform);
85
+ }
86
+ },
87
+ transformer: {
88
+ ..._defaultConfig?.transformer,
89
+ babelTransformerPath: (0, import_projectImport.projectResolve)(
90
+ projectRoot,
91
+ "@vxrn/vite-plugin-metro/babel-transformer"
92
+ ),
93
+ // TODO: This is what Expo is doing, but do we really need this?
94
+ publicPath: "/assets/?unstable_path=."
95
+ },
96
+ reporter: await (0, import_getTerminalReporter.getTerminalReporter)(projectRoot)
97
+ }, config = await loadConfig(
98
+ {
99
+ cwd: projectRoot,
100
+ projectRoot,
101
+ "reset-cache": !!process.env.METRO_RESET_CACHE,
102
+ ...argv
103
+ },
104
+ {
105
+ ...defaultConfig,
106
+ ...typeof defaultConfigOverrides == "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
107
+ }
108
+ ), { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {
109
+ // Force enable file watching, even on CI.
110
+ // This is needed for HMR tests to work on CI.
111
+ watch: !0
112
+ }), originalTransformFile = metroServer.getBundler().getBundler().transformFile.bind(metroServer.getBundler().getBundler());
113
+ metroServer.getBundler().getBundler().transformFile = async (filePath, transformOptions, fileBuffer) => originalTransformFile(
114
+ filePath,
115
+ {
116
+ ...transformOptions,
117
+ customTransformOptions: {
118
+ ...transformOptions.customTransformOptions,
119
+ vite: {
120
+ babelConfig
121
+ }
122
+ }
123
+ },
124
+ fileBuffer
125
+ );
126
+ const hmrServer = new MetroHmrServer(
127
+ metroServer.getBundler(),
128
+ metroServer.getCreateModuleId(),
129
+ config
130
+ ), reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`, { middleware: rnDevtoolsMiddleware, websocketEndpoints: rnDevtoolsWebsocketEndpoints } = createDevMiddleware({
131
+ projectRoot,
132
+ serverBaseUrl: reactNativeDevToolsUrl,
133
+ logger: console
134
+ });
135
+ server.middlewares.use(async (req, res, next) => {
136
+ try {
137
+ if (req.url?.includes(".bundle")) {
138
+ const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
139
+ if (VITE_METRO_DEBUG_BUNDLE && (0, import_node_fs.existsSync)(VITE_METRO_DEBUG_BUNDLE)) {
140
+ console.info(" !!! - serving debug bundle from", VITE_METRO_DEBUG_BUNDLE);
141
+ const content = await (0, import_promises.readFile)(VITE_METRO_DEBUG_BUNDLE, "utf-8");
142
+ res.setHeader("Content-Type", "application/javascript"), res.end(content);
143
+ return;
144
+ }
145
+ }
146
+ if (req.url === "/status" && req.headers["user-agent"]?.includes(
147
+ "CFNetwork/"
148
+ )) {
149
+ res.statusCode = 200, res.end("packager-status:running");
150
+ return;
151
+ }
152
+ if (req.url === "/open-stack-frame" && req.method === "POST") {
153
+ let body = "";
154
+ req.on("data", (chunk) => {
155
+ body += chunk.toString();
156
+ }), req.on("end", () => {
157
+ try {
158
+ const frame = JSON.parse(body);
159
+ (0, import_launch_editor.default)(frame.file), res.statusCode = 200, res.end("Stack frame opened in editor");
160
+ } catch (e) {
161
+ return console.error("Failed to parse stack frame:", e), res.statusCode = 400, res.end("Invalid stack frame JSON");
162
+ }
163
+ });
164
+ return;
165
+ }
166
+ await middleware(req, res, next);
167
+ } catch (error) {
168
+ console.error("Metro middleware error:", error), next();
169
+ }
170
+ }), server.middlewares.use(rnDevtoolsMiddleware);
171
+ const websocketEndpoints = {
172
+ "/hot": createWebsocketServer({
173
+ websocketServer: hmrServer
174
+ }),
175
+ ...rnDevtoolsWebsocketEndpoints
176
+ };
177
+ server.httpServer?.on("upgrade", (request, socket, head) => {
178
+ const { pathname } = (0, import_node_url.parse)(request.url);
179
+ pathname != null && websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {
180
+ websocketEndpoints[pathname].emit("connection", ws, request);
181
+ });
182
+ });
183
+ }
184
+ };
185
+ }
186
+ //# sourceMappingURL=metroPlugin.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/metroPlugin.ts"],
4
+ "mappings": "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",
5
+ "names": ["launchEditor"]
6
+ }
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: !0 });
10
+ }, __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from == "object" || typeof from == "function")
12
+ for (let key of __getOwnPropNames(from))
13
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
22
+ mod
23
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
24
+ var metroPlugin_exports = {};
25
+ __export(metroPlugin_exports, {
26
+ metroPlugin: () => metroPlugin
27
+ });
28
+ module.exports = __toCommonJS(metroPlugin_exports);
29
+ var import_node_fs = require("node:fs"), import_promises = require("node:fs/promises"), import_node_url = require("node:url"), import_launch_editor = __toESM(require("launch-editor"), 1), import_projectImport = require("../utils/projectImport"), import_getTerminalReporter = require("../utils/getTerminalReporter"), import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName = require("../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName");
30
+ function metroPlugin() {
31
+ var { argv, defaultConfigOverrides, babelConfig, mainModuleName } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
32
+ return {
33
+ name: "metro",
34
+ // configResolved(config) {
35
+ // projectRoot = config.root
36
+ // },
37
+ async configureServer(server) {
38
+ var _server_httpServer, { logger, root: projectRoot } = server.config, { default: Metro, loadConfig } = await (0, import_projectImport.projectImport)(projectRoot, "metro"), { default: MetroHmrServer } = await (0, import_projectImport.projectImport)(projectRoot, "metro/src/HmrServer"), { default: createWebsocketServer } = await (0, import_projectImport.projectImport)(projectRoot, "metro/src/lib/createWebsocketServer"), { getDefaultConfig } = await (0, import_projectImport.projectImport)(projectRoot, "@expo/metro-config"), { createDevMiddleware } = await (0, import_projectImport.projectImport)(projectRoot, "@react-native/dev-middleware"), _defaultConfig = getDefaultConfig(projectRoot);
39
+ if (mainModuleName) {
40
+ var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl, resolveMainModuleName = await async function() {
41
+ var ExpoGoManifestHandlerMiddleware = (await (0, import_projectImport.projectImport)(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware, manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
42
+ return (0, import_patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName)(manifestHandlerMiddleware, mainModuleName), function(p) {
43
+ return manifestHandlerMiddleware.resolveMainModuleName({
44
+ pkg: {
45
+ main: mainModuleName
46
+ },
47
+ platform: p.platform
48
+ });
49
+ };
50
+ }();
51
+ _defaultConfig.server.rewriteRequestUrl = function(url) {
52
+ if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
53
+ var resolvedMainModulePath = resolveMainModuleName({
54
+ platform: "ios"
55
+ });
56
+ return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
57
+ }
58
+ return origRewriteRequestUrl(url);
59
+ };
60
+ }
61
+ var defaultConfig = {
62
+ ..._defaultConfig,
63
+ resolver: {
64
+ ..._defaultConfig == null ? void 0 : _defaultConfig.resolver,
65
+ sourceExts: [
66
+ "js",
67
+ "jsx",
68
+ "json",
69
+ "ts",
70
+ "tsx",
71
+ "mjs",
72
+ "cjs"
73
+ ],
74
+ // `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.
75
+ resolveRequest: function(context, moduleName, platform) {
76
+ var _defaultConfig_resolver, origResolveRequestFn = (_defaultConfig == null || (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.resolveRequest) || context.resolveRequest;
77
+ if (moduleName.startsWith("@babel/runtime")) {
78
+ var contextOverride = {
79
+ ...context,
80
+ unstable_conditionNames: context.unstable_conditionNames.filter(function(c) {
81
+ return c !== "import";
82
+ })
83
+ };
84
+ return origResolveRequestFn(contextOverride, moduleName, platform);
85
+ }
86
+ return origResolveRequestFn(context, moduleName, platform);
87
+ }
88
+ },
89
+ transformer: {
90
+ ..._defaultConfig == null ? void 0 : _defaultConfig.transformer,
91
+ babelTransformerPath: (0, import_projectImport.projectResolve)(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer"),
92
+ // TODO: This is what Expo is doing, but do we really need this?
93
+ publicPath: "/assets/?unstable_path=."
94
+ },
95
+ reporter: await (0, import_getTerminalReporter.getTerminalReporter)(projectRoot)
96
+ }, config = await loadConfig({
97
+ cwd: projectRoot,
98
+ projectRoot,
99
+ "reset-cache": !!process.env.METRO_RESET_CACHE,
100
+ ...argv
101
+ }, {
102
+ ...defaultConfig,
103
+ ...typeof defaultConfigOverrides == "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
104
+ }), { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {
105
+ // Force enable file watching, even on CI.
106
+ // This is needed for HMR tests to work on CI.
107
+ watch: !0
108
+ }), originalTransformFile = metroServer.getBundler().getBundler().transformFile.bind(metroServer.getBundler().getBundler());
109
+ metroServer.getBundler().getBundler().transformFile = async function(filePath, transformOptions, fileBuffer) {
110
+ return originalTransformFile(filePath, {
111
+ ...transformOptions,
112
+ customTransformOptions: {
113
+ ...transformOptions.customTransformOptions,
114
+ vite: {
115
+ babelConfig
116
+ }
117
+ }
118
+ }, fileBuffer);
119
+ };
120
+ var hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config), reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`, { middleware: rnDevtoolsMiddleware, websocketEndpoints: rnDevtoolsWebsocketEndpoints } = createDevMiddleware({
121
+ projectRoot,
122
+ serverBaseUrl: reactNativeDevToolsUrl,
123
+ logger: console
124
+ });
125
+ server.middlewares.use(async function(req, res, next) {
126
+ try {
127
+ var _req_url, _req_headers_useragent;
128
+ if (!((_req_url = req.url) === null || _req_url === void 0) && _req_url.includes(".bundle")) {
129
+ var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
130
+ if (VITE_METRO_DEBUG_BUNDLE && (0, import_node_fs.existsSync)(VITE_METRO_DEBUG_BUNDLE)) {
131
+ console.info(" !!! - serving debug bundle from", VITE_METRO_DEBUG_BUNDLE);
132
+ var content = await (0, import_promises.readFile)(VITE_METRO_DEBUG_BUNDLE, "utf-8");
133
+ res.setHeader("Content-Type", "application/javascript"), res.end(content);
134
+ return;
135
+ }
136
+ }
137
+ if (req.url === "/status" && (!((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0) && _req_headers_useragent.includes("CFNetwork/"))) {
138
+ res.statusCode = 200, res.end("packager-status:running");
139
+ return;
140
+ }
141
+ if (req.url === "/open-stack-frame" && req.method === "POST") {
142
+ var body = "";
143
+ req.on("data", function(chunk) {
144
+ body += chunk.toString();
145
+ }), req.on("end", function() {
146
+ try {
147
+ var frame = JSON.parse(body);
148
+ (0, import_launch_editor.default)(frame.file), res.statusCode = 200, res.end("Stack frame opened in editor");
149
+ } catch (e) {
150
+ return console.error("Failed to parse stack frame:", e), res.statusCode = 400, res.end("Invalid stack frame JSON");
151
+ }
152
+ });
153
+ return;
154
+ }
155
+ await middleware(req, res, next);
156
+ } catch (error) {
157
+ console.error("Metro middleware error:", error), next();
158
+ }
159
+ }), server.middlewares.use(rnDevtoolsMiddleware);
160
+ var websocketEndpoints = {
161
+ "/hot": createWebsocketServer({
162
+ websocketServer: hmrServer
163
+ }),
164
+ ...rnDevtoolsWebsocketEndpoints
165
+ };
166
+ (_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 || _server_httpServer.on("upgrade", function(request, socket, head) {
167
+ var { pathname } = (0, import_node_url.parse)(request.url);
168
+ pathname != null && websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, function(ws) {
169
+ websocketEndpoints[pathname].emit("connection", ws, request);
170
+ });
171
+ });
172
+ }
173
+ };
174
+ }
175
+ // Annotate the CommonJS export names for ESM import in node:
176
+ 0 && (module.exports = {
177
+ metroPlugin
178
+ });
179
+ //# sourceMappingURL=metroPlugin.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/metroPlugin.ts"],
4
+ "mappings": "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",
5
+ "names": ["metroPlugin", "argv", "defaultConfigOverrides", "babelConfig", "mainModuleName", "name", "configureServer", "server", "logger", "root", "projectRoot", "config", "default", "Metro", "loadConfig", "projectImport", "MetroHmrServer", "createWebsocketServer", "getDefaultConfig", "createDevMiddleware", "_defaultConfig", "origRewriteRequestUrl", "rewriteRequestUrl", "resolveMainModuleName", "ExpoGoManifestHandlerMiddleware", "manifestHandlerMiddleware", "patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName", "p", "pkg", "main", "platform", "url", "includes", "resolvedMainModulePath", "replace", "defaultConfig", "resolver", "sourceExts", "resolveRequest", "context", "moduleName", "origResolveRequestFn", "startsWith", "contextOverride", "unstable_conditionNames", "filter", "c", "transformer", "babelTransformerPath", "projectResolve", "publicPath", "reporter", "getTerminalReporter", "cwd", "process", "env", "METRO_RESET_CACHE", "middleware", "end", "metroServer", "createConnectMiddleware", "watch", "originalTransformFile", "getBundler", "transformFile", "bind", "filePath", "transformOptions", "fileBuffer", "customTransformOptions", "vite", "hmrServer", "getCreateModuleId", "reactNativeDevToolsUrl", "host", "port", "rnDevtoolsMiddleware", "websocketEndpoints", "rnDevtoolsWebsocketEndpoints", "serverBaseUrl", "console", "middlewares", "use", "req", "res", "next", "VITE_METRO_DEBUG_BUNDLE", "existsSync", "info", "content", "readFile", "setHeader", "headers", "statusCode", "method", "body", "on", "chunk", "toString", "frame", "JSON", "parse", "launchEditor", "file", "e", "error", "websocketServer", "httpServer", "request", "socket", "head", "pathname", "handleUpgrade", "ws", "emit"]
6
+ }
@@ -0,0 +1,27 @@
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: !0
9
+ });
10
+ },
11
+ __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ return to;
17
+ };
18
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
19
+ value: !0
20
+ }), mod);
21
+ var babel_core_exports = {};
22
+ __export(babel_core_exports, {
23
+ transformFromAstSync: () => import_core.transformFromAstSync,
24
+ transformSync: () => import_core.transformSync
25
+ });
26
+ module.exports = __toCommonJS(babel_core_exports);
27
+ var import_core = require("@babel/core");
@@ -0,0 +1,22 @@
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)
7
+ __defProp(target, name, { get: all[name], enumerable: !0 });
8
+ }, __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from == "object" || typeof from == "function")
10
+ for (let key of __getOwnPropNames(from))
11
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
15
+ var babel_core_exports = {};
16
+ __export(babel_core_exports, {
17
+ transformFromAstSync: () => import_core.transformFromAstSync,
18
+ transformSync: () => import_core.transformSync
19
+ });
20
+ module.exports = __toCommonJS(babel_core_exports);
21
+ var import_core = require("@babel/core");
22
+ //# sourceMappingURL=babel-core.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transformer/babel-core.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAKO;",
5
+ "names": []
6
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+ var babel_core_exports = {};
17
+ __export(babel_core_exports, {
18
+ transformFromAstSync: () => import_core.transformFromAstSync,
19
+ transformSync: () => import_core.transformSync
20
+ });
21
+ module.exports = __toCommonJS(babel_core_exports);
22
+ var import_core = require("@babel/core");
23
+ // Annotate the CommonJS export names for ESM import in node:
24
+ 0 && (module.exports = {
25
+ transformFromAstSync,
26
+ transformSync
27
+ });
28
+ //# sourceMappingURL=babel-core.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transformer/babel-core.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;;;;;;AACA,kBAKO;",
5
+ "names": []
6
+ }
@@ -0,0 +1,148 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf,
6
+ __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __copyProps = (to, from, except, desc) => {
8
+ if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
9
+ get: () => from[key],
10
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
11
+ });
12
+ return to;
13
+ };
14
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
15
+ // If the importer is in node compatibility mode or this is not an ESM
16
+ // file that has been converted to a CommonJS file using a Babel-
17
+ // compatible transform (i.e. "__esModule" has not been set), then set
18
+ // "default" to the CommonJS "module.exports" for node compatibility.
19
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: !0
22
+ }) : target, mod)),
23
+ __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
24
+ value: !0
25
+ }), mod);
26
+ var babel_transformer_exports = {};
27
+ module.exports = __toCommonJS(babel_transformer_exports);
28
+ var import_node_assert = __toESM(require("node:assert"), 1),
29
+ import_loadBabelConfig = require("./loadBabelConfig.cjs"),
30
+ import_transformSync = require("./transformSync.cjs");
31
+ const debug = require("debug")("expo:metro-config:babel-transformer");
32
+ function isCustomTruthy(value) {
33
+ return String(value) === "true";
34
+ }
35
+ function memoize(fn) {
36
+ const cache = /* @__PURE__ */new Map();
37
+ return (...args) => {
38
+ const key = JSON.stringify(args);
39
+ if (cache.has(key)) return cache.get(key);
40
+ const result = fn(...args);
41
+ return cache.set(key, result), result;
42
+ };
43
+ }
44
+ const memoizeWarning = memoize(message => {
45
+ debug(message);
46
+ });
47
+ function getBabelCaller({
48
+ filename,
49
+ options
50
+ }) {
51
+ const isNodeModule = filename.includes("node_modules"),
52
+ isReactServer = options.customTransformOptions?.environment === "react-server",
53
+ isGenericServer = options.customTransformOptions?.environment === "node",
54
+ isServer = isReactServer || isGenericServer,
55
+ routerRoot = typeof options.customTransformOptions?.routerRoot == "string" ? decodeURI(options.customTransformOptions.routerRoot) : void 0;
56
+ return routerRoot == null && memoizeWarning("Warning: Missing transform.routerRoot option in Metro bundling request, falling back to `app` as routes directory. This can occur if you bundle without Expo CLI or expo/metro-config."), {
57
+ name: "metro",
58
+ bundler: "metro",
59
+ platform: options.platform,
60
+ // Empower the babel preset to know the env it's bundling for.
61
+ // Metro automatically updates the cache to account for the custom transform options.
62
+ isServer,
63
+ // Enable React Server Component rules for AST. The naming maps to the resolver property `--conditions=react-server`.
64
+ isReactServer,
65
+ // The base url to make requests from, used for hosting from non-standard locations.
66
+ baseUrl: typeof options.customTransformOptions?.baseUrl == "string" ? decodeURI(options.customTransformOptions.baseUrl) : "",
67
+ // Ensure we always use a mostly-valid router root.
68
+ routerRoot: routerRoot ?? "app",
69
+ isDev: options.dev,
70
+ // This value indicates if the user has disabled the feature or not.
71
+ // Other criteria may still cause the feature to be disabled, but all inputs used are
72
+ // already considered in the cache key.
73
+ preserveEnvVars: isCustomTruthy(options.customTransformOptions?.preserveEnvVars) ? !0 : void 0,
74
+ asyncRoutes: isCustomTruthy(options.customTransformOptions?.asyncRoutes) ? !0 : void 0,
75
+ // Pass the engine to babel so we can automatically transpile for the correct
76
+ // target environment.
77
+ engine: stringOrUndefined(options.customTransformOptions?.engine),
78
+ // Provide the project root for accurately reading the Expo config.
79
+ projectRoot: options.projectRoot,
80
+ isNodeModule,
81
+ isHMREnabled: options.hot,
82
+ // Set the standard Babel flag to disable ESM transformations.
83
+ supportsStaticESM: isCustomTruthy(options.customTransformOptions?.optimize) || options.experimentalImportSupport,
84
+ // Enable React compiler support in Babel.
85
+ // TODO: Remove this in the future when compiler is on by default.
86
+ supportsReactCompiler: isCustomTruthy(options.customTransformOptions?.reactCompiler) ? !0 : void 0
87
+ };
88
+ }
89
+ function stringOrUndefined(value) {
90
+ return typeof value == "string" ? value : void 0;
91
+ }
92
+ const transform = ({
93
+ filename,
94
+ src,
95
+ options,
96
+ // `plugins` is used for `functionMapBabelPlugin` from `metro-source-map`. Could make sense to move this to `babel-preset-expo` too.
97
+ plugins
98
+ }) => {
99
+ const babelConfigFromVitePlugin = (options.customTransformOptions?.vite || {}).babelConfig || {},
100
+ OLD_BABEL_ENV = process.env.BABEL_ENV;
101
+ process.env.BABEL_ENV = options.dev ? "development" : process.env.BABEL_ENV || "production";
102
+ try {
103
+ const babelConfig = {
104
+ // ES modules require sourceType='module' but OSS may not always want that
105
+ sourceType: "unambiguous",
106
+ // The output we want from Babel methods
107
+ ast: !0,
108
+ code: !1,
109
+ // NOTE(EvanBacon): We split the parse/transform steps up to accommodate
110
+ // Hermes parsing, but this defaults to cloning the AST which increases
111
+ // the transformation time by a fair amount.
112
+ // You get this behavior by default when using Babel's `transform` method directly.
113
+ cloneInputAst: !1,
114
+ // Options for debugging
115
+ cwd: options.projectRoot,
116
+ filename,
117
+ highlightCode: !0,
118
+ ...babelConfigFromVitePlugin,
119
+ ...(0, import_loadBabelConfig.loadBabelConfig)(options),
120
+ babelrc: typeof options.enableBabelRCLookup == "boolean" ? options.enableBabelRCLookup : !0,
121
+ plugins: [...(babelConfigFromVitePlugin.plugins || []), ...plugins],
122
+ // NOTE(EvanBacon): We heavily leverage the caller functionality to mutate the babel config.
123
+ // This compensates for the lack of a format plugin system in Metro. Users can modify the
124
+ // all (most) of the transforms in their local Babel config.
125
+ // This also helps us keep the transform layers small and focused on a single task. We can also use this to
126
+ // ensure the Babel config caching is more accurate.
127
+ // Additionally, by moving everything Babel-related to the Babel preset, it makes it easier for users to reason
128
+ // about the requirements of an Expo project, making it easier to migrate to other transpilers in the future.
129
+ caller: getBabelCaller({
130
+ filename,
131
+ options
132
+ })
133
+ },
134
+ result = (0, import_transformSync.transformSync)(src, babelConfig, options);
135
+ return result ? ((0, import_node_assert.default)(result.ast), {
136
+ ast: result.ast,
137
+ metadata: result.metadata
138
+ }) : {
139
+ ast: null
140
+ };
141
+ } finally {
142
+ OLD_BABEL_ENV && (process.env.BABEL_ENV = OLD_BABEL_ENV);
143
+ }
144
+ },
145
+ babelTransformer = {
146
+ transform
147
+ };
148
+ module.exports = babelTransformer;