@expo/cli 0.14.0 → 0.15.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 +5 -4
- package/build/bin/cli.map +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/response.js.map +1 -1
- package/build/src/api/rest/client.js +2 -2
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/customize/typescript.js +3 -1
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +3 -2
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +44 -17
- 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 +69 -80
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +81 -21
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportHermes.js +4 -4
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +55 -20
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +2 -2
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +12 -10
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +9 -7
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +101 -0
- package/build/src/export/metroAssetLocalPath.js.map +1 -0
- package/build/src/export/persistMetroAssets.js +94 -21
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -1
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +9 -48
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +3 -2
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/applyPlugins.js +52 -0
- package/build/src/install/applyPlugins.js.map +1 -0
- package/build/src/install/checkPackages.js +2 -2
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +84 -0
- package/build/src/install/fixPackages.js.map +1 -0
- package/build/src/install/installAsync.js +32 -61
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +79 -0
- package/build/src/install/installExpoPackage.js.map +1 -0
- package/build/src/prebuild/clearNativeFolder.js +1 -1
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +3 -3
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +21 -30
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +37 -15
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +2 -2
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +6 -6
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +49 -36
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +12 -4
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +20 -3
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +30 -11
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +14 -10
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +6 -1
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +63 -0
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
- package/build/src/start/server/getStaticRenderFunctions.js +21 -23
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +48 -64
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +4 -3
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +62 -45
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +149 -0
- package/build/src/start/server/metro/createJResolver.js.map +1 -0
- package/build/src/start/server/metro/createServerRouteMiddleware.js +13 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/externals.js +25 -3
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
- package/build/src/start/server/metro/inspector-proxy/index.js +10 -7
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +32 -10
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +4 -1
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +19 -10
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +43 -0
- package/build/src/start/server/metro/serializeHtml.js.map +1 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +261 -201
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +114 -40
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +15 -66
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +123 -0
- package/build/src/start/server/middleware/metroOptions.js.map +1 -0
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
- package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
- package/build/src/utils/analytics/getMetroProperties.js +1 -2
- package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/args.js +4 -2
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/cocoapods.js +1 -1
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/dir.js +18 -8
- package/build/src/utils/dir.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/getOrPromptApplicationId.js +2 -4
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/prompts.js +1 -28
- package/build/src/utils/prompts.js.map +1 -1
- package/package.json +15 -14
- package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
- package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
- package/build/src/start/server/metro/resolveFromProject.js +0 -90
- package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
|
@@ -6,20 +6,21 @@ exports.runServer = void 0;
|
|
|
6
6
|
var _assert = _interopRequireDefault(require("assert"));
|
|
7
7
|
var _http = _interopRequireDefault(require("http"));
|
|
8
8
|
var _https = _interopRequireDefault(require("https"));
|
|
9
|
+
var _metro = _interopRequireDefault(require("metro"));
|
|
10
|
+
var _hmrServer = _interopRequireDefault(require("metro/src/HmrServer"));
|
|
11
|
+
var _createWebsocketServer = _interopRequireDefault(require("metro/src/lib/createWebsocketServer"));
|
|
12
|
+
var _metroInspectorProxy = require("metro-inspector-proxy");
|
|
9
13
|
var _url = require("url");
|
|
10
14
|
var _inspectorProxy = require("./inspector-proxy");
|
|
11
|
-
var
|
|
15
|
+
var _log = require("../../../log");
|
|
12
16
|
var _env = require("../../../utils/env");
|
|
17
|
+
var _getRunningProcess = require("../../../utils/getRunningProcess");
|
|
13
18
|
function _interopRequireDefault(obj) {
|
|
14
19
|
return obj && obj.__esModule ? obj : {
|
|
15
20
|
default: obj
|
|
16
21
|
};
|
|
17
22
|
}
|
|
18
23
|
const runServer = async (metroBundler, config, { hasReducedPerformance =false , host , onError , onReady , secureServerOptions , waitForBundler =false , websocketEndpoints ={} , watch })=>{
|
|
19
|
-
const projectRoot = metroBundler.projectRoot;
|
|
20
|
-
const Metro = (0, _resolveFromProject).importMetroFromProject(projectRoot);
|
|
21
|
-
const createWebsocketServer = (0, _resolveFromProject).importMetroCreateWebsocketServerFromProject(projectRoot);
|
|
22
|
-
const MetroHmrServer = (0, _resolveFromProject).importMetroHmrServerFromProject(projectRoot);
|
|
23
24
|
// await earlyPortCheck(host, config.server.port);
|
|
24
25
|
// if (secure != null || secureCert != null || secureKey != null) {
|
|
25
26
|
// // eslint-disable-next-line no-console
|
|
@@ -30,7 +31,7 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
|
|
|
30
31
|
// "Metro's https development server.",
|
|
31
32
|
// );
|
|
32
33
|
// }
|
|
33
|
-
const { middleware , end , metroServer } = await
|
|
34
|
+
const { middleware , end , metroServer } = await _metro.default.createConnectMiddleware(config, {
|
|
34
35
|
hasReducedPerformance,
|
|
35
36
|
waitForBundler,
|
|
36
37
|
watch
|
|
@@ -41,8 +42,7 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
|
|
|
41
42
|
if (config.server.runInspectorProxy && !_env.env.EXPO_NO_INSPECTOR_PROXY) {
|
|
42
43
|
inspectorProxy = (0, _inspectorProxy).createInspectorProxy(metroBundler, config.projectRoot);
|
|
43
44
|
} else if (config.server.runInspectorProxy) {
|
|
44
|
-
|
|
45
|
-
inspectorProxy = new InspectorProxy(config.projectRoot);
|
|
45
|
+
inspectorProxy = new _metroInspectorProxy.InspectorProxy(config.projectRoot);
|
|
46
46
|
}
|
|
47
47
|
let httpServer;
|
|
48
48
|
if (secureServerOptions != null) {
|
|
@@ -52,6 +52,14 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
|
|
|
52
52
|
}
|
|
53
53
|
return new Promise((resolve, reject)=>{
|
|
54
54
|
httpServer.on("error", (error)=>{
|
|
55
|
+
if ("code" in error && error.code === "EADDRINUSE") {
|
|
56
|
+
// If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info
|
|
57
|
+
// about the process before throwing.
|
|
58
|
+
const info = (0, _getRunningProcess).getRunningProcess(config.server.port);
|
|
59
|
+
if (info) {
|
|
60
|
+
_log.Log.error(`Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
55
63
|
if (onError) {
|
|
56
64
|
onError(error);
|
|
57
65
|
}
|
|
@@ -66,8 +74,9 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
|
|
|
66
74
|
...inspectorProxy ? {
|
|
67
75
|
...inspectorProxy.createWebSocketListeners(httpServer)
|
|
68
76
|
} : {},
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
// @ts-expect-error: incorrect types
|
|
78
|
+
"/hot": (0, _createWebsocketServer).default({
|
|
79
|
+
websocketServer: new _hmrServer.default(metroServer.getBundler(), metroServer.getCreateModuleId(), config)
|
|
71
80
|
})
|
|
72
81
|
});
|
|
73
82
|
httpServer.on("upgrade", (request, socket, head)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport { RunServerOptions, Server } from 'metro';\nimport { ConfigT } from 'metro-config';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport Metro, { RunServerOptions, Server } from 'metro';\nimport MetroHmrServer from 'metro/src/HmrServer';\nimport createWebsocketServer from 'metro/src/lib/createWebsocketServer';\nimport { ConfigT } from 'metro-config';\nimport { InspectorProxy } from 'metro-inspector-proxy';\nimport { parse } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { createInspectorProxy, ExpoInspectorProxy } from './inspector-proxy';\nimport { Log } from '../../../log';\nimport { env } from '../../../utils/env';\nimport { getRunningProcess } from '../../../utils/getRunningProcess';\nimport type { ConnectAppType } from '../middleware/server.types';\n\nexport const runServer = async (\n metroBundler: MetroBundlerDevServer,\n config: ConfigT,\n {\n hasReducedPerformance = false,\n host,\n onError,\n onReady,\n secureServerOptions,\n waitForBundler = false,\n websocketEndpoints = {},\n watch,\n }: RunServerOptions\n): Promise<{ server: http.Server | https.Server; metro: Server }> => {\n // await earlyPortCheck(host, config.server.port);\n\n // if (secure != null || secureCert != null || secureKey != null) {\n // // eslint-disable-next-line no-console\n // console.warn(\n // chalk.inverse.yellow.bold(' DEPRECATED '),\n // 'The `secure`, `secureCert`, and `secureKey` options are now deprecated. ' +\n // 'Please use the `secureServerOptions` object instead to pass options to ' +\n // \"Metro's https development server.\",\n // );\n // }\n\n const { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {\n hasReducedPerformance,\n waitForBundler,\n watch,\n });\n\n assert(typeof (middleware as any).use === 'function');\n const serverApp = middleware as ConnectAppType;\n\n let inspectorProxy: InspectorProxy | ExpoInspectorProxy | null = null;\n if (config.server.runInspectorProxy && !env.EXPO_NO_INSPECTOR_PROXY) {\n inspectorProxy = createInspectorProxy(metroBundler, config.projectRoot);\n } else if (config.server.runInspectorProxy) {\n inspectorProxy = new InspectorProxy(config.projectRoot);\n }\n\n let httpServer: http.Server | https.Server;\n\n if (secureServerOptions != null) {\n httpServer = https.createServer(secureServerOptions, serverApp);\n } else {\n httpServer = http.createServer(serverApp);\n }\n return new Promise<{ server: http.Server | https.Server; metro: Server }>((resolve, reject) => {\n httpServer.on('error', (error) => {\n if ('code' in error && error.code === 'EADDRINUSE') {\n // If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info\n // about the process before throwing.\n const info = getRunningProcess(config.server.port);\n if (info) {\n Log.error(\n `Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`\n );\n }\n }\n\n if (onError) {\n onError(error);\n }\n reject(error);\n end();\n });\n\n httpServer.listen(config.server.port, host, () => {\n if (onReady) {\n onReady(httpServer);\n }\n\n Object.assign(websocketEndpoints, {\n ...(inspectorProxy ? { ...inspectorProxy.createWebSocketListeners(httpServer) } : {}),\n // @ts-expect-error: incorrect types\n '/hot': createWebsocketServer({\n websocketServer: new MetroHmrServer(\n metroServer.getBundler(),\n metroServer.getCreateModuleId(),\n config\n ),\n }),\n });\n\n httpServer.on('upgrade', (request, socket, head) => {\n const { pathname } = parse(request.url!);\n if (pathname != null && websocketEndpoints[pathname]) {\n websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {\n websocketEndpoints[pathname].emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n if (inspectorProxy) {\n // TODO(hypuk): Refactor inspectorProxy.processRequest into separate request handlers\n // so that we could provide routes (/json/list and /json/version) here.\n // Currently this causes Metro to give warning about T31407894.\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n serverApp.use(inspectorProxy.processRequest.bind(inspectorProxy));\n }\n\n resolve({ server: httpServer, metro: metroServer });\n });\n\n // Disable any kind of automatic timeout behavior for incoming\n // requests in case it takes the packager more than the default\n // timeout of 120 seconds to respond to a request.\n httpServer.timeout = 0;\n\n httpServer.on('close', () => {\n end();\n });\n });\n};\n"],"names":["runServer","metroBundler","config","hasReducedPerformance","host","onError","onReady","secureServerOptions","waitForBundler","websocketEndpoints","watch","middleware","end","metroServer","Metro","createConnectMiddleware","assert","use","serverApp","inspectorProxy","server","runInspectorProxy","env","EXPO_NO_INSPECTOR_PROXY","createInspectorProxy","projectRoot","InspectorProxy","httpServer","https","createServer","http","Promise","resolve","reject","on","error","code","info","getRunningProcess","port","Log","command","directory","listen","Object","assign","createWebSocketListeners","createWebsocketServer","websocketServer","MetroHmrServer","getBundler","getCreateModuleId","request","socket","head","pathname","parse","url","handleUpgrade","ws","emit","destroy","processRequest","bind","metro","timeout"],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.serializeHtmlWithAssets = serializeHtmlWithAssets;
|
|
6
|
+
function serializeHtmlWithAssets({ mode , resources , template , devBundleUrl , baseUrl }) {
|
|
7
|
+
if (!resources) {
|
|
8
|
+
return "";
|
|
9
|
+
}
|
|
10
|
+
const isDev = mode === "development";
|
|
11
|
+
return htmlFromSerialAssets(resources, {
|
|
12
|
+
dev: isDev,
|
|
13
|
+
template,
|
|
14
|
+
baseUrl,
|
|
15
|
+
bundleUrl: isDev ? devBundleUrl : undefined
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function htmlFromSerialAssets(assets, { dev , template , baseUrl , bundleUrl }) {
|
|
19
|
+
// Combine the CSS modules into tags that have hot refresh data attributes.
|
|
20
|
+
const styleString = assets.filter((asset)=>asset.type === "css"
|
|
21
|
+
).map(({ metadata , filename , source })=>{
|
|
22
|
+
if (dev) {
|
|
23
|
+
return `<style data-expo-css-hmr="${metadata.hmrId}">` + source + "\n</style>";
|
|
24
|
+
} else {
|
|
25
|
+
return [
|
|
26
|
+
`<link rel="preload" href="${baseUrl}/${filename}" as="style">`,
|
|
27
|
+
`<link rel="stylesheet" href="${baseUrl}/${filename}">`,
|
|
28
|
+
].join("");
|
|
29
|
+
}
|
|
30
|
+
}).join("");
|
|
31
|
+
const jsAssets = assets.filter((asset)=>asset.type === "js"
|
|
32
|
+
);
|
|
33
|
+
const scripts = bundleUrl ? `<script src="${bundleUrl}" defer></script>` : jsAssets.map(({ filename , metadata })=>{
|
|
34
|
+
// TODO: Mark dependencies of the HTML and include them to prevent waterfalls.
|
|
35
|
+
if (metadata.isAsync) {
|
|
36
|
+
return "";
|
|
37
|
+
}
|
|
38
|
+
return `<script src="${baseUrl}/${filename}" defer></script>`;
|
|
39
|
+
}).join("");
|
|
40
|
+
return template.replace("</head>", `${styleString}</head>`).replace("</body>", `${scripts}\n</body>`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=serializeHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/serializeHtml.ts"],"sourcesContent":["import { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\n\nexport function serializeHtmlWithAssets({\n mode,\n resources,\n template,\n devBundleUrl,\n baseUrl,\n}: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n /** asset prefix used for deploying to non-standard origins like GitHub pages. */\n baseUrl: string;\n devBundleUrl?: string;\n}): string {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n baseUrl,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n {\n dev,\n template,\n baseUrl,\n bundleUrl,\n }: {\n dev: boolean;\n template: string;\n baseUrl: string;\n /** This is dev-only. */\n bundleUrl?: string;\n }\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=\"${baseUrl}/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"${baseUrl}/${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, metadata }) => {\n // TODO: Mark dependencies of the HTML and include them to prevent waterfalls.\n if (metadata.isAsync) {\n return '';\n }\n\n return `<script src=\"${baseUrl}/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["serializeHtmlWithAssets","mode","resources","template","devBundleUrl","baseUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","assets","styleString","filter","asset","type","map","metadata","filename","source","hmrId","join","jsAssets","scripts","isAsync","replace"],"mappings":"AAAA;;;;QAEgBA,uBAAuB,GAAvBA,uBAAuB;AAAhC,SAASA,uBAAuB,CAAC,EACtCC,IAAI,CAAA,EACJC,SAAS,CAAA,EACTC,QAAQ,CAAA,EACRC,YAAY,CAAA,EACZC,OAAO,CAAA,EAQR,EAAU;IACT,IAAI,CAACH,SAAS,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,MAAMI,KAAK,GAAGL,IAAI,KAAK,aAAa,AAAC;IACrC,OAAOM,oBAAoB,CAACL,SAAS,EAAE;QACrCM,GAAG,EAAEF,KAAK;QACVH,QAAQ;QACRE,OAAO;QACPI,SAAS,EAAEH,KAAK,GAAGF,YAAY,GAAGM,SAAS;KAC5C,CAAC,CAAC;CACJ;AAED,SAASH,oBAAoB,CAC3BI,MAAqB,EACrB,EACEH,GAAG,CAAA,EACHL,QAAQ,CAAA,EACRE,OAAO,CAAA,EACPI,SAAS,CAAA,EAOV,EACD;IACA,2EAA2E;IAC3E,MAAMG,WAAW,GAAGD,MAAM,CACvBE,MAAM,CAAC,CAACC,KAAK,GAAKA,KAAK,CAACC,IAAI,KAAK,KAAK;IAAA,CAAC,CACvCC,GAAG,CAAC,CAAC,EAAEC,QAAQ,CAAA,EAAEC,QAAQ,CAAA,EAAEC,MAAM,CAAA,EAAE,GAAK;QACvC,IAAIX,GAAG,EAAE;YACP,OAAO,CAAC,0BAA0B,EAAES,QAAQ,CAACG,KAAK,CAAC,EAAE,CAAC,GAAGD,MAAM,GAAG,YAAY,CAAC;SAChF,MAAM;YACL,OAAO;gBACL,CAAC,0BAA0B,EAAEd,OAAO,CAAC,CAAC,EAAEa,QAAQ,CAAC,aAAa,CAAC;gBAC/D,CAAC,6BAA6B,EAAEb,OAAO,CAAC,CAAC,EAAEa,QAAQ,CAAC,EAAE,CAAC;aACxD,CAACG,IAAI,CAAC,EAAE,CAAC,CAAC;SACZ;KACF,CAAC,CACDA,IAAI,CAAC,EAAE,CAAC,AAAC;IAEZ,MAAMC,QAAQ,GAAGX,MAAM,CAACE,MAAM,CAAC,CAACC,KAAK,GAAKA,KAAK,CAACC,IAAI,KAAK,IAAI;IAAA,CAAC,AAAC;IAE/D,MAAMQ,OAAO,GAAGd,SAAS,GACrB,CAAC,aAAa,EAAEA,SAAS,CAAC,iBAAiB,CAAC,GAC5Ca,QAAQ,CACLN,GAAG,CAAC,CAAC,EAAEE,QAAQ,CAAA,EAAED,QAAQ,CAAA,EAAE,GAAK;QAC/B,8EAA8E;QAC9E,IAAIA,QAAQ,CAACO,OAAO,EAAE;YACpB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,CAAC,aAAa,EAAEnB,OAAO,CAAC,CAAC,EAAEa,QAAQ,CAAC,iBAAiB,CAAC,CAAC;KAC/D,CAAC,CACDG,IAAI,CAAC,EAAE,CAAC,AAAC;IAEhB,OAAOlB,QAAQ,CACZsB,OAAO,CAAC,SAAS,EAAE,CAAC,EAAEb,WAAW,CAAC,OAAO,CAAC,CAAC,CAC3Ca,OAAO,CAAC,SAAS,EAAE,CAAC,EAAEF,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;CAC9C"}
|
|
@@ -12,9 +12,8 @@ function _interopRequireDefault(obj) {
|
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
const debug = require("debug")("expo:start:server:metro:waitForTypescript");
|
|
15
|
-
function observeApiRouteChanges(
|
|
15
|
+
function observeApiRouteChanges(appDir, runner, callback) {
|
|
16
16
|
const watcher = runner.metro.getBundler().getBundler().getWatcher();
|
|
17
|
-
const appDir = _path.default.join(projectRoot, "app");
|
|
18
17
|
const listener = ({ eventsQueue })=>{
|
|
19
18
|
for (const event of eventsQueue){
|
|
20
19
|
if (// event.type === 'add' &&
|
|
@@ -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 observeApiRouteChanges(\n
|
|
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 appDir: 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 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","appDir","runner","callback","watcher","metro","getBundler","getWatcher","listener","eventsQueue","event","test","filePath","startsWith","type","addListener","off","removeListener","server","projectRoot","tsconfigPath","path","join","metadata","files","includes"],"mappings":"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"}
|