@expo/cli 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +8 -3
- package/build/bin/cli.map +1 -1
- package/build/src/export/createBundles.js +1 -0
- package/build/src/export/createBundles.js.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/export/embed/resolveOptions.js +3 -3
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +4 -4
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +18 -18
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +0 -1
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +5 -1
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -0
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/install/checkPackages.js +6 -0
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/installAsync.js +15 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +3 -33
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +1 -1
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +1 -8
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +33 -47
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +13 -2
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +11 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +2 -2
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/index.js +3 -1
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +2 -1
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +16 -33
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/externals.js +7 -30
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +7 -4
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +26 -3
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +14 -5
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +0 -1
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +10 -4
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +6 -3
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +75 -15
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +8 -3
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/type-generation/index.js +9 -1
- package/build/src/start/server/type-generation/index.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +2 -3
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/cocoapods.js +1 -1
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/dir.js +16 -6
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +2 -1
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/env.js +3 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/strings.js +24 -0
- package/build/src/utils/strings.js.map +1 -0
- package/package.json +6 -8
- package/build/src/prebuild/writeMetroConfig.js +0 -89
- package/build/src/prebuild/writeMetroConfig.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.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 fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport requireString from 'require-from-string';\nimport resolveFrom from 'resolve-from';\n\nimport { stripAnsi } from '../../utils/ansi';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { memoize } from '../../utils/fn';\nimport { profile } from '../../utils/profile';\nimport { logMetroError } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\n\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\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 return str.replace(/^(__r\\(.*\\);)$/m, 'module.exports = $1');\n}\n\nfunction stripProcess(str: string) {\n // TODO: Remove from the metro prelude\n return str.replace(/process=this\\.process\\|\\|{},/m, '');\n}\n\n// TODO(EvanBacon): Group all the code together and version.\nconst getRenderModuleId = (projectRoot: string): string => {\n const moduleId = resolveFrom.silent(projectRoot, 'expo-router/node/render.js');\n if (!moduleId) {\n throw new Error(\n `A version of expo-router with Node.js support is not installed in the project.`\n );\n }\n\n return moduleId;\n};\n\ntype StaticRenderOptions = {\n // Ensure the style format is `css-xxxx` (prod) instead of `css-view-xxxx` (dev)\n dev?: boolean;\n minify?: boolean;\n platform?: string;\n environment?: 'node';\n};\n\nconst moveStaticRenderFunction = memoize(async (projectRoot: string, requiredModuleId: string) => {\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, 'render.js');\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(requiredModuleId, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n});\n\n/** @returns the js file contents required to generate the static generation function. */\nexport async function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n { dev = false, minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root);\n let moduleId = requiredModuleId;\n\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (path.relative(root, moduleId).startsWith('..')) {\n moduleId = await moveStaticRenderFunction(projectRoot, requiredModuleId);\n }\n\n return requireFileContentsWithMetro(root, devServerUrl, moduleId, { dev, minify, environment });\n}\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('../')) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n { dev = false, platform = 'web', minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '.bundle');\n debug('fetching from Metro:', root, serverPath);\n\n let url = `${devServerUrl}/${serverPath}?platform=${platform}&dev=${dev}&minify=${minify}`;\n\n if (environment) {\n url += `&resolver.environment=${environment}&transform.environment=${environment}`;\n }\n return url;\n}\n\nexport class MetroNodeError extends Error {\n constructor(message: string, public rawObject: any) {\n super(message);\n }\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: StaticRenderOptions = {}\n): Promise<string> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n\n const res = await fetch(url);\n\n // TODO: Improve error handling\n if (res.status === 500) {\n const text = await res.text();\n if (text.startsWith('{\"originModulePath\"') || text.startsWith('{\"type\":\"TransformError\"')) {\n const errorObject = JSON.parse(text);\n\n throw new MetroNodeError(stripAnsi(errorObject.message) ?? errorObject.message, errorObject);\n }\n throw new Error(`[${res.status}]: ${res.statusText}\\n${text}`);\n }\n\n if (!res.ok) {\n throw new Error(`Error fetching bundle for static rendering: ${res.status} ${res.statusText}`);\n }\n\n const content = await res.text();\n\n let bun = wrapBundle(content);\n\n // This exposes the entire environment to the bundle.\n if (props.environment === 'node') {\n bun = stripProcess(bun);\n }\n\n return bun;\n}\nexport async function requireWithMetro<T>(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n options: StaticRenderOptions = {}\n): Promise<T> {\n const content = await requireFileContentsWithMetro(\n projectRoot,\n devServerUrl,\n absoluteFilePath,\n options\n );\n return evalMetro(content);\n}\n\nexport async function getStaticRenderFunctions(\n projectRoot: string,\n devServerUrl: string,\n options: StaticRenderOptions = {}\n): Promise<Record<string, (...args: any[]) => Promise<any>>> {\n const scriptContents = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options\n );\n\n const contents = evalMetro(scriptContents);\n\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n throw new SilentError(error);\n }\n };\n return acc;\n }, {} as any);\n}\n\nfunction evalMetro(src: string) {\n return profile(requireString, 'eval-metro-bundle')(src);\n}\n"],"names":["getStaticRenderFunctionsContentAsync","createMetroEndpointAsync","requireFileContentsWithMetro","requireWithMetro","getStaticRenderFunctions","debug","require","wrapBundle","str","replace","stripProcess","getRenderModuleId","projectRoot","moduleId","resolveFrom","silent","Error","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","devServerUrl","dev","minify","environment","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","basename","absoluteFilePath","platform","safeOtherFile","serverPath","url","MetroNodeError","constructor","message","rawObject","props","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","bun","options","evalMetro","scriptContents","contents","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","SilentError","src","profile","requireString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.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 fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport requireString from 'require-from-string';\nimport resolveFrom from 'resolve-from';\n\nimport { stripAnsi } from '../../utils/ansi';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { memoize } from '../../utils/fn';\nimport { profile } from '../../utils/profile';\nimport { logMetroError } from './metro/metroErrorInterface';\nimport { getMetroServerRoot } from './middleware/ManifestMiddleware';\n\nconst debug = require('debug')('expo:start:server:node-renderer') as typeof console.log;\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\nfunction stripProcess(str: string) {\n // TODO: Remove from the metro prelude\n return str.replace(/process=this\\.process\\|\\|{},/m, '');\n}\n\n// TODO(EvanBacon): Group all the code together and version.\nconst getRenderModuleId = (projectRoot: string): string => {\n const moduleId = resolveFrom.silent(projectRoot, 'expo-router/node/render.js');\n if (!moduleId) {\n throw new Error(\n `A version of expo-router with Node.js support is not installed in the project.`\n );\n }\n\n return moduleId;\n};\n\ntype StaticRenderOptions = {\n // Ensure the style format is `css-xxxx` (prod) instead of `css-view-xxxx` (dev)\n dev?: boolean;\n minify?: boolean;\n platform?: string;\n environment?: 'node';\n};\n\nconst moveStaticRenderFunction = memoize(async (projectRoot: string, requiredModuleId: string) => {\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, 'render.js');\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(requiredModuleId, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n});\n\n/** @returns the js file contents required to generate the static generation function. */\nexport async function getStaticRenderFunctionsContentAsync(\n projectRoot: string,\n devServerUrl: string,\n { dev = false, minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const requiredModuleId = getRenderModuleId(root);\n let moduleId = requiredModuleId;\n\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (path.relative(root, moduleId).startsWith('..')) {\n moduleId = await moveStaticRenderFunction(projectRoot, requiredModuleId);\n }\n\n return requireFileContentsWithMetro(root, devServerUrl, moduleId, { dev, minify, environment });\n}\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('../')) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n { dev = false, platform = 'web', minify = false, environment }: StaticRenderOptions = {}\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '.bundle');\n debug('fetching from Metro:', root, serverPath);\n\n let url = `${devServerUrl}/${serverPath}?platform=${platform}&dev=${dev}&minify=${minify}`;\n\n if (environment) {\n url += `&resolver.environment=${environment}&transform.environment=${environment}`;\n }\n return url;\n}\n\nexport class MetroNodeError extends Error {\n constructor(message: string, public rawObject: any) {\n super(message);\n }\n}\n\nexport async function requireFileContentsWithMetro(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: StaticRenderOptions = {}\n): Promise<string> {\n const url = await createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFilePath, props);\n\n const res = await fetch(url);\n\n // TODO: Improve error handling\n if (res.status === 500) {\n const text = await res.text();\n if (text.startsWith('{\"originModulePath\"') || text.startsWith('{\"type\":\"TransformError\"')) {\n const errorObject = JSON.parse(text);\n\n throw new MetroNodeError(stripAnsi(errorObject.message) ?? errorObject.message, errorObject);\n }\n throw new Error(`[${res.status}]: ${res.statusText}\\n${text}`);\n }\n\n if (!res.ok) {\n throw new Error(`Error fetching bundle for static rendering: ${res.status} ${res.statusText}`);\n }\n\n const content = await res.text();\n\n let bun = wrapBundle(content);\n\n // This exposes the entire environment to the bundle.\n if (props.environment === 'node') {\n bun = stripProcess(bun);\n }\n\n return bun;\n}\nexport async function requireWithMetro<T>(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n options: StaticRenderOptions = {}\n): Promise<T> {\n const content = await requireFileContentsWithMetro(\n projectRoot,\n devServerUrl,\n absoluteFilePath,\n options\n );\n return evalMetro(content);\n}\n\nexport async function getStaticRenderFunctions(\n projectRoot: string,\n devServerUrl: string,\n options: StaticRenderOptions = {}\n): Promise<Record<string, (...args: any[]) => Promise<any>>> {\n const scriptContents = await getStaticRenderFunctionsContentAsync(\n projectRoot,\n devServerUrl,\n options\n );\n\n const contents = evalMetro(scriptContents);\n\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n throw new SilentError(error);\n }\n };\n return acc;\n }, {} as any);\n}\n\nfunction evalMetro(src: string) {\n return profile(requireString, 'eval-metro-bundle')(src);\n}\n"],"names":["getStaticRenderFunctionsContentAsync","createMetroEndpointAsync","requireFileContentsWithMetro","requireWithMetro","getStaticRenderFunctions","debug","require","wrapBundle","str","replace","stripProcess","getRenderModuleId","projectRoot","moduleId","resolveFrom","silent","Error","moveStaticRenderFunction","memoize","requiredModuleId","tempDir","path","join","fs","promises","mkdir","recursive","writeFile","readFile","delayAsync","devServerUrl","dev","minify","environment","root","getMetroServerRoot","relative","startsWith","ensureFileInRootDirectory","otherFile","basename","absoluteFilePath","platform","safeOtherFile","serverPath","url","MetroNodeError","constructor","message","rawObject","props","res","fetch","status","text","errorObject","JSON","parse","stripAnsi","statusText","ok","content","bun","options","evalMetro","scriptContents","contents","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","SilentError","src","profile","requireString"],"mappings":"AAMA;;;;QA6DsBA,oCAAoC,GAApCA,oCAAoC;QAoCpCC,wBAAwB,GAAxBA,wBAAwB;QAyBxBC,4BAA4B,GAA5BA,4BAA4B;QAoC5BC,gBAAgB,GAAhBA,gBAAgB;QAehBC,wBAAwB,GAAxBA,wBAAwB;AA7K/B,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACD,IAAA,UAAY,kCAAZ,YAAY,EAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACG,IAAA,kBAAqB,kCAArB,qBAAqB,EAAA;AACvB,IAAA,YAAc,kCAAd,cAAc,EAAA;AAEZ,IAAA,KAAkB,WAAlB,kBAAkB,CAAA;AACjB,IAAA,MAAmB,WAAnB,mBAAmB,CAAA;AAClB,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AACxB,IAAA,GAAgB,WAAhB,gBAAgB,CAAA;AAChB,IAAA,QAAqB,WAArB,qBAAqB,CAAA;AACf,IAAA,oBAA6B,WAA7B,6BAA6B,CAAA;AACxB,IAAA,mBAAiC,WAAjC,iCAAiC,CAAA;;;;;;AAEpE,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,AAAsB,AAAC;AAExF,SAASC,UAAU,CAACC,GAAW,EAAE;IAC/B,uDAAuD;IACvD,mDAAmD;IACnD,6FAA6F;IAC7F,OAAOA,GAAG,CAACC,OAAO,qBAAqB,qBAAqB,CAAC,CAAC;CAC/D;AAED,SAASC,YAAY,CAACF,GAAW,EAAE;IACjC,sCAAsC;IACtC,OAAOA,GAAG,CAACC,OAAO,kCAAkC,EAAE,CAAC,CAAC;CACzD;AAED,4DAA4D;AAC5D,MAAME,iBAAiB,GAAG,CAACC,WAAmB,GAAa;IACzD,MAAMC,QAAQ,GAAGC,YAAW,QAAA,CAACC,MAAM,CAACH,WAAW,EAAE,4BAA4B,CAAC,AAAC;IAC/E,IAAI,CAACC,QAAQ,EAAE;QACb,MAAM,IAAIG,KAAK,CACb,CAAC,8EAA8E,CAAC,CACjF,CAAC;KACH;IAED,OAAOH,QAAQ,CAAC;CACjB,AAAC;AAUF,MAAMI,wBAAwB,GAAGC,CAAAA,GAAAA,GAAO,AAUtC,CAAA,QAVsC,CAAC,OAAON,WAAmB,EAAEO,gBAAwB,GAAK;IAChG,kEAAkE;IAClE,wDAAwD;IACxD,MAAMC,OAAO,GAAGC,KAAI,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,cAAc,CAAC,AAAC;IACvD,MAAMW,GAAE,QAAA,CAACC,QAAQ,CAACC,KAAK,CAACL,OAAO,EAAE;QAAEM,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IACtD,MAAMb,QAAQ,GAAGQ,KAAI,QAAA,CAACC,IAAI,CAACF,OAAO,EAAE,WAAW,CAAC,AAAC;IACjD,MAAMG,GAAE,QAAA,CAACC,QAAQ,CAACG,SAAS,CAACd,QAAQ,EAAE,MAAMU,GAAE,QAAA,CAACC,QAAQ,CAACI,QAAQ,CAACT,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5F,oDAAoD;IACpD,MAAMU,CAAAA,GAAAA,MAAU,AAAI,CAAA,WAAJ,CAAC,EAAE,CAAC,CAAC;IACrB,OAAOhB,QAAQ,CAAC;CACjB,CAAC,AAAC;AAGI,eAAeb,oCAAoC,CACxDY,WAAmB,EACnBkB,YAAoB,EACpB,EAAEC,GAAG,EAAG,KAAK,CAAA,EAAEC,MAAM,EAAG,KAAK,CAAA,EAAEC,WAAW,CAAA,EAAuB,GAAG,EAAE,EACrD;IACjB,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,mBAAkB,AAAa,CAAA,mBAAb,CAACvB,WAAW,CAAC,AAAC;IAC7C,MAAMO,gBAAgB,GAAGR,iBAAiB,CAACuB,IAAI,CAAC,AAAC;IACjD,IAAIrB,QAAQ,GAAGM,gBAAgB,AAAC;IAEhC,wEAAwE;IACxE,uCAAuC;IACvC,IAAIE,KAAI,QAAA,CAACe,QAAQ,CAACF,IAAI,EAAErB,QAAQ,CAAC,CAACwB,UAAU,CAAC,IAAI,CAAC,EAAE;QAClDxB,QAAQ,GAAG,MAAMI,wBAAwB,CAACL,WAAW,EAAEO,gBAAgB,CAAC,CAAC;KAC1E;IAED,OAAOjB,4BAA4B,CAACgC,IAAI,EAAEJ,YAAY,EAAEjB,QAAQ,EAAE;QAAEkB,GAAG;QAAEC,MAAM;QAAEC,WAAW;KAAE,CAAC,CAAC;CACjG;AAED,eAAeK,yBAAyB,CAAC1B,WAAmB,EAAE2B,SAAiB,EAAE;IAC/E,wEAAwE;IACxE,uCAAuC;IACvC,IAAI,CAAClB,KAAI,QAAA,CAACe,QAAQ,CAACxB,WAAW,EAAE2B,SAAS,CAAC,CAACF,UAAU,CAAC,KAAK,CAAC,EAAE;QAC5D,OAAOE,SAAS,CAAC;KAClB;IAED,kEAAkE;IAClE,wDAAwD;IACxD,MAAMnB,OAAO,GAAGC,KAAI,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,kBAAkB,CAAC,AAAC;IAC3D,MAAMW,GAAE,QAAA,CAACC,QAAQ,CAACC,KAAK,CAACL,OAAO,EAAE;QAAEM,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IACtD,MAAMb,QAAQ,GAAGQ,KAAI,QAAA,CAACC,IAAI,CAACF,OAAO,EAAEC,KAAI,QAAA,CAACmB,QAAQ,CAACD,SAAS,CAAC,CAAC,AAAC;IAC9D,MAAMhB,GAAE,QAAA,CAACC,QAAQ,CAACG,SAAS,CAACd,QAAQ,EAAE,MAAMU,GAAE,QAAA,CAACC,QAAQ,CAACI,QAAQ,CAACW,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,oDAAoD;IACpD,MAAMV,CAAAA,GAAAA,MAAU,AAAI,CAAA,WAAJ,CAAC,EAAE,CAAC,CAAC;IACrB,OAAOhB,QAAQ,CAAC;CACjB;AAEM,eAAeZ,wBAAwB,CAC5CW,WAAmB,EACnBkB,YAAoB,EACpBW,gBAAwB,EACxB,EAAEV,GAAG,EAAG,KAAK,CAAA,EAAEW,QAAQ,EAAG,KAAK,CAAA,EAAEV,MAAM,EAAG,KAAK,CAAA,EAAEC,WAAW,CAAA,EAAuB,GAAG,EAAE,EACvE;IACjB,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,mBAAkB,AAAa,CAAA,mBAAb,CAACvB,WAAW,CAAC,AAAC;IAC7C,MAAM+B,aAAa,GAAG,MAAML,yBAAyB,CAAC1B,WAAW,EAAE6B,gBAAgB,CAAC,AAAC;IACrF,MAAMG,UAAU,GAAGvB,KAAI,QAAA,CAACe,QAAQ,CAACF,IAAI,EAAES,aAAa,CAAC,CAAClC,OAAO,eAAe,SAAS,CAAC,AAAC;IACvFJ,KAAK,CAAC,sBAAsB,EAAE6B,IAAI,EAAEU,UAAU,CAAC,CAAC;IAEhD,IAAIC,GAAG,GAAG,CAAC,EAAEf,YAAY,CAAC,CAAC,EAAEc,UAAU,CAAC,UAAU,EAAEF,QAAQ,CAAC,KAAK,EAAEX,GAAG,CAAC,QAAQ,EAAEC,MAAM,CAAC,CAAC,AAAC;IAE3F,IAAIC,WAAW,EAAE;QACfY,GAAG,IAAI,CAAC,sBAAsB,EAAEZ,WAAW,CAAC,uBAAuB,EAAEA,WAAW,CAAC,CAAC,CAAC;KACpF;IACD,OAAOY,GAAG,CAAC;CACZ;AAEM,MAAMC,cAAc,SAAS9B,KAAK;IACvC+B,YAAYC,OAAe,EAASC,SAAc,CAAE;QAClD,KAAK,CAACD,OAAO,CAAC,CAAC;aADmBC,SAAc,GAAdA,SAAc;KAEjD;CACF;QAJYH,cAAc,GAAdA,cAAc;AAMpB,eAAe5C,4BAA4B,CAChDU,WAAmB,EACnBkB,YAAoB,EACpBW,gBAAwB,EACxBS,KAA0B,GAAG,EAAE,EACd;IACjB,MAAML,GAAG,GAAG,MAAM5C,wBAAwB,CAACW,WAAW,EAAEkB,YAAY,EAAEW,gBAAgB,EAAES,KAAK,CAAC,AAAC;IAE/F,MAAMC,GAAG,GAAG,MAAMC,CAAAA,GAAAA,UAAK,AAAK,CAAA,QAAL,CAACP,GAAG,CAAC,AAAC;IAE7B,+BAA+B;IAC/B,IAAIM,GAAG,CAACE,MAAM,KAAK,GAAG,EAAE;QACtB,MAAMC,IAAI,GAAG,MAAMH,GAAG,CAACG,IAAI,EAAE,AAAC;QAC9B,IAAIA,IAAI,CAACjB,UAAU,CAAC,qBAAqB,CAAC,IAAIiB,IAAI,CAACjB,UAAU,CAAC,0BAA0B,CAAC,EAAE;YACzF,MAAMkB,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC,AAAC;gBAEZI,GAA8B;YAAvD,MAAM,IAAIZ,cAAc,CAACY,CAAAA,GAA8B,GAA9BA,CAAAA,GAAAA,KAAS,AAAqB,CAAA,UAArB,CAACH,WAAW,CAACP,OAAO,CAAC,YAA9BU,GAA8B,GAAIH,WAAW,CAACP,OAAO,EAAEO,WAAW,CAAC,CAAC;SAC9F;QACD,MAAM,IAAIvC,KAAK,CAAC,CAAC,CAAC,EAAEmC,GAAG,CAACE,MAAM,CAAC,GAAG,EAAEF,GAAG,CAACQ,UAAU,CAAC,EAAE,EAAEL,IAAI,CAAC,CAAC,CAAC,CAAC;KAChE;IAED,IAAI,CAACH,GAAG,CAACS,EAAE,EAAE;QACX,MAAM,IAAI5C,KAAK,CAAC,CAAC,4CAA4C,EAAEmC,GAAG,CAACE,MAAM,CAAC,CAAC,EAAEF,GAAG,CAACQ,UAAU,CAAC,CAAC,CAAC,CAAC;KAChG;IAED,MAAME,OAAO,GAAG,MAAMV,GAAG,CAACG,IAAI,EAAE,AAAC;IAEjC,IAAIQ,GAAG,GAAGvD,UAAU,CAACsD,OAAO,CAAC,AAAC;IAE9B,qDAAqD;IACrD,IAAIX,KAAK,CAACjB,WAAW,KAAK,MAAM,EAAE;QAChC6B,GAAG,GAAGpD,YAAY,CAACoD,GAAG,CAAC,CAAC;KACzB;IAED,OAAOA,GAAG,CAAC;CACZ;AACM,eAAe3D,gBAAgB,CACpCS,WAAmB,EACnBkB,YAAoB,EACpBW,gBAAwB,EACxBsB,OAA4B,GAAG,EAAE,EACrB;IACZ,MAAMF,OAAO,GAAG,MAAM3D,4BAA4B,CAChDU,WAAW,EACXkB,YAAY,EACZW,gBAAgB,EAChBsB,OAAO,CACR,AAAC;IACF,OAAOC,SAAS,CAACH,OAAO,CAAC,CAAC;CAC3B;AAEM,eAAezD,wBAAwB,CAC5CQ,WAAmB,EACnBkB,YAAoB,EACpBiC,OAA4B,GAAG,EAAE,EAC0B;IAC3D,MAAME,cAAc,GAAG,MAAMjE,oCAAoC,CAC/DY,WAAW,EACXkB,YAAY,EACZiC,OAAO,CACR,AAAC;IAEF,MAAMG,QAAQ,GAAGF,SAAS,CAACC,cAAc,CAAC,AAAC;IAE3C,wEAAwE;IACxE,OAAOE,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,GAAK;QAChD,MAAMC,EAAE,GAAGN,QAAQ,CAACK,GAAG,CAAC,AAAC;QACzB,IAAI,OAAOC,EAAE,KAAK,UAAU,EAAE;YAC5B,OAAO;gBAAE,GAAGF,GAAG;gBAAE,CAACC,GAAG,CAAC,EAAEC,EAAE;aAAE,CAAC;SAC9B;QAEDF,GAAG,CAACC,GAAG,CAAC,GAAG,eAAgB,GAAGrB,KAAK,AAAO,EAAE;YAC1C,IAAI;gBACF,OAAO,MAAMsB,EAAE,CAACC,KAAK,CAAC,IAAI,EAAEvB,KAAK,CAAC,CAAC;aACpC,CAAC,OAAOwB,KAAK,EAAO;gBACnB,MAAMC,CAAAA,GAAAA,oBAAa,AAAwB,CAAA,cAAxB,CAAC/D,WAAW,EAAE;oBAAE8D,KAAK;iBAAE,CAAC,CAAC;gBAC5C,MAAM,IAAIE,OAAW,YAAA,CAACF,KAAK,CAAC,CAAC;aAC9B;SACF,CAAC;QACF,OAAOJ,GAAG,CAAC;KACZ,EAAE,EAAE,CAAQ,CAAC;CACf;AAED,SAASN,SAAS,CAACa,GAAW,EAAE;IAC9B,OAAOC,CAAAA,GAAAA,QAAO,AAAoC,CAAA,QAApC,CAACC,kBAAa,QAAA,EAAE,mBAAmB,CAAC,CAACF,GAAG,CAAC,CAAC;CACzD"}
|
|
@@ -8,6 +8,7 @@ var _devServer = require("@expo/dev-server");
|
|
|
8
8
|
var runtimeEnv = _interopRequireWildcard(require("@expo/env"));
|
|
9
9
|
var _assert = _interopRequireDefault(require("assert"));
|
|
10
10
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
11
|
+
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
11
12
|
var _path = _interopRequireDefault(require("path"));
|
|
12
13
|
var _log = require("../../../log");
|
|
13
14
|
var _getDevClientProperties = _interopRequireDefault(require("../../../utils/analytics/getDevClientProperties"));
|
|
@@ -87,10 +88,10 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
87
88
|
bundleUrl: isDev ? devBundleUrl : undefined
|
|
88
89
|
});
|
|
89
90
|
}
|
|
90
|
-
async getStaticRenderFunctionAsync({ mode }) {
|
|
91
|
+
async getStaticRenderFunctionAsync({ mode , minify =mode !== "development" }) {
|
|
91
92
|
const url = this.getDevServerUrl();
|
|
92
93
|
const { getStaticContent } = await (0, _getStaticRenderFunctions).getStaticRenderFunctions(this.projectRoot, url, {
|
|
93
|
-
minify
|
|
94
|
+
minify,
|
|
94
95
|
dev: mode !== "production",
|
|
95
96
|
// Ensure the API Routes are included
|
|
96
97
|
environment: "node"
|
|
@@ -99,27 +100,24 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
99
100
|
return await getStaticContent(new URL(path, url));
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
|
-
async getStaticResourcesAsync({ mode }) {
|
|
103
|
-
const isDev = mode === "development";
|
|
103
|
+
async getStaticResourcesAsync({ mode , minify =mode !== "development" }) {
|
|
104
104
|
const devBundleUrlPathname = (0, _manifestMiddleware).createBundleUrlPath({
|
|
105
105
|
platform: "web",
|
|
106
106
|
mode,
|
|
107
|
+
minify,
|
|
107
108
|
environment: "client",
|
|
109
|
+
serializerOutput: "static",
|
|
108
110
|
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot, (0, _config).getConfig(this.projectRoot), "web")
|
|
109
111
|
});
|
|
110
112
|
const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl());
|
|
111
|
-
bundleUrl.searchParams.set("platform", "web");
|
|
112
|
-
bundleUrl.searchParams.set("dev", String(isDev));
|
|
113
|
-
bundleUrl.searchParams.set("minify", String(!isDev));
|
|
114
|
-
bundleUrl.searchParams.set("serializer.output", "static");
|
|
115
113
|
// Fetch the generated HTML from our custom Metro serializer
|
|
116
|
-
const results = await
|
|
114
|
+
const results = await (0, _nodeFetch).default(bundleUrl.toString());
|
|
117
115
|
const txt = await results.text();
|
|
118
116
|
try {
|
|
119
117
|
return JSON.parse(txt);
|
|
120
118
|
} catch (error) {
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
_log.Log.error("Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.");
|
|
120
|
+
debug(txt);
|
|
123
121
|
throw error;
|
|
124
122
|
}
|
|
125
123
|
}
|
|
@@ -129,34 +127,16 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
129
127
|
projectRoot: this.projectRoot
|
|
130
128
|
});
|
|
131
129
|
}
|
|
132
|
-
async getStaticPageAsync(pathname, { mode }) {
|
|
133
|
-
const isDev = mode === "development";
|
|
130
|
+
async getStaticPageAsync(pathname, { mode , minify =mode !== "development" }) {
|
|
134
131
|
const devBundleUrlPathname = (0, _manifestMiddleware).createBundleUrlPath({
|
|
135
132
|
platform: "web",
|
|
136
133
|
mode,
|
|
137
134
|
environment: "client",
|
|
138
135
|
mainModuleName: (0, _manifestMiddleware).resolveMainModuleName(this.projectRoot, (0, _config).getConfig(this.projectRoot), "web")
|
|
139
136
|
});
|
|
140
|
-
const bundleResources = async ()=>{
|
|
141
|
-
const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl());
|
|
142
|
-
bundleUrl.searchParams.set("platform", "web");
|
|
143
|
-
bundleUrl.searchParams.set("dev", String(isDev));
|
|
144
|
-
bundleUrl.searchParams.set("minify", String(!isDev));
|
|
145
|
-
bundleUrl.searchParams.set("serializer.output", "static");
|
|
146
|
-
// Fetch the generated HTML from our custom Metro serializer
|
|
147
|
-
const results = await fetch(bundleUrl.toString());
|
|
148
|
-
const txt = await results.text();
|
|
149
|
-
try {
|
|
150
|
-
return JSON.parse(txt);
|
|
151
|
-
} catch (error) {
|
|
152
|
-
_log.Log.error("Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.");
|
|
153
|
-
debug(txt);
|
|
154
|
-
throw error;
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
137
|
const bundleStaticHtml = async ()=>{
|
|
158
138
|
const { getStaticContent } = await (0, _getStaticRenderFunctions).getStaticRenderFunctions(this.projectRoot, this.getDevServerUrl(), {
|
|
159
|
-
minify:
|
|
139
|
+
minify: false,
|
|
160
140
|
dev: mode !== "production",
|
|
161
141
|
// Ensure the API Routes are included
|
|
162
142
|
environment: "node"
|
|
@@ -165,8 +145,11 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
165
145
|
return await getStaticContent(location);
|
|
166
146
|
};
|
|
167
147
|
const [resources, staticHtml] = await Promise.all([
|
|
168
|
-
|
|
169
|
-
|
|
148
|
+
this.getStaticResourcesAsync({
|
|
149
|
+
mode,
|
|
150
|
+
minify
|
|
151
|
+
}),
|
|
152
|
+
bundleStaticHtml(),
|
|
170
153
|
]);
|
|
171
154
|
const content = await this.composeResourcesWithHtml({
|
|
172
155
|
mode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { createBundleUrlPath, resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { typescriptTypeGeneration } from '../type-generation';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 19000;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 19000 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }) {\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({ mode }: { mode: 'development' | 'production' }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify: mode === 'production',\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({ mode }: { mode: string }): Promise<SerialAsset[]> {\n const isDev = mode === 'development';\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n bundleUrl.searchParams.set('platform', 'web');\n bundleUrl.searchParams.set('dev', String(isDev));\n bundleUrl.searchParams.set('minify', String(!isDev));\n bundleUrl.searchParams.set('serializer.output', 'static');\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n try {\n return JSON.parse(txt);\n } catch (error: any) {\n // console.log('txt', txt);\n Log.exception(error);\n throw error;\n }\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n }: {\n mode: 'development' | 'production';\n }\n ) {\n const isDev = mode === 'development';\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleResources = async () => {\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n bundleUrl.searchParams.set('platform', 'web');\n bundleUrl.searchParams.set('dev', String(isDev));\n bundleUrl.searchParams.set('minify', String(!isDev));\n bundleUrl.searchParams.set('serializer.output', 'static');\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n try {\n return JSON.parse(txt);\n } catch (error) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n };\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: mode === 'production',\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([bundleResources(), bundleStaticHtml()]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n res.end(await this.renderStaticErrorAsync(error));\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n typescriptTypeGeneration({\n server: this.instance!.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","getStaticContent","minify","path","URL","getStaticResourcesAsync","devBundleUrlPathname","createBundleUrlPath","platform","mainModuleName","resolveMainModuleName","getConfig","searchParams","set","String","results","fetch","toString","txt","text","JSON","parse","error","Log","exception","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleResources","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","Error","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","req","res","next","endsWith","includes","setHeader","end","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","startTypeScriptServices","typescriptTypeGeneration","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","type","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { createBundleUrlPath, resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { typescriptTypeGeneration } from '../type-generation';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 19000;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 19000 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }) {\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: string;\n minify?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n try {\n return JSON.parse(txt);\n } catch (error: any) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n res.end(await this.renderStaticErrorAsync(error));\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n typescriptTypeGeneration({\n server: this.instance!.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","getStaticContent","path","URL","getStaticResourcesAsync","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","mainModuleName","resolveMainModuleName","getConfig","results","fetch","toString","txt","text","JSON","parse","error","Log","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","Error","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","req","res","next","endsWith","includes","setHeader","end","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","typescriptTypeGeneration","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","type","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ exports.setupNodeExternals = setupNodeExternals;
|
|
|
7
7
|
exports.isNodeExternal = isNodeExternal;
|
|
8
8
|
exports.METRO_EXTERNALS_FOLDER = exports.EXTERNAL_REQUIRE_NATIVE_POLYFILL = exports.EXTERNAL_REQUIRE_POLYFILL = exports.NODE_STDLIB_MODULES = void 0;
|
|
9
9
|
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
+
var _module = require("module");
|
|
10
11
|
var _path = _interopRequireDefault(require("path"));
|
|
11
12
|
function _interopRequireDefault(obj) {
|
|
12
13
|
return obj && obj.__esModule ? obj : {
|
|
@@ -14,37 +15,13 @@ function _interopRequireDefault(obj) {
|
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
const NODE_STDLIB_MODULES = [
|
|
17
|
-
"assert",
|
|
18
|
-
"async_hooks",
|
|
19
|
-
"buffer",
|
|
20
|
-
"child_process",
|
|
21
|
-
"cluster",
|
|
22
|
-
"crypto",
|
|
23
|
-
"dgram",
|
|
24
|
-
"dns",
|
|
25
|
-
"domain",
|
|
26
|
-
"events",
|
|
27
|
-
"fs",
|
|
28
18
|
"fs/promises",
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"querystring",
|
|
36
|
-
"readline",
|
|
37
|
-
"repl",
|
|
38
|
-
"stream",
|
|
39
|
-
"string_decoder",
|
|
40
|
-
"tls",
|
|
41
|
-
"tty",
|
|
42
|
-
"url",
|
|
43
|
-
"util",
|
|
44
|
-
"v8",
|
|
45
|
-
"vm",
|
|
46
|
-
"zlib",
|
|
47
|
-
];
|
|
19
|
+
...(_module.builtinModules || // @ts-expect-error
|
|
20
|
+
(process.binding ? Object.keys(process.binding("natives")) : []) || []).filter((x)=>!/^_|^(internal|v8|node-inspect)\/|\//.test(x) && ![
|
|
21
|
+
"sys"
|
|
22
|
+
].includes(x)
|
|
23
|
+
),
|
|
24
|
+
].sort();
|
|
48
25
|
exports.NODE_STDLIB_MODULES = NODE_STDLIB_MODULES;
|
|
49
26
|
const EXTERNAL_REQUIRE_POLYFILL = ".expo/metro/polyfill.js";
|
|
50
27
|
exports.EXTERNAL_REQUIRE_POLYFILL = EXTERNAL_REQUIRE_POLYFILL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/externals.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 fs from 'fs';\nimport path from 'path';\n\n// A list of the Node.js standard library modules
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/externals.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 fs from 'fs';\nimport { builtinModules } from 'module';\nimport path from 'path';\n\n// A list of the Node.js standard library modules that are currently\n// available,\nexport const NODE_STDLIB_MODULES: string[] = [\n 'fs/promises',\n ...(\n builtinModules ||\n // @ts-expect-error\n (process.binding ? Object.keys(process.binding('natives')) : []) ||\n []\n ).filter((x) => !/^_|^(internal|v8|node-inspect)\\/|\\//.test(x) && !['sys'].includes(x)),\n].sort();\n\nexport const EXTERNAL_REQUIRE_POLYFILL = '.expo/metro/polyfill.js';\nexport const EXTERNAL_REQUIRE_NATIVE_POLYFILL = '.expo/metro/polyfill.native.js';\nexport const METRO_EXTERNALS_FOLDER = '.expo/metro/externals';\n\nexport function getNodeExternalModuleId(fromModule: string, moduleId: string) {\n return path.relative(\n path.dirname(fromModule),\n path.join(METRO_EXTERNALS_FOLDER, moduleId, 'index.js')\n );\n}\n\nexport async function setupNodeExternals(projectRoot: string) {\n await tapExternalRequirePolyfill(projectRoot);\n await tapNodeShims(projectRoot);\n}\n\nasync function tapExternalRequirePolyfill(projectRoot: string) {\n await fs.promises.mkdir(path.join(projectRoot, path.dirname(EXTERNAL_REQUIRE_POLYFILL)), {\n recursive: true,\n });\n await fs.promises.writeFile(\n path.join(projectRoot, EXTERNAL_REQUIRE_POLYFILL),\n 'global.$$require_external = typeof window === \"undefined\" ? require : () => null;'\n );\n await fs.promises.writeFile(\n path.join(projectRoot, EXTERNAL_REQUIRE_NATIVE_POLYFILL),\n 'global.$$require_external = (moduleId) => {throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);}'\n );\n}\n\nexport function isNodeExternal(moduleName: string): string | null {\n const moduleId = moduleName.replace(/^node:/, '');\n if (NODE_STDLIB_MODULES.includes(moduleId)) {\n return moduleId;\n }\n return null;\n}\n\nfunction tapNodeShimContents(moduleId: string): string {\n return `module.exports = $$require_external('node:${moduleId}');`;\n}\n\n// Ensure Node.js shims which require using `$$require_external` are available inside the project.\nasync function tapNodeShims(projectRoot: string) {\n const externals: Record<string, string> = {};\n for (const moduleId of NODE_STDLIB_MODULES) {\n const shimDir = path.join(projectRoot, METRO_EXTERNALS_FOLDER, moduleId);\n const shimPath = path.join(shimDir, 'index.js');\n externals[moduleId] = shimPath;\n\n if (!fs.existsSync(shimPath)) {\n await fs.promises.mkdir(shimDir, { recursive: true });\n await fs.promises.writeFile(shimPath, tapNodeShimContents(moduleId));\n }\n }\n}\n"],"names":["getNodeExternalModuleId","setupNodeExternals","isNodeExternal","NODE_STDLIB_MODULES","builtinModules","process","binding","Object","keys","filter","x","test","includes","sort","EXTERNAL_REQUIRE_POLYFILL","EXTERNAL_REQUIRE_NATIVE_POLYFILL","METRO_EXTERNALS_FOLDER","fromModule","moduleId","path","relative","dirname","join","projectRoot","tapExternalRequirePolyfill","tapNodeShims","fs","promises","mkdir","recursive","writeFile","moduleName","replace","tapNodeShimContents","externals","shimDir","shimPath","existsSync"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/getCssModulesFromBundler.ts"],"sourcesContent":["import { MetroConfig } from '@expo/metro-config';\nimport crypto from 'crypto';\nimport type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/getCssModulesFromBundler.ts"],"sourcesContent":["import { MetroConfig } from '@expo/metro-config';\nimport crypto from 'crypto';\nimport type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\nimport type { ReadOnlyDependencies } from 'metro/src/DeltaBundler/types';\nimport type IncrementalBundler from 'metro/src/IncrementalBundler';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport path from 'path';\n\n// import { getAssetData } from 'metro/src/Assets';\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\ntype MetroModuleCSSMetadata = {\n code: string;\n lineCount: number;\n map: any[];\n};\n\nexport type CSSAsset = {\n // 'styles.css'\n originFilename: string;\n // '_expo/static/css/bc6aa0a69dcebf8e8cac1faa76705756.css'\n filename: string;\n // '\\ndiv {\\n background: cyan;\\n}\\n\\n'\n source: string;\n};\n\n// s = static\nconst STATIC_EXPORT_DIRECTORY = '_expo/static/css';\n\n/** @returns the static CSS assets used in a given bundle. CSS assets are only enabled if the `@expo/metro-config` `transformerPath` is used. */\nexport async function getCssModulesFromBundler(\n config: MetroConfig,\n incrementalBundler: IncrementalBundler,\n options: any\n): Promise<CSSAsset[]> {\n // Static CSS is a web-only feature.\n if (options.platform !== 'web') {\n return [];\n }\n\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n const dependencies = await incrementalBundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false }\n );\n\n return getCssModules(dependencies, {\n processModuleFilter: config.serializer.processModuleFilter,\n assetPlugins: config.transformer.assetPlugins,\n platform: transformOptions.platform,\n projectRoot: config.server.unstable_serverRoot ?? config.projectRoot,\n publicPath: config.transformer.publicPath,\n });\n}\n\nfunction hashString(str: string) {\n return crypto.createHash('md5').update(str).digest('hex');\n}\n\nfunction getCssModules(\n dependencies: ReadOnlyDependencies,\n { processModuleFilter, projectRoot }: Options\n) {\n const promises = [];\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module' &&\n path.relative(projectRoot, module.path) !== 'package.json'\n ) {\n const cssMetadata = getCssMetadata(module);\n if (cssMetadata) {\n const contents = cssMetadata.code;\n const filename = path.join(\n // Consistent location\n STATIC_EXPORT_DIRECTORY,\n // Hashed file contents + name for caching\n getFileName(module.path) + '-' + hashString(module.path + contents) + '.css'\n );\n promises.push({\n originFilename: path.relative(projectRoot, module.path),\n filename,\n source: contents,\n });\n }\n }\n }\n\n return promises;\n}\n\nfunction getCssMetadata(module: Module): MetroModuleCSSMetadata | null {\n const data = module.output[0]?.data;\n if (data && typeof data === 'object' && 'css' in data) {\n if (typeof data.css !== 'object' || !('code' in (data as any).css)) {\n throw new Error(\n `Unexpected CSS metadata in Metro module (${module.path}): ${JSON.stringify(data.css)}`\n );\n }\n return data.css as MetroModuleCSSMetadata;\n }\n return null;\n}\n\nexport function getFileName(module: string) {\n return path.basename(module).replace(/\\.[^.]+$/, '');\n}\n"],"names":["getCssModulesFromBundler","getFileName","STATIC_EXPORT_DIRECTORY","config","incrementalBundler","options","platform","entryFile","onProgress","resolverOptions","transformOptions","splitBundleOptions","dependencies","getDependencies","shallow","getCssModules","processModuleFilter","serializer","assetPlugins","transformer","projectRoot","server","unstable_serverRoot","publicPath","hashString","str","crypto","createHash","update","digest","promises","module","values","isJsModule","getJsOutput","type","path","relative","cssMetadata","getCssMetadata","contents","code","filename","join","push","originFilename","source","data","output","css","Error","JSON","stringify","basename","replace"],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ var _createDevServerMiddleware = require("../middleware/createDevServerMiddlewar
|
|
|
18
18
|
var _platformBundlers = require("../platformBundlers");
|
|
19
19
|
var _metroTerminalReporter = require("./MetroTerminalReporter");
|
|
20
20
|
var _resolveFromProject = require("./resolveFromProject");
|
|
21
|
+
var _router = require("./router");
|
|
21
22
|
var _runServerFork = require("./runServer-fork");
|
|
22
23
|
var _withMetroMultiPlatform = require("./withMetroMultiPlatform");
|
|
23
24
|
function _interopRequireDefault(obj) {
|
|
@@ -29,7 +30,7 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
|
|
|
29
30
|
skipSDKVersionRequirement: true,
|
|
30
31
|
skipPlugins: true
|
|
31
32
|
}).exp } = {}) {
|
|
32
|
-
var ref, ref1;
|
|
33
|
+
var ref, ref1, ref2, ref3;
|
|
33
34
|
let reportEvent;
|
|
34
35
|
const serverRoot = (0, _manifestMiddleware).getMetroServerRoot(projectRoot);
|
|
35
36
|
const terminal = new _metroCore.Terminal(process.stdout);
|
|
@@ -48,12 +49,13 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
|
|
|
48
49
|
...options
|
|
49
50
|
});
|
|
50
51
|
const platformBundlers = (0, _platformBundlers).getPlatformBundlers(exp);
|
|
51
|
-
var
|
|
52
|
+
var ref4, ref5;
|
|
52
53
|
config = await (0, _withMetroMultiPlatform).withMetroMultiPlatformAsync(projectRoot, {
|
|
54
|
+
routerDirectory: (ref4 = (ref = exp.extra) == null ? void 0 : (ref1 = ref.router) == null ? void 0 : ref1.unstable_src) != null ? ref4 : (0, _router).getRouterDirectory(projectRoot),
|
|
53
55
|
config,
|
|
54
56
|
platformBundlers,
|
|
55
|
-
isTsconfigPathsEnabled: !!((
|
|
56
|
-
webOutput: (
|
|
57
|
+
isTsconfigPathsEnabled: !!((ref2 = exp.experiments) == null ? void 0 : ref2.tsconfigPaths),
|
|
58
|
+
webOutput: (ref5 = (ref3 = exp.web) == null ? void 0 : ref3.output) != null ? ref5 : "single"
|
|
57
59
|
});
|
|
58
60
|
(0, _rudderstackClient).logEventAsync("metro config", (0, _getMetroProperties).getMetroProperties(projectRoot, exp, config));
|
|
59
61
|
return {
|
|
@@ -88,6 +90,7 @@ async function instantiateMetroAsync(metroBundler, options) {
|
|
|
88
90
|
middleware.use((0, _metroDebuggerMiddleware).createDebuggerTelemetryMiddleware(projectRoot, exp));
|
|
89
91
|
const { server: server1 , metro } = await (0, _runServerFork).runServer(metroBundler, metroConfig, {
|
|
90
92
|
hmrEnabled: true,
|
|
93
|
+
// @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api
|
|
91
94
|
websocketEndpoints,
|
|
92
95
|
watch: isWatchEnabled()
|
|
93
96
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { MetroDevServerOptions } from '@expo/dev-server';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\n\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createDevServerMiddleware } from '../middleware/createDevServerMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importExpoMetroConfig } from './resolveFromProject';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\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\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n }: { exp?: ExpoConfig } = {}\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n const ExpoMetroConfig = importExpoMetroConfig(projectRoot);\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n platformBundlers,\n isTsconfigPathsEnabled: !!exp.experiments?.tsconfigPaths,\n webOutput: exp.web?.output ?? 'single',\n });\n\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\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<MetroDevServerOptions, 'logger'>\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp }\n );\n\n const { middleware, websocketEndpoints, eventsSocketEndpoint, messageSocketEndpoint } =\n createDevServerMiddleware(projectRoot, {\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\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 middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n hmrEnabled: true,\n websocketEndpoints,\n watch: isWatchEnabled(),\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\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","projectRoot","options","exp","getConfig","skipSDKVersionRequirement","skipPlugins","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","experiments","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","middleware","websocketEndpoints","eventsSocketEndpoint","messageSocketEndpoint","createDevServerMiddleware","port","server","watchFolders","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","use","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","messageSocket","env","CI","Log","log","chalk"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { MetroDevServerOptions } from '@expo/dev-server';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\n\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createDevServerMiddleware } from '../middleware/createDevServerMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importExpoMetroConfig } from './resolveFromProject';\nimport { getRouterDirectory } from './router';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\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\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n }: { exp?: ExpoConfig } = {}\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n const ExpoMetroConfig = importExpoMetroConfig(projectRoot);\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n config,\n platformBundlers,\n isTsconfigPathsEnabled: !!exp.experiments?.tsconfigPaths,\n webOutput: exp.web?.output ?? 'single',\n });\n\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\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<MetroDevServerOptions, 'logger'>\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp }\n );\n\n const { middleware, websocketEndpoints, eventsSocketEndpoint, messageSocketEndpoint } =\n createDevServerMiddleware(projectRoot, {\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\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 middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n hmrEnabled: true,\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints,\n watch: isWatchEnabled(),\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\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","projectRoot","options","exp","getConfig","skipSDKVersionRequirement","skipPlugins","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","routerDirectory","extra","router","unstable_src","getRouterDirectory","isTsconfigPathsEnabled","experiments","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","middleware","websocketEndpoints","eventsSocketEndpoint","messageSocketEndpoint","createDevServerMiddleware","port","server","watchFolders","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","use","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","messageSocket","env","CI","Log","log","chalk"],"mappings":"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"}
|