@vxrn/vite-plugin-metro 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -70,51 +70,59 @@ 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
+ endpoint = websocketEndpoints[pathname];
108
+ endpoint && endpoint.handleUpgrade(request, socket, head, ws => {
109
+ endpoint.emit("connection", ws, request);
110
+ });
111
+ }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
112
+ const metroElapsed = Date.now() - metroStartTime;
113
+ debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
114
+ } catch (err) {
115
+ throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
116
+ }
117
+ },
118
+ isLazyStartup = options.startup === "lazy";
119
+ let metroStarting = !1;
120
+ const ensureMetroStarted = () => {
121
+ metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(err => {
122
+ debug?.(`Failed to start Metro: ${err}`);
123
+ }));
116
124
  };
117
- if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
125
+ if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
118
126
  debug?.(`Failed to start Metro: ${err}`);
119
127
  }) : server.httpServer.on("listening", () => {
120
128
  startMetro().catch(err => {
@@ -133,6 +141,11 @@ function metroPlugin(options = {}) {
133
141
  waitForServer();
134
142
  }
135
143
  server.middlewares.use(async (req, res, next) => {
144
+ const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
145
+ if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
146
+ res.statusCode = 200, res.end("packager-status:running");
147
+ return;
148
+ }
136
149
  if (req.url?.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
137
150
  if (req.url?.includes(".bundle")) {
138
151
  const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
@@ -143,15 +156,6 @@ function metroPlugin(options = {}) {
143
156
  return;
144
157
  }
145
158
  }
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
159
  if (req.url === "/open-stack-frame" && req.method === "POST") {
156
160
  let body = "";
157
161
  req.on("data", chunk => {
@@ -67,9 +67,9 @@ function metroPlugin(options = {}) {
67
67
  }),
68
68
  ...devMiddleware.websocketEndpoints
69
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);
70
+ const pathname = new URL(request.url, `http://${request.headers.host}`).pathname, endpoint = websocketEndpoints[pathname];
71
+ endpoint && endpoint.handleUpgrade(request, socket, head, (ws) => {
72
+ endpoint.emit("connection", ws, request);
73
73
  });
74
74
  }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
75
75
  const metroElapsed = Date.now() - metroStartTime;
@@ -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": "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",
5
5
  "names": ["launchEditor"]
6
6
  }
@@ -73,52 +73,60 @@ 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
+ endpoint = websocketEndpoints[pathname];
112
+ endpoint && endpoint.handleUpgrade(request, socket, head, function (ws) {
113
+ endpoint.emit("connection", ws, request);
114
+ });
115
+ }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
116
+ var metroElapsed = Date.now() - metroStartTime;
117
+ debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
118
+ } catch (err) {
119
+ throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
120
+ }
121
+ },
122
+ isLazyStartup = options.startup === "lazy",
123
+ metroStarting = !1,
124
+ ensureMetroStarted = function () {
125
+ metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(function (err) {
126
+ debug?.(`Failed to start Metro: ${err}`);
127
+ }));
128
+ };
129
+ 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
130
  debug?.(`Failed to start Metro: ${err}`);
123
131
  }) : server.httpServer.on("listening", function () {
124
132
  startMetro().catch(function (err) {
@@ -137,10 +145,21 @@ function metroPlugin() {
137
145
  waitForServer();
138
146
  }
139
147
  server.middlewares.use(async function (req, res, next) {
140
- var _req_url;
148
+ var _req_headers_useragent,
149
+ _req_headers_useragent1,
150
+ _req_url,
151
+ 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/"));
152
+ if (isLazyStartup && !metroReady) {
153
+ var _req_url1;
154
+ (!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted();
155
+ }
156
+ if (req.url === "/status" && isNativeRequest) {
157
+ res.statusCode = 200, res.end("packager-status:running");
158
+ return;
159
+ }
141
160
  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")) {
161
+ var _req_url2;
162
+ if (!((_req_url2 = req.url) === null || _req_url2 === void 0) && _req_url2.includes(".bundle")) {
144
163
  var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
145
164
  if (VITE_METRO_DEBUG_BUNDLE && (0, import_fs.existsSync)(VITE_METRO_DEBUG_BUNDLE)) {
146
165
  debug?.(`serving debug bundle from ${VITE_METRO_DEBUG_BUNDLE}`);
@@ -149,10 +168,6 @@ function metroPlugin() {
149
168
  return;
150
169
  }
151
170
  }
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
171
  if (req.url === "/open-stack-frame" && req.method === "POST") {
157
172
  var body = "";
158
173
  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","endpoint","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":[]}
@@ -47,9 +47,9 @@ function metroPlugin(options = {}) {
47
47
  }),
48
48
  ...devMiddleware.websocketEndpoints
49
49
  }, server.httpServer?.on("upgrade", (request, socket, head) => {
50
- const pathname = new URL(request.url, `http://${request.headers.host}`).pathname;
51
- websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {
52
- websocketEndpoints[pathname].emit("connection", ws, request);
50
+ const pathname = new URL(request.url, `http://${request.headers.host}`).pathname, endpoint = websocketEndpoints[pathname];
51
+ endpoint && endpoint.handleUpgrade(request, socket, head, (ws) => {
52
+ endpoint.emit("connection", ws, request);
53
53
  });
54
54
  }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
55
55
  const metroElapsed = Date.now() - metroStartTime;
@@ -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": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -34,51 +34,59 @@ 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
+ endpoint = websocketEndpoints[pathname];
72
+ endpoint && endpoint.handleUpgrade(request, socket, head, ws => {
73
+ endpoint.emit("connection", ws, request);
74
+ });
75
+ }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
76
+ const metroElapsed = Date.now() - metroStartTime;
77
+ debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
78
+ } catch (err) {
79
+ throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
80
+ }
81
+ },
82
+ isLazyStartup = options.startup === "lazy";
83
+ let metroStarting = !1;
84
+ const ensureMetroStarted = () => {
85
+ metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(err => {
86
+ debug?.(`Failed to start Metro: ${err}`);
87
+ }));
80
88
  };
81
- if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
89
+ if (isLazyStartup) debug?.("Metro lazy startup enabled - will start on first native request");else if (server.httpServer) server.httpServer.listening ? startMetro().catch(err => {
82
90
  debug?.(`Failed to start Metro: ${err}`);
83
91
  }) : server.httpServer.on("listening", () => {
84
92
  startMetro().catch(err => {
@@ -97,6 +105,11 @@ function metroPlugin(options = {}) {
97
105
  waitForServer();
98
106
  }
99
107
  server.middlewares.use(async (req, res, next) => {
108
+ const isNativeRequest = req.headers["user-agent"]?.includes("CFNetwork/") || req.headers["user-agent"]?.includes("okhttp/");
109
+ if (isLazyStartup && !metroReady && (req.url?.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted(), req.url === "/status" && isNativeRequest) {
110
+ res.statusCode = 200, res.end("packager-status:running");
111
+ return;
112
+ }
100
113
  if (req.url?.includes(".bundle") && !metroReady && (await metroPromise), middleware) try {
101
114
  if (req.url?.includes(".bundle")) {
102
115
  const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
@@ -107,15 +120,6 @@ function metroPlugin(options = {}) {
107
120
  return;
108
121
  }
109
122
  }
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
123
  if (req.url === "/open-stack-frame" && req.method === "POST") {
120
124
  let body = "";
121
125
  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","endpoint","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,60 @@ 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
+ endpoint = websocketEndpoints[pathname];
74
+ endpoint && endpoint.handleUpgrade(request, socket, head, function (ws) {
75
+ endpoint.emit("connection", ws, request);
76
+ });
77
+ }), server.middlewares.use(rnDevtoolsMiddleware), metroReady = !0;
78
+ var metroElapsed = Date.now() - metroStartTime;
79
+ debug?.(`Metro bundler ready (${metroElapsed}ms)`), metroPromiseResolvers.resolve();
80
+ } catch (err) {
81
+ throw debug?.(`Error during Metro initialization: ${err}`), metroPromiseResolvers.reject(err), err;
82
+ }
83
+ },
84
+ isLazyStartup = options.startup === "lazy",
85
+ metroStarting = !1,
86
+ ensureMetroStarted = function () {
87
+ metroStarting || metroReady || (metroStarting = !0, debug?.("Starting Metro on-demand (lazy startup)"), startMetro().catch(function (err) {
88
+ debug?.(`Failed to start Metro: ${err}`);
89
+ }));
90
+ };
91
+ 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
92
  debug?.(`Failed to start Metro: ${err}`);
85
93
  }) : server.httpServer.on("listening", function () {
86
94
  startMetro().catch(function (err) {
@@ -99,10 +107,21 @@ function metroPlugin() {
99
107
  waitForServer();
100
108
  }
101
109
  server.middlewares.use(async function (req, res, next) {
102
- var _req_url;
110
+ var _req_headers_useragent,
111
+ _req_headers_useragent1,
112
+ _req_url,
113
+ 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/"));
114
+ if (isLazyStartup && !metroReady) {
115
+ var _req_url1;
116
+ (!((_req_url1 = req.url) === null || _req_url1 === void 0) && _req_url1.includes(".bundle") || req.url === "/status" && isNativeRequest) && ensureMetroStarted();
117
+ }
118
+ if (req.url === "/status" && isNativeRequest) {
119
+ res.statusCode = 200, res.end("packager-status:running");
120
+ return;
121
+ }
103
122
  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")) {
123
+ var _req_url2;
124
+ if (!((_req_url2 = req.url) === null || _req_url2 === void 0) && _req_url2.includes(".bundle")) {
106
125
  var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
107
126
  if (VITE_METRO_DEBUG_BUNDLE && existsSync(VITE_METRO_DEBUG_BUNDLE)) {
108
127
  debug?.(`serving debug bundle from ${VITE_METRO_DEBUG_BUNDLE}`);
@@ -111,10 +130,6 @@ function metroPlugin() {
111
130
  return;
112
131
  }
113
132
  }
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
133
  if (req.url === "/open-stack-frame" && req.method === "POST") {
119
134
  var body = "";
120
135
  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","endpoint","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":"AAAA,SAASA,UAAA,QAAkB;AAC3B,SAASC,QAAA,QAAgB;AAEzB,OAAOC,YAAA,MAAkB;AACzB,SAASC,cAAA,QAAsB;AAC/B,SAASC,+BAAA,QAAuC;AAahD,SAASC,aAAA,QAAqB;AAE9B,SAASC,4BAAA,QAAoC;AAC7C,SAASC,mDAAA,QAA2D;AAdpE;EAAMC;AAAE,IAAML,cAAI,oBAAe;AA+D1B,SAASM,YAAA,EAAY;EAO1B,IAAAC,OAAA,GAAAC,SAAW,CAAAC,MAAA,QAAAD,SAAgC,aAEpC,IAAAA,SAAA;EAAA,OACLE,UAAM,CAAAC,0BAAA,GAAAJ,OAAA;IAAAK,IAAA;IAAA;IAAA;IAKN;IACEC,eAAQA,CAAMC,MAAA;MAEd,IAAI;UAAAC,IAAA,EAAAC;QAGA,IAAAF,MAGA,CAAAG,MAAA;QAAAC,UAGA,IACA;QAAAC,UAAA;QAAAC,WACA;QAAAC,SAAA;QAAAC,kBAGA;QAAAC,oBAAA;QAAAC,YAAA;QAAAC,qBAAA;MAIJD,YAAA,GAAe,IAAIE,OAAA,CAAQ,UAACC,OAAS,EAAAC,MAAW;QAC9CH,qBAAA,GAAwB;UACzBE,OAAA;UAEDC;QACE;MACA;MAGE,IAAAC,UAAA,kBAAAA,CAAA;UAGA,IAAAC,cAAQ,GAASC,IAAM,CAAAC,GAAI;UAeqC;YAAA,IAAAC,kBAAA;YAAAhC,+BAGvD,CAAAa,MAAA,EAAAA,MAAA,CAAAG,MAAA,CAAAiB,MAAA;YACT,IAAC;gBAAAC,OAAA,EAAAC;cAAA,UAAAlC,aAAA,CAAAc,WAAA;cAAA;gBAAAmB,OAAA,EAAAE;cAAA,UAAAnC,aAAA,CAAAc,WAAA;cAAA;gBAAAmB,OAAA,EAAAG;cAAA,UAAApC,aAAA,CAAAc,WAAA;cAAA;gBAAAuB;cAAA,UAAArC,aAAA,CAAAc,WAAA;cAAAC,MAAA,SAAAd,4BAAA,CAAAW,MAAA,CAAAG,MAAA,EAAAV,OAAA;cAAAiC,WAAA,SAAAJ,KAAA,CAAAK,uBAAA,CAAAxB,MAAA;gBAED;gBAIE;gBACAyB,KAAA,EAAO;cAAA,EACP;YACFvB,UAEA,GAAAqB,WAAgB,CAAArB,UAAA,EAAAC,WAAA,GAAAoB,WAAA,CAAApB,WAAA,EAAAhB,mDAAA,CAAAgB,WAAA,EAAAN,MAAA,CAAAG,MAAA,EAAAV,OAAA,GAAAc,SAAA,OAAAgB,cAAA,CAAAjB,WAAA,CAAAuB,UAAA,IAAAvB,WAAA,CAAAwB,iBAAA,IAAA3B,MAAA;YAAA,IACd4B,sBAAuB,oBAAA/B,MAAA,CAAAG,MAAA,CAAAH,MAAA,CAAAgC,IAAA,8BAAAhC,MAAA,CAAAG,MAAA,CAAAH,MAAA,CAAAgC,IAAA,IAAAhC,MAAA,CAAAG,MAAA,CAAAH,MAAA,CAAAiC,IAAA;cAAAC,aAAA,GAAAT,mBAAA;gBACvBU,aAAY,EAAAJ,sBAAkB;gBAC9BX,MAAA,EAAAgB;cACF;YAEA3B,oBAAM,GAAAyB,aAAyB,CAAA7B,UAAU,EAAOG,kBAAc,GAAO;cAEnE,QAAAgB,qBAAe;gBACfa,eAAQ,EAAA9B;cACT;cAED,GAAA2B,aAAA,CAAA1B;YACqB,GACnB,CAAAW,kBAAQ,GAAAnB,MAAA,CAAsBsC,UAAA,cAAAnB,kBAAA,eAAAA,kBAAA,CAAAoB,EAAA,sBAAAC,OAAA,EAAAC,MAAA,EAAAC,IAAA;cAAA,IAC5BC,QAAA,OAAiBC,GAAA,CAAAJ,OAAA,CAAAK,GAAA,YAAAL,OAAA,CAAAM,OAAA,CAAAd,IAAA,IAAAW,QAAA;gBAAAI,QAAA,GAAAvC,kBAAA,CAAAmC,QAAA;cACnBI,QAAC,IAAAA,QAAA,CAAAC,aAAA,CAAAR,OAAA,EAAAC,MAAA,EAAAC,IAAA,YAAAO,EAAA;gBACDF,QAAG,CAAAG,IAAA,aAAc,EAAAD,EAAA,EAAAT,OAAA;cACnB,CAIA;YACE,IAAAxC,MAAM,CAAAmD,WAAW,CAAIC,GAAA,CAAI3C,oBAAc,GAAUL,UAAQ;YAIzD,IAAIiD,YACF,GAAApC,IAAS,CAAAC,GAAA,KAAAF,cAAuB;YAC9BzB,KAAA,2BAA4B8D,YAAW,QAAA1C,qBAAA,CAAAE,OAAA;UAAA,SACxCyC,GAAA;YAGL,MAGA/D,KAAO,yCAEP+D,GAAA,KAAA3C,qBAAa,CAAAG,MAAA,CAAAwC,GAAA,GAAAA,GAAA;UACb;QACA;QAAAC,aAAQ,GAAA9D,OAAA,CAAA+D,OAAA,KAAwB;QAAAC,aAChC;QAAAC,kBAAsB,GAAQ,SAAAA,CAAA;UAChCD,aAAS,IAAKrD,UAAA,KAAAqD,aAAA,OAAAlE,KAAA,+CAAAwB,UAAA,GAAA4C,KAAA,WAAAL,GAAA;YACZ/D,KAAA,6BAAQ+D,GAAA;UAGV;QACF;MAKA,IAAIC,aAAA,EACJhE,KAAM,oEAA2B,OAC3B,IAAAS,MAAA,CAAAsC,UAAiB,EAInBtC,MAAA,CAAAsC,UAAQ,CAAAsB,SAAA,GAAA7C,UAA6B,CAAE,EAAA4C,KAAA,WAAAL,GAAA;QACxC/D,KAAA,6BAAA+D,GAAA;MACH,KAAAtD,MAAA,CAAAsC,UAAA,CAAAC,EAAA;QAIKxB,UAAA,GAAA4C,KAAA,WAAAL,GAAA;UAqCH/D,KAAQ,6BAAA+D,GAAA;QAAiE;MAnCnE,QAGA;QACF,IAACO,aAEM,YAAAA,CAAA,EAAc;UACnB7D,MAAA,CAAAsC,UAAa,GAAOtC,MAAA,CAAAsC,UAAQ,CAAAsB,SAAA,GAAA7C,UAAA,GAAA4C,KAAA,WAAAL,GAAA;YAC1B/D,KAAA,GAAQ,0BAA0B+D,GAAG,EAAE;UACzC,CAAC,IAAAtD,MAAA,CAAAsC,UAAA,CAAAC,EAAA;YACFxB,UAAA,GAAA4C,KAAA,WAAAL,GAAA;cAEE/D,KAAA,6BAAA+D,GAAA;YAGL,EAAM;UACA,KAAAQ,UAAO,CAAAD,aACE;QAEP;QAAuCA,aAGzC,CAAO;MACL;MACE7D,MAAA,CAAAmD,WAAQ,CAAAC,GAAA,iBAAAW,GAAA,EAA0BC,GAAG,EAAEC,IAAA;QAAA,IACzCC,sBAAC;UAAAC,uBAAA;UAAAC,QAAA;UAAAC,eAAA,KAAAH,sBAAA,GAAAH,GAAA,CAAAjB,OAAA,4BAAAoB,sBAAA,uBAAAA,sBAAA,CAAAI,QAAA,qBAAAH,uBAAA,GAAAJ,GAAA,CAAAjB,OAAA,4BAAAqB,uBAAA,uBAAAA,uBAAA,CAAAG,QAAA;QAAA,IACFf,aAGH,IAAW,CAAAnD,UAAA,EAAe;UAE9B,IAAAmE,SAAA;UACA,IAAAA,SAAc,GAAAR,GAAA,CAAAlB,GAAA,cAAA0B,SAAA,gBAAAA,SAAA,CAAAD,QAAA,eAAAP,GAAA,CAAAlB,GAAA,kBAAAwB,eAAA,KAAAX,kBAAA;QAChB;QAKF,IAAAK,GAAO,CAAAlB,GAAA,cAAgB,IAAOwB,eAAU;UACtCL,GAAA,CAAMQ,UAAA,QACJR,GAAA,CAAIS,GAAA,0BAAuB;UAiB7B;QACE;QAEA,OAAAL,QAAA,GAAAL,GAAA,CAAAlB,GAAA,cAAAuB,QAAA,gBAAAA,QAAA,CAAAE,QAAA,gBAAAlE,UAAA,WAAAM,YAAA,GAAAL,UAAA,EACF;UAGI,IAAIqE,SAAK;UAMX,IAAI,GAAAA,SAAA,GAAAX,GAAA,CAAAlB,GAAA,cAAA6B,SAAA,gBAAAA,SAAA,CAAAJ,QAAA;YAEF,IAAIK,uBAAkB,GAASC,OAAG,CAAAC,GAAA,CAAAF,uBAAA;YAChC,IAAAA,uBAAM,IAAA5F,UAAkC,CAAA4F,uBAAI;cAC5CpF,KAAI,gCACEoF,uBAAW,GAAuB;cACpC,IAAAG,OAAQ,SAAA9F,QAAA,CAAA2F,uBAA6B,SAAuB,CAAE;cAC9DX,GAAA,CAAAe,SAAM,eAAgB,0BAAS,GAAyBf,GAAA,CAAAS,GAAO,CAAAK,OAAA;cAC/D;YAEA;UAAA;UAGN,IAAAf,GAAA,CAAAlB,GAAA,4BAAAkB,GAAA,CAAAiB,MAAA;YAEA,IAAIC,IAAI;YACNlB,GAAA,CAAIxB,EAAA,OAAO,YAAA2C,KAAA;cAEXD,IAAI,IAAGC,KAAQ,CAACC,QAAA,EAAU;YACxB,IAAApB,GAAA,CAAAxB,EAAQ,MAAM,cAAS;cACxB,IAED;gBACE,IAAI6C,KAAA,GAAAC,IAAA,CAAAC,KAAA,CAAAL,IAAA;gBACFhG,YAAM,CAAAmG,KAAQ,CAAKG,IAAA,GAAMvB,GAAI,CAAAQ,UAAA,QAAAR,GAAA,CAAAS,GAAA;cAG7B,SAAAe,CAAA;gBAGF,OAASjG,KAAG,mCAAAiG,CAAA,KAAAxB,GAAA,CAAAQ,UAAA,QAAAR,GAAA,CAAAS,GAAA;cACV;YAEyC,EAC3C;YACF;UAEA;UACF,MAAApE,UAAA,CAAA0D,GAAA,EAAAC,GAAA,EAAAC,IAAA;QAGA,SAAOwB,KAAA;UACTlG,KAAA,GAAS,2BAAOkG,KAAA,KAAAxB,IAAA;QACd,OAEFA,IAAA;MAGA;IAAK;EAER;AACH;AAEJ,S","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxrn/vite-plugin-metro",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
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.8.0",
64
+ "@vxrn/debug": "1.9.0",
65
65
  "babel-preset-expo": "*",
66
66
  "launch-editor": "^2.10.0",
67
67
  "micromatch": "^4.0.8",
@@ -71,7 +71,7 @@
71
71
  "@biomejs/biome": "2.3.3",
72
72
  "@expo/metro-config": "^54.0.7",
73
73
  "@react-native/dev-middleware": "^0.83.0",
74
- "@tamagui/build": "2.0.0-rc.7",
74
+ "@tamagui/build": "2.0.0-rc.14",
75
75
  "@types/babel__helper-plugin-utils": "^7",
76
76
  "@types/node": "^24.10.0",
77
77
  "depcheck": "^1.4.7",
@@ -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 {
@@ -158,16 +166,19 @@ export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
158
166
  ...devMiddleware.websocketEndpoints,
159
167
  }
160
168
 
161
- // Setup websocket handling
169
+ // Setup websocket handling for Metro-specific endpoints only
170
+ // Other paths (like Vite's /__vxrnhmr) are handled by Vite's internal HMR
162
171
  server.httpServer?.on('upgrade', (request, socket, head) => {
163
172
  const pathname = new URL(request.url!, `http://${request.headers.host}`)
164
173
  .pathname
165
174
 
166
- if (websocketEndpoints[pathname]) {
167
- websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {
168
- websocketEndpoints[pathname].emit('connection', ws, request)
175
+ const endpoint = websocketEndpoints[pathname]
176
+ if (endpoint) {
177
+ endpoint.handleUpgrade(request, socket, head, (ws) => {
178
+ endpoint.emit('connection', ws, request)
169
179
  })
170
180
  }
181
+ // if no endpoint matches, let other handlers (like Vite's HMR) handle it
171
182
  })
172
183
 
173
184
  // Insert devtools middleware
@@ -184,45 +195,86 @@ export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
184
195
  }
185
196
  }
186
197
 
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', () => {
198
+ const isLazyStartup = options.startup === 'lazy'
199
+
200
+ // for lazy startup, we start Metro on-demand when a request triggers it
201
+ let metroStarting = false
202
+ const ensureMetroStarted = () => {
203
+ if (metroStarting || metroReady) return
204
+ metroStarting = true
205
+ debug?.('Starting Metro on-demand (lazy startup)')
206
+ startMetro().catch((err) => {
207
+ debug?.(`Failed to start Metro: ${err}`)
208
+ })
209
+ }
210
+
211
+ // Wait for Vite server to be listening before starting Metro (eager mode)
212
+ // For lazy mode, we defer startup until a request triggers it
213
+ if (!isLazyStartup) {
214
+ if (server.httpServer) {
215
+ if (server.httpServer.listening) {
216
+ // Server is already listening (unlikely but handle it)
197
217
  startMetro().catch((err) => {
198
218
  debug?.(`Failed to start Metro: ${err}`)
199
219
  })
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) {
220
+ } else {
221
+ server.httpServer.on('listening', () => {
208
222
  startMetro().catch((err) => {
209
223
  debug?.(`Failed to start Metro: ${err}`)
210
224
  })
211
- } else {
212
- server.httpServer.on('listening', () => {
225
+ })
226
+ }
227
+ } else {
228
+ // No httpServer yet, wait for it via a small delay and retry
229
+ // This shouldn't normally happen but is a safety fallback
230
+ const waitForServer = () => {
231
+ if (server.httpServer) {
232
+ if (server.httpServer.listening) {
213
233
  startMetro().catch((err) => {
214
234
  debug?.(`Failed to start Metro: ${err}`)
215
235
  })
216
- })
236
+ } else {
237
+ server.httpServer.on('listening', () => {
238
+ startMetro().catch((err) => {
239
+ debug?.(`Failed to start Metro: ${err}`)
240
+ })
241
+ })
242
+ }
243
+ } else {
244
+ setTimeout(waitForServer, 10)
217
245
  }
218
- } else {
219
- setTimeout(waitForServer, 10)
220
246
  }
247
+ waitForServer()
221
248
  }
222
- waitForServer()
249
+ } else {
250
+ debug?.('Metro lazy startup enabled - will start on first native request')
223
251
  }
224
252
 
225
253
  server.middlewares.use(async (req, res, next) => {
254
+ const isNativeRequest =
255
+ req.headers['user-agent']?.includes('CFNetwork/') ||
256
+ req.headers['user-agent']?.includes('okhttp/')
257
+
258
+ // trigger lazy startup on bundle requests or native client connections
259
+ if (isLazyStartup && !metroReady) {
260
+ if (
261
+ req.url?.includes('.bundle') ||
262
+ (req.url === '/status' && isNativeRequest)
263
+ ) {
264
+ ensureMetroStarted()
265
+ }
266
+ }
267
+
268
+ // Handle `isPackagerRunning` request from native app.
269
+ // This must be handled before waiting for Metro, so simulators get an immediate response
270
+ // while Metro starts in the background (important for lazy startup mode)
271
+ // See: https://github.com/facebook/react-native/blob/v0.80.0-rc.4/packages/react-native/React/Base/RCTBundleURLProvider.mm#L87-L113
272
+ if (req.url === '/status' && isNativeRequest) {
273
+ res.statusCode = 200
274
+ res.end('packager-status:running')
275
+ return
276
+ }
277
+
226
278
  // Wait for Metro if it's a bundle request and Metro isn't ready yet
227
279
  if (req.url?.includes('.bundle') && !metroReady) {
228
280
  await metroPromise
@@ -245,21 +297,6 @@ export function metroPlugin(options: MetroPluginOptions = {}): PluginOption {
245
297
  }
246
298
  }
247
299
 
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
300
  if (req.url === '/open-stack-frame' && req.method === 'POST') {
264
301
  let body = ''
265
302
 
@@ -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,CA2Q1E"}