@expo/cli 0.21.0 → 0.21.2
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/build/bin/cli +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +3 -15
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +22 -17
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -11
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js +1 -1
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +122 -8
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroPrivateServer.js.map +1 -1
- package/build/src/start/server/metro/router.js +2 -2
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +7 -2
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/utils/env.js +2 -2
- package/build/src/utils/env.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/package.json +4 -4
|
@@ -59,7 +59,7 @@ function _interopRequireDefault(obj) {
|
|
|
59
59
|
}
|
|
60
60
|
const debug = require("debug")("expo:rsc");
|
|
61
61
|
const getMetroServerRootMemo = (0, _fn.memoize)(_paths().getMetroServerRoot);
|
|
62
|
-
function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetroOptions , ssrLoadModule , ssrLoadModuleArtifacts , useClientRouter }) {
|
|
62
|
+
function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetroOptions , ssrLoadModule , ssrLoadModuleArtifacts , useClientRouter , createModuleId }) {
|
|
63
63
|
const routerModule = useClientRouter ? "expo-router/build/rsc/router/noopRouter" : "expo-router/build/rsc/router/expo-definedRouter";
|
|
64
64
|
const rscMiddleware = (0, _rsc().getRscMiddleware)({
|
|
65
65
|
config: {},
|
|
@@ -115,12 +115,11 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
115
115
|
if (rscPathPrefix !== "/") {
|
|
116
116
|
rscPathPrefix += "/";
|
|
117
117
|
}
|
|
118
|
-
async function exportServerActionsAsync({ platform , entryPoints }, files) {
|
|
118
|
+
async function exportServerActionsAsync({ platform , entryPoints , domRoot }, files) {
|
|
119
119
|
const uniqueEntryPoints = [
|
|
120
120
|
...new Set(entryPoints)
|
|
121
121
|
];
|
|
122
122
|
// TODO: Support multiple entry points in a single split server bundle...
|
|
123
|
-
const serverRoot = getMetroServerRootMemo(projectRoot);
|
|
124
123
|
const manifest = {};
|
|
125
124
|
const nestedClientBoundaries = [];
|
|
126
125
|
for (const entryPoint of uniqueEntryPoints){
|
|
@@ -131,7 +130,9 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
131
130
|
// Ignore the metro runtime to avoid overwriting the original in the API route.
|
|
132
131
|
modulesOnly: true,
|
|
133
132
|
// Required
|
|
134
|
-
runModule: true
|
|
133
|
+
runModule: true,
|
|
134
|
+
// Required to ensure assets load as client boundaries.
|
|
135
|
+
domRoot
|
|
135
136
|
});
|
|
136
137
|
const reactClientReferences = (ref = contents.artifacts.filter((a)=>a.type === "js")[0].metadata.reactClientReferences) == null ? void 0 : ref.map((ref)=>fileURLToFilePath(ref));
|
|
137
138
|
if (reactClientReferences) {
|
|
@@ -141,7 +142,10 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
141
142
|
if (contents.src.includes("The experimental Metro feature")) {
|
|
142
143
|
throw new Error("Internal error: module runtime should not be included in server action bundles: " + entryPoint);
|
|
143
144
|
}
|
|
144
|
-
const relativeName =
|
|
145
|
+
const relativeName = createModuleId(entryPoint, {
|
|
146
|
+
platform,
|
|
147
|
+
environment: "react-server"
|
|
148
|
+
});
|
|
145
149
|
const safeName = _path().default.basename(contents.artifacts.find((a)=>a.type === "js").filename);
|
|
146
150
|
const outputName = `_expo/rsc/${platform}/${safeName}`;
|
|
147
151
|
// While we're here, export the router for the server to dynamically render RSC.
|
|
@@ -151,7 +155,7 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
151
155
|
});
|
|
152
156
|
// Import relative to `dist/server/_expo/rsc/web/router.js`
|
|
153
157
|
manifest[entryPoint] = [
|
|
154
|
-
relativeName,
|
|
158
|
+
String(relativeName),
|
|
155
159
|
outputName
|
|
156
160
|
];
|
|
157
161
|
}
|
|
@@ -216,12 +220,16 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
216
220
|
(0, _assert().default)(context.ssrManifest.has(relativeFilePath), `SSR manifest is missing client boundary "${relativeFilePath}"`);
|
|
217
221
|
const chunk = context.ssrManifest.get(relativeFilePath);
|
|
218
222
|
return {
|
|
219
|
-
id:
|
|
223
|
+
id: String(createModuleId(file, {
|
|
224
|
+
platform: context.platform,
|
|
225
|
+
environment: "client"
|
|
226
|
+
})),
|
|
220
227
|
chunks: chunk != null ? [
|
|
221
228
|
chunk
|
|
222
229
|
] : []
|
|
223
230
|
};
|
|
224
231
|
}
|
|
232
|
+
const environment = isServer ? "react-server" : "client";
|
|
225
233
|
const searchParams = (0, _metroOptions.createBundleUrlSearchParams)({
|
|
226
234
|
mainModuleName: "",
|
|
227
235
|
platform: context.platform,
|
|
@@ -238,7 +246,7 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
238
246
|
bytecode: false,
|
|
239
247
|
clientBoundaries: [],
|
|
240
248
|
inlineSourceMap: false,
|
|
241
|
-
environment
|
|
249
|
+
environment,
|
|
242
250
|
modulesOnly: true,
|
|
243
251
|
runModule: false
|
|
244
252
|
});
|
|
@@ -255,11 +263,14 @@ function createServerComponentsMiddleware(projectRoot, { rscPath , instanceMetro
|
|
|
255
263
|
clientReferenceUrl.pathname += ".bundle";
|
|
256
264
|
}
|
|
257
265
|
// Return relative URLs to help Android fetch from wherever it was loaded from since it doesn't support localhost.
|
|
258
|
-
const
|
|
266
|
+
const chunkName = clientReferenceUrl.pathname + clientReferenceUrl.search;
|
|
259
267
|
return {
|
|
260
|
-
id:
|
|
268
|
+
id: String(createModuleId(filePath, {
|
|
269
|
+
platform: context.platform,
|
|
270
|
+
environment
|
|
271
|
+
})),
|
|
261
272
|
chunks: [
|
|
262
|
-
|
|
273
|
+
chunkName
|
|
263
274
|
]
|
|
264
275
|
};
|
|
265
276
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/createServerComponentsMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport { getRscMiddleware } from '@expo/server/build/middleware/rsc';\nimport assert from 'assert';\nimport path from 'path';\n\nimport { logMetroError } from './metroErrorInterface';\nimport { ExportAssetMap } from '../../../export/saveAssets';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { memoize } from '../../../utils/fn';\nimport { getIpAddress } from '../../../utils/ip';\nimport { streamToStringAsync } from '../../../utils/stream';\nimport { createBuiltinAPIRequestHandler } from '../middleware/createBuiltinAPIRequestHandler';\nimport {\n createBundleUrlSearchParams,\n ExpoMetroOptions,\n getMetroOptionsFromUrl,\n} from '../middleware/metroOptions';\n\nconst debug = require('debug')('expo:rsc') as typeof console.log;\n\ntype SSRLoadModuleArtifactsFunc = (\n filePath: string,\n specificOptions?: Partial<ExpoMetroOptions>\n) => Promise<{ artifacts: SerialAsset[]; src: string }>;\n\ntype SSRLoadModuleFunc = <T extends Record<string, any>>(\n filePath: string,\n specificOptions?: Partial<ExpoMetroOptions>,\n extras?: { hot?: boolean }\n) => Promise<T>;\n\nconst getMetroServerRootMemo = memoize(getMetroServerRoot);\n\nexport function createServerComponentsMiddleware(\n projectRoot: string,\n {\n rscPath,\n instanceMetroOptions,\n ssrLoadModule,\n ssrLoadModuleArtifacts,\n useClientRouter,\n }: {\n rscPath: string;\n instanceMetroOptions: Partial<ExpoMetroOptions>;\n ssrLoadModule: SSRLoadModuleFunc;\n ssrLoadModuleArtifacts: SSRLoadModuleArtifactsFunc;\n useClientRouter: boolean;\n }\n) {\n const routerModule = useClientRouter\n ? 'expo-router/build/rsc/router/noopRouter'\n : 'expo-router/build/rsc/router/expo-definedRouter';\n\n const rscMiddleware = getRscMiddleware({\n config: {},\n // Disabled in development\n baseUrl: '',\n rscPath,\n onError: console.error,\n renderRsc: async (args) => {\n // In development we should add simulated versions of common production headers.\n if (args.headers['x-real-ip'] == null) {\n args.headers['x-real-ip'] = getIpAddress();\n }\n if (args.headers['x-forwarded-for'] == null) {\n args.headers['x-forwarded-for'] = args.headers['x-real-ip'];\n }\n if (args.headers['x-forwarded-proto'] == null) {\n args.headers['x-forwarded-proto'] = 'http';\n }\n\n // Dev server-only implementation.\n try {\n return await renderRscToReadableStream({\n ...args,\n headers: new Headers(args.headers),\n body: args.body!,\n });\n } catch (error: any) {\n // If you get a codeFrame error during SSR like when using a Class component in React Server Components, then this\n // will throw with:\n // {\n // rawObject: {\n // type: 'TransformError',\n // lineNumber: 0,\n // errors: [ [Object] ],\n // name: 'SyntaxError',\n // message: '...',\n // }\n // }\n\n // TODO: Revisit all error handling now that we do direct metro bundling...\n await logMetroError(projectRoot, { error });\n\n const sanitizedServerMessage = stripAnsi(error.message) ?? error.message;\n throw new Response(sanitizedServerMessage, {\n status: 500,\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n }\n },\n });\n\n let rscPathPrefix = rscPath;\n if (rscPathPrefix !== '/') {\n rscPathPrefix += '/';\n }\n\n async function exportServerActionsAsync(\n { platform, entryPoints }: { platform: string; entryPoints: string[] },\n files: ExportAssetMap\n ): Promise<{\n clientBoundaries: string[];\n manifest: Record<string, [string, string]>;\n }> {\n const uniqueEntryPoints = [...new Set(entryPoints)];\n // TODO: Support multiple entry points in a single split server bundle...\n const serverRoot = getMetroServerRootMemo(projectRoot);\n\n const manifest: Record<string, [string, string]> = {};\n const nestedClientBoundaries: string[] = [];\n for (const entryPoint of uniqueEntryPoints) {\n const contents = await ssrLoadModuleArtifacts(entryPoint, {\n environment: 'react-server',\n platform,\n // Ignore the metro runtime to avoid overwriting the original in the API route.\n modulesOnly: true,\n // Required\n runModule: true,\n });\n\n const reactClientReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactClientReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (reactClientReferences) {\n nestedClientBoundaries.push(...reactClientReferences!);\n }\n\n // Naive check to ensure the module runtime is not included in the server action bundle.\n if (contents.src.includes('The experimental Metro feature')) {\n throw new Error(\n 'Internal error: module runtime should not be included in server action bundles: ' +\n entryPoint\n );\n }\n const relativeName = path.relative(serverRoot, entryPoint);\n const safeName = path.basename(contents.artifacts.find((a) => a.type === 'js')!.filename!);\n\n const outputName = `_expo/rsc/${platform}/${safeName}`;\n // While we're here, export the router for the server to dynamically render RSC.\n files.set(outputName, {\n targetDomain: 'server',\n contents: wrapBundle(contents.src),\n });\n\n // Import relative to `dist/server/_expo/rsc/web/router.js`\n manifest[entryPoint] = [relativeName, outputName];\n }\n\n // Save the SSR manifest so we can perform more replacements in the server renderer and with server actions.\n files.set(`_expo/rsc/${platform}/action-manifest.js`, {\n targetDomain: 'server',\n contents: 'module.exports = ' + JSON.stringify(manifest),\n });\n\n return { manifest, clientBoundaries: nestedClientBoundaries };\n }\n\n async function getExpoRouterClientReferencesAsync(\n { platform, domRoot }: { platform: string; domRoot?: string },\n files: ExportAssetMap\n ): Promise<{\n reactClientReferences: string[];\n reactServerReferences: string[];\n cssModules: SerialAsset[];\n }> {\n const contents = await ssrLoadModuleArtifacts(routerModule, {\n environment: 'react-server',\n platform,\n modulesOnly: true,\n domRoot,\n });\n\n // Extract the global CSS modules that are imported from the router.\n // These will be injected in the head of the HTML document for the website.\n const cssModules = contents.artifacts.filter((a) => a.type.startsWith('css'));\n\n const reactServerReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactServerReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (!reactServerReferences) {\n throw new Error(\n 'Static server action references were not returned from the Metro SSR bundle for definedRouter'\n );\n }\n debug('React client boundaries:', reactServerReferences);\n\n const reactClientReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactClientReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (!reactClientReferences) {\n throw new Error(\n 'Static client references were not returned from the Metro SSR bundle for definedRouter'\n );\n }\n debug('React client boundaries:', reactClientReferences);\n\n // While we're here, export the router for the server to dynamically render RSC.\n files.set(`_expo/rsc/${platform}/router.js`, {\n targetDomain: 'server',\n contents: wrapBundle(contents.src),\n });\n\n return { reactClientReferences, reactServerReferences, cssModules };\n }\n\n async function getExpoRouterRscEntriesGetterAsync({ platform }: { platform: string }) {\n return ssrLoadModule<typeof import('expo-router/build/rsc/router/expo-definedRouter')>(\n routerModule,\n {\n environment: 'react-server',\n platform,\n },\n {\n hot: true,\n }\n );\n }\n\n function getResolveClientEntry(context: {\n platform: string;\n engine?: 'hermes' | null;\n ssrManifest?: Map<string, string>;\n }) {\n const serverRoot = getMetroServerRootMemo(projectRoot);\n\n const {\n mode,\n minify = false,\n isExporting,\n baseUrl,\n routerRoot,\n asyncRoutes,\n preserveEnvVars,\n reactCompiler,\n lazy,\n } = instanceMetroOptions;\n\n assert(\n isExporting != null &&\n baseUrl != null &&\n mode != null &&\n routerRoot != null &&\n asyncRoutes != null,\n `The server must be started. (isExporting: ${isExporting}, baseUrl: ${baseUrl}, mode: ${mode}, routerRoot: ${routerRoot}, asyncRoutes: ${asyncRoutes})`\n );\n\n return (file: string, isServer: boolean) => {\n if (isExporting) {\n assert(context.ssrManifest, 'SSR manifest must exist when exporting');\n const relativeFilePath = path.relative(serverRoot, file);\n\n assert(\n context.ssrManifest.has(relativeFilePath),\n `SSR manifest is missing client boundary \"${relativeFilePath}\"`\n );\n\n const chunk = context.ssrManifest.get(relativeFilePath);\n\n return {\n id: relativeFilePath,\n chunks: chunk != null ? [chunk] : [],\n };\n }\n\n const searchParams = createBundleUrlSearchParams({\n mainModuleName: '',\n platform: context.platform,\n mode,\n minify,\n lazy,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n reactCompiler: !!reactCompiler,\n engine: context.engine ?? undefined,\n bytecode: false,\n clientBoundaries: [],\n inlineSourceMap: false,\n environment: isServer ? 'react-server' : 'client',\n modulesOnly: true,\n runModule: false,\n });\n\n searchParams.set('resolver.clientboundary', String(true));\n\n const clientReferenceUrl = new URL('http://a');\n\n // TICKLE: Handshake 1\n searchParams.set('xRSC', '1');\n\n clientReferenceUrl.search = searchParams.toString();\n\n const filePath = file.startsWith('file://') ? fileURLToFilePath(file) : file;\n const relativeFilePath = path.relative(serverRoot, filePath);\n\n clientReferenceUrl.pathname = relativeFilePath;\n\n // Ensure url.pathname ends with '.bundle'\n if (!clientReferenceUrl.pathname.endsWith('.bundle')) {\n clientReferenceUrl.pathname += '.bundle';\n }\n\n // Return relative URLs to help Android fetch from wherever it was loaded from since it doesn't support localhost.\n const id = clientReferenceUrl.pathname + clientReferenceUrl.search;\n\n return { id: relativeFilePath, chunks: [id] };\n };\n }\n\n const rscRendererCache = new Map<string, typeof import('expo-router/build/rsc/rsc-renderer')>();\n\n async function getRscRendererAsync(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRendererCache.has(platform)) {\n return rscRendererCache.get(platform)!;\n }\n\n // TODO: Extract CSS Modules / Assets from the bundler process\n const renderer = await ssrLoadModule<typeof import('expo-router/build/rsc/rsc-renderer')>(\n 'expo-router/build/rsc/rsc-renderer',\n {\n environment: 'react-server',\n platform,\n }\n );\n\n rscRendererCache.set(platform, renderer);\n return renderer;\n }\n\n const rscRenderContext = new Map<string, any>();\n\n function getRscRenderContext(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRenderContext.has(platform)) {\n return rscRenderContext.get(platform)!;\n }\n\n const context = {};\n\n rscRenderContext.set(platform, context);\n return context;\n }\n\n async function renderRscToReadableStream(\n {\n input,\n headers,\n method,\n platform,\n body,\n engine,\n contentType,\n ssrManifest,\n decodedBody,\n }: {\n input: string;\n headers: Headers;\n method: 'POST' | 'GET';\n platform: string;\n body?: ReadableStream<Uint8Array>;\n engine?: 'hermes' | null;\n contentType?: string;\n ssrManifest?: Map<string, string>;\n decodedBody?: unknown;\n },\n isExporting: boolean | undefined = instanceMetroOptions.isExporting\n ) {\n assert(\n isExporting != null,\n 'The server must be started before calling renderRscToReadableStream.'\n );\n\n if (method === 'POST') {\n assert(body, 'Server request must be provided when method is POST (server actions)');\n }\n\n const context = getRscRenderContext(platform);\n\n context['__expo_requestHeaders'] = headers;\n\n const { renderRsc } = await getRscRendererAsync(platform);\n\n return renderRsc(\n {\n body,\n decodedBody,\n context,\n config: {},\n input,\n contentType,\n },\n {\n isExporting,\n entries: await getExpoRouterRscEntriesGetterAsync({ platform }),\n resolveClientEntry: getResolveClientEntry({ platform, engine, ssrManifest }),\n async loadServerModuleRsc(urlFragment) {\n const serverRoot = getMetroServerRootMemo(projectRoot);\n\n debug('[SSR] loadServerModuleRsc:', urlFragment);\n\n const options = getMetroOptionsFromUrl(urlFragment);\n\n return ssrLoadModule(path.join(serverRoot, options.mainModuleName), options);\n },\n }\n );\n }\n\n return {\n // Get the static client boundaries (no dead code elimination allowed) for the production export.\n getExpoRouterClientReferencesAsync,\n exportServerActionsAsync,\n\n async exportRoutesAsync(\n {\n platform,\n ssrManifest,\n }: {\n platform: string;\n ssrManifest: Map<string, string>;\n },\n files: ExportAssetMap\n ) {\n // TODO: When we add web SSR support, we need to extract CSS Modules / Assets from the bundler process to prevent FLOUC.\n const { getBuildConfig } = (await getExpoRouterRscEntriesGetterAsync({ platform })).default;\n\n // Get all the routes to render.\n const buildConfig = await getBuildConfig!(async () =>\n // TODO: Rework prefetching code to use Metro runtime.\n []\n );\n\n await Promise.all(\n Array.from(buildConfig).map(async ({ entries }) => {\n for (const { input, isStatic } of entries || []) {\n if (!isStatic) {\n debug('Skipping static export for route', { input });\n continue;\n }\n const destRscFile = path.join('_flight', platform, encodeInput(input));\n\n const pipe = await renderRscToReadableStream(\n {\n input,\n method: 'GET',\n platform,\n headers: new Headers(),\n ssrManifest,\n },\n true\n );\n\n const rsc = await streamToStringAsync(pipe);\n debug('RSC Payload', { platform, input, rsc });\n\n files.set(destRscFile, {\n contents: rsc,\n targetDomain: 'client',\n rscId: input,\n });\n }\n })\n );\n },\n\n middleware: createBuiltinAPIRequestHandler(\n // Match `/_flight/[platform]/[...path]`\n (req) => {\n return getFullUrl(req.url).pathname.startsWith(rscPathPrefix);\n },\n rscMiddleware\n ),\n onReloadRscEvent: () => {\n // NOTE: We cannot clear the renderer context because it would break the mounted context state.\n\n // Clear the render context to ensure that the next render is a fresh start.\n rscRenderContext.clear();\n },\n };\n}\n\nconst getFullUrl = (url: string) => {\n try {\n return new URL(url);\n } catch {\n return new URL(url, 'http://localhost:0');\n }\n};\n\nexport const fileURLToFilePath = (fileURL: string) => {\n if (!fileURL.startsWith('file://')) {\n throw new Error('Not a file URL');\n }\n return decodeURI(fileURL.slice('file://'.length));\n};\n\nconst encodeInput = (input: string) => {\n if (input === '') {\n return 'index.txt';\n }\n if (input === 'index') {\n throw new Error('Input should not be `index`');\n }\n if (input.startsWith('/')) {\n throw new Error('Input should not start with `/`');\n }\n if (input.endsWith('/')) {\n throw new Error('Input should not end with `/`');\n }\n return input + '.txt';\n};\n\nfunction wrapBundle(str: string) {\n // Skip the metro runtime so debugging is a bit easier.\n // Replace the __r() call with an export statement.\n // Use gm to apply to the last require line. This is needed when the bundle has side-effects.\n return str.replace(/^(__r\\(.*\\);)$/gm, 'module.exports = $1');\n}\n"],"names":["createServerComponentsMiddleware","fileURLToFilePath","debug","require","getMetroServerRootMemo","memoize","getMetroServerRoot","projectRoot","rscPath","instanceMetroOptions","ssrLoadModule","ssrLoadModuleArtifacts","useClientRouter","routerModule","rscMiddleware","getRscMiddleware","config","baseUrl","onError","console","error","renderRsc","args","headers","getIpAddress","renderRscToReadableStream","Headers","body","logMetroError","sanitizedServerMessage","stripAnsi","message","Response","status","rscPathPrefix","exportServerActionsAsync","platform","entryPoints","files","uniqueEntryPoints","Set","serverRoot","manifest","nestedClientBoundaries","entryPoint","contents","environment","modulesOnly","runModule","reactClientReferences","artifacts","filter","a","type","metadata","map","ref","push","src","includes","Error","relativeName","path","relative","safeName","basename","find","filename","outputName","set","targetDomain","wrapBundle","JSON","stringify","clientBoundaries","getExpoRouterClientReferencesAsync","domRoot","cssModules","startsWith","reactServerReferences","getExpoRouterRscEntriesGetterAsync","hot","getResolveClientEntry","context","mode","minify","isExporting","routerRoot","asyncRoutes","preserveEnvVars","reactCompiler","lazy","assert","file","isServer","ssrManifest","relativeFilePath","has","chunk","get","id","chunks","searchParams","createBundleUrlSearchParams","mainModuleName","engine","undefined","bytecode","inlineSourceMap","String","clientReferenceUrl","URL","search","toString","filePath","pathname","endsWith","rscRendererCache","Map","getRscRendererAsync","renderer","rscRenderContext","getRscRenderContext","input","method","contentType","decodedBody","entries","resolveClientEntry","loadServerModuleRsc","urlFragment","options","getMetroOptionsFromUrl","join","exportRoutesAsync","getBuildConfig","default","buildConfig","Promise","all","Array","from","isStatic","destRscFile","encodeInput","pipe","rsc","streamToStringAsync","rscId","middleware","createBuiltinAPIRequestHandler","req","getFullUrl","url","onReloadRscEvent","clear","fileURL","decodeURI","slice","length","str","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/createServerComponentsMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport { getRscMiddleware } from '@expo/server/build/middleware/rsc';\nimport assert from 'assert';\nimport path from 'path';\n\nimport { logMetroError } from './metroErrorInterface';\nimport { ExportAssetMap } from '../../../export/saveAssets';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { memoize } from '../../../utils/fn';\nimport { getIpAddress } from '../../../utils/ip';\nimport { streamToStringAsync } from '../../../utils/stream';\nimport { createBuiltinAPIRequestHandler } from '../middleware/createBuiltinAPIRequestHandler';\nimport {\n createBundleUrlSearchParams,\n ExpoMetroOptions,\n getMetroOptionsFromUrl,\n} from '../middleware/metroOptions';\n\nconst debug = require('debug')('expo:rsc') as typeof console.log;\n\ntype SSRLoadModuleArtifactsFunc = (\n filePath: string,\n specificOptions?: Partial<ExpoMetroOptions>\n) => Promise<{ artifacts: SerialAsset[]; src: string }>;\n\ntype SSRLoadModuleFunc = <T extends Record<string, any>>(\n filePath: string,\n specificOptions?: Partial<ExpoMetroOptions>,\n extras?: { hot?: boolean }\n) => Promise<T>;\n\nconst getMetroServerRootMemo = memoize(getMetroServerRoot);\n\nexport function createServerComponentsMiddleware(\n projectRoot: string,\n {\n rscPath,\n instanceMetroOptions,\n ssrLoadModule,\n ssrLoadModuleArtifacts,\n useClientRouter,\n createModuleId,\n }: {\n rscPath: string;\n instanceMetroOptions: Partial<ExpoMetroOptions>;\n ssrLoadModule: SSRLoadModuleFunc;\n ssrLoadModuleArtifacts: SSRLoadModuleArtifactsFunc;\n useClientRouter: boolean;\n createModuleId: (\n filePath: string,\n context: { platform: string; environment: string }\n ) => string | number;\n }\n) {\n const routerModule = useClientRouter\n ? 'expo-router/build/rsc/router/noopRouter'\n : 'expo-router/build/rsc/router/expo-definedRouter';\n\n const rscMiddleware = getRscMiddleware({\n config: {},\n // Disabled in development\n baseUrl: '',\n rscPath,\n onError: console.error,\n renderRsc: async (args) => {\n // In development we should add simulated versions of common production headers.\n if (args.headers['x-real-ip'] == null) {\n args.headers['x-real-ip'] = getIpAddress();\n }\n if (args.headers['x-forwarded-for'] == null) {\n args.headers['x-forwarded-for'] = args.headers['x-real-ip'];\n }\n if (args.headers['x-forwarded-proto'] == null) {\n args.headers['x-forwarded-proto'] = 'http';\n }\n\n // Dev server-only implementation.\n try {\n return await renderRscToReadableStream({\n ...args,\n headers: new Headers(args.headers),\n body: args.body!,\n });\n } catch (error: any) {\n // If you get a codeFrame error during SSR like when using a Class component in React Server Components, then this\n // will throw with:\n // {\n // rawObject: {\n // type: 'TransformError',\n // lineNumber: 0,\n // errors: [ [Object] ],\n // name: 'SyntaxError',\n // message: '...',\n // }\n // }\n\n // TODO: Revisit all error handling now that we do direct metro bundling...\n await logMetroError(projectRoot, { error });\n\n const sanitizedServerMessage = stripAnsi(error.message) ?? error.message;\n throw new Response(sanitizedServerMessage, {\n status: 500,\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n }\n },\n });\n\n let rscPathPrefix = rscPath;\n if (rscPathPrefix !== '/') {\n rscPathPrefix += '/';\n }\n\n async function exportServerActionsAsync(\n {\n platform,\n entryPoints,\n domRoot,\n }: { platform: string; entryPoints: string[]; domRoot?: string },\n files: ExportAssetMap\n ): Promise<{\n clientBoundaries: string[];\n manifest: Record<string, [string, string]>;\n }> {\n const uniqueEntryPoints = [...new Set(entryPoints)];\n // TODO: Support multiple entry points in a single split server bundle...\n const manifest: Record<string, [string, string]> = {};\n const nestedClientBoundaries: string[] = [];\n\n for (const entryPoint of uniqueEntryPoints) {\n const contents = await ssrLoadModuleArtifacts(entryPoint, {\n environment: 'react-server',\n platform,\n // Ignore the metro runtime to avoid overwriting the original in the API route.\n modulesOnly: true,\n // Required\n runModule: true,\n // Required to ensure assets load as client boundaries.\n domRoot,\n });\n\n const reactClientReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactClientReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (reactClientReferences) {\n nestedClientBoundaries.push(...reactClientReferences!);\n }\n\n // Naive check to ensure the module runtime is not included in the server action bundle.\n if (contents.src.includes('The experimental Metro feature')) {\n throw new Error(\n 'Internal error: module runtime should not be included in server action bundles: ' +\n entryPoint\n );\n }\n\n const relativeName = createModuleId(entryPoint, {\n platform,\n environment: 'react-server',\n });\n const safeName = path.basename(contents.artifacts.find((a) => a.type === 'js')!.filename!);\n\n const outputName = `_expo/rsc/${platform}/${safeName}`;\n // While we're here, export the router for the server to dynamically render RSC.\n files.set(outputName, {\n targetDomain: 'server',\n contents: wrapBundle(contents.src),\n });\n\n // Import relative to `dist/server/_expo/rsc/web/router.js`\n manifest[entryPoint] = [String(relativeName), outputName];\n }\n\n // Save the SSR manifest so we can perform more replacements in the server renderer and with server actions.\n files.set(`_expo/rsc/${platform}/action-manifest.js`, {\n targetDomain: 'server',\n contents: 'module.exports = ' + JSON.stringify(manifest),\n });\n\n return { manifest, clientBoundaries: nestedClientBoundaries };\n }\n\n async function getExpoRouterClientReferencesAsync(\n { platform, domRoot }: { platform: string; domRoot?: string },\n files: ExportAssetMap\n ): Promise<{\n reactClientReferences: string[];\n reactServerReferences: string[];\n cssModules: SerialAsset[];\n }> {\n const contents = await ssrLoadModuleArtifacts(routerModule, {\n environment: 'react-server',\n platform,\n modulesOnly: true,\n domRoot,\n });\n\n // Extract the global CSS modules that are imported from the router.\n // These will be injected in the head of the HTML document for the website.\n const cssModules = contents.artifacts.filter((a) => a.type.startsWith('css'));\n\n const reactServerReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactServerReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (!reactServerReferences) {\n throw new Error(\n 'Static server action references were not returned from the Metro SSR bundle for definedRouter'\n );\n }\n debug('React client boundaries:', reactServerReferences);\n\n const reactClientReferences = contents.artifacts\n .filter((a) => a.type === 'js')[0]\n .metadata.reactClientReferences?.map((ref) => fileURLToFilePath(ref));\n\n if (!reactClientReferences) {\n throw new Error(\n 'Static client references were not returned from the Metro SSR bundle for definedRouter'\n );\n }\n debug('React client boundaries:', reactClientReferences);\n\n // While we're here, export the router for the server to dynamically render RSC.\n files.set(`_expo/rsc/${platform}/router.js`, {\n targetDomain: 'server',\n contents: wrapBundle(contents.src),\n });\n\n return { reactClientReferences, reactServerReferences, cssModules };\n }\n\n async function getExpoRouterRscEntriesGetterAsync({ platform }: { platform: string }) {\n return ssrLoadModule<typeof import('expo-router/build/rsc/router/expo-definedRouter')>(\n routerModule,\n {\n environment: 'react-server',\n platform,\n },\n {\n hot: true,\n }\n );\n }\n\n function getResolveClientEntry(context: {\n platform: string;\n engine?: 'hermes' | null;\n ssrManifest?: Map<string, string>;\n }): (\n file: string,\n isServer: boolean\n ) => {\n id: string;\n chunks: string[];\n } {\n const serverRoot = getMetroServerRootMemo(projectRoot);\n\n const {\n mode,\n minify = false,\n isExporting,\n baseUrl,\n routerRoot,\n asyncRoutes,\n preserveEnvVars,\n reactCompiler,\n lazy,\n } = instanceMetroOptions;\n\n assert(\n isExporting != null &&\n baseUrl != null &&\n mode != null &&\n routerRoot != null &&\n asyncRoutes != null,\n `The server must be started. (isExporting: ${isExporting}, baseUrl: ${baseUrl}, mode: ${mode}, routerRoot: ${routerRoot}, asyncRoutes: ${asyncRoutes})`\n );\n\n return (file: string, isServer: boolean) => {\n if (isExporting) {\n assert(context.ssrManifest, 'SSR manifest must exist when exporting');\n const relativeFilePath = path.relative(serverRoot, file);\n\n assert(\n context.ssrManifest.has(relativeFilePath),\n `SSR manifest is missing client boundary \"${relativeFilePath}\"`\n );\n\n const chunk = context.ssrManifest.get(relativeFilePath);\n\n return {\n id: String(createModuleId(file, { platform: context.platform, environment: 'client' })),\n chunks: chunk != null ? [chunk] : [],\n };\n }\n\n const environment = isServer ? 'react-server' : 'client';\n const searchParams = createBundleUrlSearchParams({\n mainModuleName: '',\n platform: context.platform,\n mode,\n minify,\n lazy,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n reactCompiler: !!reactCompiler,\n engine: context.engine ?? undefined,\n bytecode: false,\n clientBoundaries: [],\n inlineSourceMap: false,\n environment,\n modulesOnly: true,\n runModule: false,\n });\n\n searchParams.set('resolver.clientboundary', String(true));\n\n const clientReferenceUrl = new URL('http://a');\n\n // TICKLE: Handshake 1\n searchParams.set('xRSC', '1');\n\n clientReferenceUrl.search = searchParams.toString();\n\n const filePath = file.startsWith('file://') ? fileURLToFilePath(file) : file;\n\n const relativeFilePath = path.relative(serverRoot, filePath);\n\n clientReferenceUrl.pathname = relativeFilePath;\n\n // Ensure url.pathname ends with '.bundle'\n if (!clientReferenceUrl.pathname.endsWith('.bundle')) {\n clientReferenceUrl.pathname += '.bundle';\n }\n\n // Return relative URLs to help Android fetch from wherever it was loaded from since it doesn't support localhost.\n const chunkName = clientReferenceUrl.pathname + clientReferenceUrl.search;\n\n return {\n id: String(createModuleId(filePath, { platform: context.platform, environment })),\n chunks: [chunkName],\n };\n };\n }\n\n const rscRendererCache = new Map<string, typeof import('expo-router/build/rsc/rsc-renderer')>();\n\n async function getRscRendererAsync(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRendererCache.has(platform)) {\n return rscRendererCache.get(platform)!;\n }\n\n // TODO: Extract CSS Modules / Assets from the bundler process\n const renderer = await ssrLoadModule<typeof import('expo-router/build/rsc/rsc-renderer')>(\n 'expo-router/build/rsc/rsc-renderer',\n {\n environment: 'react-server',\n platform,\n }\n );\n\n rscRendererCache.set(platform, renderer);\n return renderer;\n }\n\n const rscRenderContext = new Map<string, any>();\n\n function getRscRenderContext(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRenderContext.has(platform)) {\n return rscRenderContext.get(platform)!;\n }\n\n const context = {};\n\n rscRenderContext.set(platform, context);\n return context;\n }\n\n async function renderRscToReadableStream(\n {\n input,\n headers,\n method,\n platform,\n body,\n engine,\n contentType,\n ssrManifest,\n decodedBody,\n }: {\n input: string;\n headers: Headers;\n method: 'POST' | 'GET';\n platform: string;\n body?: ReadableStream<Uint8Array>;\n engine?: 'hermes' | null;\n contentType?: string;\n ssrManifest?: Map<string, string>;\n decodedBody?: unknown;\n },\n isExporting: boolean | undefined = instanceMetroOptions.isExporting\n ) {\n assert(\n isExporting != null,\n 'The server must be started before calling renderRscToReadableStream.'\n );\n\n if (method === 'POST') {\n assert(body, 'Server request must be provided when method is POST (server actions)');\n }\n\n const context = getRscRenderContext(platform);\n\n context['__expo_requestHeaders'] = headers;\n\n const { renderRsc } = await getRscRendererAsync(platform);\n\n return renderRsc(\n {\n body,\n decodedBody,\n context,\n config: {},\n input,\n contentType,\n },\n {\n isExporting,\n entries: await getExpoRouterRscEntriesGetterAsync({ platform }),\n resolveClientEntry: getResolveClientEntry({ platform, engine, ssrManifest }),\n async loadServerModuleRsc(urlFragment) {\n const serverRoot = getMetroServerRootMemo(projectRoot);\n\n debug('[SSR] loadServerModuleRsc:', urlFragment);\n\n const options = getMetroOptionsFromUrl(urlFragment);\n\n return ssrLoadModule(path.join(serverRoot, options.mainModuleName), options);\n },\n }\n );\n }\n\n return {\n // Get the static client boundaries (no dead code elimination allowed) for the production export.\n getExpoRouterClientReferencesAsync,\n exportServerActionsAsync,\n\n async exportRoutesAsync(\n {\n platform,\n ssrManifest,\n }: {\n platform: string;\n ssrManifest: Map<string, string>;\n },\n files: ExportAssetMap\n ) {\n // TODO: When we add web SSR support, we need to extract CSS Modules / Assets from the bundler process to prevent FLOUC.\n const { getBuildConfig } = (await getExpoRouterRscEntriesGetterAsync({ platform })).default;\n\n // Get all the routes to render.\n const buildConfig = await getBuildConfig!(async () =>\n // TODO: Rework prefetching code to use Metro runtime.\n []\n );\n\n await Promise.all(\n Array.from(buildConfig).map(async ({ entries }) => {\n for (const { input, isStatic } of entries || []) {\n if (!isStatic) {\n debug('Skipping static export for route', { input });\n continue;\n }\n const destRscFile = path.join('_flight', platform, encodeInput(input));\n\n const pipe = await renderRscToReadableStream(\n {\n input,\n method: 'GET',\n platform,\n headers: new Headers(),\n ssrManifest,\n },\n true\n );\n\n const rsc = await streamToStringAsync(pipe);\n debug('RSC Payload', { platform, input, rsc });\n\n files.set(destRscFile, {\n contents: rsc,\n targetDomain: 'client',\n rscId: input,\n });\n }\n })\n );\n },\n\n middleware: createBuiltinAPIRequestHandler(\n // Match `/_flight/[platform]/[...path]`\n (req) => {\n return getFullUrl(req.url).pathname.startsWith(rscPathPrefix);\n },\n rscMiddleware\n ),\n onReloadRscEvent: () => {\n // NOTE: We cannot clear the renderer context because it would break the mounted context state.\n\n // Clear the render context to ensure that the next render is a fresh start.\n rscRenderContext.clear();\n },\n };\n}\n\nconst getFullUrl = (url: string) => {\n try {\n return new URL(url);\n } catch {\n return new URL(url, 'http://localhost:0');\n }\n};\n\nexport const fileURLToFilePath = (fileURL: string) => {\n if (!fileURL.startsWith('file://')) {\n throw new Error('Not a file URL');\n }\n return decodeURI(fileURL.slice('file://'.length));\n};\n\nconst encodeInput = (input: string) => {\n if (input === '') {\n return 'index.txt';\n }\n if (input === 'index') {\n throw new Error('Input should not be `index`');\n }\n if (input.startsWith('/')) {\n throw new Error('Input should not start with `/`');\n }\n if (input.endsWith('/')) {\n throw new Error('Input should not end with `/`');\n }\n return input + '.txt';\n};\n\nfunction wrapBundle(str: string) {\n // Skip the metro runtime so debugging is a bit easier.\n // Replace the __r() call with an export statement.\n // Use gm to apply to the last require line. This is needed when the bundle has side-effects.\n return str.replace(/^(__r\\(.*\\);)$/gm, 'module.exports = $1');\n}\n"],"names":["createServerComponentsMiddleware","fileURLToFilePath","debug","require","getMetroServerRootMemo","memoize","getMetroServerRoot","projectRoot","rscPath","instanceMetroOptions","ssrLoadModule","ssrLoadModuleArtifacts","useClientRouter","createModuleId","routerModule","rscMiddleware","getRscMiddleware","config","baseUrl","onError","console","error","renderRsc","args","headers","getIpAddress","renderRscToReadableStream","Headers","body","logMetroError","sanitizedServerMessage","stripAnsi","message","Response","status","rscPathPrefix","exportServerActionsAsync","platform","entryPoints","domRoot","files","uniqueEntryPoints","Set","manifest","nestedClientBoundaries","entryPoint","contents","environment","modulesOnly","runModule","reactClientReferences","artifacts","filter","a","type","metadata","map","ref","push","src","includes","Error","relativeName","safeName","path","basename","find","filename","outputName","set","targetDomain","wrapBundle","String","JSON","stringify","clientBoundaries","getExpoRouterClientReferencesAsync","cssModules","startsWith","reactServerReferences","getExpoRouterRscEntriesGetterAsync","hot","getResolveClientEntry","context","serverRoot","mode","minify","isExporting","routerRoot","asyncRoutes","preserveEnvVars","reactCompiler","lazy","assert","file","isServer","ssrManifest","relativeFilePath","relative","has","chunk","get","id","chunks","searchParams","createBundleUrlSearchParams","mainModuleName","engine","undefined","bytecode","inlineSourceMap","clientReferenceUrl","URL","search","toString","filePath","pathname","endsWith","chunkName","rscRendererCache","Map","getRscRendererAsync","renderer","rscRenderContext","getRscRenderContext","input","method","contentType","decodedBody","entries","resolveClientEntry","loadServerModuleRsc","urlFragment","options","getMetroOptionsFromUrl","join","exportRoutesAsync","getBuildConfig","default","buildConfig","Promise","all","Array","from","isStatic","destRscFile","encodeInput","pipe","rsc","streamToStringAsync","rscId","middleware","createBuiltinAPIRequestHandler","req","getFullUrl","url","onReloadRscEvent","clear","fileURL","decodeURI","slice","length","str","replace"],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ class AtlasPrerequisite extends _prerequisite.ProjectPrerequisite {
|
|
|
30
30
|
warningMessage: "Expo Atlas is not installed in this project, unable to gather bundle information.",
|
|
31
31
|
requiredPackages: [
|
|
32
32
|
{
|
|
33
|
-
version: "^0.
|
|
33
|
+
version: "^0.4.0",
|
|
34
34
|
pkg: "expo-atlas",
|
|
35
35
|
file: "expo-atlas/package.json",
|
|
36
36
|
dev: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/AtlasPrerequisite.ts"],"sourcesContent":["import { ProjectPrerequisite } from '../../../doctor/Prerequisite';\nimport {\n type EnsureDependenciesOptions,\n ensureDependenciesAsync,\n} from '../../../doctor/dependencies/ensureDependenciesAsync';\n\nexport class AtlasPrerequisite extends ProjectPrerequisite<\n boolean,\n Pick<EnsureDependenciesOptions, 'exp'>\n> {\n async assertImplementation({ exp }: Pick<EnsureDependenciesOptions, 'exp'> = {}) {\n await this.ensureAtlasInstalled({ exp });\n return true;\n }\n\n async bootstrapAsync({ exp }: Pick<EnsureDependenciesOptions, 'exp'> = {}) {\n await this.ensureAtlasInstalled({ exp, skipPrompt: true, isProjectMutable: true });\n }\n\n private async ensureAtlasInstalled(options: Partial<EnsureDependenciesOptions> = {}) {\n try {\n return await ensureDependenciesAsync(this.projectRoot, {\n ...options,\n installMessage:\n 'Expo Atlas is required to gather bundle information, but it is not installed in this project.',\n warningMessage:\n 'Expo Atlas is not installed in this project, unable to gather bundle information.',\n requiredPackages: [\n { version: '^0.
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/AtlasPrerequisite.ts"],"sourcesContent":["import { ProjectPrerequisite } from '../../../doctor/Prerequisite';\nimport {\n type EnsureDependenciesOptions,\n ensureDependenciesAsync,\n} from '../../../doctor/dependencies/ensureDependenciesAsync';\n\nexport class AtlasPrerequisite extends ProjectPrerequisite<\n boolean,\n Pick<EnsureDependenciesOptions, 'exp'>\n> {\n async assertImplementation({ exp }: Pick<EnsureDependenciesOptions, 'exp'> = {}) {\n await this.ensureAtlasInstalled({ exp });\n return true;\n }\n\n async bootstrapAsync({ exp }: Pick<EnsureDependenciesOptions, 'exp'> = {}) {\n await this.ensureAtlasInstalled({ exp, skipPrompt: true, isProjectMutable: true });\n }\n\n private async ensureAtlasInstalled(options: Partial<EnsureDependenciesOptions> = {}) {\n try {\n return await ensureDependenciesAsync(this.projectRoot, {\n ...options,\n installMessage:\n 'Expo Atlas is required to gather bundle information, but it is not installed in this project.',\n warningMessage:\n 'Expo Atlas is not installed in this project, unable to gather bundle information.',\n requiredPackages: [\n { version: '^0.4.0', pkg: 'expo-atlas', file: 'expo-atlas/package.json', dev: true },\n ],\n });\n } catch (error) {\n this.resetAssertion({});\n throw error;\n }\n }\n}\n"],"names":["AtlasPrerequisite","ProjectPrerequisite","assertImplementation","exp","ensureAtlasInstalled","bootstrapAsync","skipPrompt","isProjectMutable","options","ensureDependenciesAsync","projectRoot","installMessage","warningMessage","requiredPackages","version","pkg","file","dev","error","resetAssertion"],"mappings":"AAAA;;;;+BAMaA,mBAAiB;;aAAjBA,iBAAiB;;8BANM,8BAA8B;yCAI3D,sDAAsD;AAEtD,MAAMA,iBAAiB,SAASC,aAAmB,oBAAA;UAIlDC,oBAAoB,CAAC,EAAEC,GAAG,CAAA,EAA0C,GAAG,EAAE,EAAE;QAC/E,MAAM,IAAI,CAACC,oBAAoB,CAAC;YAAED,GAAG;SAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd;UAEME,cAAc,CAAC,EAAEF,GAAG,CAAA,EAA0C,GAAG,EAAE,EAAE;QACzE,MAAM,IAAI,CAACC,oBAAoB,CAAC;YAAED,GAAG;YAAEG,UAAU,EAAE,IAAI;YAAEC,gBAAgB,EAAE,IAAI;SAAE,CAAC,CAAC;IACrF;UAEcH,oBAAoB,CAACI,OAA2C,GAAG,EAAE,EAAE;QACnF,IAAI;YACF,OAAO,MAAMC,IAAAA,wBAAuB,wBAAA,EAAC,IAAI,CAACC,WAAW,EAAE;gBACrD,GAAGF,OAAO;gBACVG,cAAc,EACZ,+FAA+F;gBACjGC,cAAc,EACZ,mFAAmF;gBACrFC,gBAAgB,EAAE;oBAChB;wBAAEC,OAAO,EAAE,QAAQ;wBAAEC,GAAG,EAAE,YAAY;wBAAEC,IAAI,EAAE,yBAAyB;wBAAEC,GAAG,EAAE,IAAI;qBAAE;iBACrF;aACF,CAAC,CAAC;QACL,EAAE,OAAOC,KAAK,EAAE;YACd,IAAI,CAACC,cAAc,CAAC,EAAE,CAAC,CAAC;YACxB,MAAMD,KAAK,CAAC;QACd,CAAC;IACH;CACD"}
|
|
@@ -41,6 +41,27 @@ function _chalk() {
|
|
|
41
41
|
};
|
|
42
42
|
return data;
|
|
43
43
|
}
|
|
44
|
+
function _hmrJSBundle() {
|
|
45
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("metro/src/DeltaBundler/Serializers/hmrJSBundle"));
|
|
46
|
+
_hmrJSBundle = function() {
|
|
47
|
+
return data;
|
|
48
|
+
};
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
function _revisionNotFoundError() {
|
|
52
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("metro/src/IncrementalBundler/RevisionNotFoundError"));
|
|
53
|
+
_revisionNotFoundError = function() {
|
|
54
|
+
return data;
|
|
55
|
+
};
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
function _formatBundlingError() {
|
|
59
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("metro/src/lib/formatBundlingError"));
|
|
60
|
+
_formatBundlingError = function() {
|
|
61
|
+
return data;
|
|
62
|
+
};
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
44
65
|
function _metroConfig1() {
|
|
45
66
|
const data = require("metro-config");
|
|
46
67
|
_metroConfig1 = function() {
|
|
@@ -62,6 +83,13 @@ function _nodeUtil() {
|
|
|
62
83
|
};
|
|
63
84
|
return data;
|
|
64
85
|
}
|
|
86
|
+
function _path() {
|
|
87
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
88
|
+
_path = function() {
|
|
89
|
+
return data;
|
|
90
|
+
};
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
65
93
|
const _devToolsPluginWebsocketEndpoint = require("./DevToolsPluginWebsocketEndpoint");
|
|
66
94
|
const _metroTerminalReporter = require("./MetroTerminalReporter");
|
|
67
95
|
const _attachAtlas = require("./debugging/attachAtlas");
|
|
@@ -101,12 +129,12 @@ const terminal = new LogRespectingTerminal(process.stdout);
|
|
|
101
129
|
async function loadMetroConfigAsync(projectRoot, options, { exp , isExporting , getMetroBundler }) {
|
|
102
130
|
var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
|
|
103
131
|
let reportEvent;
|
|
104
|
-
const serverActionsEnabled = ((ref = exp.experiments) == null ? void 0 : ref.
|
|
132
|
+
const serverActionsEnabled = ((ref = exp.experiments) == null ? void 0 : ref.reactServerFunctions) ?? _env.env.EXPO_UNSTABLE_SERVER_FUNCTIONS;
|
|
105
133
|
if (serverActionsEnabled) {
|
|
106
|
-
process.env.
|
|
134
|
+
process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS = "1";
|
|
107
135
|
}
|
|
108
136
|
// NOTE: Enable all the experimental Metro flags when RSC is enabled.
|
|
109
|
-
if (((ref1 = exp.experiments) == null ? void 0 : ref1.
|
|
137
|
+
if (((ref1 = exp.experiments) == null ? void 0 : ref1.reactServerComponentRoutes) || serverActionsEnabled) {
|
|
110
138
|
process.env.EXPO_USE_METRO_REQUIRE = "1";
|
|
111
139
|
process.env.EXPO_USE_FAST_RESOLVER = "1";
|
|
112
140
|
}
|
|
@@ -155,9 +183,9 @@ async function loadMetroConfigAsync(projectRoot, options, { exp , isExporting ,
|
|
|
155
183
|
}
|
|
156
184
|
if (serverActionsEnabled) {
|
|
157
185
|
var ref9;
|
|
158
|
-
_log.Log.warn(`Experimental React Server
|
|
159
|
-
if (!((ref9 = exp.experiments) == null ? void 0 : ref9.
|
|
160
|
-
_log.Log.warn(`- React Server
|
|
186
|
+
_log.Log.warn(`Experimental React Server Functions are enabled. Production exports are not supported yet.`);
|
|
187
|
+
if (!((ref9 = exp.experiments) == null ? void 0 : ref9.reactServerComponentRoutes)) {
|
|
188
|
+
_log.Log.warn(`- React Server Component routes are NOT enabled. Routes will render in client mode.`);
|
|
161
189
|
}
|
|
162
190
|
}
|
|
163
191
|
config = await (0, _withMetroMultiPlatform.withMetroMultiPlatformAsync)(projectRoot, {
|
|
@@ -167,9 +195,9 @@ async function loadMetroConfigAsync(projectRoot, options, { exp , isExporting ,
|
|
|
167
195
|
isTsconfigPathsEnabled: ((ref4 = exp.experiments) == null ? void 0 : ref4.tsconfigPaths) ?? true,
|
|
168
196
|
isFastResolverEnabled: _env.env.EXPO_USE_FAST_RESOLVER,
|
|
169
197
|
isExporting,
|
|
170
|
-
isReactCanaryEnabled: (((ref5 = exp.experiments) == null ? void 0 : ref5.
|
|
198
|
+
isReactCanaryEnabled: (((ref5 = exp.experiments) == null ? void 0 : ref5.reactServerComponentRoutes) || serverActionsEnabled || ((ref6 = exp.experiments) == null ? void 0 : ref6.reactCanary)) ?? false,
|
|
171
199
|
isNamedRequiresEnabled: _env.env.EXPO_USE_METRO_REQUIRE,
|
|
172
|
-
isReactServerComponentsEnabled: !!((ref7 = exp.experiments) == null ? void 0 : ref7.
|
|
200
|
+
isReactServerComponentsEnabled: !!((ref7 = exp.experiments) == null ? void 0 : ref7.reactServerComponentRoutes),
|
|
173
201
|
getMetroBundler
|
|
174
202
|
});
|
|
175
203
|
return {
|
|
@@ -243,6 +271,90 @@ async function instantiateMetroAsync(metroBundler, options, { isExporting , exp
|
|
|
243
271
|
}), fileBuffer);
|
|
244
272
|
};
|
|
245
273
|
setEventReporter(eventsSocket.reportMetroEvent);
|
|
274
|
+
// This function ensures that modules in source maps are sorted in the same
|
|
275
|
+
// order as in a plain JS bundle.
|
|
276
|
+
metro._getSortedModules = function(graph) {
|
|
277
|
+
var ref;
|
|
278
|
+
const modules = [
|
|
279
|
+
...graph.dependencies.values()
|
|
280
|
+
];
|
|
281
|
+
const ctx = {
|
|
282
|
+
platform: graph.transformOptions.platform,
|
|
283
|
+
environment: (ref = graph.transformOptions.customTransformOptions) == null ? void 0 : ref.environment
|
|
284
|
+
};
|
|
285
|
+
// Assign IDs to modules in a consistent order
|
|
286
|
+
for (const module of modules){
|
|
287
|
+
// @ts-expect-error
|
|
288
|
+
this._createModuleId(module.path, ctx);
|
|
289
|
+
}
|
|
290
|
+
// Sort by IDs
|
|
291
|
+
return modules.sort(// @ts-expect-error
|
|
292
|
+
(a, b)=>this._createModuleId(a.path, ctx) - this._createModuleId(b.path, ctx));
|
|
293
|
+
};
|
|
294
|
+
if (hmrServer) {
|
|
295
|
+
// Patch HMR Server to send more info to the `_createModuleId` function for deterministic module IDs.
|
|
296
|
+
hmrServer._prepareMessage = async function(group, options, changeEvent) {
|
|
297
|
+
// Fork of https://github.com/facebook/metro/blob/3b3e0aaf725cfa6907bf2c8b5fbc0da352d29efe/packages/metro/src/HmrServer.js#L327-L393
|
|
298
|
+
// with patch for `_createModuleId`.
|
|
299
|
+
const logger = !options.isInitialUpdate ? changeEvent == null ? void 0 : changeEvent.logger : null;
|
|
300
|
+
try {
|
|
301
|
+
var ref;
|
|
302
|
+
const revPromise = this._bundler.getRevision(group.revisionId);
|
|
303
|
+
if (!revPromise) {
|
|
304
|
+
return {
|
|
305
|
+
type: "error",
|
|
306
|
+
body: (0, _formatBundlingError().default)(new (_revisionNotFoundError()).default(group.revisionId))
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
logger == null ? void 0 : logger.point("updateGraph_start");
|
|
310
|
+
const { revision , delta } = await this._bundler.updateGraph(await revPromise, false);
|
|
311
|
+
logger == null ? void 0 : logger.point("updateGraph_end");
|
|
312
|
+
this._clientGroups.delete(group.revisionId);
|
|
313
|
+
group.revisionId = revision.id;
|
|
314
|
+
for (const client of group.clients){
|
|
315
|
+
client.revisionIds = client.revisionIds.filter((revisionId)=>revisionId !== group.revisionId);
|
|
316
|
+
client.revisionIds.push(revision.id);
|
|
317
|
+
}
|
|
318
|
+
this._clientGroups.set(group.revisionId, group);
|
|
319
|
+
logger == null ? void 0 : logger.point("serialize_start");
|
|
320
|
+
// NOTE(EvanBacon): This is the patch
|
|
321
|
+
const moduleIdContext = {
|
|
322
|
+
platform: revision.graph.transformOptions.platform,
|
|
323
|
+
environment: (ref = revision.graph.transformOptions.customTransformOptions) == null ? void 0 : ref.environment
|
|
324
|
+
};
|
|
325
|
+
const hmrUpdate = (0, _hmrJSBundle().default)(delta, revision.graph, {
|
|
326
|
+
clientUrl: group.clientUrl,
|
|
327
|
+
// NOTE(EvanBacon): This is also the patch
|
|
328
|
+
createModuleId: (moduleId)=>{
|
|
329
|
+
// @ts-expect-error
|
|
330
|
+
return this._createModuleId(moduleId, moduleIdContext);
|
|
331
|
+
},
|
|
332
|
+
includeAsyncPaths: group.graphOptions.lazy,
|
|
333
|
+
projectRoot: this._config.projectRoot,
|
|
334
|
+
serverRoot: this._config.server.unstable_serverRoot ?? this._config.projectRoot
|
|
335
|
+
});
|
|
336
|
+
logger == null ? void 0 : logger.point("serialize_end");
|
|
337
|
+
return {
|
|
338
|
+
type: "update",
|
|
339
|
+
body: {
|
|
340
|
+
revisionId: revision.id,
|
|
341
|
+
isInitialUpdate: options.isInitialUpdate,
|
|
342
|
+
...hmrUpdate
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
} catch (error) {
|
|
346
|
+
const formattedError = (0, _formatBundlingError().default)(error);
|
|
347
|
+
this._config.reporter.update({
|
|
348
|
+
type: "bundling_error",
|
|
349
|
+
error
|
|
350
|
+
});
|
|
351
|
+
return {
|
|
352
|
+
type: "error",
|
|
353
|
+
body: formattedError
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
}
|
|
246
358
|
return {
|
|
247
359
|
metro,
|
|
248
360
|
hmrServer,
|
|
@@ -254,6 +366,8 @@ async function instantiateMetroAsync(metroBundler, options, { isExporting , exp
|
|
|
254
366
|
// TODO: Fork the entire transform function so we can simply regex the file contents for keywords instead.
|
|
255
367
|
function pruneCustomTransformOptions(filePath, transformOptions) {
|
|
256
368
|
var ref, ref1, ref2, ref3;
|
|
369
|
+
// Normalize the filepath for cross platform checking.
|
|
370
|
+
filePath = filePath.split(_path().default.sep).join("/");
|
|
257
371
|
if (((ref = transformOptions.customTransformOptions) == null ? void 0 : ref.dom) && // The only generated file that needs the dom root is `expo/dom/entry.js`
|
|
258
372
|
!filePath.match(/expo\/dom\/entry\.js$/)) {
|
|
259
373
|
// Clear the dom root option if we aren't transforming the magic entry file, this ensures
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport { getDefaultConfig, LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport Bundler from 'metro/src/Bundler';\nimport type { TransformOptions } from 'metro/src/DeltaBundler/Worker';\nimport MetroHmrServer from 'metro/src/HmrServer';\nimport { loadConfig, resolveConfig, ConfigT } from 'metro-config';\nimport { Terminal } from 'metro-core';\nimport util from 'node:util';\n\nimport { createDevToolsPluginWebsocketEndpoint } from './DevToolsPluginWebsocketEndpoint';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { attachAtlasAsync } from './debugging/attachAtlas';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { createMetroMiddleware } from './dev-server/createMetroMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { Log } from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { createCorsMiddleware } from '../middleware/CorsMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\n// Wrap terminal and polyfill console.log so we can log during bundling without breaking the indicator.\nclass LogRespectingTerminal extends Terminal {\n constructor(stream: import('node:net').Socket | import('node:stream').Writable) {\n super(stream);\n\n const sendLog = (...args: any[]) => {\n this._logLines.push(\n // format args like console.log\n util.format(...args)\n );\n this._scheduleUpdate();\n\n // Flush the logs to the terminal immediately so logs at the end of the process are not lost.\n this.flush();\n };\n\n console.log = sendLog;\n console.info = sendLog;\n }\n}\n\n// Share one instance of Terminal for all instances of Metro.\nconst terminal = new LogRespectingTerminal(process.stdout);\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp,\n isExporting,\n getMetroBundler,\n }: { exp: ExpoConfig; isExporting: boolean; getMetroBundler: () => Bundler }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n\n const serverActionsEnabled =\n exp.experiments?.reactServerActions ?? env.EXPO_UNSTABLE_SERVER_ACTIONS;\n\n if (serverActionsEnabled) {\n process.env.EXPO_UNSTABLE_SERVER_ACTIONS = '1';\n }\n\n // NOTE: Enable all the experimental Metro flags when RSC is enabled.\n if (exp.experiments?.reactServerComponents || serverActionsEnabled) {\n process.env.EXPO_USE_METRO_REQUIRE = '1';\n process.env.EXPO_USE_FAST_RESOLVER = '1';\n }\n\n const serverRoot = getMetroServerRoot(projectRoot);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const hasConfig = await resolveConfig(options.config, projectRoot);\n let config: ConfigT = {\n ...(await loadConfig(\n { cwd: projectRoot, projectRoot, ...options },\n // If the project does not have a metro.config.js, then we use the default config.\n hasConfig.isEmpty ? getDefaultConfig(projectRoot) : undefined\n )),\n reporter: {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n },\n };\n\n // @ts-expect-error: Set the global require cycle ignore patterns for SSR bundles. This won't work with custom global prefixes, but we don't use those.\n globalThis.__requireCycleIgnorePatterns = config.resolver?.requireCycleIgnorePatterns;\n\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n if (exp.experiments?.reactCompiler) {\n Log.warn(`Experimental React Compiler is enabled.`);\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING && !env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n throw new CommandError(\n 'EXPO_UNSTABLE_TREE_SHAKING requires EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH to be enabled.'\n );\n }\n\n if (env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n Log.warn(`Experimental bundle optimization is enabled.`);\n }\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental tree shaking is enabled.`);\n }\n\n if (serverActionsEnabled) {\n Log.warn(\n `Experimental React Server Actions are enabled. Production exports are not supported yet.`\n );\n if (!exp.experiments?.reactServerComponents) {\n Log.warn(\n `- React Server Components are NOT enabled. Routes will render in client-only mode.`\n );\n }\n }\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n isReactCanaryEnabled:\n (exp.experiments?.reactServerComponents ||\n serverActionsEnabled ||\n exp.experiments?.reactCanary) ??\n false,\n isNamedRequiresEnabled: env.EXPO_USE_METRO_REQUIRE,\n isReactServerComponentsEnabled: !!exp.experiments?.reactServerComponents,\n getMetroBundler,\n });\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<LoadOptions, 'logger'>,\n {\n isExporting,\n exp = getConfig(metroBundler.projectRoot, {\n skipSDKVersionRequirement: true,\n }).exp,\n }: { isExporting: boolean; exp?: ExpoConfig }\n): Promise<{\n metro: Metro.Server;\n hmrServer: MetroHmrServer | null;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n {\n exp,\n isExporting,\n getMetroBundler() {\n return metro.getBundler().getBundler();\n },\n }\n );\n\n // Create the core middleware stack for Metro, including websocket listeners\n const { middleware, messagesSocket, eventsSocket, websocketEndpoints } =\n createMetroMiddleware(metroConfig);\n\n if (!isExporting) {\n // Enable correct CORS headers for Expo Router features\n prependMiddleware(middleware, createCorsMiddleware(exp));\n\n // Enable debug middleware for CDP-related debugging\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n Object.assign(websocketEndpoints, debugWebsocketEndpoints);\n middleware.use(debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n // TODO(cedric): `enhanceMiddleware` is deprecated, but is currently used to unify the middleware stacks\n // See: https://github.com/facebook/metro/commit/22e85fde85ec454792a1b70eba4253747a2587a9\n // See: https://github.com/facebook/metro/commit/d0d554381f119bb80ab09dbd6a1d310b54737e52\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n }\n\n // Attach Expo Atlas if enabled\n await attachAtlasAsync({\n isExporting,\n exp,\n projectRoot,\n middleware,\n metroConfig,\n // NOTE(cedric): reset the Atlas file once, and reuse it for static exports\n resetAtlasFile: isExporting,\n });\n\n const { server, hmrServer, metro } = await runServer(\n metroBundler,\n metroConfig,\n {\n websocketEndpoints: {\n ...websocketEndpoints,\n ...createDevToolsPluginWebsocketEndpoint(),\n },\n watch: !isExporting && isWatchEnabled(),\n },\n {\n mockServer: isExporting,\n }\n );\n\n // Patch transform file to remove inconvenient customTransformOptions which are only used in single well-known files.\n const originalTransformFile = metro\n .getBundler()\n .getBundler()\n .transformFile.bind(metro.getBundler().getBundler());\n\n metro.getBundler().getBundler().transformFile = async function (\n filePath: string,\n transformOptions: TransformOptions,\n fileBuffer?: Buffer\n ) {\n return originalTransformFile(\n filePath,\n pruneCustomTransformOptions(\n filePath,\n // Clone the options so we don't mutate the original.\n {\n ...transformOptions,\n customTransformOptions: {\n __proto__: null,\n ...transformOptions.customTransformOptions,\n },\n }\n ),\n fileBuffer\n );\n };\n\n setEventReporter(eventsSocket.reportMetroEvent);\n\n return {\n metro,\n hmrServer,\n server,\n middleware,\n messageSocket: messagesSocket,\n };\n}\n\n// TODO: Fork the entire transform function so we can simply regex the file contents for keywords instead.\nfunction pruneCustomTransformOptions(\n filePath: string,\n transformOptions: TransformOptions\n): TransformOptions {\n if (\n transformOptions.customTransformOptions?.dom &&\n // The only generated file that needs the dom root is `expo/dom/entry.js`\n !filePath.match(/expo\\/dom\\/entry\\.js$/)\n ) {\n // Clear the dom root option if we aren't transforming the magic entry file, this ensures\n // that cached artifacts from other DOM component bundles can be reused.\n transformOptions.customTransformOptions.dom = 'true';\n }\n\n if (\n transformOptions.customTransformOptions?.routerRoot &&\n // The router root is used all over expo-router (`process.env.EXPO_ROUTER_ABS_APP_ROOT`, `process.env.EXPO_ROUTER_APP_ROOT`) so we'll just ignore the entire package.\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n // Set to the default value.\n transformOptions.customTransformOptions.routerRoot = 'app';\n }\n if (\n transformOptions.customTransformOptions?.asyncRoutes &&\n // The async routes settings are also used in `expo-router/_ctx.ios.js` (and other platform variants) via `process.env.EXPO_ROUTER_IMPORT_MODE`\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n delete transformOptions.customTransformOptions.asyncRoutes;\n }\n\n if (\n transformOptions.customTransformOptions?.clientBoundaries &&\n // The client boundaries are only used in `@expo/metro-runtime/src/virtual.js` for production RSC exports.\n !filePath.match(/\\/@expo\\/metro-runtime\\/rsc\\/virtual\\.js$/)\n ) {\n delete transformOptions.customTransformOptions.clientBoundaries;\n }\n\n return transformOptions;\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","LogRespectingTerminal","Terminal","constructor","stream","sendLog","args","_logLines","push","util","format","_scheduleUpdate","flush","console","log","info","terminal","process","stdout","projectRoot","options","exp","isExporting","getMetroBundler","config","reportEvent","serverActionsEnabled","experiments","reactServerActions","env","EXPO_UNSTABLE_SERVER_ACTIONS","reactServerComponents","EXPO_USE_METRO_REQUIRE","EXPO_USE_FAST_RESOLVER","serverRoot","getMetroServerRoot","terminalReporter","MetroTerminalReporter","hasConfig","resolveConfig","loadConfig","cwd","isEmpty","getDefaultConfig","undefined","reporter","update","event","globalThis","__requireCycleIgnorePatterns","resolver","requireCycleIgnorePatterns","transformer","publicPath","baseUrl","platformBundlers","getPlatformBundlers","reactCompiler","Log","warn","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","CommandError","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","isFastResolverEnabled","isReactCanaryEnabled","reactCanary","isNamedRequiresEnabled","isReactServerComponentsEnabled","setEventReporter","logger","metroBundler","getConfig","skipSDKVersionRequirement","metroConfig","metro","getBundler","middleware","messagesSocket","eventsSocket","websocketEndpoints","createMetroMiddleware","prependMiddleware","createCorsMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","Object","assign","use","createJsInspectorMiddleware","customEnhanceMiddleware","server","enhanceMiddleware","metroMiddleware","attachAtlasAsync","resetAtlasFile","hmrServer","runServer","createDevToolsPluginWebsocketEndpoint","watch","mockServer","originalTransformFile","transformFile","bind","filePath","transformOptions","fileBuffer","pruneCustomTransformOptions","customTransformOptions","__proto__","reportMetroEvent","messageSocket","dom","match","routerRoot","asyncRoutes","clientBoundaries","CI","chalk"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport { getDefaultConfig, LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { ReadOnlyGraph } from 'metro';\nimport Bundler from 'metro/src/Bundler';\nimport hmrJSBundle from 'metro/src/DeltaBundler/Serializers/hmrJSBundle';\nimport type { TransformOptions } from 'metro/src/DeltaBundler/Worker';\nimport MetroHmrServer from 'metro/src/HmrServer';\nimport RevisionNotFoundError from 'metro/src/IncrementalBundler/RevisionNotFoundError';\nimport formatBundlingError from 'metro/src/lib/formatBundlingError';\nimport { loadConfig, resolveConfig, ConfigT } from 'metro-config';\nimport { Terminal } from 'metro-core';\nimport util from 'node:util';\nimport path from 'path';\n\nimport { createDevToolsPluginWebsocketEndpoint } from './DevToolsPluginWebsocketEndpoint';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { attachAtlasAsync } from './debugging/attachAtlas';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { createMetroMiddleware } from './dev-server/createMetroMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { Log } from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { createCorsMiddleware } from '../middleware/CorsMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\n// Wrap terminal and polyfill console.log so we can log during bundling without breaking the indicator.\nclass LogRespectingTerminal extends Terminal {\n constructor(stream: import('node:net').Socket | import('node:stream').Writable) {\n super(stream);\n\n const sendLog = (...args: any[]) => {\n this._logLines.push(\n // format args like console.log\n util.format(...args)\n );\n this._scheduleUpdate();\n\n // Flush the logs to the terminal immediately so logs at the end of the process are not lost.\n this.flush();\n };\n\n console.log = sendLog;\n console.info = sendLog;\n }\n}\n\n// Share one instance of Terminal for all instances of Metro.\nconst terminal = new LogRespectingTerminal(process.stdout);\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp,\n isExporting,\n getMetroBundler,\n }: { exp: ExpoConfig; isExporting: boolean; getMetroBundler: () => Bundler }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n\n const serverActionsEnabled =\n exp.experiments?.reactServerFunctions ?? env.EXPO_UNSTABLE_SERVER_FUNCTIONS;\n\n if (serverActionsEnabled) {\n process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS = '1';\n }\n\n // NOTE: Enable all the experimental Metro flags when RSC is enabled.\n if (exp.experiments?.reactServerComponentRoutes || serverActionsEnabled) {\n process.env.EXPO_USE_METRO_REQUIRE = '1';\n process.env.EXPO_USE_FAST_RESOLVER = '1';\n }\n\n const serverRoot = getMetroServerRoot(projectRoot);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const hasConfig = await resolveConfig(options.config, projectRoot);\n let config: ConfigT = {\n ...(await loadConfig(\n { cwd: projectRoot, projectRoot, ...options },\n // If the project does not have a metro.config.js, then we use the default config.\n hasConfig.isEmpty ? getDefaultConfig(projectRoot) : undefined\n )),\n reporter: {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n },\n };\n\n // @ts-expect-error: Set the global require cycle ignore patterns for SSR bundles. This won't work with custom global prefixes, but we don't use those.\n globalThis.__requireCycleIgnorePatterns = config.resolver?.requireCycleIgnorePatterns;\n\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n if (exp.experiments?.reactCompiler) {\n Log.warn(`Experimental React Compiler is enabled.`);\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING && !env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n throw new CommandError(\n 'EXPO_UNSTABLE_TREE_SHAKING requires EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH to be enabled.'\n );\n }\n\n if (env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n Log.warn(`Experimental bundle optimization is enabled.`);\n }\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental tree shaking is enabled.`);\n }\n\n if (serverActionsEnabled) {\n Log.warn(\n `Experimental React Server Functions are enabled. Production exports are not supported yet.`\n );\n if (!exp.experiments?.reactServerComponentRoutes) {\n Log.warn(\n `- React Server Component routes are NOT enabled. Routes will render in client mode.`\n );\n }\n }\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n isReactCanaryEnabled:\n (exp.experiments?.reactServerComponentRoutes ||\n serverActionsEnabled ||\n exp.experiments?.reactCanary) ??\n false,\n isNamedRequiresEnabled: env.EXPO_USE_METRO_REQUIRE,\n isReactServerComponentsEnabled: !!exp.experiments?.reactServerComponentRoutes,\n getMetroBundler,\n });\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<LoadOptions, 'logger'>,\n {\n isExporting,\n exp = getConfig(metroBundler.projectRoot, {\n skipSDKVersionRequirement: true,\n }).exp,\n }: { isExporting: boolean; exp?: ExpoConfig }\n): Promise<{\n metro: Metro.Server;\n hmrServer: MetroHmrServer | null;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n {\n exp,\n isExporting,\n getMetroBundler() {\n return metro.getBundler().getBundler();\n },\n }\n );\n\n // Create the core middleware stack for Metro, including websocket listeners\n const { middleware, messagesSocket, eventsSocket, websocketEndpoints } =\n createMetroMiddleware(metroConfig);\n\n if (!isExporting) {\n // Enable correct CORS headers for Expo Router features\n prependMiddleware(middleware, createCorsMiddleware(exp));\n\n // Enable debug middleware for CDP-related debugging\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n Object.assign(websocketEndpoints, debugWebsocketEndpoints);\n middleware.use(debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n // TODO(cedric): `enhanceMiddleware` is deprecated, but is currently used to unify the middleware stacks\n // See: https://github.com/facebook/metro/commit/22e85fde85ec454792a1b70eba4253747a2587a9\n // See: https://github.com/facebook/metro/commit/d0d554381f119bb80ab09dbd6a1d310b54737e52\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n }\n\n // Attach Expo Atlas if enabled\n await attachAtlasAsync({\n isExporting,\n exp,\n projectRoot,\n middleware,\n metroConfig,\n // NOTE(cedric): reset the Atlas file once, and reuse it for static exports\n resetAtlasFile: isExporting,\n });\n\n const { server, hmrServer, metro } = await runServer(\n metroBundler,\n metroConfig,\n {\n websocketEndpoints: {\n ...websocketEndpoints,\n ...createDevToolsPluginWebsocketEndpoint(),\n },\n watch: !isExporting && isWatchEnabled(),\n },\n {\n mockServer: isExporting,\n }\n );\n\n // Patch transform file to remove inconvenient customTransformOptions which are only used in single well-known files.\n const originalTransformFile = metro\n .getBundler()\n .getBundler()\n .transformFile.bind(metro.getBundler().getBundler());\n\n metro.getBundler().getBundler().transformFile = async function (\n filePath: string,\n transformOptions: TransformOptions,\n fileBuffer?: Buffer\n ) {\n return originalTransformFile(\n filePath,\n pruneCustomTransformOptions(\n filePath,\n // Clone the options so we don't mutate the original.\n {\n ...transformOptions,\n customTransformOptions: {\n __proto__: null,\n ...transformOptions.customTransformOptions,\n },\n }\n ),\n fileBuffer\n );\n };\n\n setEventReporter(eventsSocket.reportMetroEvent);\n\n // This function ensures that modules in source maps are sorted in the same\n // order as in a plain JS bundle.\n metro._getSortedModules = function (this: Metro.Server, graph: ReadOnlyGraph) {\n const modules = [...graph.dependencies.values()];\n\n const ctx = {\n platform: graph.transformOptions.platform,\n environment: graph.transformOptions.customTransformOptions?.environment,\n };\n // Assign IDs to modules in a consistent order\n for (const module of modules) {\n // @ts-expect-error\n this._createModuleId(module.path, ctx);\n }\n // Sort by IDs\n return modules.sort(\n // @ts-expect-error\n (a, b) => this._createModuleId(a.path, ctx) - this._createModuleId(b.path, ctx)\n );\n };\n\n if (hmrServer) {\n // Patch HMR Server to send more info to the `_createModuleId` function for deterministic module IDs.\n hmrServer._prepareMessage = async function (this: MetroHmrServer, group, options, changeEvent) {\n // Fork of https://github.com/facebook/metro/blob/3b3e0aaf725cfa6907bf2c8b5fbc0da352d29efe/packages/metro/src/HmrServer.js#L327-L393\n // with patch for `_createModuleId`.\n const logger = !options.isInitialUpdate ? changeEvent?.logger : null;\n try {\n const revPromise = this._bundler.getRevision(group.revisionId);\n if (!revPromise) {\n return {\n type: 'error',\n body: formatBundlingError(new RevisionNotFoundError(group.revisionId)),\n };\n }\n logger?.point('updateGraph_start');\n const { revision, delta } = await this._bundler.updateGraph(await revPromise, false);\n logger?.point('updateGraph_end');\n this._clientGroups.delete(group.revisionId);\n group.revisionId = revision.id;\n for (const client of group.clients) {\n client.revisionIds = client.revisionIds.filter(\n (revisionId) => revisionId !== group.revisionId\n );\n client.revisionIds.push(revision.id);\n }\n this._clientGroups.set(group.revisionId, group);\n logger?.point('serialize_start');\n // NOTE(EvanBacon): This is the patch\n const moduleIdContext = {\n platform: revision.graph.transformOptions.platform,\n environment: revision.graph.transformOptions.customTransformOptions?.environment,\n };\n const hmrUpdate = hmrJSBundle(delta, revision.graph, {\n clientUrl: group.clientUrl,\n // NOTE(EvanBacon): This is also the patch\n createModuleId: (moduleId: string) => {\n // @ts-expect-error\n return this._createModuleId(moduleId, moduleIdContext);\n },\n includeAsyncPaths: group.graphOptions.lazy,\n projectRoot: this._config.projectRoot,\n serverRoot: this._config.server.unstable_serverRoot ?? this._config.projectRoot,\n });\n logger?.point('serialize_end');\n return {\n type: 'update',\n body: {\n revisionId: revision.id,\n isInitialUpdate: options.isInitialUpdate,\n ...hmrUpdate,\n },\n };\n } catch (error: any) {\n const formattedError = formatBundlingError(error);\n this._config.reporter.update({\n type: 'bundling_error',\n error,\n });\n return {\n type: 'error',\n body: formattedError,\n };\n }\n };\n }\n\n return {\n metro,\n hmrServer,\n server,\n middleware,\n messageSocket: messagesSocket,\n };\n}\n\n// TODO: Fork the entire transform function so we can simply regex the file contents for keywords instead.\nfunction pruneCustomTransformOptions(\n filePath: string,\n transformOptions: TransformOptions\n): TransformOptions {\n // Normalize the filepath for cross platform checking.\n filePath = filePath.split(path.sep).join('/');\n\n if (\n transformOptions.customTransformOptions?.dom &&\n // The only generated file that needs the dom root is `expo/dom/entry.js`\n !filePath.match(/expo\\/dom\\/entry\\.js$/)\n ) {\n // Clear the dom root option if we aren't transforming the magic entry file, this ensures\n // that cached artifacts from other DOM component bundles can be reused.\n transformOptions.customTransformOptions.dom = 'true';\n }\n\n if (\n transformOptions.customTransformOptions?.routerRoot &&\n // The router root is used all over expo-router (`process.env.EXPO_ROUTER_ABS_APP_ROOT`, `process.env.EXPO_ROUTER_APP_ROOT`) so we'll just ignore the entire package.\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n // Set to the default value.\n transformOptions.customTransformOptions.routerRoot = 'app';\n }\n if (\n transformOptions.customTransformOptions?.asyncRoutes &&\n // The async routes settings are also used in `expo-router/_ctx.ios.js` (and other platform variants) via `process.env.EXPO_ROUTER_IMPORT_MODE`\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n delete transformOptions.customTransformOptions.asyncRoutes;\n }\n\n if (\n transformOptions.customTransformOptions?.clientBoundaries &&\n // The client boundaries are only used in `@expo/metro-runtime/src/virtual.js` for production RSC exports.\n !filePath.match(/\\/@expo\\/metro-runtime\\/rsc\\/virtual\\.js$/)\n ) {\n delete transformOptions.customTransformOptions.clientBoundaries;\n }\n\n return transformOptions;\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","LogRespectingTerminal","Terminal","constructor","stream","sendLog","args","_logLines","push","util","format","_scheduleUpdate","flush","console","log","info","terminal","process","stdout","projectRoot","options","exp","isExporting","getMetroBundler","config","reportEvent","serverActionsEnabled","experiments","reactServerFunctions","env","EXPO_UNSTABLE_SERVER_FUNCTIONS","reactServerComponentRoutes","EXPO_USE_METRO_REQUIRE","EXPO_USE_FAST_RESOLVER","serverRoot","getMetroServerRoot","terminalReporter","MetroTerminalReporter","hasConfig","resolveConfig","loadConfig","cwd","isEmpty","getDefaultConfig","undefined","reporter","update","event","globalThis","__requireCycleIgnorePatterns","resolver","requireCycleIgnorePatterns","transformer","publicPath","baseUrl","platformBundlers","getPlatformBundlers","reactCompiler","Log","warn","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","CommandError","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","isFastResolverEnabled","isReactCanaryEnabled","reactCanary","isNamedRequiresEnabled","isReactServerComponentsEnabled","setEventReporter","logger","metroBundler","getConfig","skipSDKVersionRequirement","metroConfig","metro","getBundler","middleware","messagesSocket","eventsSocket","websocketEndpoints","createMetroMiddleware","prependMiddleware","createCorsMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","Object","assign","use","createJsInspectorMiddleware","customEnhanceMiddleware","server","enhanceMiddleware","metroMiddleware","attachAtlasAsync","resetAtlasFile","hmrServer","runServer","createDevToolsPluginWebsocketEndpoint","watch","mockServer","originalTransformFile","transformFile","bind","filePath","transformOptions","fileBuffer","pruneCustomTransformOptions","customTransformOptions","__proto__","reportMetroEvent","_getSortedModules","graph","modules","dependencies","values","ctx","platform","environment","module","_createModuleId","path","sort","a","b","_prepareMessage","group","changeEvent","isInitialUpdate","revision","revPromise","_bundler","getRevision","revisionId","type","body","formatBundlingError","RevisionNotFoundError","point","delta","updateGraph","_clientGroups","delete","id","client","clients","revisionIds","filter","set","moduleIdContext","hmrUpdate","hmrJSBundle","clientUrl","createModuleId","moduleId","includeAsyncPaths","graphOptions","lazy","_config","unstable_serverRoot","error","formattedError","messageSocket","split","sep","join","dom","match","routerRoot","asyncRoutes","clientBoundaries","CI","chalk"],"mappings":"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"}
|