@vxrn/vite-plugin-metro 1.6.19 → 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.
@@ -70,51 +70,58 @@ function metroPlugin(options = {}) {
70
70
  };
71
71
  });
72
72
  const startMetro = async () => {
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
- }
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 (server.httpServer)
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": "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",
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;AA+D7C,SAAS,YAAY,UAA8B,CAAC,GAAiB;AAO1E,oBAAW,6BAAgC,SAEpC;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA,IAKN,gBAAgB,QAAQ;AACtB,YAAM,EAAE,MAAM,YAAY,IAAI,OAAO;AAErC,UAAI,aAAa,IAGb,YAGA,aAGA,WACA,oBACA,sBAEA,cACA;AAIJ,qBAAe,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9C,gCAAwB,EAAE,SAAS,OAAO;AAAA,MAC5C,CAAC;AAED,YAAM,aAAa,YAAY;AAC7B,cAAM,iBAAiB,KAAK,IAAI;AAChC,YAAI;AAGF,wEAAgC,QAAQ,OAAO,OAAO,MAAM;AAG5D,gBAAM,EAAE,SAAS,MAAM,IAAI,UAAM,oCAE9B,aAAa,OAAO,GACjB,EAAE,SAAS,eAAe,IAAI,UAAM,oCAEvC,aAAa,yBAAyB,GACnC,EAAE,SAAS,sBAAsB,IAAI,UAAM,oCAE9C,aAAa,yCAAyC,GACnD,EAAE,oBAAoB,IAAI,UAAM,oCAEnC,aAAa,8BAA8B,GAExC,SAAS,UAAM,kEAA6B,OAAO,QAAQ,OAAO,GAElE,cAAc,MAAM,MAAM,wBAAwB,QAAQ;AAAA;AAAA;AAAA,YAG9D,OAAO;AAAA,UACT,CAAC;AAED,uBAAa,YAAY,YACzB,cAAc,YAAY,iBAE1B;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP;AAAA,UACF,GAEA,YAAY,IAAI;AAAA,YACd,YAAY,WAAW;AAAA,YACvB,YAAY,kBAAkB;AAAA,YAC9B;AAAA,UACF;AAEA,gBAAM,yBAAyB,UAAU,OAAO,OAAO,OAAO,OAAO,QAAS,YAAY,cAAc,OAAO,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,OAAO,IAAI,IACxJ,gBAAgB,oBAAoB;AAAA,YACxC,eAAe;AAAA,YACf,QAAQ;AAAA,UACV,CAAC;AAED,iCAAuB,cAAc,YACrC,qBAAqB;AAAA,YACnB,QAAQ,sBAAsB;AAAA,cAC5B,iBAAiB;AAAA,YACnB,CAAC;AAAA,YACD,GAAG,cAAc;AAAA,UACnB,GAGA,OAAO,YAAY,GAAG,WAAW,CAAC,SAAS,QAAQ,SAAS;AAC1D,kBAAM,WAAW,IAAI,IAAI,QAAQ,KAAM,UAAU,QAAQ,QAAQ,IAAI,EAAE,EACpE;AAEH,YAAI,mBAAmB,QAAQ,KAC7B,mBAAmB,QAAQ,EAAE,cAAc,SAAS,QAAQ,MAAM,CAAC,OAAO;AACxE,iCAAmB,QAAQ,EAAE,KAAK,cAAc,IAAI,OAAO;AAAA,YAC7D,CAAC;AAAA,UAEL,CAAC,GAGD,OAAO,YAAY,IAAI,oBAAoB,GAE3C,aAAa;AACb,gBAAM,eAAe,KAAK,IAAI,IAAI;AAClC,kBAAQ,wBAAwB,YAAY,KAAK,GACjD,sBAAsB,QAAQ;AAAA,QAChC,SAAS,KAAK;AACZ,wBAAQ,sCAAsC,GAAG,EAAE,GACnD,sBAAsB,OAAO,GAAY,GACnC;AAAA,QACR;AAAA,MACF,GAEM,gBAAgB,QAAQ,YAAY;AAG1C,UAAI,gBAAgB;AACpB,YAAM,qBAAqB,MAAM;AAC/B,QAAI,iBAAiB,eACrB,gBAAgB,IAChB,QAAQ,yCAAyC,GACjD,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,kBAAQ,0BAA0B,GAAG,EAAE;AAAA,QACzC,CAAC;AAAA,MACH;AAIA,UAAK;AAqCH,gBAAQ,iEAAiE;AAAA,eApCrE,OAAO;AACT,QAAI,OAAO,WAAW,YAEpB,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,kBAAQ,0BAA0B,GAAG,EAAE;AAAA,QACzC,CAAC,IAED,OAAO,WAAW,GAAG,aAAa,MAAM;AACtC,qBAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,oBAAQ,0BAA0B,GAAG,EAAE;AAAA,UACzC,CAAC;AAAA,QACH,CAAC;AAAA,WAEE;AAGL,cAAM,gBAAgB,MAAM;AAC1B,UAAI,OAAO,aACL,OAAO,WAAW,YACpB,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,oBAAQ,0BAA0B,GAAG,EAAE;AAAA,UACzC,CAAC,IAED,OAAO,WAAW,GAAG,aAAa,MAAM;AACtC,uBAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,sBAAQ,0BAA0B,GAAG,EAAE;AAAA,YACzC,CAAC;AAAA,UACH,CAAC,IAGH,WAAW,eAAe,EAAE;AAAA,QAEhC;AACA,sBAAc;AAAA,MAChB;AAKF,aAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;AAC/C,cAAM,kBACJ,IAAI,QAAQ,YAAY,GAAG,SAAS,YAAY,KAChD,IAAI,QAAQ,YAAY,GAAG,SAAS,SAAS;AAgB/C,YAbI,iBAAiB,CAAC,eAElB,IAAI,KAAK,SAAS,SAAS,KAC1B,IAAI,QAAQ,aAAa,oBAE1B,mBAAmB,GAQnB,IAAI,QAAQ,aAAa,iBAAiB;AAC5C,cAAI,aAAa,KACjB,IAAI,IAAI,yBAAyB;AACjC;AAAA,QACF;AAQA,YALI,IAAI,KAAK,SAAS,SAAS,KAAK,CAAC,cACnC,MAAM,cAIJ;AACF,cAAI;AAEF,gBAAI,IAAI,KAAK,SAAS,SAAS,GAAG;AAChC,oBAAM,0BAA0B,QAAQ,IAAI;AAC5C,kBAAI,+BACE,2BAAW,uBAAuB,GAAG;AACvC,wBAAQ,6BAA6B,uBAAuB,EAAE;AAC9D,sBAAM,UAAU,UAAM,0BAAS,yBAAyB,OAAO;AAC/D,oBAAI,UAAU,gBAAgB,wBAAwB,GACtD,IAAI,IAAI,OAAO;AACf;AAAA,cACF;AAAA,YAEJ;AAEA,gBAAI,IAAI,QAAQ,uBAAuB,IAAI,WAAW,QAAQ;AAC5D,kBAAI,OAAO;AAEX,kBAAI,GAAG,QAAQ,CAAC,UAAU;AACxB,wBAAQ,MAAM,SAAS;AAAA,cACzB,CAAC,GAED,IAAI,GAAG,OAAO,MAAM;AAClB,oBAAI;AACF,wBAAM,QAAQ,KAAK,MAAM,IAAI;AAG7B,2CAAAA,SAAa,MAAM,IAAI,GACvB,IAAI,aAAa,KACjB,IAAI,IAAI,8BAA8B;AAAA,gBACxC,SAAS,GAAG;AACV,iCAAQ,gCAAgC,CAAC,EAAE,GAC3C,IAAI,aAAa,KACV,IAAI,IAAI,0BAA0B;AAAA,gBAC3C;AAAA,cACF,CAAC;AAED;AAAA,YACF;AAGA,kBAAO,WAAmB,KAAK,KAAK,IAAI;AAAA,UAC1C,SAAS,OAAO;AACd,oBAAQ,2BAA2B,KAAK,EAAE,GAC1C,KAAK;AAAA,UACP;AAAA;AAGA,eAAK;AAAA,MAET,CAAC;AAAA,IACH;AAAA,EACF;AACF;",
5
5
  "names": ["launchEditor"]
6
6
  }
@@ -73,52 +73,59 @@ function metroPlugin() {
73
73
  };
74
74
  });
75
75
  var startMetro = async function () {
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
- if (server.httpServer) server.httpServer.listening ? startMetro().catch(function (err) {
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 _req_url;
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 _req_url1, _req_headers_useragent, _req_headers_useragent1;
143
- if (!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle")) {
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","listening","catch","waitForServer","setTimeout","req","res","next","_req_url","includes","_req_url1","_req_headers_useragent","_req_headers_useragent1","VITE_METRO_DEBUG_BUNDLE","process","env","existsSync","content","readFile","setHeader","end","statusCode","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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 (server.httpServer)
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;AAuD7C,SAAS,YAAY,UAA8B,CAAC,GAAiB;AAO1E,oBAAW,6BAAgC,SAEpC;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA,IAKN,gBAAgB,QAAQ;AACtB,YAAM,EAAE,MAAM,YAAY,IAAI,OAAO;AAErC,UAAI,aAAa,IAGb,YAGA,aAGA,WACA,oBACA,sBAEA,cACA;AAIJ,qBAAe,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9C,gCAAwB,EAAE,SAAS,OAAO;AAAA,MAC5C,CAAC;AAED,YAAM,aAAa,YAAY;AAC7B,cAAM,iBAAiB,KAAK,IAAI;AAChC,YAAI;AAGF,0CAAgC,QAAQ,OAAO,OAAO,MAAM;AAG5D,gBAAM,EAAE,SAAS,MAAM,IAAI,MAAM,cAE9B,aAAa,OAAO,GACjB,EAAE,SAAS,eAAe,IAAI,MAAM,cAEvC,aAAa,yBAAyB,GACnC,EAAE,SAAS,sBAAsB,IAAI,MAAM,cAE9C,aAAa,yCAAyC,GACnD,EAAE,oBAAoB,IAAI,MAAM,cAEnC,aAAa,8BAA8B,GAExC,SAAS,MAAM,6BAA6B,OAAO,QAAQ,OAAO,GAElE,cAAc,MAAM,MAAM,wBAAwB,QAAQ;AAAA;AAAA;AAAA,YAG9D,OAAO;AAAA,UACT,CAAC;AAED,uBAAa,YAAY,YACzB,cAAc,YAAY,aAE1B;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP;AAAA,UACF,GAEA,YAAY,IAAI;AAAA,YACd,YAAY,WAAW;AAAA,YACvB,YAAY,kBAAkB;AAAA,YAC9B;AAAA,UACF;AAEA,gBAAM,yBAAyB,UAAU,OAAO,OAAO,OAAO,OAAO,QAAS,YAAY,cAAc,OAAO,OAAO,OAAO,IAAI,IAAI,OAAO,OAAO,OAAO,IAAI,IACxJ,gBAAgB,oBAAoB;AAAA,YACxC,eAAe;AAAA,YACf,QAAQ;AAAA,UACV,CAAC;AAED,iCAAuB,cAAc,YACrC,qBAAqB;AAAA,YACnB,QAAQ,sBAAsB;AAAA,cAC5B,iBAAiB;AAAA,YACnB,CAAC;AAAA,YACD,GAAG,cAAc;AAAA,UACnB,GAGA,OAAO,YAAY,GAAG,WAAW,CAAC,SAAS,QAAQ,SAAS;AAC1D,kBAAM,WAAW,IAAI,IAAI,QAAQ,KAAM,UAAU,QAAQ,QAAQ,IAAI,EAAE,EACpE;AAEH,YAAI,mBAAmB,QAAQ,KAC7B,mBAAmB,QAAQ,EAAE,cAAc,SAAS,QAAQ,MAAM,CAAC,OAAO;AACxE,iCAAmB,QAAQ,EAAE,KAAK,cAAc,IAAI,OAAO;AAAA,YAC7D,CAAC;AAAA,UAEL,CAAC,GAGD,OAAO,YAAY,IAAI,oBAAoB,GAE3C,aAAa;AACb,gBAAM,eAAe,KAAK,IAAI,IAAI;AAClC,kBAAQ,wBAAwB,YAAY,KAAK,GACjD,sBAAsB,QAAQ;AAAA,QAChC,SAAS,KAAK;AACZ,wBAAQ,sCAAsC,GAAG,EAAE,GACnD,sBAAsB,OAAO,GAAY,GACnC;AAAA,QACR;AAAA,MACF;AAIA,UAAI,OAAO;AACT,QAAI,OAAO,WAAW,YAEpB,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,kBAAQ,0BAA0B,GAAG,EAAE;AAAA,QACzC,CAAC,IAED,OAAO,WAAW,GAAG,aAAa,MAAM;AACtC,qBAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,oBAAQ,0BAA0B,GAAG,EAAE;AAAA,UACzC,CAAC;AAAA,QACH,CAAC;AAAA,WAEE;AAGL,cAAM,gBAAgB,MAAM;AAC1B,UAAI,OAAO,aACL,OAAO,WAAW,YACpB,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,oBAAQ,0BAA0B,GAAG,EAAE;AAAA,UACzC,CAAC,IAED,OAAO,WAAW,GAAG,aAAa,MAAM;AACtC,uBAAW,EAAE,MAAM,CAAC,QAAQ;AAC1B,sBAAQ,0BAA0B,GAAG,EAAE;AAAA,YACzC,CAAC;AAAA,UACH,CAAC,IAGH,WAAW,eAAe,EAAE;AAAA,QAEhC;AACA,sBAAc;AAAA,MAChB;AAEA,aAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;AAO/C,YALI,IAAI,KAAK,SAAS,SAAS,KAAK,CAAC,cACnC,MAAM,cAIJ;AACF,cAAI;AAEF,gBAAI,IAAI,KAAK,SAAS,SAAS,GAAG;AAChC,oBAAM,0BAA0B,QAAQ,IAAI;AAC5C,kBAAI,2BACE,WAAW,uBAAuB,GAAG;AACvC,wBAAQ,6BAA6B,uBAAuB,EAAE;AAC9D,sBAAM,UAAU,MAAM,SAAS,yBAAyB,OAAO;AAC/D,oBAAI,UAAU,gBAAgB,wBAAwB,GACtD,IAAI,IAAI,OAAO;AACf;AAAA,cACF;AAAA,YAEJ;AAKA,gBACE,IAAI,QAAQ;AAAA;AAAA,aAGX,IAAI,QAAQ,YAAY,GAAG;AAAA,cAAS;AAAA;AAAA,YAAsB,KACzD,IAAI,QAAQ,YAAY,GAAG;AAAA,cAAS;AAAA;AAAA,YAAuB,IAC7D;AACA,kBAAI,aAAa,KACjB,IAAI,IAAI,yBAAyB;AACjC;AAAA,YACF;AAEA,gBAAI,IAAI,QAAQ,uBAAuB,IAAI,WAAW,QAAQ;AAC5D,kBAAI,OAAO;AAEX,kBAAI,GAAG,QAAQ,CAAC,UAAU;AACxB,wBAAQ,MAAM,SAAS;AAAA,cACzB,CAAC,GAED,IAAI,GAAG,OAAO,MAAM;AAClB,oBAAI;AACF,wBAAM,QAAQ,KAAK,MAAM,IAAI;AAG7B,+BAAa,MAAM,IAAI,GACvB,IAAI,aAAa,KACjB,IAAI,IAAI,8BAA8B;AAAA,gBACxC,SAAS,GAAG;AACV,iCAAQ,gCAAgC,CAAC,EAAE,GAC3C,IAAI,aAAa,KACV,IAAI,IAAI,0BAA0B;AAAA,gBAC3C;AAAA,cACF,CAAC;AAED;AAAA,YACF;AAGA,kBAAO,WAAmB,KAAK,KAAK,IAAI;AAAA,UAC1C,SAAS,OAAO;AACd,oBAAQ,2BAA2B,KAAK,EAAE,GAC1C,KAAK;AAAA,UACP;AAAA;AAGA,eAAK;AAAA,MAET,CAAC;AAAA,IACH;AAAA,EACF;AACF;",
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
- 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
- }
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","listening","catch","waitForServer","setTimeout","req","res","next","includes","VITE_METRO_DEBUG_BUNDLE","process","env","content","setHeader","end","statusCode","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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
- 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
- if (server.httpServer) server.httpServer.listening ? startMetro().catch(function (err) {
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 _req_url;
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 _req_url1, _req_headers_useragent, _req_headers_useragent1;
105
- if (!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle")) {
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","listening","catch","waitForServer","setTimeout","req","res","next","_req_url","includes","_req_url1","_req_headers_useragent","_req_headers_useragent1","VITE_METRO_DEBUG_BUNDLE","process","env","content","setHeader","end","statusCode","method","body","chunk","toString","frame","JSON","parse","file","e","error"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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.6.19",
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.6.19",
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
- // Wait for Vite server to be listening before starting Metro
188
- // This ensures Metro logs appear AFTER Vite's server URLs
189
- if (server.httpServer) {
190
- if (server.httpServer.listening) {
191
- // Server is already listening (unlikely but handle it)
192
- startMetro().catch((err) => {
193
- debug?.(`Failed to start Metro: ${err}`)
194
- })
195
- } else {
196
- server.httpServer.on('listening', () => {
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
- } else {
212
- server.httpServer.on('listening', () => {
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
- waitForServer()
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;CACxB,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA8O1E"}
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"}