@expo/cli 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +2 -2
- package/build/src/export/createMetadataJson.js +1 -0
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/exportApp.js +19 -7
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +54 -3
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +2 -2
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/writeContents.js +2 -2
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +6 -2
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +69 -47
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +67 -0
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -0
- package/build/src/start/server/metro/createServerRouteMiddleware.js +112 -0
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -0
- package/build/src/start/server/metro/fetchRouterManifest.js +60 -0
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -0
- package/build/src/start/server/metro/instantiateMetro.js +12 -12
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +70 -10
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +32 -0
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +22 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +4 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +5 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +2 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +3 -4
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +1 -3
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/package.json +7 -4
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.fetchManifest = fetchManifest;
|
|
6
|
+
exports.inflateManifest = inflateManifest;
|
|
7
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
8
|
+
var _router = require("./router");
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function getExpoRouteManifestBuilderAsync(projectRoot) {
|
|
15
|
+
return require((0, _resolveFrom).default(projectRoot, "expo-router/build/routes-manifest")).createRoutesManifest;
|
|
16
|
+
}
|
|
17
|
+
async function fetchManifest(projectRoot, options) {
|
|
18
|
+
const getManifest = getExpoRouteManifestBuilderAsync(projectRoot);
|
|
19
|
+
const paths = (0, _router).getRoutePaths(options.appDir);
|
|
20
|
+
// Get the serialized manifest
|
|
21
|
+
const jsonManifest = getManifest(paths);
|
|
22
|
+
if (!jsonManifest) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (!jsonManifest.htmlRoutes || !jsonManifest.apiRoutes) {
|
|
26
|
+
throw new Error("Routes manifest is malformed: " + JSON.stringify(jsonManifest, null, 2));
|
|
27
|
+
}
|
|
28
|
+
if (!options.asJson) {
|
|
29
|
+
// @ts-expect-error
|
|
30
|
+
return inflateManifest(jsonManifest);
|
|
31
|
+
}
|
|
32
|
+
// @ts-expect-error
|
|
33
|
+
return jsonManifest;
|
|
34
|
+
}
|
|
35
|
+
function inflateManifest(json) {
|
|
36
|
+
var ref, ref1, ref2;
|
|
37
|
+
return {
|
|
38
|
+
...json,
|
|
39
|
+
htmlRoutes: (ref = json.htmlRoutes) == null ? void 0 : ref.map((value)=>{
|
|
40
|
+
return {
|
|
41
|
+
...value,
|
|
42
|
+
namedRegex: new RegExp(value.namedRegex)
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
apiRoutes: (ref1 = json.apiRoutes) == null ? void 0 : ref1.map((value)=>{
|
|
46
|
+
return {
|
|
47
|
+
...value,
|
|
48
|
+
namedRegex: new RegExp(value.namedRegex)
|
|
49
|
+
};
|
|
50
|
+
}),
|
|
51
|
+
notFoundRoutes: (ref2 = json.notFoundRoutes) == null ? void 0 : ref2.map((value)=>{
|
|
52
|
+
return {
|
|
53
|
+
...value,
|
|
54
|
+
namedRegex: new RegExp(value.namedRegex)
|
|
55
|
+
};
|
|
56
|
+
})
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=fetchRouterManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/fetchRouterManifest.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 resolveFrom from 'resolve-from';\n\nimport { getRoutePaths } from './router';\n\nexport type ExpoRouterServerManifestV1Route<TRegex = string> = {\n page: string;\n routeKeys: Record<string, string>;\n namedRegex: TRegex;\n generated?: boolean;\n};\n\nexport type ExpoRouterServerManifestV1<TRegex = string> = {\n apiRoutes: ExpoRouterServerManifestV1Route<TRegex>[];\n htmlRoutes: ExpoRouterServerManifestV1Route<TRegex>[];\n notFoundRoutes: ExpoRouterServerManifestV1Route<TRegex>[];\n};\n\nfunction getExpoRouteManifestBuilderAsync(projectRoot: string) {\n return require(resolveFrom(projectRoot, 'expo-router/build/routes-manifest'))\n .createRoutesManifest as typeof import('expo-router/build/routes-manifest').createRoutesManifest;\n}\n\n// TODO: Simplify this now that we use Node.js directly, no need for the Metro bundler caching layer.\nexport async function fetchManifest<TRegex = string>(\n projectRoot: string,\n options: { asJson?: boolean; appDir: string }\n): Promise<ExpoRouterServerManifestV1<TRegex> | null> {\n const getManifest = getExpoRouteManifestBuilderAsync(projectRoot);\n const paths = getRoutePaths(options.appDir);\n // Get the serialized manifest\n const jsonManifest = getManifest(paths);\n\n if (!jsonManifest) {\n return null;\n }\n\n if (!jsonManifest.htmlRoutes || !jsonManifest.apiRoutes) {\n throw new Error('Routes manifest is malformed: ' + JSON.stringify(jsonManifest, null, 2));\n }\n\n if (!options.asJson) {\n // @ts-expect-error\n return inflateManifest(jsonManifest);\n }\n // @ts-expect-error\n return jsonManifest;\n}\n\n// Convert the serialized manifest to a usable format\nexport function inflateManifest(\n json: ExpoRouterServerManifestV1<string>\n): ExpoRouterServerManifestV1<RegExp> {\n return {\n ...json,\n htmlRoutes: json.htmlRoutes?.map((value) => {\n return {\n ...value,\n namedRegex: new RegExp(value.namedRegex),\n };\n }),\n apiRoutes: json.apiRoutes?.map((value) => {\n return {\n ...value,\n namedRegex: new RegExp(value.namedRegex),\n };\n }),\n notFoundRoutes: json.notFoundRoutes?.map((value) => {\n return {\n ...value,\n namedRegex: new RegExp(value.namedRegex),\n };\n }),\n };\n}\n"],"names":["fetchManifest","inflateManifest","getExpoRouteManifestBuilderAsync","projectRoot","require","resolveFrom","createRoutesManifest","options","getManifest","paths","getRoutePaths","appDir","jsonManifest","htmlRoutes","apiRoutes","Error","JSON","stringify","asJson","json","map","value","namedRegex","RegExp","notFoundRoutes"],"mappings":"AAMA;;;;QAuBsBA,aAAa,GAAbA,aAAa;QA0BnBC,eAAe,GAAfA,eAAe;AAjDP,IAAA,YAAc,kCAAd,cAAc,EAAA;AAER,IAAA,OAAU,WAAV,UAAU,CAAA;;;;;;AAexC,SAASC,gCAAgC,CAACC,WAAmB,EAAE;IAC7D,OAAOC,OAAO,CAACC,CAAAA,GAAAA,YAAW,AAAkD,CAAA,QAAlD,CAACF,WAAW,EAAE,mCAAmC,CAAC,CAAC,CAC1EG,oBAAoB,CAA4E;CACpG;AAGM,eAAeN,aAAa,CACjCG,WAAmB,EACnBI,OAA6C,EACO;IACpD,MAAMC,WAAW,GAAGN,gCAAgC,CAACC,WAAW,CAAC,AAAC;IAClE,MAAMM,KAAK,GAAGC,CAAAA,GAAAA,OAAa,AAAgB,CAAA,cAAhB,CAACH,OAAO,CAACI,MAAM,CAAC,AAAC;IAC5C,8BAA8B;IAC9B,MAAMC,YAAY,GAAGJ,WAAW,CAACC,KAAK,CAAC,AAAC;IAExC,IAAI,CAACG,YAAY,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAACA,YAAY,CAACC,UAAU,IAAI,CAACD,YAAY,CAACE,SAAS,EAAE;QACvD,MAAM,IAAIC,KAAK,CAAC,gCAAgC,GAAGC,IAAI,CAACC,SAAS,CAACL,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3F;IAED,IAAI,CAACL,OAAO,CAACW,MAAM,EAAE;QACnB,mBAAmB;QACnB,OAAOjB,eAAe,CAACW,YAAY,CAAC,CAAC;KACtC;IACD,mBAAmB;IACnB,OAAOA,YAAY,CAAC;CACrB;AAGM,SAASX,eAAe,CAC7BkB,IAAwC,EACJ;QAGtBA,GAAe,EAMhBA,IAAc,EAMTA,IAAmB;IAdrC,OAAO;QACL,GAAGA,IAAI;QACPN,UAAU,EAAEM,CAAAA,GAAe,GAAfA,IAAI,CAACN,UAAU,SAAK,GAApBM,KAAAA,CAAoB,GAApBA,GAAe,CAAEC,GAAG,CAAC,CAACC,KAAK,GAAK;YAC1C,OAAO;gBACL,GAAGA,KAAK;gBACRC,UAAU,EAAE,IAAIC,MAAM,CAACF,KAAK,CAACC,UAAU,CAAC;aACzC,CAAC;SACH,CAAC;QACFR,SAAS,EAAEK,CAAAA,IAAc,GAAdA,IAAI,CAACL,SAAS,SAAK,GAAnBK,KAAAA,CAAmB,GAAnBA,IAAc,CAAEC,GAAG,CAAC,CAACC,KAAK,GAAK;YACxC,OAAO;gBACL,GAAGA,KAAK;gBACRC,UAAU,EAAE,IAAIC,MAAM,CAACF,KAAK,CAACC,UAAU,CAAC;aACzC,CAAC;SACH,CAAC;QACFE,cAAc,EAAEL,CAAAA,IAAmB,GAAnBA,IAAI,CAACK,cAAc,SAAK,GAAxBL,KAAAA,CAAwB,GAAxBA,IAAmB,CAAEC,GAAG,CAAC,CAACC,KAAK,GAAK;YAClD,OAAO;gBACL,GAAGA,KAAK;gBACRC,UAAU,EAAE,IAAIC,MAAM,CAACF,KAAK,CAACC,UAAU,CAAC;aACzC,CAAC;SACH,CAAC;KACH,CAAC;CACH"}
|
|
@@ -49,7 +49,7 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
|
|
|
49
49
|
skipSDKVersionRequirement: true,
|
|
50
50
|
skipPlugins: true
|
|
51
51
|
}).exp , isExporting }) {
|
|
52
|
-
var ref, ref1
|
|
52
|
+
var ref, ref1;
|
|
53
53
|
let reportEvent;
|
|
54
54
|
const serverRoot = (0, _manifestMiddleware).getMetroServerRoot(projectRoot);
|
|
55
55
|
const terminal = new _metroCore.Terminal(process.stdout);
|
|
@@ -70,32 +70,32 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
|
|
|
70
70
|
if (// Requires SDK 50 for expo-assets hashAssetPlugin change.
|
|
71
71
|
!exp.sdkVersion || gteSdkVersion(exp, "50.0.0")) {
|
|
72
72
|
if (isExporting) {
|
|
73
|
-
var
|
|
74
|
-
var
|
|
73
|
+
var ref2;
|
|
74
|
+
var ref3;
|
|
75
75
|
// This token will be used in the asset plugin to ensure the path is correct for writing locally.
|
|
76
76
|
// @ts-expect-error: typed as readonly.
|
|
77
|
-
config.transformer.publicPath = `/assets?export_path=${((
|
|
77
|
+
config.transformer.publicPath = `/assets?export_path=${((ref3 = (ref2 = exp.experiments) == null ? void 0 : ref2.basePath) != null ? ref3 : "") + "/assets"}`;
|
|
78
78
|
} else {
|
|
79
79
|
// @ts-expect-error: typed as readonly
|
|
80
80
|
config.transformer.publicPath = "/assets/?unstable_path=.";
|
|
81
81
|
}
|
|
82
82
|
} else {
|
|
83
|
-
var
|
|
84
|
-
if (isExporting && ((
|
|
85
|
-
var
|
|
83
|
+
var ref4;
|
|
84
|
+
if (isExporting && ((ref4 = exp.experiments) == null ? void 0 : ref4.basePath)) {
|
|
85
|
+
var ref5;
|
|
86
86
|
// This token will be used in the asset plugin to ensure the path is correct for writing locally.
|
|
87
87
|
// @ts-expect-error: typed as readonly.
|
|
88
|
-
config.transformer.publicPath = (
|
|
88
|
+
config.transformer.publicPath = (ref5 = exp.experiments) == null ? void 0 : ref5.basePath;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
const platformBundlers = (0, _platformBundlers).getPlatformBundlers(exp);
|
|
92
|
-
var
|
|
92
|
+
var ref6;
|
|
93
93
|
config = await (0, _withMetroMultiPlatform).withMetroMultiPlatformAsync(projectRoot, {
|
|
94
|
-
routerDirectory: (
|
|
94
|
+
routerDirectory: (0, _router).getRouterDirectoryModuleIdWithManifest(projectRoot, exp),
|
|
95
95
|
config,
|
|
96
96
|
platformBundlers,
|
|
97
|
-
isTsconfigPathsEnabled: !!((
|
|
98
|
-
webOutput: (
|
|
97
|
+
isTsconfigPathsEnabled: !!((ref = exp.experiments) == null ? void 0 : ref.tsconfigPaths),
|
|
98
|
+
webOutput: (ref6 = (ref1 = exp.web) == null ? void 0 : ref1.output) != null ? ref6 : "single"
|
|
99
99
|
});
|
|
100
100
|
(0, _rudderstackClient).logEventAsync("metro config", (0, _getMetroProperties).getMetroProperties(projectRoot, exp, config));
|
|
101
101
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importCliServerApiFromProject, importExpoMetroConfig } from './resolveFromProject';\nimport { getRouterDirectory } from './router';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\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 createJsInspectorMiddleware from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\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 if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.basePath ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.basePath) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.basePath;\n }\n }\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 { isExporting }: { isExporting: boolean }\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, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n importCliServerApiFromProject(projectRoot);\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n middleware.use('/inspector', createJsInspectorMiddleware());\n\n // TODO: We can probably drop this now.\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 prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\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","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","skipPlugins","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","transformer","publicPath","experiments","basePath","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","routerDirectory","extra","router","unstable_src","getRouterDirectory","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","importCliServerApiFromProject","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","createJsInspectorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","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 type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importCliServerApiFromProject, importExpoMetroConfig } from './resolveFromProject';\nimport { getRouterDirectoryModuleIdWithManifest } from './router';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\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 createJsInspectorMiddleware from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\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 if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.basePath ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.basePath) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.basePath;\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n routerDirectory: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\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 { isExporting }: { isExporting: boolean }\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, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n importCliServerApiFromProject(projectRoot);\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n middleware.use('/inspector', createJsInspectorMiddleware());\n\n // TODO: We can probably drop this now.\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 prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\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","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","skipPlugins","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","transformer","publicPath","experiments","basePath","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","routerDirectory","getRouterDirectoryModuleIdWithManifest","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","importCliServerApiFromProject","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","createJsInspectorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","env","CI","Log","log","chalk"],"mappings":"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"}
|
|
@@ -17,13 +17,73 @@ function _interopRequireDefault(obj) {
|
|
|
17
17
|
default: obj
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
function fill(width) {
|
|
21
|
+
return Array(width).join(" ");
|
|
22
|
+
}
|
|
23
|
+
function formatPaths(config) {
|
|
24
|
+
const filePath = _chalk.default.reset(config.filePath);
|
|
25
|
+
return _chalk.default.dim("(") + filePath + _chalk.default.dim(`:${[
|
|
26
|
+
config.line,
|
|
27
|
+
config.col
|
|
28
|
+
].filter(Boolean).join(":")})`);
|
|
29
|
+
}
|
|
20
30
|
async function logMetroErrorWithStack(projectRoot, { stack , codeFrame , error }) {
|
|
31
|
+
// process.stdout.write('\u001b[0m'); // Reset attributes
|
|
32
|
+
// process.stdout.write('\u001bc'); // Reset the terminal
|
|
21
33
|
const { getStackFormattedLocation } = require((0, _resolveFrom).default(projectRoot, "@expo/metro-runtime/symbolicate"));
|
|
22
34
|
_log.Log.log();
|
|
23
35
|
_log.Log.log(_chalk.default.red("Metro error: ") + error.message);
|
|
24
36
|
_log.Log.log();
|
|
25
37
|
if (codeFrame) {
|
|
26
|
-
|
|
38
|
+
var ref;
|
|
39
|
+
const maxWarningLineLength = Math.max(200, process.stdout.columns);
|
|
40
|
+
const lineText = codeFrame.content;
|
|
41
|
+
const isPreviewTooLong = lineText.length > maxWarningLineLength;
|
|
42
|
+
const column = (ref = codeFrame.location) == null ? void 0 : ref.column;
|
|
43
|
+
// When the preview is too long, we skip reading the file and attempting to apply
|
|
44
|
+
// code coloring, this is because it can get very slow.
|
|
45
|
+
if (isPreviewTooLong) {
|
|
46
|
+
var ref1, ref2;
|
|
47
|
+
let previewLine = "";
|
|
48
|
+
let cursorLine = "";
|
|
49
|
+
const formattedPath = formatPaths({
|
|
50
|
+
filePath: codeFrame.fileName,
|
|
51
|
+
line: (ref1 = codeFrame.location) == null ? void 0 : ref1.row,
|
|
52
|
+
col: (ref2 = codeFrame.location) == null ? void 0 : ref2.column
|
|
53
|
+
});
|
|
54
|
+
// Create a curtailed preview line like:
|
|
55
|
+
// `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`
|
|
56
|
+
// If there is no text preview or column number, we can't do anything.
|
|
57
|
+
if (lineText && column != null) {
|
|
58
|
+
var ref3;
|
|
59
|
+
var ref4;
|
|
60
|
+
const rangeWindow = Math.round(Math.max((ref4 = (ref3 = codeFrame.fileName) == null ? void 0 : ref3.length) != null ? ref4 : 0, Math.max(80, process.stdout.columns)) / 2);
|
|
61
|
+
let minBounds = Math.max(0, column - rangeWindow);
|
|
62
|
+
const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);
|
|
63
|
+
previewLine = lineText.slice(minBounds, maxBounds);
|
|
64
|
+
// If we splice content off the start, then we should append `...`.
|
|
65
|
+
// This is unlikely to happen since we limit the activation size.
|
|
66
|
+
if (minBounds > 0) {
|
|
67
|
+
// Adjust the min bounds so the cursor is aligned after we add the "..."
|
|
68
|
+
minBounds -= 3;
|
|
69
|
+
previewLine = _chalk.default.dim("...") + previewLine;
|
|
70
|
+
}
|
|
71
|
+
if (maxBounds < lineText.length) {
|
|
72
|
+
previewLine += _chalk.default.dim("...");
|
|
73
|
+
}
|
|
74
|
+
// If the column property could be found, then use that to fix the cursor location which is often broken in regex.
|
|
75
|
+
cursorLine = (column == null ? "" : fill(column) + _chalk.default.reset("^")).slice(minBounds);
|
|
76
|
+
_log.Log.log([
|
|
77
|
+
formattedPath,
|
|
78
|
+
"",
|
|
79
|
+
previewLine,
|
|
80
|
+
cursorLine,
|
|
81
|
+
_chalk.default.dim("(error truncated)")
|
|
82
|
+
].join("\n"));
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
_log.Log.log(codeFrame.content);
|
|
86
|
+
}
|
|
27
87
|
}
|
|
28
88
|
if (stack == null ? void 0 : stack.length) {
|
|
29
89
|
_log.Log.log();
|
|
@@ -48,7 +108,7 @@ async function logMetroErrorWithStack(projectRoot, { stack , codeFrame , error
|
|
|
48
108
|
}
|
|
49
109
|
}
|
|
50
110
|
async function logMetroError(projectRoot, { error }) {
|
|
51
|
-
var ref,
|
|
111
|
+
var ref, ref5;
|
|
52
112
|
const { LogBoxLog , parseErrorStack } = require((0, _resolveFrom).default(projectRoot, "@expo/metro-runtime/symbolicate"));
|
|
53
113
|
const stack = parseErrorStack(error.stack);
|
|
54
114
|
const log = new LogBoxLog({
|
|
@@ -64,9 +124,9 @@ async function logMetroError(projectRoot, { error }) {
|
|
|
64
124
|
});
|
|
65
125
|
await new Promise((res)=>log.symbolicate("stack", res)
|
|
66
126
|
);
|
|
67
|
-
var
|
|
127
|
+
var ref6;
|
|
68
128
|
logMetroErrorWithStack(projectRoot, {
|
|
69
|
-
stack: (
|
|
129
|
+
stack: (ref6 = (ref = log.symbolicated) == null ? void 0 : (ref5 = ref.stack) == null ? void 0 : ref5.stack) != null ? ref6 : [],
|
|
70
130
|
codeFrame: log.codeFrame,
|
|
71
131
|
error
|
|
72
132
|
});
|
|
@@ -87,31 +147,31 @@ function logFromError({ error , projectRoot }) {
|
|
|
87
147
|
});
|
|
88
148
|
}
|
|
89
149
|
async function logMetroErrorAsync({ error , projectRoot }) {
|
|
90
|
-
var ref,
|
|
150
|
+
var ref, ref7;
|
|
91
151
|
const log = logFromError({
|
|
92
152
|
projectRoot,
|
|
93
153
|
error
|
|
94
154
|
});
|
|
95
155
|
await new Promise((res)=>log.symbolicate("stack", res)
|
|
96
156
|
);
|
|
97
|
-
var
|
|
157
|
+
var ref8;
|
|
98
158
|
logMetroErrorWithStack(projectRoot, {
|
|
99
|
-
stack: (
|
|
159
|
+
stack: (ref8 = (ref = log.symbolicated) == null ? void 0 : (ref7 = ref.stack) == null ? void 0 : ref7.stack) != null ? ref8 : [],
|
|
100
160
|
codeFrame: log.codeFrame,
|
|
101
161
|
error
|
|
102
162
|
});
|
|
103
163
|
}
|
|
104
164
|
async function getErrorOverlayHtmlAsync({ error , projectRoot }) {
|
|
105
|
-
var ref,
|
|
165
|
+
var ref, ref9;
|
|
106
166
|
const log = logFromError({
|
|
107
167
|
projectRoot,
|
|
108
168
|
error
|
|
109
169
|
});
|
|
110
170
|
await new Promise((res)=>log.symbolicate("stack", res)
|
|
111
171
|
);
|
|
112
|
-
var
|
|
172
|
+
var ref10;
|
|
113
173
|
logMetroErrorWithStack(projectRoot, {
|
|
114
|
-
stack: (
|
|
174
|
+
stack: (ref10 = (ref = log.symbolicated) == null ? void 0 : (ref9 = ref.stack) == null ? void 0 : ref9.stack) != null ? ref10 : [],
|
|
115
175
|
codeFrame: log.codeFrame,
|
|
116
176
|
error
|
|
117
177
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.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 chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\nimport { StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { Log } from '../../../log';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n// import type { CodeFrame, MetroStackFrame } from '@expo/metro-runtime/symbolicate';\n\ntype CodeFrame = {\n content: string;\n location?: {\n row: number;\n column: number;\n [key: string]: any;\n };\n fileName: string;\n};\n\ntype MetroStackFrame = StackFrame & { collapse?: boolean };\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame: CodeFrame;\n error: Error;\n }\n) {\n const { getStackFormattedLocation } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (codeFrame) {\n Log.log(codeFrame.content);\n }\n\n if (stack?.length) {\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n Log.log(lineItem);\n });\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport function logFromError({ error, projectRoot }: { error: Error; projectRoot: string }): {\n symbolicated: any;\n symbolicate: (type: string, callback: () => void) => void;\n codeFrame: CodeFrame;\n} {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n dev: true,\n platform: 'web',\n minify: false,\n environment: 'node',\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logFromError","logMetroErrorAsync","getErrorOverlayHtmlAsync","projectRoot","stack","codeFrame","error","getStackFormattedLocation","require","resolveFrom","Log","log","chalk","red","message","content","length","bold","stackProps","map","frame","title","methodName","subtitle","collapse","forEach","position","terminalLink","isSupported","lineItem","gray","dim","LogBoxLog","parseErrorStack","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","dev","platform","minify","environment","htmlWithJs","replace"],"mappings":"AAMA;;;;QAqBsBA,sBAAsB,GAAtBA,sBAAsB;QAmDtBC,aAAa,GAAbA,aAAa;QA6BnBC,YAAY,GAAZA,YAAY;QAyBNC,kBAAkB,GAAlBA,kBAAkB;QAmBlBC,wBAAwB,GAAxBA,wBAAwB;AAjJ5B,IAAA,MAAO,kCAAP,OAAO,EAAA;AACD,IAAA,YAAc,kCAAd,cAAc,EAAA;AAEb,IAAA,aAAe,kCAAf,eAAe,EAAA;AAEpB,IAAA,IAAc,WAAd,cAAc,CAAA;AACO,IAAA,yBAA6B,WAA7B,6BAA6B,CAAA;;;;;;AAe/D,eAAeJ,sBAAsB,CAC1CK,WAAmB,EACnB,EACEC,KAAK,CAAA,EACLC,SAAS,CAAA,EACTC,KAAK,CAAA,EAKN,EACD;IACA,MAAM,EAAEC,yBAAyB,CAAA,EAAE,GAAGC,OAAO,CAC3CC,CAAAA,GAAAA,YAAW,AAAgD,CAAA,QAAhD,CAACN,WAAW,EAAE,iCAAiC,CAAC,CAC5D,AAAC;IAEFO,IAAG,IAAA,CAACC,GAAG,EAAE,CAAC;IACVD,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,QAAA,CAACC,GAAG,CAAC,eAAe,CAAC,GAAGP,KAAK,CAACQ,OAAO,CAAC,CAAC;IACpDJ,IAAG,IAAA,CAACC,GAAG,EAAE,CAAC;IAEV,IAAIN,SAAS,EAAE;QACbK,IAAG,IAAA,CAACC,GAAG,CAACN,SAAS,CAACU,OAAO,CAAC,CAAC;KAC5B;IAED,IAAIX,KAAK,QAAQ,GAAbA,KAAAA,CAAa,GAAbA,KAAK,CAAEY,MAAM,EAAE;QACjBN,IAAG,IAAA,CAACC,GAAG,EAAE,CAAC;QACVD,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,QAAA,CAACK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAEhC,MAAMC,UAAU,GAAGd,KAAK,CAACe,GAAG,CAAC,CAACC,KAAK,GAAK;YACtC,OAAO;gBACLC,KAAK,EAAED,KAAK,CAACE,UAAU;gBACvBC,QAAQ,EAAEhB,yBAAyB,CAACJ,WAAW,EAAEiB,KAAK,CAAC;gBACvDI,QAAQ,EAAEJ,KAAK,CAACI,QAAQ;aACzB,CAAC;SACH,CAAC,AAAC;QAEHN,UAAU,CAACO,OAAO,CAAC,CAACL,KAAK,GAAK;YAC5B,MAAMM,QAAQ,GAAGC,aAAY,QAAA,CAACC,WAAW,GACrCD,CAAAA,GAAAA,aAAY,AAAgC,CAAA,QAAhC,CAACP,KAAK,CAACG,QAAQ,EAAEH,KAAK,CAACG,QAAQ,CAAC,GAC5CH,KAAK,CAACG,QAAQ,AAAC;YACnB,IAAIM,QAAQ,GAAGjB,MAAK,QAAA,CAACkB,IAAI,CAAC,CAAC,EAAE,EAAEV,KAAK,CAACC,KAAK,CAAC,EAAE,EAAEK,QAAQ,CAAC,CAAC,CAAC,CAAC,AAAC;YAC5D,IAAIN,KAAK,CAACI,QAAQ,EAAE;gBAClBK,QAAQ,GAAGjB,MAAK,QAAA,CAACmB,GAAG,CAACF,QAAQ,CAAC,CAAC;aAChC;YACDnB,IAAG,IAAA,CAACC,GAAG,CAACkB,QAAQ,CAAC,CAAC;SACnB,CAAC,CAAC;KACJ,MAAM;QACLnB,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,QAAA,CAACkB,IAAI,CAAC,CAAC,EAAE,EAAExB,KAAK,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;CACF;AAEM,eAAeL,aAAa,CAACI,WAAmB,EAAE,EAAEG,KAAK,CAAA,EAAoB,EAAE;QAsB3EK,GAAgB;IArBzB,MAAM,EAAEqB,SAAS,CAAA,EAAEC,eAAe,CAAA,EAAE,GAAGzB,OAAO,CAC5CC,CAAAA,GAAAA,YAAW,AAAgD,CAAA,QAAhD,CAACN,WAAW,EAAE,iCAAiC,CAAC,CAC5D,AAAC;IAEF,MAAMC,KAAK,GAAG6B,eAAe,CAAC3B,KAAK,CAACF,KAAK,CAAC,AAAC;IAE3C,MAAMO,GAAG,GAAG,IAAIqB,SAAS,CAAC;QACxBE,KAAK,EAAE,QAAQ;QACfpB,OAAO,EAAE;YACPC,OAAO,EAAET,KAAK,CAACQ,OAAO;YACtBqB,aAAa,EAAE,EAAE;SAClB;QACDC,gBAAgB,EAAE,KAAK;QACvBhC,KAAK;QACLiC,QAAQ,EAAE,QAAQ;QAClBC,cAAc,EAAE,EAAE;KACnB,CAAC,AAAC;IAEH,MAAM,IAAIC,OAAO,CAAC,CAACC,GAAG,GAAK7B,GAAG,CAAC8B,WAAW,CAAC,OAAO,EAAED,GAAG,CAAC;IAAA,CAAC,CAAC;QAGjD7B,IAA8B;IADvCb,sBAAsB,CAACK,WAAW,EAAE;QAClCC,KAAK,EAAEO,CAAAA,IAA8B,GAA9BA,CAAAA,GAAgB,GAAhBA,GAAG,CAAC+B,YAAY,SAAO,GAAvB/B,KAAAA,CAAuB,GAAvBA,QAAAA,GAAgB,CAAEP,KAAK,SAAA,GAAvBO,KAAAA,CAAuB,QAAEP,KAAK,AAAP,YAAvBO,IAA8B,GAAI,EAAE;QAC3CN,SAAS,EAAEM,GAAG,CAACN,SAAS;QACxBC,KAAK;KACN,CAAC,CAAC;CACJ;AAGM,SAASN,YAAY,CAAC,EAAEM,KAAK,CAAA,EAAEH,WAAW,CAAA,EAAyC,EAIxF;IACA,MAAM,EAAE6B,SAAS,CAAA,EAAEC,eAAe,CAAA,EAAE,GAAGzB,OAAO,CAC5CC,CAAAA,GAAAA,YAAW,AAAgD,CAAA,QAAhD,CAACN,WAAW,EAAE,iCAAiC,CAAC,CAC5D,AAAC;IAEF,MAAMC,KAAK,GAAG6B,eAAe,CAAC3B,KAAK,CAACF,KAAK,CAAC,AAAC;IAE3C,OAAO,IAAI4B,SAAS,CAAC;QACnBE,KAAK,EAAE,QAAQ;QACfpB,OAAO,EAAE;YACPC,OAAO,EAAET,KAAK,CAACQ,OAAO;YACtBqB,aAAa,EAAE,EAAE;SAClB;QACDC,gBAAgB,EAAE,KAAK;QACvBhC,KAAK;QACLiC,QAAQ,EAAE,QAAQ;QAClBC,cAAc,EAAE,EAAE;KACnB,CAAC,CAAC;CACJ;AAGM,eAAerC,kBAAkB,CAAC,EACvCK,KAAK,CAAA,EACLH,WAAW,CAAA,EAIZ,EAAE;QAMQQ,GAAgB;IALzB,MAAMA,GAAG,GAAGX,YAAY,CAAC;QAAEG,WAAW;QAAEG,KAAK;KAAE,CAAC,AAAC;IAEjD,MAAM,IAAIiC,OAAO,CAAO,CAACC,GAAG,GAAK7B,GAAG,CAAC8B,WAAW,CAAC,OAAO,EAAED,GAAG,CAAC;IAAA,CAAC,CAAC;QAGvD7B,IAA8B;IADvCb,sBAAsB,CAACK,WAAW,EAAE;QAClCC,KAAK,EAAEO,CAAAA,IAA8B,GAA9BA,CAAAA,GAAgB,GAAhBA,GAAG,CAAC+B,YAAY,SAAO,GAAvB/B,KAAAA,CAAuB,GAAvBA,QAAAA,GAAgB,CAAEP,KAAK,SAAA,GAAvBO,KAAAA,CAAuB,QAAEP,KAAK,AAAP,YAAvBO,IAA8B,GAAI,EAAE;QAC3CN,SAAS,EAAEM,GAAG,CAACN,SAAS;QACxBC,KAAK;KACN,CAAC,CAAC;CACJ;AAGM,eAAeJ,wBAAwB,CAAC,EAC7CI,KAAK,CAAA,EACLH,WAAW,CAAA,EAIZ,EAAE;QAMQQ,GAAgB;IALzB,MAAMA,GAAG,GAAGX,YAAY,CAAC;QAAEG,WAAW;QAAEG,KAAK;KAAE,CAAC,AAAC;IAEjD,MAAM,IAAIiC,OAAO,CAAO,CAACC,GAAG,GAAK7B,GAAG,CAAC8B,WAAW,CAAC,OAAO,EAAED,GAAG,CAAC;IAAA,CAAC,CAAC;QAGvD7B,IAA8B;IADvCb,sBAAsB,CAACK,WAAW,EAAE;QAClCC,KAAK,EAAEO,CAAAA,IAA8B,GAA9BA,CAAAA,GAAgB,GAAhBA,GAAG,CAAC+B,YAAY,SAAO,GAAvB/B,KAAAA,CAAuB,GAAvBA,QAAAA,GAAgB,CAAEP,KAAK,SAAA,GAAvBO,KAAAA,CAAuB,QAAEP,KAAK,AAAP,YAAvBO,IAA8B,GAAI,EAAE;QAC3CN,SAAS,EAAEM,GAAG,CAACN,SAAS;QACxBC,KAAK;KACN,CAAC,CAAC;IAEH,MAAMqC,aAAa,GAAG;QACpBC,gBAAgB,EAAE,CAAC;QACnBC,UAAU,EAAE,KAAK;QACjBC,IAAI,EAAE;YAACnC,GAAG;SAAC;KACZ,AAAC;IACF,MAAMoC,IAAI,GAAG,CAAC,yLAAyL,EAAEC,IAAI,CAACC,SAAS,CACrNN,aAAa,CACd,CAAC,uBAAuB,CAAC,AAAC;IAE3B,MAAMO,iBAAiB,GAAG,MAAMC,CAAAA,GAAAA,yBAAwB,AAWvD,CAAA,yBAXuD,CACtDhD,WAAW,EACX,wBAAwB;IACxB,EAAE,EACFM,CAAAA,GAAAA,YAAW,AAAmC,CAAA,QAAnC,CAACN,WAAW,EAAE,oBAAoB,CAAC,EAC9C;QACEiD,GAAG,EAAE,IAAI;QACTC,QAAQ,EAAE,KAAK;QACfC,MAAM,EAAE,KAAK;QACbC,WAAW,EAAE,MAAM;KACpB,CACF,AAAC;IAEF,MAAMC,UAAU,GAAGT,IAAI,CAACU,OAAO,CAAC,SAAS,EAAE,CAAC,YAAY,EAAEP,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,AAAC;IAChG,OAAOM,UAAU,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.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 chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\nimport { StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { Log } from '../../../log';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n// import type { CodeFrame, MetroStackFrame } from '@expo/metro-runtime/symbolicate';\n\ntype CodeFrame = {\n content: string;\n location?: {\n row: number;\n column: number;\n [key: string]: any;\n };\n fileName: string;\n};\n\ntype MetroStackFrame = StackFrame & { collapse?: boolean };\n\nfunction fill(width: number): string {\n return Array(width).join(' ');\n}\n\nfunction formatPaths(config: { filePath: string | null; line?: number; col?: number }) {\n const filePath = chalk.reset(config.filePath);\n return (\n chalk.dim('(') +\n filePath +\n chalk.dim(`:${[config.line, config.col].filter(Boolean).join(':')})`)\n );\n}\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame: CodeFrame;\n error: Error;\n }\n) {\n // process.stdout.write('\\u001b[0m'); // Reset attributes\n // process.stdout.write('\\u001bc'); // Reset the terminal\n\n const { getStackFormattedLocation } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (codeFrame) {\n const maxWarningLineLength = Math.max(200, process.stdout.columns);\n\n const lineText = codeFrame.content;\n const isPreviewTooLong = lineText.length > maxWarningLineLength;\n const column = codeFrame.location?.column;\n // When the preview is too long, we skip reading the file and attempting to apply\n // code coloring, this is because it can get very slow.\n if (isPreviewTooLong) {\n let previewLine = '';\n let cursorLine = '';\n\n const formattedPath = formatPaths({\n filePath: codeFrame.fileName,\n line: codeFrame.location?.row,\n col: codeFrame.location?.column,\n });\n // Create a curtailed preview line like:\n // `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`\n // If there is no text preview or column number, we can't do anything.\n if (lineText && column != null) {\n const rangeWindow = Math.round(\n Math.max(codeFrame.fileName?.length ?? 0, Math.max(80, process.stdout.columns)) / 2\n );\n let minBounds = Math.max(0, column - rangeWindow);\n const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);\n previewLine = lineText.slice(minBounds, maxBounds);\n\n // If we splice content off the start, then we should append `...`.\n // This is unlikely to happen since we limit the activation size.\n if (minBounds > 0) {\n // Adjust the min bounds so the cursor is aligned after we add the \"...\"\n minBounds -= 3;\n previewLine = chalk.dim('...') + previewLine;\n }\n if (maxBounds < lineText.length) {\n previewLine += chalk.dim('...');\n }\n\n // If the column property could be found, then use that to fix the cursor location which is often broken in regex.\n cursorLine = (column == null ? '' : fill(column) + chalk.reset('^')).slice(minBounds);\n\n Log.log(\n [formattedPath, '', previewLine, cursorLine, chalk.dim('(error truncated)')].join('\\n')\n );\n }\n } else {\n Log.log(codeFrame.content);\n }\n }\n\n if (stack?.length) {\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n Log.log(lineItem);\n });\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport function logFromError({ error, projectRoot }: { error: Error; projectRoot: string }): {\n symbolicated: any;\n symbolicate: (type: string, callback: () => void) => void;\n codeFrame: CodeFrame;\n} {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n dev: true,\n platform: 'web',\n minify: false,\n environment: 'node',\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logFromError","logMetroErrorAsync","getErrorOverlayHtmlAsync","fill","width","Array","join","formatPaths","config","filePath","chalk","reset","dim","line","col","filter","Boolean","projectRoot","stack","codeFrame","error","getStackFormattedLocation","require","resolveFrom","Log","log","red","message","maxWarningLineLength","Math","max","process","stdout","columns","lineText","content","isPreviewTooLong","length","column","location","previewLine","cursorLine","formattedPath","fileName","row","rangeWindow","round","minBounds","maxBounds","min","slice","bold","stackProps","map","frame","title","methodName","subtitle","collapse","forEach","position","terminalLink","isSupported","lineItem","gray","LogBoxLog","parseErrorStack","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","dev","platform","minify","environment","htmlWithJs","replace"],"mappings":"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"}
|
|
@@ -3,8 +3,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
exports.getAppRouterRelativeEntryPath = getAppRouterRelativeEntryPath;
|
|
6
|
+
exports.getRouterDirectoryModuleIdWithManifest = getRouterDirectoryModuleIdWithManifest;
|
|
7
|
+
exports.getRouterDirectoryWithManifest = getRouterDirectoryWithManifest;
|
|
6
8
|
exports.getRouterDirectory = getRouterDirectory;
|
|
9
|
+
exports.isApiRouteConvention = isApiRouteConvention;
|
|
10
|
+
exports.getApiRoutesForDirectory = getApiRoutesForDirectory;
|
|
11
|
+
exports.getRoutePaths = getRoutePaths;
|
|
7
12
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
13
|
+
var _glob = require("glob");
|
|
8
14
|
var _path = _interopRequireDefault(require("path"));
|
|
9
15
|
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
10
16
|
var _log = require("../../../log");
|
|
@@ -35,6 +41,14 @@ function getAppRouterRelativeEntryPath(projectRoot, routerDirectory = getRouterD
|
|
|
35
41
|
}
|
|
36
42
|
return _path.default.join(projectRoot, "node_modules/expo-router/entry");
|
|
37
43
|
}
|
|
44
|
+
function getRouterDirectoryModuleIdWithManifest(projectRoot, exp) {
|
|
45
|
+
var ref, ref1;
|
|
46
|
+
var ref2;
|
|
47
|
+
return (ref2 = (ref = exp.extra) == null ? void 0 : (ref1 = ref.router) == null ? void 0 : ref1.unstable_src) != null ? ref2 : getRouterDirectory(projectRoot);
|
|
48
|
+
}
|
|
49
|
+
function getRouterDirectoryWithManifest(projectRoot, exp) {
|
|
50
|
+
return _path.default.join(projectRoot, getRouterDirectoryModuleIdWithManifest(projectRoot, exp));
|
|
51
|
+
}
|
|
38
52
|
function getRouterDirectory(projectRoot) {
|
|
39
53
|
// more specific directories first
|
|
40
54
|
if ((0, _dir).directoryExistsSync(_path.default.join(projectRoot, "src/app"))) {
|
|
@@ -44,5 +58,23 @@ function getRouterDirectory(projectRoot) {
|
|
|
44
58
|
_log.Log.debug("Using app as the root directory for Expo Router.");
|
|
45
59
|
return "app";
|
|
46
60
|
}
|
|
61
|
+
function isApiRouteConvention(name) {
|
|
62
|
+
return /\+api\.[tj]sx?$/.test(name);
|
|
63
|
+
}
|
|
64
|
+
function getApiRoutesForDirectory(cwd) {
|
|
65
|
+
return (0, _glob).sync("**/*+api.@(ts|tsx|js|jsx)", {
|
|
66
|
+
cwd,
|
|
67
|
+
absolute: true
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function getRoutePaths(cwd) {
|
|
71
|
+
return (0, _glob).sync("**/*.@(ts|tsx|js|jsx)", {
|
|
72
|
+
cwd
|
|
73
|
+
}).map((p)=>"./" + normalizePaths(p)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
function normalizePaths(p) {
|
|
77
|
+
return p.replace(/\\/g, "/");
|
|
78
|
+
}
|
|
47
79
|
|
|
48
80
|
//# sourceMappingURL=router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/router.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { Log } from '../../../log';\nimport { directoryExistsSync } from '../../../utils/dir';\n\nconst debug = require('debug')('expo:start:server:metro:router') as typeof console.log;\n\n/**\n * Get the relative path for requiring the `/app` folder relative to the `expo-router/entry` file.\n * This mechanism does require the server to restart after the `expo-router` package is installed.\n */\nexport function getAppRouterRelativeEntryPath(\n projectRoot: string,\n routerDirectory: string = getRouterDirectory(projectRoot)\n): string | undefined {\n // Auto pick App entry\n const routerEntry =\n resolveFrom.silent(projectRoot, 'expo-router/entry') ?? getFallbackEntryRoot(projectRoot);\n if (!routerEntry) {\n return undefined;\n }\n // It doesn't matter if the app folder exists.\n const appFolder = path.join(projectRoot, routerDirectory);\n const appRoot = path.relative(path.dirname(routerEntry), appFolder);\n debug('routerEntry', routerEntry, appFolder, appRoot);\n return appRoot;\n}\n\n/** If the `expo-router` package is not installed, then use the `expo` package to determine where the node modules are relative to the project. */\nfunction getFallbackEntryRoot(projectRoot: string): string {\n const expoRoot = resolveFrom.silent(projectRoot, 'expo/package.json');\n if (expoRoot) {\n return path.join(path.dirname(path.dirname(expoRoot)), 'expo-router/entry');\n }\n return path.join(projectRoot, 'node_modules/expo-router/entry');\n}\n\nexport function getRouterDirectory(projectRoot: string): string {\n // more specific directories first\n if (directoryExistsSync(path.join(projectRoot, 'src/app'))) {\n Log.log(chalk.gray('Using src/app as the root directory for Expo Router.'));\n return 'src/app';\n }\n\n Log.debug('Using app as the root directory for Expo Router.');\n return 'app';\n}\n"],"names":["getAppRouterRelativeEntryPath","getRouterDirectory","debug","require","projectRoot","routerDirectory","resolveFrom","routerEntry","silent","getFallbackEntryRoot","undefined","appFolder","path","join","appRoot","relative","dirname","expoRoot","directoryExistsSync","Log","log","chalk","gray"],"mappings":"AAAA;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/router.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { Log } from '../../../log';\nimport { directoryExistsSync } from '../../../utils/dir';\n\nconst debug = require('debug')('expo:start:server:metro:router') as typeof console.log;\n\n/**\n * Get the relative path for requiring the `/app` folder relative to the `expo-router/entry` file.\n * This mechanism does require the server to restart after the `expo-router` package is installed.\n */\nexport function getAppRouterRelativeEntryPath(\n projectRoot: string,\n routerDirectory: string = getRouterDirectory(projectRoot)\n): string | undefined {\n // Auto pick App entry\n const routerEntry =\n resolveFrom.silent(projectRoot, 'expo-router/entry') ?? getFallbackEntryRoot(projectRoot);\n if (!routerEntry) {\n return undefined;\n }\n // It doesn't matter if the app folder exists.\n const appFolder = path.join(projectRoot, routerDirectory);\n const appRoot = path.relative(path.dirname(routerEntry), appFolder);\n debug('routerEntry', routerEntry, appFolder, appRoot);\n return appRoot;\n}\n\n/** If the `expo-router` package is not installed, then use the `expo` package to determine where the node modules are relative to the project. */\nfunction getFallbackEntryRoot(projectRoot: string): string {\n const expoRoot = resolveFrom.silent(projectRoot, 'expo/package.json');\n if (expoRoot) {\n return path.join(path.dirname(path.dirname(expoRoot)), 'expo-router/entry');\n }\n return path.join(projectRoot, 'node_modules/expo-router/entry');\n}\n\nexport function getRouterDirectoryModuleIdWithManifest(\n projectRoot: string,\n exp: ExpoConfig\n): string {\n return exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot);\n}\n\nexport function getRouterDirectoryWithManifest(projectRoot: string, exp: ExpoConfig): string {\n return path.join(projectRoot, getRouterDirectoryModuleIdWithManifest(projectRoot, exp));\n}\n\nexport function getRouterDirectory(projectRoot: string): string {\n // more specific directories first\n if (directoryExistsSync(path.join(projectRoot, 'src/app'))) {\n Log.log(chalk.gray('Using src/app as the root directory for Expo Router.'));\n return 'src/app';\n }\n\n Log.debug('Using app as the root directory for Expo Router.');\n return 'app';\n}\n\nexport function isApiRouteConvention(name: string): boolean {\n return /\\+api\\.[tj]sx?$/.test(name);\n}\n\nexport function getApiRoutesForDirectory(cwd: string) {\n return globSync('**/*+api.@(ts|tsx|js|jsx)', {\n cwd,\n absolute: true,\n });\n}\n\n// Used to emulate a context module, but way faster. TODO: May need to adjust the extensions to stay in sync with Metro.\nexport function getRoutePaths(cwd: string) {\n return globSync('**/*.@(ts|tsx|js|jsx)', {\n cwd,\n }).map((p) => './' + normalizePaths(p));\n}\n\nfunction normalizePaths(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n"],"names":["getAppRouterRelativeEntryPath","getRouterDirectoryModuleIdWithManifest","getRouterDirectoryWithManifest","getRouterDirectory","isApiRouteConvention","getApiRoutesForDirectory","getRoutePaths","debug","require","projectRoot","routerDirectory","resolveFrom","routerEntry","silent","getFallbackEntryRoot","undefined","appFolder","path","join","appRoot","relative","dirname","expoRoot","exp","extra","router","unstable_src","directoryExistsSync","Log","log","chalk","gray","name","test","cwd","globSync","absolute","map","p","normalizePaths","replace"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
+
exports.observeApiRouteChanges = observeApiRouteChanges;
|
|
5
6
|
exports.waitForMetroToObserveTypeScriptFile = waitForMetroToObserveTypeScriptFile;
|
|
6
7
|
exports.observeFileChanges = observeFileChanges;
|
|
7
8
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -11,6 +12,27 @@ function _interopRequireDefault(obj) {
|
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
14
|
const debug = require("debug")("expo:start:server:metro:waitForTypescript");
|
|
15
|
+
function observeApiRouteChanges(projectRoot, runner, callback) {
|
|
16
|
+
const watcher = runner.metro.getBundler().getBundler().getWatcher();
|
|
17
|
+
const appDir = _path.default.join(projectRoot, "app");
|
|
18
|
+
const listener = ({ eventsQueue })=>{
|
|
19
|
+
for (const event of eventsQueue){
|
|
20
|
+
if (// event.type === 'add' &&
|
|
21
|
+
// event.metadata?.type !== 'd' &&
|
|
22
|
+
// We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.
|
|
23
|
+
!/node_modules/.test(event.filePath) && event.filePath.startsWith(appDir)) {
|
|
24
|
+
const { filePath } = event;
|
|
25
|
+
callback(filePath, event.type);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
watcher.addListener("change", listener);
|
|
30
|
+
const off = ()=>{
|
|
31
|
+
watcher.removeListener("change", listener);
|
|
32
|
+
};
|
|
33
|
+
runner.server.addListener == null ? void 0 : runner.server.addListener("close", off);
|
|
34
|
+
return off;
|
|
35
|
+
}
|
|
14
36
|
function waitForMetroToObserveTypeScriptFile(projectRoot, runner, callback) {
|
|
15
37
|
const watcher = runner.metro.getBundler().getBundler().getWatcher();
|
|
16
38
|
const tsconfigPath = _path.default.join(projectRoot, "tsconfig.json");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/waitForMetroToObserveTypeScriptFile.ts"],"sourcesContent":["import path from 'path';\n\nimport type { ServerLike } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:metro:waitForTypescript') as typeof console.log;\n\n/**\n * Use the native file watcher / Metro ruleset to detect if a\n * TypeScript file is added to the project during development.\n */\nexport function waitForMetroToObserveTypeScriptFile(\n projectRoot: string,\n runner: {\n metro: import('metro').Server;\n server: ServerLike;\n },\n callback: () => Promise<void>\n): () => void {\n const watcher = runner.metro.getBundler().getBundler().getWatcher();\n\n const tsconfigPath = path.join(projectRoot, 'tsconfig.json');\n\n const listener = ({\n eventsQueue,\n }: {\n eventsQueue: {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n }[];\n }) => {\n for (const event of eventsQueue) {\n if (\n event.type === 'add' &&\n event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath)\n ) {\n const { filePath } = event;\n // Is TypeScript?\n if (\n // If the user adds a TypeScript file to the observable files in their project.\n /\\.tsx?$/.test(filePath) ||\n // Or if the user adds a tsconfig.json file to the project root.\n filePath === tsconfigPath\n ) {\n debug('Detected TypeScript file added to the project: ', filePath);\n callback();\n off();\n return;\n }\n }\n }\n };\n\n debug('Waiting for TypeScript files to be added to the project...');\n watcher.addListener('change', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n };\n\n runner.server.addListener?.('close', off);\n return off;\n}\n\nexport function observeFileChanges(\n runner: {\n metro: import('metro').Server;\n server: ServerLike;\n },\n files: string[],\n callback: () => void | Promise<void>\n): () => void {\n const watcher = runner.metro.getBundler().getBundler().getWatcher();\n\n const listener = ({\n eventsQueue,\n }: {\n eventsQueue: {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n }[];\n }) => {\n for (const event of eventsQueue) {\n if (\n // event.type === 'add' &&\n event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath)\n ) {\n const { filePath } = event;\n // Is TypeScript?\n if (files.includes(filePath)) {\n debug('Observed change:', filePath);\n callback();\n return;\n }\n }\n }\n };\n\n debug('Watching file changes:', files);\n watcher.addListener('change', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n };\n\n runner.server.addListener?.('close', off);\n return off;\n}\n"],"names":["waitForMetroToObserveTypeScriptFile","observeFileChanges","debug","require","projectRoot","runner","callback","watcher","metro","getBundler","getWatcher","
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/waitForMetroToObserveTypeScriptFile.ts"],"sourcesContent":["import path from 'path';\n\nimport type { ServerLike } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:metro:waitForTypescript') as typeof console.log;\n\n/**\n * Use the native file watcher / Metro ruleset to detect if a\n * TypeScript file is added to the project during development.\n */\nexport function observeApiRouteChanges(\n projectRoot: string,\n runner: {\n metro: import('metro').Server;\n server: ServerLike;\n },\n callback: (filepath: string, operation: string) => Promise<void>\n): () => void {\n const watcher = runner.metro.getBundler().getBundler().getWatcher();\n\n const appDir = path.join(projectRoot, 'app');\n const listener = ({\n eventsQueue,\n }: {\n eventsQueue: {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n }[];\n }) => {\n for (const event of eventsQueue) {\n if (\n // event.type === 'add' &&\n // event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath) &&\n event.filePath.startsWith(appDir)\n ) {\n const { filePath } = event;\n callback(filePath, event.type);\n }\n }\n };\n\n watcher.addListener('change', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n };\n\n runner.server.addListener?.('close', off);\n return off;\n}\n\n/**\n * Use the native file watcher / Metro ruleset to detect if a\n * TypeScript file is added to the project during development.\n */\nexport function waitForMetroToObserveTypeScriptFile(\n projectRoot: string,\n runner: {\n metro: import('metro').Server;\n server: ServerLike;\n },\n callback: () => Promise<void>\n): () => void {\n const watcher = runner.metro.getBundler().getBundler().getWatcher();\n\n const tsconfigPath = path.join(projectRoot, 'tsconfig.json');\n\n const listener = ({\n eventsQueue,\n }: {\n eventsQueue: {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n }[];\n }) => {\n for (const event of eventsQueue) {\n if (\n event.type === 'add' &&\n event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath)\n ) {\n const { filePath } = event;\n // Is TypeScript?\n if (\n // If the user adds a TypeScript file to the observable files in their project.\n /\\.tsx?$/.test(filePath) ||\n // Or if the user adds a tsconfig.json file to the project root.\n filePath === tsconfigPath\n ) {\n debug('Detected TypeScript file added to the project: ', filePath);\n callback();\n off();\n return;\n }\n }\n }\n };\n\n debug('Waiting for TypeScript files to be added to the project...');\n watcher.addListener('change', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n };\n\n runner.server.addListener?.('close', off);\n return off;\n}\n\nexport function observeFileChanges(\n runner: {\n metro: import('metro').Server;\n server: ServerLike;\n },\n files: string[],\n callback: () => void | Promise<void>\n): () => void {\n const watcher = runner.metro.getBundler().getBundler().getWatcher();\n\n const listener = ({\n eventsQueue,\n }: {\n eventsQueue: {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n }[];\n }) => {\n for (const event of eventsQueue) {\n if (\n // event.type === 'add' &&\n event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath)\n ) {\n const { filePath } = event;\n // Is TypeScript?\n if (files.includes(filePath)) {\n debug('Observed change:', filePath);\n callback();\n return;\n }\n }\n }\n };\n\n debug('Watching file changes:', files);\n watcher.addListener('change', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n };\n\n runner.server.addListener?.('close', off);\n return off;\n}\n"],"names":["observeApiRouteChanges","waitForMetroToObserveTypeScriptFile","observeFileChanges","debug","require","projectRoot","runner","callback","watcher","metro","getBundler","getWatcher","appDir","path","join","listener","eventsQueue","event","test","filePath","startsWith","type","addListener","off","removeListener","server","tsconfigPath","metadata","files","includes"],"mappings":"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"}
|
|
@@ -303,7 +303,10 @@ async function withMetroMultiPlatformAsync(projectRoot, { config , platformBundl
|
|
|
303
303
|
var _EXPO_PUBLIC_PROJECT_ROOT;
|
|
304
304
|
// Required for @expo/metro-runtime to format paths in the web LogBox.
|
|
305
305
|
process.env.EXPO_PUBLIC_PROJECT_ROOT = (_EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT) != null ? _EXPO_PUBLIC_PROJECT_ROOT : projectRoot;
|
|
306
|
-
if (
|
|
306
|
+
if ([
|
|
307
|
+
"static",
|
|
308
|
+
"server"
|
|
309
|
+
].includes(webOutput != null ? webOutput : "")) {
|
|
307
310
|
// Enable static rendering in runtime space.
|
|
308
311
|
process.env.EXPO_PUBLIC_USE_STATIC = "1";
|
|
309
312
|
}
|