@expo/cli 54.1.0-canary-20251023-4c86f95 → 54.1.0-canary-20260119-17896bf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/add-module.js +4 -1
- package/build/bin/cli +3 -1
- package/build/bin/cli.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +1 -2
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/install/applyPlugins.js +2 -1
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/fixPackages.js +1 -1
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/installAsync.js +1 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/utils/parsePackageSpecifier.js +24 -0
- package/build/src/install/utils/parsePackageSpecifier.js.map +1 -0
- package/build/src/run/ios/runIosAsync.js +8 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +14 -9
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +3 -0
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +1 -1
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +8 -4
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/MCP.js +28 -5
- package/build/src/start/server/MCP.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +1 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +10 -2
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +29 -155
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +151 -33
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js +1 -3
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
- package/build/src/start/server/metro/createExpoFallbackResolver.js +1 -3
- package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +1 -2
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +2 -2
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +23 -9
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/compression.js +45 -0
- package/build/src/start/server/metro/dev-server/compression.js.map +1 -0
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +2 -2
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/externals.js +11 -0
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +98 -27
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js +7 -11
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +43 -14
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +74 -57
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +43 -12
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +63 -24
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +14 -9
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/startAsync.js +12 -9
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/env.js +36 -2
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/interactive.js +1 -1
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/jsonl.js +243 -0
- package/build/src/utils/jsonl.js.map +1 -0
- package/build/src/utils/net.js +43 -0
- package/build/src/utils/net.js.map +1 -0
- package/build/src/utils/progress.js +5 -0
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/utils/context.js +1 -1
- package/build/src/utils/url.js +4 -8
- package/build/src/utils/url.js.map +1 -1
- package/package.json +25 -28
- package/static/canary/react-is/cjs/react-is.development.js +133 -0
- package/static/canary/react-is/cjs/react-is.production.js +130 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +16820 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +10552 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +11255 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +17064 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +10742 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +11450 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_mock.development.js +414 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_mock.production.js +406 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_post_task.development.js +150 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_post_task.production.js +140 -0
- package/static/canary/scheduler/cjs/scheduler.development.js +364 -0
- package/static/canary/scheduler/cjs/scheduler.native.development.js +350 -0
- package/static/canary/scheduler/cjs/scheduler.native.production.js +330 -0
- package/static/canary/scheduler/cjs/scheduler.production.js +340 -0
- package/static/canary-full/node_modules/react/LICENSE +21 -0
- package/static/canary-full/node_modules/react/README.md +37 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.development.js +24 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.profiling.js +16 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.development.js +349 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js +14 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js +385 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js +40 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.development.js +358 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.profiling.js +34 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.development.js +385 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.production.js +40 -0
- package/static/canary-full/node_modules/react/cjs/react.development.js +1250 -0
- package/static/canary-full/node_modules/react/cjs/react.production.js +544 -0
- package/static/canary-full/node_modules/react/cjs/react.react-server.development.js +815 -0
- package/static/canary-full/node_modules/react/cjs/react.react-server.production.js +429 -0
- package/static/canary-full/node_modules/react/compiler-runtime.js +14 -0
- package/static/canary-full/node_modules/react/index.js +7 -0
- package/static/canary-full/node_modules/react/jsx-dev-runtime.js +7 -0
- package/static/canary-full/node_modules/react/jsx-dev-runtime.react-server.js +7 -0
- package/static/canary-full/node_modules/react/jsx-runtime.js +7 -0
- package/static/canary-full/node_modules/react/jsx-runtime.react-server.js +7 -0
- package/static/canary-full/node_modules/react/package.json +51 -0
- package/static/canary-full/node_modules/react/react.react-server.js +7 -0
- package/static/canary-full/node_modules/react-dom/LICENSE +21 -0
- package/static/canary-full/node_modules/react-dom/README.md +60 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.development.js +25089 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.production.js +15426 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.development.js +25476 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.profiling.js +16296 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +9035 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +5892 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js +9035 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +5972 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.development.js +9424 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.production.js +6384 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.development.js +8739 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.production.js +5967 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.development.js +9443 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.production.js +6477 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.development.js +9317 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.production.js +6372 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.development.js +24 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.production.js +21 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.development.js +424 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.production.js +210 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.development.js +340 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.production.js +152 -0
- package/static/canary-full/node_modules/react-dom/client.js +38 -0
- package/static/canary-full/node_modules/react-dom/client.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/index.js +38 -0
- package/static/canary-full/node_modules/react-dom/package.json +117 -0
- package/static/canary-full/node_modules/react-dom/profiling.js +38 -0
- package/static/canary-full/node_modules/react-dom/profiling.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/react-dom.react-server.js +7 -0
- package/static/canary-full/node_modules/react-dom/server.browser.js +18 -0
- package/static/canary-full/node_modules/react-dom/server.bun.js +19 -0
- package/static/canary-full/node_modules/react-dom/server.edge.js +19 -0
- package/static/canary-full/node_modules/react-dom/server.js +3 -0
- package/static/canary-full/node_modules/react-dom/server.node.js +18 -0
- package/static/canary-full/node_modules/react-dom/server.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/static.browser.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.edge.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.js +3 -0
- package/static/canary-full/node_modules/react-dom/static.node.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/test-utils.js +7 -0
- package/build/src/start/interface/cliExtensionMenuItemHandler.js +0 -173
- package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +0 -1
- package/build/src/start/interface/createDevToolsMenuItems.js +0 -159
- package/build/src/start/interface/createDevToolsMenuItems.js.map +0 -1
- package/build/src/start/server/DevToolsPlugin.js +0 -60
- package/build/src/start/server/DevToolsPlugin.js.map +0 -1
- package/build/src/start/server/DevToolsPlugin.schema.js +0 -79
- package/build/src/start/server/DevToolsPlugin.schema.js.map +0 -1
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +0 -119
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +0 -1
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js +0 -61
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +0 -1
- package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js +0 -75
- package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js.map +0 -1
|
@@ -83,13 +83,6 @@ function _path() {
|
|
|
83
83
|
};
|
|
84
84
|
return data;
|
|
85
85
|
}
|
|
86
|
-
function _resolvefrom() {
|
|
87
|
-
const data = /*#__PURE__*/ _interop_require_default(require("resolve-from"));
|
|
88
|
-
_resolvefrom = function() {
|
|
89
|
-
return data;
|
|
90
|
-
};
|
|
91
|
-
return data;
|
|
92
|
-
}
|
|
93
86
|
const _createServerComponentsMiddleware = require("./createServerComponentsMiddleware");
|
|
94
87
|
const _createServerRouteMiddleware = require("./createServerRouteMiddleware");
|
|
95
88
|
const _fetchRouterManifest = require("./fetchRouterManifest");
|
|
@@ -108,7 +101,6 @@ const _BundlerDevServer = require("../BundlerDevServer");
|
|
|
108
101
|
const _getStaticRenderFunctions = require("../getStaticRenderFunctions");
|
|
109
102
|
const _ContextModuleSourceMapsMiddleware = require("../middleware/ContextModuleSourceMapsMiddleware");
|
|
110
103
|
const _CreateFileMiddleware = require("../middleware/CreateFileMiddleware");
|
|
111
|
-
const _DataLoaderModuleMiddleware = require("../middleware/DataLoaderModuleMiddleware");
|
|
112
104
|
const _DevToolsPluginMiddleware = require("../middleware/DevToolsPluginMiddleware");
|
|
113
105
|
const _DomComponentsMiddleware = require("../middleware/DomComponentsMiddleware");
|
|
114
106
|
const _FaviconMiddleware = require("../middleware/FaviconMiddleware");
|
|
@@ -246,7 +238,10 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
246
238
|
debug('Adding RSC route to the manifest:', rscPath);
|
|
247
239
|
// NOTE: This might need to be sorted to the correct spot in the future.
|
|
248
240
|
manifest.apiRoutes.push({
|
|
249
|
-
|
|
241
|
+
// TODO(@kitten): This isn't great, we shouldn't be needing to rely on files like this
|
|
242
|
+
// It might even be better to make templating strings since that'd be type-checked, but currently,
|
|
243
|
+
// we rely on this being an entrypoint for Metro
|
|
244
|
+
file: require.resolve('@expo/cli/static/template/[...rsc]+api.ts'),
|
|
250
245
|
page: rscPath,
|
|
251
246
|
namedRegex: '^/_flight(?:/(?<rsc>.+?))?(?:/)?$',
|
|
252
247
|
routeKeys: {
|
|
@@ -307,7 +302,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
307
302
|
var _exp_extra, _exp_extra1;
|
|
308
303
|
const { exp } = (0, _config().getConfig)(this.projectRoot);
|
|
309
304
|
// NOTE: This could probably be folded back into `renderStaticContent` when expo-asset and font support RSC.
|
|
310
|
-
const { getBuildTimeServerManifestAsync, getManifest } = await this.ssrLoadModule('
|
|
305
|
+
const { getBuildTimeServerManifestAsync, getManifest } = await this.ssrLoadModule('expo-router/build/static/getServerManifest.js', {
|
|
311
306
|
// Only use react-server environment when the routes are using react-server rendering by default.
|
|
312
307
|
environment: this.isReactServerRoutesEnabled ? 'react-server' : 'node'
|
|
313
308
|
});
|
|
@@ -320,22 +315,19 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
320
315
|
})
|
|
321
316
|
};
|
|
322
317
|
}
|
|
323
|
-
|
|
324
|
-
* This function is invoked when exporting via `expo export`
|
|
325
|
-
*/ async getStaticRenderFunctionAsync() {
|
|
318
|
+
async getStaticRenderFunctionAsync() {
|
|
326
319
|
var _exp_extra, _exp_extra1;
|
|
327
320
|
const url = this.getDevServerUrlOrAssert();
|
|
328
|
-
const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } = await this.ssrLoadModule('
|
|
321
|
+
const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } = await this.ssrLoadModule('expo-router/node/render.js', {
|
|
329
322
|
// This must always use the legacy rendering resolution (no `react-server`) because it leverages
|
|
330
323
|
// the previous React SSG utilities which aren't available in React 19.
|
|
331
324
|
environment: 'node'
|
|
332
325
|
});
|
|
333
326
|
const { exp } = (0, _config().getConfig)(this.projectRoot);
|
|
334
|
-
const serverManifest = await getBuildTimeServerManifestAsync({
|
|
335
|
-
...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router
|
|
336
|
-
});
|
|
337
327
|
return {
|
|
338
|
-
serverManifest
|
|
328
|
+
serverManifest: await getBuildTimeServerManifestAsync({
|
|
329
|
+
...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router
|
|
330
|
+
}),
|
|
339
331
|
// Get routes from Expo Router.
|
|
340
332
|
manifest: await getManifest({
|
|
341
333
|
preserveApiRoutes: false,
|
|
@@ -371,10 +363,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
371
363
|
bytecode: false
|
|
372
364
|
});
|
|
373
365
|
}
|
|
374
|
-
|
|
375
|
-
* This function is invoked when running in development via `expo start`
|
|
376
|
-
*/ async getStaticPageAsync(pathname, route) {
|
|
377
|
-
const { exp } = (0, _config().getConfig)(this.projectRoot);
|
|
366
|
+
async getStaticPageAsync(pathname) {
|
|
378
367
|
const { mode, isExporting, clientBoundaries, baseUrl, reactCompiler, routerRoot, asyncRoutes } = this.instanceMetroOptions;
|
|
379
368
|
(0, _assert().default)(mode != null && isExporting != null && baseUrl != null && reactCompiler != null && routerRoot != null && asyncRoutes != null, 'The server must be started before calling getStaticPageAsync.');
|
|
380
369
|
const platform = 'web';
|
|
@@ -396,8 +385,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
396
385
|
bytecode: false
|
|
397
386
|
});
|
|
398
387
|
const bundleStaticHtml = async ()=>{
|
|
399
|
-
|
|
400
|
-
const { getStaticContent } = await this.ssrLoadModule('@expo/router-server/node/render.js', {
|
|
388
|
+
const { getStaticContent } = await this.ssrLoadModule('expo-router/node/render.js', {
|
|
401
389
|
// This must always use the legacy rendering resolution (no `react-server`) because it leverages
|
|
402
390
|
// the previous React SSG utilities which aren't available in React 19.
|
|
403
391
|
environment: 'node',
|
|
@@ -406,17 +394,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
406
394
|
platform
|
|
407
395
|
});
|
|
408
396
|
const location = new URL(pathname, this.getDevServerUrlOrAssert());
|
|
409
|
-
|
|
410
|
-
if (useServerDataLoaders) {
|
|
411
|
-
const data = await this.executeServerDataLoaderAsync(location, route);
|
|
412
|
-
return await getStaticContent(location, {
|
|
413
|
-
loader: {
|
|
414
|
-
data
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
} else {
|
|
418
|
-
return await getStaticContent(location);
|
|
419
|
-
}
|
|
397
|
+
return await getStaticContent(location);
|
|
420
398
|
};
|
|
421
399
|
const [{ artifacts: resources }, staticHtml] = await Promise.all([
|
|
422
400
|
this.getStaticResourcesAsync({
|
|
@@ -820,34 +798,13 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
820
798
|
// Add support for DOM components.
|
|
821
799
|
// TODO: Maybe put behind a flag for now?
|
|
822
800
|
middleware.use(domComponentRenderer);
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
// Use by `@expo/log-box` https://github.com/expo/expo/blob/f29b9f3715e42dca87bf3eebf11f7e7dd1ff73c1/packages/%40expo/log-box/src/utils/devServerEndpoints.ts#L82
|
|
829
|
-
if ((_req_url = req.url) == null ? void 0 : _req_url.startsWith('/_expo/error-overlay-meta')) {
|
|
830
|
-
res.statusCode = 200;
|
|
831
|
-
res.setHeader('Content-Type', 'application/json');
|
|
832
|
-
res.end(JSON.stringify({
|
|
833
|
-
projectRoot: this.projectRoot,
|
|
834
|
-
serverRoot,
|
|
835
|
-
sdkVersion: exp.sdkVersion
|
|
836
|
-
}));
|
|
837
|
-
return;
|
|
838
|
-
}
|
|
839
|
-
return next();
|
|
840
|
-
});
|
|
801
|
+
middleware.use(new _CreateFileMiddleware.CreateFileMiddleware({
|
|
802
|
+
metroRoot: serverRoot,
|
|
803
|
+
projectRoot: this.projectRoot,
|
|
804
|
+
appDir
|
|
805
|
+
}).getHandler());
|
|
841
806
|
// Append support for redirecting unhandled requests to the index.html page on web.
|
|
842
807
|
if (this.isTargetingWeb()) {
|
|
843
|
-
var _exp_extra_router1, _exp_extra2;
|
|
844
|
-
if ((_exp_extra2 = exp.extra) == null ? void 0 : (_exp_extra_router1 = _exp_extra2.router) == null ? void 0 : _exp_extra_router1.unstable_useServerDataLoaders) {
|
|
845
|
-
const loaderModuleMiddleware = new _DataLoaderModuleMiddleware.DataLoaderModuleMiddleware(this.projectRoot, appDir, async (location, route)=>{
|
|
846
|
-
return this.executeServerDataLoaderAsync(location, route);
|
|
847
|
-
}, ()=>this.getDevServerUrlOrAssert());
|
|
848
|
-
// This MUST be before ServeStaticMiddleware so it doesn't treat the loader files as static assets
|
|
849
|
-
middleware.use(loaderModuleMiddleware.getHandler());
|
|
850
|
-
}
|
|
851
808
|
// This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.
|
|
852
809
|
middleware.use(new _ServeStaticMiddleware.ServeStaticMiddleware(this.projectRoot).getHandler());
|
|
853
810
|
// This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.
|
|
@@ -858,7 +815,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
858
815
|
metro,
|
|
859
816
|
server
|
|
860
817
|
}, (events)=>{
|
|
861
|
-
var _exp_extra_router, _exp_extra;
|
|
862
818
|
if (hasApiRoutes) {
|
|
863
819
|
// NOTE(EvanBacon): We aren't sure what files the API routes are using so we'll just invalidate
|
|
864
820
|
// aggressively to ensure we always have the latest. The only caching we really get here is for
|
|
@@ -877,15 +833,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
877
833
|
}
|
|
878
834
|
}
|
|
879
835
|
}
|
|
880
|
-
// Handle loader file changes for HMR
|
|
881
|
-
if ((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders) {
|
|
882
|
-
for (const event of events){
|
|
883
|
-
var _event_metadata1;
|
|
884
|
-
if (((_event_metadata1 = event.metadata) == null ? void 0 : _event_metadata1.type) !== 'd') {
|
|
885
|
-
this.handleLoaderFileChange(event.filePath);
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
836
|
});
|
|
890
837
|
}
|
|
891
838
|
// If React 19 is enabled, then add RSC middleware to the dev server.
|
|
@@ -919,7 +866,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
919
866
|
bundleApiRoute: (functionFilePath)=>this.ssrImportApiRoute(functionFilePath, {
|
|
920
867
|
platform: 'web'
|
|
921
868
|
}),
|
|
922
|
-
getStaticPageAsync: async (pathname
|
|
869
|
+
getStaticPageAsync: async (pathname)=>{
|
|
923
870
|
// TODO: Add server rendering when RSC is enabled.
|
|
924
871
|
if (isReactServerComponentsEnabled) {
|
|
925
872
|
// NOTE: This is a temporary hack to return the SPA/template index.html in development when RSC is enabled.
|
|
@@ -930,7 +877,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
930
877
|
};
|
|
931
878
|
}
|
|
932
879
|
// Non-RSC apps will bundle the static HTML for a given pathname and respond with it.
|
|
933
|
-
return this.getStaticPageAsync(pathname
|
|
880
|
+
return this.getStaticPageAsync(pathname);
|
|
934
881
|
}
|
|
935
882
|
}));
|
|
936
883
|
}
|
|
@@ -1164,62 +1111,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
1164
1111
|
invalidateApiRouteCache() {
|
|
1165
1112
|
this.pendingRouteOperations.clear();
|
|
1166
1113
|
}
|
|
1167
|
-
/**
|
|
1168
|
-
* Execute a route's loader function. Used during SSR/SSG to fetch data required by routes.
|
|
1169
|
-
*
|
|
1170
|
-
* This function is used during development and production builds, and **must** receive a valid
|
|
1171
|
-
* matched route.
|
|
1172
|
-
*
|
|
1173
|
-
* @experimental
|
|
1174
|
-
*/ async executeServerDataLoaderAsync(location, route) {
|
|
1175
|
-
var _exp_extra;
|
|
1176
|
-
const { exp } = (0, _config().getConfig)(this.projectRoot);
|
|
1177
|
-
const { unstable_useServerDataLoaders } = (_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router;
|
|
1178
|
-
if (!unstable_useServerDataLoaders) {
|
|
1179
|
-
throw new _errors.CommandError('LOADERS_NOT_ENABLED', 'Server data loaders are not enabled. Add `unstable_useServerDataLoaders` to your `expo-router` plugin config.');
|
|
1180
|
-
}
|
|
1181
|
-
// If the route is unmatched, we can ignore it
|
|
1182
|
-
// TODO(@hassankhan): Is this the best way of determining the route is unmatched?
|
|
1183
|
-
if (route.page === '/+not-found') {
|
|
1184
|
-
return;
|
|
1185
|
-
}
|
|
1186
|
-
const { routerRoot } = this.instanceMetroOptions;
|
|
1187
|
-
(0, _assert().default)(routerRoot != null, 'The server must be started before calling executeRouteLoaderAsync.');
|
|
1188
|
-
let loaderData;
|
|
1189
|
-
try {
|
|
1190
|
-
debug('Matched route loader to file: ', route.file);
|
|
1191
|
-
// TODO(@hassankhan): This should move to a util function
|
|
1192
|
-
const params = {};
|
|
1193
|
-
const match = route.namedRegex.exec(location.pathname);
|
|
1194
|
-
if (match == null ? void 0 : match.groups) {
|
|
1195
|
-
for (const [key, value] of Object.entries(match.groups)){
|
|
1196
|
-
const namedKey = route.routeKeys[key];
|
|
1197
|
-
params[namedKey] = value;
|
|
1198
|
-
}
|
|
1199
|
-
}
|
|
1200
|
-
let modulePath = route.file;
|
|
1201
|
-
const appDir = _path().default.join(this.projectRoot, routerRoot);
|
|
1202
|
-
modulePath = _path().default.isAbsolute(modulePath) ? modulePath : _path().default.join(appDir, modulePath);
|
|
1203
|
-
modulePath = modulePath.replace(/\.(js|ts)x?$/, '');
|
|
1204
|
-
debug('Using loader module path: ', modulePath);
|
|
1205
|
-
const routeModule = await this.ssrLoadModule(modulePath, {
|
|
1206
|
-
environment: 'node'
|
|
1207
|
-
});
|
|
1208
|
-
if (routeModule.loader) {
|
|
1209
|
-
// Register this module for loader HMR
|
|
1210
|
-
this.setupLoaderHmr(modulePath);
|
|
1211
|
-
loaderData = await routeModule.loader({
|
|
1212
|
-
params,
|
|
1213
|
-
// NOTE(@hassankhan): The `request` object should only be available when using SSR
|
|
1214
|
-
request: null
|
|
1215
|
-
});
|
|
1216
|
-
}
|
|
1217
|
-
} catch (error) {
|
|
1218
|
-
throw new _errors.CommandError('LOADER_EXECUTION_FAILED', `Failed to execute loader for route "${location.pathname}": ${error.message}`);
|
|
1219
|
-
}
|
|
1220
|
-
debug('Loader data:', loaderData, ' for location:', location.pathname);
|
|
1221
|
-
return loaderData;
|
|
1222
|
-
}
|
|
1223
1114
|
// Ensure the global is available for SSR CSS modules to inject client updates.
|
|
1224
1115
|
bindRSCDevModuleInjectionHandler() {
|
|
1225
1116
|
// Used by SSR CSS modules to broadcast client updates.
|
|
@@ -1258,30 +1149,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
1258
1149
|
};
|
|
1259
1150
|
this.registerSsrHmrAsync(url.toString(), onReload);
|
|
1260
1151
|
}
|
|
1261
|
-
setupLoaderHmr(modulePath) {
|
|
1262
|
-
if (this.watchedLoaderFiles.has(modulePath)) {
|
|
1263
|
-
return;
|
|
1264
|
-
}
|
|
1265
|
-
this.watchedLoaderFiles.add(modulePath);
|
|
1266
|
-
debug('[Loader HMR] Registering loader file for HMR:', modulePath);
|
|
1267
|
-
}
|
|
1268
|
-
handleLoaderFileChange(changedFilePath) {
|
|
1269
|
-
for (const loaderPath of this.watchedLoaderFiles){
|
|
1270
|
-
const possibleExtensions = [
|
|
1271
|
-
'.tsx',
|
|
1272
|
-
'.ts',
|
|
1273
|
-
'.jsx',
|
|
1274
|
-
'.js'
|
|
1275
|
-
];
|
|
1276
|
-
const isLoaderFile = possibleExtensions.some((ext)=>changedFilePath === loaderPath + ext || changedFilePath === loaderPath);
|
|
1277
|
-
if (isLoaderFile) {
|
|
1278
|
-
debug('[Loader HMR] Loader file changed, triggering reload:', changedFilePath);
|
|
1279
|
-
this.broadcastMessage('sendDevCommand', {
|
|
1280
|
-
name: 'reload'
|
|
1281
|
-
});
|
|
1282
|
-
}
|
|
1283
|
-
}
|
|
1284
|
-
}
|
|
1285
1152
|
// Direct Metro access
|
|
1286
1153
|
// Emulates the Metro dev server .bundle endpoint without having to go through a server.
|
|
1287
1154
|
async _bundleDirectAsync(resolvedEntryFilePath, { transformOptions, resolverOptions, graphOptions, serializerOptions }) {
|
|
@@ -1492,7 +1359,14 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
1492
1359
|
constructor(...args){
|
|
1493
1360
|
super(...args), this.metro = null, this.hmrServer = null, this.ssrHmrClients = new Map(), // Set when the server is started.
|
|
1494
1361
|
this.instanceMetroOptions = {}, this.ssrLoadModule = async (filePath, specificOptions = {}, extras = {})=>{
|
|
1495
|
-
|
|
1362
|
+
// NOTE(@kitten): We don't properly initialize the server-side modules
|
|
1363
|
+
// Instead, we first load an entrypoint with an empty bundle to initialize the runtime instead
|
|
1364
|
+
// See: ./createServerComponentsMiddleware.ts
|
|
1365
|
+
const getEmptyModulePath = ()=>{
|
|
1366
|
+
(0, _assert().default)(this.metro, 'Metro server must be running to load SSR modules.');
|
|
1367
|
+
return this.metro._config.resolver.emptyModulePath;
|
|
1368
|
+
};
|
|
1369
|
+
const res = await this.ssrLoadModuleContents(filePath ?? getEmptyModulePath(), specificOptions);
|
|
1496
1370
|
if (// TODO: hot should be a callback function for invalidating the related SSR module.
|
|
1497
1371
|
extras.hot && this.instanceMetroOptions.isExporting !== true) {
|
|
1498
1372
|
// Register SSR HMR
|
|
@@ -1503,7 +1377,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
|
|
|
1503
1377
|
}
|
|
1504
1378
|
return (0, _getStaticRenderFunctions.evalMetroAndWrapFunctions)(this.projectRoot, res.src, res.filename, specificOptions.isExporting ?? this.instanceMetroOptions.isExporting);
|
|
1505
1379
|
}, this.rscRenderer = null, this.onReloadRscEvent = null, // API Routes
|
|
1506
|
-
this.pendingRouteOperations = new Map()
|
|
1380
|
+
this.pendingRouteOperations = new Map();
|
|
1507
1381
|
}
|
|
1508
1382
|
}
|
|
1509
1383
|
function getBuildID(buildNumber) {
|