@vxrn/vite-plugin-metro 1.6.20 → 1.8.0-1771176723058
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.
- package/dist/cjs/plugins/metroPlugin.cjs +56 -53
- package/dist/cjs/plugins/metroPlugin.js +14 -13
- package/dist/cjs/plugins/metroPlugin.js.map +1 -1
- package/dist/cjs/plugins/metroPlugin.native.js +67 -53
- package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.js +14 -13
- package/dist/esm/plugins/metroPlugin.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.mjs +56 -53
- package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
- package/dist/esm/plugins/metroPlugin.native.js +67 -53
- package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
- package/package.json +2 -2
- package/src/plugins/metroPlugin.ts +73 -39
- package/types/plugins/metroPlugin.d.ts +8 -0
- package/types/plugins/metroPlugin.d.ts.map +1 -1
|
@@ -70,51 +70,58 @@ function metroPlugin(options = {}) {
|
|
|
70
70
|
};
|
|
71
71
|
});
|
|
72
72
|
const startMetro = async () => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
73
|
+
const metroStartTime = Date.now();
|
|
74
|
+
try {
|
|
75
|
+
(0, import_metroCacheManager.checkAndClearMetroCacheFromVite)(server, server.config.logger);
|
|
76
|
+
const {
|
|
77
|
+
default: Metro
|
|
78
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro"),
|
|
79
|
+
{
|
|
80
|
+
default: MetroHmrServer
|
|
81
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro/private/HmrServer"),
|
|
82
|
+
{
|
|
83
|
+
default: createWebsocketServer
|
|
84
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro/private/lib/createWebsocketServer"),
|
|
85
|
+
{
|
|
86
|
+
createDevMiddleware
|
|
87
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "@react-native/dev-middleware"),
|
|
88
|
+
config = await (0, import_getMetroConfigFromViteConfig.getMetroConfigFromViteConfig)(server.config, options),
|
|
89
|
+
metroResult = await Metro.createConnectMiddleware(config, {
|
|
90
|
+
// Force enable file watching, even on CI.
|
|
91
|
+
// This is needed for HMR tests to work on CI.
|
|
92
|
+
watch: !0
|
|
93
|
+
});
|
|
94
|
+
middleware = metroResult.middleware, metroServer = metroResult.metroServer, (0, import_patchMetroServerWithViteConfigAndMetroPluginOptions.patchMetroServerWithViteConfigAndMetroPluginOptions)(metroServer, server.config, options), hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config);
|
|
95
|
+
const reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
96
|
+
devMiddleware = createDevMiddleware({
|
|
97
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
98
|
+
logger: console
|
|
99
|
+
});
|
|
100
|
+
rnDevtoolsMiddleware = devMiddleware.middleware, websocketEndpoints = {
|
|
101
|
+
"/hot": createWebsocketServer({
|
|
102
|
+
websocketServer: hmrServer
|
|
103
|
+
}),
|
|
104
|
+
...devMiddleware.websocketEndpoints
|
|
105
|
+
}, server.httpServer?.on("upgrade", (request, socket, head) => {
|
|
106
|
+
const pathname = new URL(request.url, `http://${request.headers.host}`).pathname;
|
|
107
|
+
websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, ws => {
|
|
108
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
109
|
+
});
|
|
110
|
+
}), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
|
|
111
|
+
const metroElapsed = Date.now() - metroStartTime;
|
|
112
|
+
debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
|
|
113
|
+
} catch (err) {
|
|
114
|
+
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
isLazyStartup = options.startup === "lazy";
|
|
118
|
+
let metroStarting = !1;
|
|
119
|
+
const ensureMetroStarted = () => {
|
|
120
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(err => {
|
|
121
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
122
|
+
}));
|
|
116
123
|
};
|
|
117
|
-
if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
|
|
124
|
+
if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
|
|
118
125
|
debug?.(`Failed to start Metro: ${err}`);
|
|
119
126
|
}) : server.httpServer.on("listening", () => {
|
|
120
127
|
startMetro().catch(err => {
|
|
@@ -133,6 +140,11 @@ function metroPlugin(options = {}) {
|
|
|
133
140
|
waitForServer();
|
|
134
141
|
}
|
|
135
142
|
server.middlewares.use(async (req, res, next) => {
|
|
143
|
+
const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
|
|
144
|
+
if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
|
|
145
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
136
148
|
if (req.url?.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
|
|
137
149
|
if (req.url?.includes(".bundle")) {
|
|
138
150
|
const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
@@ -143,15 +155,6 @@ function metroPlugin(options = {}) {
|
|
|
143
155
|
return;
|
|
144
156
|
}
|
|
145
157
|
}
|
|
146
|
-
if (req.url === "/status" && (
|
|
147
|
-
// The path (`/status`) is too general and may conflict with the user's web app, so we also check the User-Agent header to ensure it's a request from a native app.
|
|
148
|
-
// Failing to handle this correctly will cause the native app to show a "Packager is not running at ..." error.
|
|
149
|
-
req.headers["user-agent"]?.includes("CFNetwork/"
|
|
150
|
-
/* iOS */) || req.headers["user-agent"]?.includes("okhttp/"
|
|
151
|
-
/* Android */))) {
|
|
152
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
158
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
156
159
|
let body = "";
|
|
157
160
|
req.on("data", chunk => {
|
|
@@ -77,8 +77,16 @@ function metroPlugin(options = {}) {
|
|
|
77
77
|
} catch (err) {
|
|
78
78
|
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
79
79
|
}
|
|
80
|
+
}, isLazyStartup = options.startup === "lazy";
|
|
81
|
+
let metroStarting = !1;
|
|
82
|
+
const ensureMetroStarted = () => {
|
|
83
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch((err) => {
|
|
84
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
85
|
+
}));
|
|
80
86
|
};
|
|
81
|
-
if (
|
|
87
|
+
if (isLazyStartup)
|
|
88
|
+
debug?.("Metro lazy startup enabled - will start on first native request");
|
|
89
|
+
else if (server.httpServer)
|
|
82
90
|
server.httpServer.listening ? startMetro().catch((err) => {
|
|
83
91
|
debug?.(`Failed to start Metro: ${err}`);
|
|
84
92
|
}) : server.httpServer.on("listening", () => {
|
|
@@ -99,6 +107,11 @@ function metroPlugin(options = {}) {
|
|
|
99
107
|
waitForServer();
|
|
100
108
|
}
|
|
101
109
|
server.middlewares.use(async (req, res, next) => {
|
|
110
|
+
const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
|
|
111
|
+
if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
|
|
112
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
102
115
|
if (req.url?.includes(".bundle") && !metroReady && await metroPromise, middleware)
|
|
103
116
|
try {
|
|
104
117
|
if (req.url?.includes(".bundle")) {
|
|
@@ -110,18 +123,6 @@ function metroPlugin(options = {}) {
|
|
|
110
123
|
return;
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
|
-
if (req.url === "/status" && // The path (`/status`) is too general and may conflict with the user's web app, so we also check the User-Agent header to ensure it's a request from a native app.
|
|
114
|
-
// Failing to handle this correctly will cause the native app to show a "Packager is not running at ..." error.
|
|
115
|
-
(req.headers["user-agent"]?.includes(
|
|
116
|
-
"CFNetwork/"
|
|
117
|
-
/* iOS */
|
|
118
|
-
) || req.headers["user-agent"]?.includes(
|
|
119
|
-
"okhttp/"
|
|
120
|
-
/* Android */
|
|
121
|
-
))) {
|
|
122
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
126
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
126
127
|
let body = "";
|
|
127
128
|
req.on("data", (chunk) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/plugins/metroPlugin.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2B,oBAC3B,kBAAyB,6BAEzB,uBAAyB,sCACzB,eAA+B,wBAC/B,2BAAgD,uCAahD,uBAA8B,mCAE9B,sCAA6C,yDAC7C,6DAAoE;AAdpE,MAAM,EAAE,MAAM,QAAI,6BAAe,mBAAmB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["launchEditor"]
|
|
6
6
|
}
|
|
@@ -73,52 +73,59 @@ function metroPlugin() {
|
|
|
73
73
|
};
|
|
74
74
|
});
|
|
75
75
|
var startMetro = async function () {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
76
|
+
var metroStartTime = Date.now();
|
|
77
|
+
try {
|
|
78
|
+
var _server_httpServer;
|
|
79
|
+
(0, import_metroCacheManager.checkAndClearMetroCacheFromVite)(server, server.config.logger);
|
|
80
|
+
var {
|
|
81
|
+
default: Metro
|
|
82
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro"),
|
|
83
|
+
{
|
|
84
|
+
default: MetroHmrServer
|
|
85
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro/private/HmrServer"),
|
|
86
|
+
{
|
|
87
|
+
default: createWebsocketServer
|
|
88
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "metro/private/lib/createWebsocketServer"),
|
|
89
|
+
{
|
|
90
|
+
createDevMiddleware
|
|
91
|
+
} = await (0, import_projectImport.projectImport)(projectRoot, "@react-native/dev-middleware"),
|
|
92
|
+
config = await (0, import_getMetroConfigFromViteConfig.getMetroConfigFromViteConfig)(server.config, options),
|
|
93
|
+
metroResult = await Metro.createConnectMiddleware(config, {
|
|
94
|
+
// Force enable file watching, even on CI.
|
|
95
|
+
// This is needed for HMR tests to work on CI.
|
|
96
|
+
watch: !0
|
|
97
|
+
});
|
|
98
|
+
middleware = metroResult.middleware, metroServer = metroResult.metroServer, (0, import_patchMetroServerWithViteConfigAndMetroPluginOptions.patchMetroServerWithViteConfigAndMetroPluginOptions)(metroServer, server.config, options), hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config);
|
|
99
|
+
var reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
100
|
+
devMiddleware = createDevMiddleware({
|
|
101
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
102
|
+
logger: console
|
|
103
|
+
});
|
|
104
|
+
rnDevtoolsMiddleware = devMiddleware.middleware, websocketEndpoints = {
|
|
105
|
+
"/hot": createWebsocketServer({
|
|
106
|
+
websocketServer: hmrServer
|
|
107
|
+
}),
|
|
108
|
+
...devMiddleware.websocketEndpoints
|
|
109
|
+
}, (_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 || _server_httpServer.on("upgrade", function (request, socket, head) {
|
|
110
|
+
var pathname = new URL(request.url, `http://${request.headers.host}`).pathname;
|
|
111
|
+
websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, function (ws) {
|
|
112
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
113
|
+
});
|
|
114
|
+
}), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
|
|
115
|
+
var metroElapsed = Date.now() - metroStartTime;
|
|
116
|
+
debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
|
|
117
|
+
} catch (err) {
|
|
118
|
+
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
isLazyStartup = options.startup === "lazy",
|
|
122
|
+
metroStarting = !1,
|
|
123
|
+
ensureMetroStarted = function () {
|
|
124
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(function (err) {
|
|
125
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
126
|
+
}));
|
|
127
|
+
};
|
|
128
|
+
if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(function (err) {
|
|
122
129
|
debug?.(`Failed to start Metro: ${err}`);
|
|
123
130
|
}) : server.httpServer.on("listening", function () {
|
|
124
131
|
startMetro().catch(function (err) {
|
|
@@ -137,10 +144,21 @@ function metroPlugin() {
|
|
|
137
144
|
waitForServer();
|
|
138
145
|
}
|
|
139
146
|
server.middlewares.use(async function (req, res, next) {
|
|
140
|
-
var
|
|
147
|
+
var _req_headers_useragent,
|
|
148
|
+
_req_headers_useragent1,
|
|
149
|
+
_req_url,
|
|
150
|
+
isNativeRequest = ((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0 ? void 0 : _req_headers_useragent.includes("CFNetwork/")) || ((_req_headers_useragent1 = req.headers["user-agent"]) === null || _req_headers_useragent1 === void 0 ? void 0 : _req_headers_useragent1.includes("okhttp/"));
|
|
151
|
+
if (isLazyStartup && !metroReady) {
|
|
152
|
+
var _req_url1;
|
|
153
|
+
(!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted();
|
|
154
|
+
}
|
|
155
|
+
if (req.url === "/status" && isNativeRequest) {
|
|
156
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
141
159
|
if (!((_req_url = req.url) === null || _req_url === void 0) && _req_url.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
|
|
142
|
-
var
|
|
143
|
-
if (!((
|
|
160
|
+
var _req_url2;
|
|
161
|
+
if (!((_req_url2 = req.url) === null || _req_url2 === void 0) && _req_url2.includes(".bundle")) {
|
|
144
162
|
var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
145
163
|
if (VITE_METRO_DEBUG_BUNDLE && (0, import_fs.existsSync)(VITE_METRO_DEBUG_BUNDLE)) {
|
|
146
164
|
debug?.(`serving debug bundle from ${VITE_METRO_DEBUG_BUNDLE}`);
|
|
@@ -149,10 +167,6 @@ function metroPlugin() {
|
|
|
149
167
|
return;
|
|
150
168
|
}
|
|
151
169
|
}
|
|
152
|
-
if (req.url === "/status" && (!((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0) && _req_headers_useragent.includes("CFNetwork/") || !((_req_headers_useragent1 = req.headers["user-agent"]) === null || _req_headers_useragent1 === void 0) && _req_headers_useragent1.includes("okhttp/"))) {
|
|
153
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
170
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
157
171
|
var body = "";
|
|
158
172
|
req.on("data", function (chunk) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","metroPlugin_exports","__export","metroPlugin","module","exports","import_fs","require","import_promises","import_launch_editor","__toESM","import_debug","import_metroCacheManager","import_projectImport","import_getMetroConfigFromViteConfig","import_patchMetroServerWithViteConfigAndMetroPluginOptions","debug","createDebugger","options","arguments","length","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","_server_httpServer","checkAndClearMetroCacheFromVite","logger","default","Metro","projectImport","MetroHmrServer","createWebsocketServer","createDevMiddleware","getMetroConfigFromViteConfig","metroResult","createConnectMiddleware","watch","patchMetroServerWithViteConfigAndMetroPluginOptions","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","metroPlugin_exports","__export","metroPlugin","module","exports","import_fs","require","import_promises","import_launch_editor","__toESM","import_debug","import_metroCacheManager","import_projectImport","import_getMetroConfigFromViteConfig","import_patchMetroServerWithViteConfigAndMetroPluginOptions","debug","createDebugger","options","arguments","length","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","_server_httpServer","checkAndClearMetroCacheFromVite","logger","default","Metro","projectImport","MetroHmrServer","createWebsocketServer","createDevMiddleware","getMetroConfigFromViteConfig","metroResult","createConnectMiddleware","watch","patchMetroServerWithViteConfigAndMetroPluginOptions","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","isLazyStartup","startup","metroStarting","ensureMetroStarted","catch","listening","waitForServer","setTimeout","req","res","next","_req_headers_useragent","_req_headers_useragent1","_req_url","isNativeRequest","includes","_req_url1","statusCode","end","_req_url2","VITE_METRO_DEBUG_BUNDLE","process","env","existsSync","content","readFile","setHeader","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -57,8 +57,16 @@ function metroPlugin(options = {}) {
|
|
|
57
57
|
} catch (err) {
|
|
58
58
|
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
59
59
|
}
|
|
60
|
+
}, isLazyStartup = options.startup === "lazy";
|
|
61
|
+
let metroStarting = !1;
|
|
62
|
+
const ensureMetroStarted = () => {
|
|
63
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch((err) => {
|
|
64
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
65
|
+
}));
|
|
60
66
|
};
|
|
61
|
-
if (
|
|
67
|
+
if (isLazyStartup)
|
|
68
|
+
debug?.("Metro lazy startup enabled - will start on first native request");
|
|
69
|
+
else if (server.httpServer)
|
|
62
70
|
server.httpServer.listening ? startMetro().catch((err) => {
|
|
63
71
|
debug?.(`Failed to start Metro: ${err}`);
|
|
64
72
|
}) : server.httpServer.on("listening", () => {
|
|
@@ -79,6 +87,11 @@ function metroPlugin(options = {}) {
|
|
|
79
87
|
waitForServer();
|
|
80
88
|
}
|
|
81
89
|
server.middlewares.use(async (req, res, next) => {
|
|
90
|
+
const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
|
|
91
|
+
if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
|
|
92
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
82
95
|
if (req.url?.includes(".bundle") && !metroReady && await metroPromise, middleware)
|
|
83
96
|
try {
|
|
84
97
|
if (req.url?.includes(".bundle")) {
|
|
@@ -90,18 +103,6 @@ function metroPlugin(options = {}) {
|
|
|
90
103
|
return;
|
|
91
104
|
}
|
|
92
105
|
}
|
|
93
|
-
if (req.url === "/status" && // The path (`/status`) is too general and may conflict with the user's web app, so we also check the User-Agent header to ensure it's a request from a native app.
|
|
94
|
-
// Failing to handle this correctly will cause the native app to show a "Packager is not running at ..." error.
|
|
95
|
-
(req.headers["user-agent"]?.includes(
|
|
96
|
-
"CFNetwork/"
|
|
97
|
-
/* iOS */
|
|
98
|
-
) || req.headers["user-agent"]?.includes(
|
|
99
|
-
"okhttp/"
|
|
100
|
-
/* Android */
|
|
101
|
-
))) {
|
|
102
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
106
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
106
107
|
let body = "";
|
|
107
108
|
req.on("data", (chunk) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/plugins/metroPlugin.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAEzB,OAAO,kBAAkB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,uCAAuC;AAahD,SAAS,qBAAqB;AAE9B,SAAS,oCAAoC;AAC7C,SAAS,2DAA2D;AAdpE,MAAM,EAAE,MAAM,IAAI,eAAe,mBAAmB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -34,51 +34,58 @@ function metroPlugin(options = {}) {
|
|
|
34
34
|
};
|
|
35
35
|
});
|
|
36
36
|
const startMetro = async () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
37
|
+
const metroStartTime = Date.now();
|
|
38
|
+
try {
|
|
39
|
+
checkAndClearMetroCacheFromVite(server, server.config.logger);
|
|
40
|
+
const {
|
|
41
|
+
default: Metro
|
|
42
|
+
} = await projectImport(projectRoot, "metro"),
|
|
43
|
+
{
|
|
44
|
+
default: MetroHmrServer
|
|
45
|
+
} = await projectImport(projectRoot, "metro/private/HmrServer"),
|
|
46
|
+
{
|
|
47
|
+
default: createWebsocketServer
|
|
48
|
+
} = await projectImport(projectRoot, "metro/private/lib/createWebsocketServer"),
|
|
49
|
+
{
|
|
50
|
+
createDevMiddleware
|
|
51
|
+
} = await projectImport(projectRoot, "@react-native/dev-middleware"),
|
|
52
|
+
config = await getMetroConfigFromViteConfig(server.config, options),
|
|
53
|
+
metroResult = await Metro.createConnectMiddleware(config, {
|
|
54
|
+
// Force enable file watching, even on CI.
|
|
55
|
+
// This is needed for HMR tests to work on CI.
|
|
56
|
+
watch: !0
|
|
57
|
+
});
|
|
58
|
+
middleware = metroResult.middleware, metroServer = metroResult.metroServer, patchMetroServerWithViteConfigAndMetroPluginOptions(metroServer, server.config, options), hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config);
|
|
59
|
+
const reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
60
|
+
devMiddleware = createDevMiddleware({
|
|
61
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
62
|
+
logger: console
|
|
63
|
+
});
|
|
64
|
+
rnDevtoolsMiddleware = devMiddleware.middleware, websocketEndpoints = {
|
|
65
|
+
"/hot": createWebsocketServer({
|
|
66
|
+
websocketServer: hmrServer
|
|
67
|
+
}),
|
|
68
|
+
...devMiddleware.websocketEndpoints
|
|
69
|
+
}, server.httpServer?.on("upgrade", (request, socket, head) => {
|
|
70
|
+
const pathname = new URL(request.url, `http://${request.headers.host}`).pathname;
|
|
71
|
+
websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, ws => {
|
|
72
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
73
|
+
});
|
|
74
|
+
}), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
|
|
75
|
+
const metroElapsed = Date.now() - metroStartTime;
|
|
76
|
+
debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
|
|
77
|
+
} catch (err) {
|
|
78
|
+
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
isLazyStartup = options.startup === "lazy";
|
|
82
|
+
let metroStarting = !1;
|
|
83
|
+
const ensureMetroStarted = () => {
|
|
84
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(err => {
|
|
85
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
86
|
+
}));
|
|
80
87
|
};
|
|
81
|
-
if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
|
|
88
|
+
if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
|
|
82
89
|
debug?.(`Failed to start Metro: ${err}`);
|
|
83
90
|
}) : server.httpServer.on("listening", () => {
|
|
84
91
|
startMetro().catch(err => {
|
|
@@ -97,6 +104,11 @@ function metroPlugin(options = {}) {
|
|
|
97
104
|
waitForServer();
|
|
98
105
|
}
|
|
99
106
|
server.middlewares.use(async (req, res, next) => {
|
|
107
|
+
const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
|
|
108
|
+
if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
|
|
109
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
100
112
|
if (req.url?.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
|
|
101
113
|
if (req.url?.includes(".bundle")) {
|
|
102
114
|
const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
@@ -107,15 +119,6 @@ function metroPlugin(options = {}) {
|
|
|
107
119
|
return;
|
|
108
120
|
}
|
|
109
121
|
}
|
|
110
|
-
if (req.url === "/status" && (
|
|
111
|
-
// The path (`/status`) is too general and may conflict with the user's web app, so we also check the User-Agent header to ensure it's a request from a native app.
|
|
112
|
-
// Failing to handle this correctly will cause the native app to show a "Packager is not running at ..." error.
|
|
113
|
-
req.headers["user-agent"]?.includes("CFNetwork/"
|
|
114
|
-
/* iOS */) || req.headers["user-agent"]?.includes("okhttp/"
|
|
115
|
-
/* Android */))) {
|
|
116
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
122
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
120
123
|
let body = "";
|
|
121
124
|
req.on("data", chunk => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["existsSync","readFile","launchEditor","createDebugger","checkAndClearMetroCacheFromVite","projectImport","getMetroConfigFromViteConfig","patchMetroServerWithViteConfigAndMetroPluginOptions","debug","metroPlugin","options","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","logger","default","Metro","MetroHmrServer","createWebsocketServer","createDevMiddleware","metroResult","createConnectMiddleware","watch","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","
|
|
1
|
+
{"version":3,"names":["existsSync","readFile","launchEditor","createDebugger","checkAndClearMetroCacheFromVite","projectImport","getMetroConfigFromViteConfig","patchMetroServerWithViteConfigAndMetroPluginOptions","debug","metroPlugin","options","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","logger","default","Metro","MetroHmrServer","createWebsocketServer","createDevMiddleware","metroResult","createConnectMiddleware","watch","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","isLazyStartup","startup","metroStarting","ensureMetroStarted","catch","listening","waitForServer","setTimeout","req","res","next","isNativeRequest","includes","statusCode","end","VITE_METRO_DEBUG_BUNDLE","process","env","content","setHeader","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -35,52 +35,59 @@ function metroPlugin() {
|
|
|
35
35
|
};
|
|
36
36
|
});
|
|
37
37
|
var startMetro = async function () {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
38
|
+
var metroStartTime = Date.now();
|
|
39
|
+
try {
|
|
40
|
+
var _server_httpServer;
|
|
41
|
+
checkAndClearMetroCacheFromVite(server, server.config.logger);
|
|
42
|
+
var {
|
|
43
|
+
default: Metro
|
|
44
|
+
} = await projectImport(projectRoot, "metro"),
|
|
45
|
+
{
|
|
46
|
+
default: MetroHmrServer
|
|
47
|
+
} = await projectImport(projectRoot, "metro/private/HmrServer"),
|
|
48
|
+
{
|
|
49
|
+
default: createWebsocketServer
|
|
50
|
+
} = await projectImport(projectRoot, "metro/private/lib/createWebsocketServer"),
|
|
51
|
+
{
|
|
52
|
+
createDevMiddleware
|
|
53
|
+
} = await projectImport(projectRoot, "@react-native/dev-middleware"),
|
|
54
|
+
config = await getMetroConfigFromViteConfig(server.config, options),
|
|
55
|
+
metroResult = await Metro.createConnectMiddleware(config, {
|
|
56
|
+
// Force enable file watching, even on CI.
|
|
57
|
+
// This is needed for HMR tests to work on CI.
|
|
58
|
+
watch: !0
|
|
59
|
+
});
|
|
60
|
+
middleware = metroResult.middleware, metroServer = metroResult.metroServer, patchMetroServerWithViteConfigAndMetroPluginOptions(metroServer, server.config, options), hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config);
|
|
61
|
+
var reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
62
|
+
devMiddleware = createDevMiddleware({
|
|
63
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
64
|
+
logger: console
|
|
65
|
+
});
|
|
66
|
+
rnDevtoolsMiddleware = devMiddleware.middleware, websocketEndpoints = {
|
|
67
|
+
"/hot": createWebsocketServer({
|
|
68
|
+
websocketServer: hmrServer
|
|
69
|
+
}),
|
|
70
|
+
...devMiddleware.websocketEndpoints
|
|
71
|
+
}, (_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 || _server_httpServer.on("upgrade", function (request, socket, head) {
|
|
72
|
+
var pathname = new URL(request.url, `http://${request.headers.host}`).pathname;
|
|
73
|
+
websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, function (ws) {
|
|
74
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
75
|
+
});
|
|
76
|
+
}), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
|
|
77
|
+
var metroElapsed = Date.now() - metroStartTime;
|
|
78
|
+
debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
|
|
79
|
+
} catch (err) {
|
|
80
|
+
throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
isLazyStartup = options.startup === "lazy",
|
|
84
|
+
metroStarting = !1,
|
|
85
|
+
ensureMetroStarted = function () {
|
|
86
|
+
metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(function (err) {
|
|
87
|
+
debug?.(`Failed to start Metro: ${err}`);
|
|
88
|
+
}));
|
|
89
|
+
};
|
|
90
|
+
if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(function (err) {
|
|
84
91
|
debug?.(`Failed to start Metro: ${err}`);
|
|
85
92
|
}) : server.httpServer.on("listening", function () {
|
|
86
93
|
startMetro().catch(function (err) {
|
|
@@ -99,10 +106,21 @@ function metroPlugin() {
|
|
|
99
106
|
waitForServer();
|
|
100
107
|
}
|
|
101
108
|
server.middlewares.use(async function (req, res, next) {
|
|
102
|
-
var
|
|
109
|
+
var _req_headers_useragent,
|
|
110
|
+
_req_headers_useragent1,
|
|
111
|
+
_req_url,
|
|
112
|
+
isNativeRequest = ((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0 ? void 0 : _req_headers_useragent.includes("CFNetwork/")) || ((_req_headers_useragent1 = req.headers["user-agent"]) === null || _req_headers_useragent1 === void 0 ? void 0 : _req_headers_useragent1.includes("okhttp/"));
|
|
113
|
+
if (isLazyStartup && !metroReady) {
|
|
114
|
+
var _req_url1;
|
|
115
|
+
(!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted();
|
|
116
|
+
}
|
|
117
|
+
if (req.url === "/status" && isNativeRequest) {
|
|
118
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
103
121
|
if (!((_req_url = req.url) === null || _req_url === void 0) && _req_url.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
|
|
104
|
-
var
|
|
105
|
-
if (!((
|
|
122
|
+
var _req_url2;
|
|
123
|
+
if (!((_req_url2 = req.url) === null || _req_url2 === void 0) && _req_url2.includes(".bundle")) {
|
|
106
124
|
var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
107
125
|
if (VITE_METRO_DEBUG_BUNDLE && existsSync(VITE_METRO_DEBUG_BUNDLE)) {
|
|
108
126
|
debug?.(`serving debug bundle from ${VITE_METRO_DEBUG_BUNDLE}`);
|
|
@@ -111,10 +129,6 @@ function metroPlugin() {
|
|
|
111
129
|
return;
|
|
112
130
|
}
|
|
113
131
|
}
|
|
114
|
-
if (req.url === "/status" && (!((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0) && _req_headers_useragent.includes("CFNetwork/") || !((_req_headers_useragent1 = req.headers["user-agent"]) === null || _req_headers_useragent1 === void 0) && _req_headers_useragent1.includes("okhttp/"))) {
|
|
115
|
-
res.statusCode = 200, res.end("packager-status:running");
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
132
|
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
119
133
|
var body = "";
|
|
120
134
|
req.on("data", function (chunk) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["existsSync","readFile","launchEditor","createDebugger","checkAndClearMetroCacheFromVite","projectImport","getMetroConfigFromViteConfig","patchMetroServerWithViteConfigAndMetroPluginOptions","debug","metroPlugin","options","arguments","length","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","_server_httpServer","logger","default","Metro","MetroHmrServer","createWebsocketServer","createDevMiddleware","metroResult","createConnectMiddleware","watch","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","
|
|
1
|
+
{"version":3,"names":["existsSync","readFile","launchEditor","createDebugger","checkAndClearMetroCacheFromVite","projectImport","getMetroConfigFromViteConfig","patchMetroServerWithViteConfigAndMetroPluginOptions","debug","metroPlugin","options","arguments","length","globalThis","__viteMetroPluginOptions__","name","configureServer","server","root","projectRoot","config","metroReady","middleware","metroServer","hmrServer","websocketEndpoints","rnDevtoolsMiddleware","metroPromise","metroPromiseResolvers","Promise","resolve","reject","startMetro","metroStartTime","Date","now","_server_httpServer","logger","default","Metro","MetroHmrServer","createWebsocketServer","createDevMiddleware","metroResult","createConnectMiddleware","watch","getBundler","getCreateModuleId","reactNativeDevToolsUrl","host","port","devMiddleware","serverBaseUrl","console","websocketServer","httpServer","on","request","socket","head","pathname","URL","url","headers","handleUpgrade","ws","emit","middlewares","use","metroElapsed","err","isLazyStartup","startup","metroStarting","ensureMetroStarted","catch","listening","waitForServer","setTimeout","req","res","next","_req_headers_useragent","_req_headers_useragent1","_req_url","isNativeRequest","includes","_req_url1","statusCode","end","_req_url2","VITE_METRO_DEBUG_BUNDLE","process","env","content","setHeader","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vxrn/vite-plugin-metro",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0-1771176723058",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@babel/core": "^7.28.5",
|
|
62
62
|
"@babel/helper-plugin-utils": "^7.27.1",
|
|
63
63
|
"@babel/types": "^7.28.5",
|
|
64
|
-
"@vxrn/debug": "1.
|
|
64
|
+
"@vxrn/debug": "1.8.0-1771176723058",
|
|
65
65
|
"babel-preset-expo": "*",
|
|
66
66
|
"launch-editor": "^2.10.0",
|
|
67
67
|
"micromatch": "^4.0.8",
|
|
@@ -58,6 +58,14 @@ export type MetroPluginOptions = {
|
|
|
58
58
|
* the `main` field in `package.json`.
|
|
59
59
|
*/
|
|
60
60
|
mainModuleName?: string
|
|
61
|
+
/**
|
|
62
|
+
* Controls when Metro bundler starts:
|
|
63
|
+
* - 'eager' (default): Start Metro as soon as Vite server is listening
|
|
64
|
+
* - 'lazy': Defer Metro startup until a bundle request or simulator connection is detected
|
|
65
|
+
*
|
|
66
|
+
* Use 'lazy' to speed up dev server startup when you don't always need Metro.
|
|
67
|
+
*/
|
|
68
|
+
startup?: 'eager' | 'lazy'
|
|
61
69
|
}
|
|
62
70
|
|
|
63
71
|
export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
|
|
@@ -184,45 +192,86 @@ export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
|
|
|
184
192
|
}
|
|
185
193
|
}
|
|
186
194
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
195
|
+
const isLazyStartup = options.startup === 'lazy'
|
|
196
|
+
|
|
197
|
+
// for lazy startup, we start Metro on-demand when a request triggers it
|
|
198
|
+
let metroStarting = false
|
|
199
|
+
const ensureMetroStarted = () => {
|
|
200
|
+
if (metroStarting || metroReady) return
|
|
201
|
+
metroStarting = true
|
|
202
|
+
debug?.('Starting Metro on-demand (lazy startup)')
|
|
203
|
+
startMetro().catch((err) => {
|
|
204
|
+
debug?.(`Failed to start Metro: ${err}`)
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Wait for Vite server to be listening before starting Metro (eager mode)
|
|
209
|
+
// For lazy mode, we defer startup until a request triggers it
|
|
210
|
+
if (!isLazyStartup) {
|
|
211
|
+
if (server.httpServer) {
|
|
212
|
+
if (server.httpServer.listening) {
|
|
213
|
+
// Server is already listening (unlikely but handle it)
|
|
197
214
|
startMetro().catch((err) => {
|
|
198
215
|
debug?.(`Failed to start Metro: ${err}`)
|
|
199
216
|
})
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
} else {
|
|
203
|
-
// No httpServer yet, wait for it via a small delay and retry
|
|
204
|
-
// This shouldn't normally happen but is a safety fallback
|
|
205
|
-
const waitForServer = () => {
|
|
206
|
-
if (server.httpServer) {
|
|
207
|
-
if (server.httpServer.listening) {
|
|
217
|
+
} else {
|
|
218
|
+
server.httpServer.on('listening', () => {
|
|
208
219
|
startMetro().catch((err) => {
|
|
209
220
|
debug?.(`Failed to start Metro: ${err}`)
|
|
210
221
|
})
|
|
211
|
-
}
|
|
212
|
-
|
|
222
|
+
})
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
// No httpServer yet, wait for it via a small delay and retry
|
|
226
|
+
// This shouldn't normally happen but is a safety fallback
|
|
227
|
+
const waitForServer = () => {
|
|
228
|
+
if (server.httpServer) {
|
|
229
|
+
if (server.httpServer.listening) {
|
|
213
230
|
startMetro().catch((err) => {
|
|
214
231
|
debug?.(`Failed to start Metro: ${err}`)
|
|
215
232
|
})
|
|
216
|
-
}
|
|
233
|
+
} else {
|
|
234
|
+
server.httpServer.on('listening', () => {
|
|
235
|
+
startMetro().catch((err) => {
|
|
236
|
+
debug?.(`Failed to start Metro: ${err}`)
|
|
237
|
+
})
|
|
238
|
+
})
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
setTimeout(waitForServer, 10)
|
|
217
242
|
}
|
|
218
|
-
} else {
|
|
219
|
-
setTimeout(waitForServer, 10)
|
|
220
243
|
}
|
|
244
|
+
waitForServer()
|
|
221
245
|
}
|
|
222
|
-
|
|
246
|
+
} else {
|
|
247
|
+
debug?.('Metro lazy startup enabled - will start on first native request')
|
|
223
248
|
}
|
|
224
249
|
|
|
225
250
|
server.middlewares.use(async (req, res, next) => {
|
|
251
|
+
const isNativeRequest =
|
|
252
|
+
req.headers['user-agent']?.includes('CFNetwork/') ||
|
|
253
|
+
req.headers['user-agent']?.includes('okhttp/')
|
|
254
|
+
|
|
255
|
+
// trigger lazy startup on bundle requests or native client connections
|
|
256
|
+
if (isLazyStartup && !metroReady) {
|
|
257
|
+
if (
|
|
258
|
+
req.url?.includes('.bundle') ||
|
|
259
|
+
(req.url === '/status' && isNativeRequest)
|
|
260
|
+
) {
|
|
261
|
+
ensureMetroStarted()
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Handle `isPackagerRunning` request from native app.
|
|
266
|
+
// This must be handled before waiting for Metro, so simulators get an immediate response
|
|
267
|
+
// while Metro starts in the background (important for lazy startup mode)
|
|
268
|
+
// See: https://github.com/facebook/react-native/blob/v0.80.0-rc.4/packages/react-native/React/Base/RCTBundleURLProvider.mm#L87-L113
|
|
269
|
+
if (req.url === '/status' && isNativeRequest) {
|
|
270
|
+
res.statusCode = 200
|
|
271
|
+
res.end('packager-status:running')
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
|
|
226
275
|
// Wait for Metro if it's a bundle request and Metro isn't ready yet
|
|
227
276
|
if (req.url?.includes('.bundle') && !metroReady) {
|
|
228
277
|
await metroPromise
|
|
@@ -245,21 +294,6 @@ export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
|
|
|
245
294
|
}
|
|
246
295
|
}
|
|
247
296
|
|
|
248
|
-
// Handle `isPackagerRunning` request from native app.
|
|
249
|
-
// Without this, people may see a `No script URL provided. Make sure the packager is running or you have embedded a JS bundle in your application bundle.`, `unsanitizedScriptURLString = (null)` error in their native app running with the "Debug" configuration.
|
|
250
|
-
// See: https://github.com/facebook/react-native/blob/v0.80.0-rc.4/packages/react-native/React/Base/RCTBundleURLProvider.mm#L87-L113
|
|
251
|
-
if (
|
|
252
|
-
req.url === '/status' &&
|
|
253
|
-
// The path (`/status`) is too general and may conflict with the user's web app, so we also check the User-Agent header to ensure it's a request from a native app.
|
|
254
|
-
// Failing to handle this correctly will cause the native app to show a "Packager is not running at ..." error.
|
|
255
|
-
(req.headers['user-agent']?.includes('CFNetwork/' /* iOS */) ||
|
|
256
|
-
req.headers['user-agent']?.includes('okhttp/' /* Android */))
|
|
257
|
-
) {
|
|
258
|
-
res.statusCode = 200
|
|
259
|
-
res.end('packager-status:running')
|
|
260
|
-
return
|
|
261
|
-
}
|
|
262
|
-
|
|
263
297
|
if (req.url === '/open-stack-frame' && req.method === 'POST') {
|
|
264
298
|
let body = ''
|
|
265
299
|
|
|
@@ -35,6 +35,14 @@ export type MetroPluginOptions = {
|
|
|
35
35
|
* the `main` field in `package.json`.
|
|
36
36
|
*/
|
|
37
37
|
mainModuleName?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Controls when Metro bundler starts:
|
|
40
|
+
* - 'eager' (default): Start Metro as soon as Vite server is listening
|
|
41
|
+
* - 'lazy': Defer Metro startup until a bundle request or simulator connection is detected
|
|
42
|
+
*
|
|
43
|
+
* Use 'lazy' to speed up dev server startup when you don't always need Metro.
|
|
44
|
+
*/
|
|
45
|
+
startup?: 'eager' | 'lazy';
|
|
38
46
|
};
|
|
39
47
|
export declare function metroPlugin(options?: MetroPluginOptions): PluginOption;
|
|
40
48
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CAwQ1E"}
|