@expo/cli 0.0.0 → 0.1.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/README.md +106 -0
- package/build/bin/cli +125 -0
- package/build/bin/cli.map +1 -0
- package/build/src/api/endpoint.js +17 -0
- package/build/src/api/endpoint.js.map +1 -0
- package/build/src/api/getExpoGoIntermediateCertificate.js +21 -0
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
- package/build/src/api/getExpoSchema.js +69 -0
- package/build/src/api/getExpoSchema.js.map +1 -0
- package/build/src/api/getNativeModuleVersions.js +31 -0
- package/build/src/api/getNativeModuleVersions.js.map +1 -0
- package/build/src/api/getProject.js +19 -0
- package/build/src/api/getProject.js.map +1 -0
- package/build/src/api/getProjectDevelopmentCertificate.js +24 -0
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
- package/build/src/api/getVersions.js +37 -0
- package/build/src/api/getVersions.js.map +1 -0
- package/build/src/api/graphql/client.js +104 -0
- package/build/src/api/graphql/client.js.map +1 -0
- package/build/src/api/graphql/generated.js +113 -0
- package/build/src/api/graphql/generated.js.map +1 -0
- package/build/src/api/graphql/queries/UserQuery.js +43 -0
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
- package/build/src/api/rest/cache/FileSystemCache.js +79 -0
- package/build/src/api/rest/cache/FileSystemCache.js.map +1 -0
- package/build/src/api/rest/cache/response.js +31 -0
- package/build/src/api/rest/cache/response.js.map +1 -0
- package/build/src/api/rest/cache/wrapFetchWithCache.js +156 -0
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
- package/build/src/api/rest/client.js +94 -0
- package/build/src/api/rest/client.js.map +1 -0
- package/build/src/api/rest/client.types.js +6 -0
- package/build/src/api/rest/client.types.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +20 -0
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithOffline.js +39 -0
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithProgress.js +59 -0
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
- package/build/src/api/settings.js +11 -0
- package/build/src/api/settings.js.map +1 -0
- package/build/src/api/signManifest.js +38 -0
- package/build/src/api/signManifest.js.map +1 -0
- package/build/src/api/updateDevelopmentSession.js +74 -0
- package/build/src/api/updateDevelopmentSession.js.map +1 -0
- package/build/src/api/user/UserSettings.js +71 -0
- package/build/src/api/user/UserSettings.js.map +1 -0
- package/build/src/api/user/actions.js +97 -0
- package/build/src/api/user/actions.js.map +1 -0
- package/build/src/api/user/otp.js +139 -0
- package/build/src/api/user/otp.js.map +1 -0
- package/build/src/api/user/user.js +114 -0
- package/build/src/api/user/user.js.map +1 -0
- package/build/src/config/configAsync.js +118 -0
- package/build/src/config/configAsync.js.map +1 -0
- package/build/src/config/index.js +85 -0
- package/build/src/config/index.js.map +1 -0
- package/build/src/install/checkPackages.js +74 -0
- package/build/src/install/checkPackages.js.map +1 -0
- package/build/src/install/index.js +76 -0
- package/build/src/install/index.js.map +1 -0
- package/build/src/install/installAsync.js +103 -0
- package/build/src/install/installAsync.js.map +1 -0
- package/build/src/install/resolveOptions.js +99 -0
- package/build/src/install/resolveOptions.js.map +1 -0
- package/build/src/install/utils/autoAddConfigPlugins.js +87 -0
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
- package/build/src/log.js +74 -0
- package/build/src/log.js.map +1 -0
- package/build/src/login/index.js +76 -0
- package/build/src/login/index.js.map +1 -0
- package/build/src/logout/index.js +63 -0
- package/build/src/logout/index.js.map +1 -0
- package/build/src/prebuild/clearNativeFolder.js +137 -0
- package/build/src/prebuild/clearNativeFolder.js.map +1 -0
- package/build/src/prebuild/configureProjectAsync.js +68 -0
- package/build/src/prebuild/configureProjectAsync.js.map +1 -0
- package/build/src/prebuild/copyTemplateFiles.js +124 -0
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
- package/build/src/prebuild/ensureConfigAsync.js +86 -0
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
- package/build/src/prebuild/index.js +101 -0
- package/build/src/prebuild/index.js.map +1 -0
- package/build/src/prebuild/prebuildAsync.js +112 -0
- package/build/src/prebuild/prebuildAsync.js.map +1 -0
- package/build/src/prebuild/resolveOptions.js +97 -0
- package/build/src/prebuild/resolveOptions.js.map +1 -0
- package/build/src/prebuild/resolveTemplate.js +157 -0
- package/build/src/prebuild/resolveTemplate.js.map +1 -0
- package/build/src/prebuild/updateFromTemplate.js +102 -0
- package/build/src/prebuild/updateFromTemplate.js.map +1 -0
- package/build/src/prebuild/updatePackageJson.js +236 -0
- package/build/src/prebuild/updatePackageJson.js.map +1 -0
- package/build/src/prebuild/writeMetroConfig.js +89 -0
- package/build/src/prebuild/writeMetroConfig.js.map +1 -0
- package/build/src/register/index.js +63 -0
- package/build/src/register/index.js.map +1 -0
- package/build/src/register/registerAsync.js +37 -0
- package/build/src/register/registerAsync.js.map +1 -0
- package/build/src/start/doctor/Prerequisite.js +47 -0
- package/build/src/start/doctor/Prerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +68 -0
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/XcodePrerequisite.js +115 -0
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +65 -0
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +64 -0
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +131 -0
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
- package/build/src/start/doctor/dependencies/getMissingPackages.js +95 -0
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +119 -0
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +147 -0
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
- package/build/src/start/doctor/ngrok/ExternalModule.js +164 -0
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
- package/build/src/start/doctor/ngrok/NgrokResolver.js +17 -0
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +142 -0
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
- package/build/src/start/doctor/typescript/updateTSConfig.js +92 -0
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +112 -0
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
- package/build/src/start/index.js +126 -0
- package/build/src/start/index.js.map +1 -0
- package/build/src/start/interface/KeyPressHandler.js +99 -0
- package/build/src/start/interface/KeyPressHandler.js.map +1 -0
- package/build/src/start/interface/commandsTable.js +175 -0
- package/build/src/start/interface/commandsTable.js.map +1 -0
- package/build/src/start/interface/interactiveActions.js +134 -0
- package/build/src/start/interface/interactiveActions.js.map +1 -0
- package/build/src/start/interface/startInterface.js +217 -0
- package/build/src/start/interface/startInterface.js.map +1 -0
- package/build/src/start/platforms/AppIdResolver.js +44 -0
- package/build/src/start/platforms/AppIdResolver.js.map +1 -0
- package/build/src/start/platforms/DeviceManager.js +43 -0
- package/build/src/start/platforms/DeviceManager.js.map +1 -0
- package/build/src/start/platforms/ExpoGoInstaller.js +108 -0
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
- package/build/src/start/platforms/PlatformManager.js +96 -0
- package/build/src/start/platforms/PlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/ADBServer.js +127 -0
- package/build/src/start/platforms/android/ADBServer.js.map +1 -0
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +40 -0
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
- package/build/src/start/platforms/android/AndroidDeviceManager.js +171 -0
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
- package/build/src/start/platforms/android/AndroidPlatformManager.js +35 -0
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/activateWindow.js +78 -0
- package/build/src/start/platforms/android/activateWindow.js.map +1 -0
- package/build/src/start/platforms/android/adb.js +230 -0
- package/build/src/start/platforms/android/adb.js.map +1 -0
- package/build/src/start/platforms/android/adbReverse.js +84 -0
- package/build/src/start/platforms/android/adbReverse.js.map +1 -0
- package/build/src/start/platforms/android/emulator.js +118 -0
- package/build/src/start/platforms/android/emulator.js.map +1 -0
- package/build/src/start/platforms/android/getDevices.js +36 -0
- package/build/src/start/platforms/android/getDevices.js.map +1 -0
- package/build/src/start/platforms/android/promptAndroidDevice.js +60 -0
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +46 -0
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
- package/build/src/start/platforms/ios/AppleDeviceManager.js +201 -0
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js +31 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
- package/build/src/start/platforms/ios/assertSystemRequirements.js +16 -0
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +85 -0
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
- package/build/src/start/platforms/ios/getBestSimulator.js +101 -0
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
- package/build/src/start/platforms/ios/promptAppleDevice.js +60 -0
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
- package/build/src/start/platforms/ios/simctl.js +229 -0
- package/build/src/start/platforms/ios/simctl.js.map +1 -0
- package/build/src/start/platforms/ios/xcrun.js +67 -0
- package/build/src/start/platforms/ios/xcrun.js.map +1 -0
- package/build/src/start/project/devices.js +77 -0
- package/build/src/start/project/devices.js.map +1 -0
- package/build/src/start/project/dotExpo.js +74 -0
- package/build/src/start/project/dotExpo.js.map +1 -0
- package/build/src/start/project/settings.js +13 -0
- package/build/src/start/project/settings.js.map +1 -0
- package/build/src/start/resolveOptions.js +156 -0
- package/build/src/start/resolveOptions.js.map +1 -0
- package/build/src/start/server/AsyncNgrok.js +173 -0
- package/build/src/start/server/AsyncNgrok.js.map +1 -0
- package/build/src/start/server/BundlerDevServer.js +252 -0
- package/build/src/start/server/BundlerDevServer.js.map +1 -0
- package/build/src/start/server/DevServerManager.js +142 -0
- package/build/src/start/server/DevServerManager.js.map +1 -0
- package/build/src/start/server/DevelopmentSession.js +104 -0
- package/build/src/start/server/DevelopmentSession.js.map +1 -0
- package/build/src/start/server/UrlCreator.js +158 -0
- package/build/src/start/server/UrlCreator.js.map +1 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js +100 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
- package/build/src/start/server/metro/MetroTerminalReporter.js +178 -0
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
- package/build/src/start/server/metro/TerminalReporter.js +87 -0
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
- package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
- package/build/src/start/server/metro/instantiateMetro.js +53 -0
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
- package/build/src/start/server/metro/resolveFromProject.js +38 -0
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +145 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +185 -0
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js +78 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +70 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ManifestMiddleware.js +177 -0
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +69 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/createDevServerMiddleware.js +24 -0
- package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js +107 -0
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
- package/build/src/start/server/middleware/resolveEntryPoint.js +37 -0
- package/build/src/start/server/middleware/resolveEntryPoint.js.map +1 -0
- package/build/src/start/server/middleware/resolvePlatform.js +32 -0
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
- package/build/src/start/server/middleware/server.types.js +6 -0
- package/build/src/start/server/middleware/server.types.js.map +1 -0
- package/build/src/start/server/openPlatforms.js +30 -0
- package/build/src/start/server/openPlatforms.js.map +1 -0
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +303 -0
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
- package/build/src/start/server/webpack/formatWebpackMessages.js +94 -0
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
- package/build/src/start/server/webpack/resolveFromProject.js +43 -0
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
- package/build/src/start/server/webpack/tls.js +72 -0
- package/build/src/start/server/webpack/tls.js.map +1 -0
- package/build/src/start/startAsync.js +150 -0
- package/build/src/start/startAsync.js.map +1 -0
- package/build/src/utils/FileNotifier.js +71 -0
- package/build/src/utils/FileNotifier.js.map +1 -0
- package/build/src/utils/analytics/getDevClientProperties.js +41 -0
- package/build/src/utils/analytics/getDevClientProperties.js.map +1 -0
- package/build/src/utils/analytics/rudderstackClient.js +106 -0
- package/build/src/utils/analytics/rudderstackClient.js.map +1 -0
- package/build/src/utils/ansi.js +17 -0
- package/build/src/utils/ansi.js.map +1 -0
- package/build/src/utils/args.js +63 -0
- package/build/src/utils/args.js.map +1 -0
- package/build/src/utils/array.js +27 -0
- package/build/src/utils/array.js.map +1 -0
- package/build/src/utils/cocoapods.js +143 -0
- package/build/src/utils/cocoapods.js.map +1 -0
- package/build/src/utils/codesigning.js +283 -0
- package/build/src/utils/codesigning.js.map +1 -0
- package/build/src/utils/createFileTransform.js +89 -0
- package/build/src/utils/createFileTransform.js.map +1 -0
- package/build/src/utils/delay.js +39 -0
- package/build/src/utils/delay.js.map +1 -0
- package/build/src/utils/dir.js +34 -0
- package/build/src/utils/dir.js.map +1 -0
- package/build/src/utils/downloadAppAsync.js +71 -0
- package/build/src/utils/downloadAppAsync.js.map +1 -0
- package/build/src/utils/downloadExpoGoAsync.js +93 -0
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
- package/build/src/utils/editor.js +60 -0
- package/build/src/utils/editor.js.map +1 -0
- package/build/src/utils/env.js +59 -0
- package/build/src/utils/env.js.map +1 -0
- package/build/src/utils/errors.js +69 -0
- package/build/src/utils/errors.js.map +1 -0
- package/build/src/utils/exit.js +90 -0
- package/build/src/utils/exit.js.map +1 -0
- package/build/src/utils/findUp.js +33 -0
- package/build/src/utils/findUp.js.map +1 -0
- package/build/src/utils/fn.js +32 -0
- package/build/src/utils/fn.js.map +1 -0
- package/build/src/utils/getOrPromptApplicationId.js +183 -0
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
- package/build/src/utils/getRunningProcess.js +92 -0
- package/build/src/utils/getRunningProcess.js.map +1 -0
- package/build/src/utils/git.js +88 -0
- package/build/src/utils/git.js.map +1 -0
- package/build/src/utils/glob.js +65 -0
- package/build/src/utils/glob.js.map +1 -0
- package/build/src/utils/ip.js +16 -0
- package/build/src/utils/ip.js.map +1 -0
- package/build/src/utils/isModuleSymlinked.js +37 -0
- package/build/src/utils/isModuleSymlinked.js.map +1 -0
- package/build/src/utils/link.js +31 -0
- package/build/src/utils/link.js.map +1 -0
- package/build/src/utils/mergeGitIgnorePaths.js +112 -0
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
- package/build/src/utils/modifyConfigAsync.js +68 -0
- package/build/src/utils/modifyConfigAsync.js.map +1 -0
- package/build/src/utils/modifyConfigPlugins.js +51 -0
- package/build/src/utils/modifyConfigPlugins.js.map +1 -0
- package/build/src/utils/nodeModules.js +118 -0
- package/build/src/utils/nodeModules.js.map +1 -0
- package/build/src/utils/npm.js +144 -0
- package/build/src/utils/npm.js.map +1 -0
- package/build/src/utils/obj.js +45 -0
- package/build/src/utils/obj.js.map +1 -0
- package/build/src/utils/ora.js +102 -0
- package/build/src/utils/ora.js.map +1 -0
- package/build/src/utils/port.js +130 -0
- package/build/src/utils/port.js.map +1 -0
- package/build/src/utils/profile.js +63 -0
- package/build/src/utils/profile.js.map +1 -0
- package/build/src/utils/progress.js +15 -0
- package/build/src/utils/progress.js.map +1 -0
- package/build/src/utils/prompts.js +127 -0
- package/build/src/utils/prompts.js.map +1 -0
- package/build/src/utils/scheme.js +106 -0
- package/build/src/utils/scheme.js.map +1 -0
- package/build/src/utils/tar.js +59 -0
- package/build/src/utils/tar.js.map +1 -0
- package/build/src/utils/url.js +67 -0
- package/build/src/utils/url.js.map +1 -0
- package/build/src/utils/validateApplicationId.js +90 -0
- package/build/src/utils/validateApplicationId.js.map +1 -0
- package/build/src/whoami/index.js +63 -0
- package/build/src/whoami/index.js.map +1 -0
- package/build/src/whoami/whoamiAsync.js +44 -0
- package/build/src/whoami/whoamiAsync.js.map +1 -0
- package/package.json +128 -4
- package/static/loading-page/index.html +270 -0
- package/index.js +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.LoadingEndpoint = void 0;
|
|
6
|
+
var _config = require("@expo/config");
|
|
7
|
+
var _updates = require("@expo/config-plugins/build/utils/Updates");
|
|
8
|
+
var _promises = require("fs/promises");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
11
|
+
var _expoMiddleware = require("./ExpoMiddleware");
|
|
12
|
+
var _resolvePlatform = require("./resolvePlatform");
|
|
13
|
+
function _interopRequireDefault(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const LoadingEndpoint = "/_expo/loading";
|
|
19
|
+
exports.LoadingEndpoint = LoadingEndpoint;
|
|
20
|
+
function getRuntimeVersion(exp, platform) {
|
|
21
|
+
if (!platform) {
|
|
22
|
+
return "Undetected";
|
|
23
|
+
}
|
|
24
|
+
var ref;
|
|
25
|
+
return (ref = (0, _updates).getRuntimeVersionNullable(exp, platform)) != null ? ref : "Undetected";
|
|
26
|
+
}
|
|
27
|
+
class InterstitialPageMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
28
|
+
constructor(projectRoot){
|
|
29
|
+
super(projectRoot, [
|
|
30
|
+
LoadingEndpoint
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
/** Get the template HTML page and inject values. */ async _getPageAsync({ appName , runtimeVersion }) {
|
|
34
|
+
var // Production: This will resolve when installed in the project.
|
|
35
|
+
ref;
|
|
36
|
+
const templatePath = (ref = _resolveFrom.default.silent(this.projectRoot, "expo/static/loading-page/index.html")) != null ? ref : // Development: This will resolve when testing locally.
|
|
37
|
+
_path.default.resolve(__dirname, "../../../../../static/loading-page/index.html");
|
|
38
|
+
let content = (await (0, _promises).readFile(templatePath)).toString("utf-8");
|
|
39
|
+
content = content.replace(/{{\s*AppName\s*}}/, appName);
|
|
40
|
+
content = content.replace(/{{\s*RuntimeVersion\s*}}/, runtimeVersion != null ? runtimeVersion : "");
|
|
41
|
+
content = content.replace(/{{\s*Path\s*}}/, this.projectRoot);
|
|
42
|
+
return content;
|
|
43
|
+
}
|
|
44
|
+
/** Get settings for the page from the project config. */ _getProjectOptions(platform) {
|
|
45
|
+
(0, _resolvePlatform).assertRuntimePlatform(platform);
|
|
46
|
+
const { exp } = (0, _config).getConfig(this.projectRoot);
|
|
47
|
+
const { appName } = (0, _config).getNameFromConfig(exp);
|
|
48
|
+
const runtimeVersion = getRuntimeVersion(exp, platform);
|
|
49
|
+
return {
|
|
50
|
+
appName: appName != null ? appName : "App",
|
|
51
|
+
runtimeVersion
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async handleRequestAsync(req, res) {
|
|
55
|
+
res = (0, _expoMiddleware).disableResponseCache(res);
|
|
56
|
+
res.setHeader("Content-Type", "text/html");
|
|
57
|
+
const platform = (0, _resolvePlatform).parsePlatformHeader(req);
|
|
58
|
+
(0, _resolvePlatform).assertMissingRuntimePlatform(platform);
|
|
59
|
+
(0, _resolvePlatform).assertRuntimePlatform(platform);
|
|
60
|
+
const { appName , runtimeVersion } = this._getProjectOptions(platform);
|
|
61
|
+
const content = await this._getPageAsync({
|
|
62
|
+
appName,
|
|
63
|
+
runtimeVersion
|
|
64
|
+
});
|
|
65
|
+
res.end(content);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.InterstitialPageMiddleware = InterstitialPageMiddleware;
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=InterstitialPageMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/InterstitialPageMiddleware.ts"],"sourcesContent":["import { ExpoConfig, getConfig, getNameFromConfig } from '@expo/config';\nimport { getRuntimeVersionNullable } from '@expo/config-plugins/build/utils/Updates';\nimport { readFile } from 'fs/promises';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { disableResponseCache, ExpoMiddleware } from './ExpoMiddleware';\nimport {\n assertMissingRuntimePlatform,\n assertRuntimePlatform,\n parsePlatformHeader,\n RuntimePlatform,\n} from './resolvePlatform';\nimport { ServerRequest, ServerResponse } from './server.types';\n\nexport const LoadingEndpoint = '/_expo/loading';\n\nfunction getRuntimeVersion(exp: ExpoConfig, platform: 'android' | 'ios' | null): string {\n if (!platform) {\n return 'Undetected';\n }\n\n return getRuntimeVersionNullable(exp, platform) ?? 'Undetected';\n}\n\nexport class InterstitialPageMiddleware extends ExpoMiddleware {\n constructor(projectRoot: string) {\n super(projectRoot, [LoadingEndpoint]);\n }\n\n /** Get the template HTML page and inject values. */\n async _getPageAsync({\n appName,\n runtimeVersion,\n }: {\n appName: string;\n runtimeVersion: string | null;\n }): Promise<string> {\n const templatePath =\n // Production: This will resolve when installed in the project.\n resolveFrom.silent(this.projectRoot, 'expo/static/loading-page/index.html') ??\n // Development: This will resolve when testing locally.\n path.resolve(__dirname, '../../../../../static/loading-page/index.html');\n let content = (await readFile(templatePath)).toString('utf-8');\n\n content = content.replace(/{{\\s*AppName\\s*}}/, appName);\n content = content.replace(/{{\\s*RuntimeVersion\\s*}}/, runtimeVersion ?? '');\n content = content.replace(/{{\\s*Path\\s*}}/, this.projectRoot);\n\n return content;\n }\n\n /** Get settings for the page from the project config. */\n _getProjectOptions(platform: RuntimePlatform): {\n appName: string;\n runtimeVersion: string | null;\n } {\n assertRuntimePlatform(platform);\n\n const { exp } = getConfig(this.projectRoot);\n const { appName } = getNameFromConfig(exp);\n const runtimeVersion = getRuntimeVersion(exp, platform);\n\n return {\n appName: appName ?? 'App',\n runtimeVersion,\n };\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n res = disableResponseCache(res);\n res.setHeader('Content-Type', 'text/html');\n\n const platform = parsePlatformHeader(req);\n assertMissingRuntimePlatform(platform);\n assertRuntimePlatform(platform);\n\n const { appName, runtimeVersion } = this._getProjectOptions(platform);\n const content = await this._getPageAsync({ appName, runtimeVersion });\n res.end(content);\n }\n}\n"],"names":["LoadingEndpoint","getRuntimeVersion","exp","platform","getRuntimeVersionNullable","InterstitialPageMiddleware","ExpoMiddleware","constructor","projectRoot","_getPageAsync","appName","runtimeVersion","resolveFrom","templatePath","silent","path","resolve","__dirname","content","readFile","toString","replace","_getProjectOptions","assertRuntimePlatform","getConfig","getNameFromConfig","handleRequestAsync","req","res","disableResponseCache","setHeader","parsePlatformHeader","assertMissingRuntimePlatform","end"],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.DEVELOPER_TOOL = void 0;
|
|
6
|
+
var _config = require("@expo/config");
|
|
7
|
+
var _url = require("url");
|
|
8
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
9
|
+
var _url1 = require("../../../utils/url");
|
|
10
|
+
var ProjectDevices = _interopRequireWildcard(require("../../project/devices"));
|
|
11
|
+
var _expoMiddleware = require("./ExpoMiddleware");
|
|
12
|
+
var _resolveAssets = require("./resolveAssets");
|
|
13
|
+
var _resolveEntryPoint = require("./resolveEntryPoint");
|
|
14
|
+
function _interopRequireWildcard(obj) {
|
|
15
|
+
if (obj && obj.__esModule) {
|
|
16
|
+
return obj;
|
|
17
|
+
} else {
|
|
18
|
+
var newObj = {};
|
|
19
|
+
if (obj != null) {
|
|
20
|
+
for(var key in obj){
|
|
21
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
22
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
23
|
+
if (desc.get || desc.set) {
|
|
24
|
+
Object.defineProperty(newObj, key, desc);
|
|
25
|
+
} else {
|
|
26
|
+
newObj[key] = obj[key];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
newObj.default = obj;
|
|
32
|
+
return newObj;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const DEVELOPER_TOOL = "expo-cli";
|
|
36
|
+
exports.DEVELOPER_TOOL = DEVELOPER_TOOL;
|
|
37
|
+
class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
38
|
+
constructor(projectRoot, options){
|
|
39
|
+
super(projectRoot, /**
|
|
40
|
+
* Only support `/`, `/manifest`, `/index.exp` for the manifest middleware.
|
|
41
|
+
*/ [
|
|
42
|
+
"/",
|
|
43
|
+
"/manifest",
|
|
44
|
+
"/index.exp"
|
|
45
|
+
]);
|
|
46
|
+
this.projectRoot = projectRoot;
|
|
47
|
+
this.options = options;
|
|
48
|
+
}
|
|
49
|
+
/** Exposed for testing. */ async _resolveProjectSettingsAsync({ platform , hostname }) {
|
|
50
|
+
// Read the config
|
|
51
|
+
const projectConfig = (0, _config).getConfig(this.projectRoot);
|
|
52
|
+
// Read from headers
|
|
53
|
+
const mainModuleName = this.resolveMainModuleName(projectConfig, platform);
|
|
54
|
+
// Create the manifest and set fields within it
|
|
55
|
+
const expoGoConfig = this.getExpoGoConfig({
|
|
56
|
+
mainModuleName,
|
|
57
|
+
hostname
|
|
58
|
+
});
|
|
59
|
+
const hostUri = this.options.constructUrl({
|
|
60
|
+
scheme: "",
|
|
61
|
+
hostname
|
|
62
|
+
});
|
|
63
|
+
const bundleUrl = this._getBundleUrl({
|
|
64
|
+
platform,
|
|
65
|
+
mainModuleName,
|
|
66
|
+
hostname
|
|
67
|
+
});
|
|
68
|
+
// Resolve all assets and set them on the manifest as URLs
|
|
69
|
+
await this.mutateManifestWithAssetsAsync(projectConfig.exp, bundleUrl);
|
|
70
|
+
return {
|
|
71
|
+
expoGoConfig,
|
|
72
|
+
hostUri,
|
|
73
|
+
bundleUrl,
|
|
74
|
+
exp: projectConfig.exp
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Get the main entry module ID (file) relative to the project root. */ resolveMainModuleName(projectConfig, platform) {
|
|
78
|
+
let entryPoint = (0, _resolveEntryPoint).resolveEntryPoint(this.projectRoot, platform, projectConfig);
|
|
79
|
+
// NOTE(Bacon): Webpack is currently hardcoded to index.bundle on native
|
|
80
|
+
// in the future (TODO) we should move this logic into a Webpack plugin and use
|
|
81
|
+
// a generated file name like we do on web.
|
|
82
|
+
// const server = getDefaultDevServer();
|
|
83
|
+
// // TODO: Move this into BundlerDevServer and read this info from self.
|
|
84
|
+
// const isNativeWebpack = server instanceof WebpackBundlerDevServer && server.isTargetingNative();
|
|
85
|
+
if (this.options.isNativeWebpack) {
|
|
86
|
+
entryPoint = "index.js";
|
|
87
|
+
}
|
|
88
|
+
return (0, _url1).stripExtension(entryPoint, "js");
|
|
89
|
+
}
|
|
90
|
+
/** Store device IDs that were sent in the request headers. */ async saveDevicesAsync(req) {
|
|
91
|
+
var ref;
|
|
92
|
+
const deviceIds = (ref = req.headers) == null ? void 0 : ref["expo-dev-client-id"];
|
|
93
|
+
if (deviceIds) {
|
|
94
|
+
await ProjectDevices.saveDevicesAsync(this.projectRoot, deviceIds).catch((e)=>Log.exception(e)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Create the bundle URL (points to the single JS entry file). Exposed for testing. */ _getBundleUrl({ platform , mainModuleName , hostname }) {
|
|
99
|
+
const queryParams = new URLSearchParams({
|
|
100
|
+
platform: encodeURIComponent(platform),
|
|
101
|
+
dev: String(this.options.mode !== "production"),
|
|
102
|
+
// TODO: Is this still needed?
|
|
103
|
+
hot: String(false)
|
|
104
|
+
});
|
|
105
|
+
if (this.options.minify) {
|
|
106
|
+
queryParams.append("minify", String(this.options.minify));
|
|
107
|
+
}
|
|
108
|
+
const path = `/${encodeURI(mainModuleName)}.bundle?${queryParams.toString()}`;
|
|
109
|
+
return this.options.constructUrl({
|
|
110
|
+
scheme: "http",
|
|
111
|
+
// hostType: this.options.location.hostType,
|
|
112
|
+
hostname
|
|
113
|
+
}) + path;
|
|
114
|
+
}
|
|
115
|
+
getExpoGoConfig({ mainModuleName , hostname }) {
|
|
116
|
+
return {
|
|
117
|
+
// localhost:19000
|
|
118
|
+
debuggerHost: this.options.constructUrl({
|
|
119
|
+
scheme: "",
|
|
120
|
+
hostname
|
|
121
|
+
}),
|
|
122
|
+
// http://localhost:19000/logs -- used to send logs to the CLI for displaying in the terminal.
|
|
123
|
+
// This is deprecated in favor of the WebSocket connection setup in Metro.
|
|
124
|
+
logUrl: this.options.constructUrl({
|
|
125
|
+
scheme: "http",
|
|
126
|
+
hostname
|
|
127
|
+
}) + "/logs",
|
|
128
|
+
// Required for Expo Go to function.
|
|
129
|
+
developer: {
|
|
130
|
+
tool: DEVELOPER_TOOL,
|
|
131
|
+
projectRoot: this.projectRoot
|
|
132
|
+
},
|
|
133
|
+
packagerOpts: {
|
|
134
|
+
// Required for dev client.
|
|
135
|
+
dev: this.options.mode !== "production"
|
|
136
|
+
},
|
|
137
|
+
// Indicates the name of the main bundle.
|
|
138
|
+
mainModuleName,
|
|
139
|
+
// Add this string to make Flipper register React Native / Metro as "running".
|
|
140
|
+
// Can be tested by running:
|
|
141
|
+
// `METRO_SERVER_PORT=19000 open -a flipper.app`
|
|
142
|
+
// Where 19000 is the port where the Expo project is being hosted.
|
|
143
|
+
__flipperHack: "React Native packager is running"
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** Resolve all assets and set them on the manifest as URLs */ async mutateManifestWithAssetsAsync(manifest, bundleUrl) {
|
|
147
|
+
await (0, _resolveAssets).resolveManifestAssets(this.projectRoot, {
|
|
148
|
+
manifest,
|
|
149
|
+
resolver: async (path)=>{
|
|
150
|
+
if (this.options.isNativeWebpack) {
|
|
151
|
+
// When using our custom dev server, just do assets normally
|
|
152
|
+
// without the `assets/` subpath redirect.
|
|
153
|
+
return (0, _url).resolve(bundleUrl.match(/^https?:\/\/.*?\//)[0], path);
|
|
154
|
+
}
|
|
155
|
+
return bundleUrl.match(/^https?:\/\/.*?\//)[0] + "assets/" + path;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// The server normally inserts this but if we're offline we'll do it here
|
|
159
|
+
await (0, _resolveAssets).resolveGoogleServicesFile(this.projectRoot, manifest);
|
|
160
|
+
}
|
|
161
|
+
async handleRequestAsync(req, res, next) {
|
|
162
|
+
// Save device IDs for dev client.
|
|
163
|
+
await this.saveDevicesAsync(req);
|
|
164
|
+
// Read from headers
|
|
165
|
+
const options = this.getParsedHeaders(req);
|
|
166
|
+
const { body , version , headers } = await this._getManifestResponseAsync(options);
|
|
167
|
+
for (const [headerName, headerValue] of headers){
|
|
168
|
+
res.setHeader(headerName, headerValue);
|
|
169
|
+
}
|
|
170
|
+
res.end(body);
|
|
171
|
+
// Log analytics
|
|
172
|
+
this.trackManifest(version != null ? version : null);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.ManifestMiddleware = ManifestMiddleware;
|
|
176
|
+
|
|
177
|
+
//# sourceMappingURL=ManifestMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/ManifestMiddleware.ts"],"sourcesContent":["import { ExpoConfig, ExpoGoConfig, getConfig, ProjectConfig } from '@expo/config';\nimport { resolve } from 'url';\n\nimport * as Log from '../../../log';\nimport { stripExtension } from '../../../utils/url';\nimport * as ProjectDevices from '../../project/devices';\nimport { UrlCreator } from '../UrlCreator';\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { resolveGoogleServicesFile, resolveManifestAssets } from './resolveAssets';\nimport { resolveEntryPoint } from './resolveEntryPoint';\nimport { RuntimePlatform } from './resolvePlatform';\nimport { ServerHeaders, ServerNext, ServerRequest, ServerResponse } from './server.types';\n\n/** Info about the computer hosting the dev server. */\nexport interface HostInfo {\n host: string;\n server: 'expo';\n serverVersion: string;\n serverDriver: string | null;\n serverOS: NodeJS.Platform;\n serverOSVersion: string;\n}\n\n/** Parsed values from the supported request headers. */\nexport interface ManifestRequestInfo {\n /** Should return the signed manifest. */\n acceptSignature: boolean;\n /** Platform to serve. */\n platform: RuntimePlatform;\n /** Requested host name. */\n hostname?: string | null;\n}\n\n/** Project related info. */\nexport type ResponseProjectSettings = {\n expoGoConfig: ExpoGoConfig;\n hostUri: string;\n bundleUrl: string;\n exp: ExpoConfig;\n};\n\nexport const DEVELOPER_TOOL = 'expo-cli';\n\nexport type ManifestMiddlewareOptions = {\n /** Should start the dev servers in development mode (minify). */\n mode?: 'development' | 'production';\n /** Should instruct the bundler to create minified bundles. */\n minify?: boolean;\n constructUrl: UrlCreator['constructUrl'];\n isNativeWebpack?: boolean;\n privateKeyPath?: string;\n};\n\n/** Base middleware creator for serving the Expo manifest (like the index.html but for native runtimes). */\nexport abstract class ManifestMiddleware<\n TManifestRequestInfo extends ManifestRequestInfo\n> extends ExpoMiddleware {\n constructor(protected projectRoot: string, protected options: ManifestMiddlewareOptions) {\n super(\n projectRoot,\n /**\n * Only support `/`, `/manifest`, `/index.exp` for the manifest middleware.\n */\n ['/', '/manifest', '/index.exp']\n );\n }\n\n /** Exposed for testing. */\n public async _resolveProjectSettingsAsync({\n platform,\n hostname,\n }: Pick<TManifestRequestInfo, 'hostname' | 'platform'>): Promise<ResponseProjectSettings> {\n // Read the config\n const projectConfig = getConfig(this.projectRoot);\n\n // Read from headers\n const mainModuleName = this.resolveMainModuleName(projectConfig, platform);\n\n // Create the manifest and set fields within it\n const expoGoConfig = this.getExpoGoConfig({\n mainModuleName,\n hostname,\n });\n\n const hostUri = this.options.constructUrl({ scheme: '', hostname });\n\n const bundleUrl = this._getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n });\n\n // Resolve all assets and set them on the manifest as URLs\n await this.mutateManifestWithAssetsAsync(projectConfig.exp, bundleUrl);\n\n return {\n expoGoConfig,\n hostUri,\n bundleUrl,\n exp: projectConfig.exp,\n };\n }\n\n /** Get the main entry module ID (file) relative to the project root. */\n private resolveMainModuleName(projectConfig: ProjectConfig, platform: string): string {\n let entryPoint = resolveEntryPoint(this.projectRoot, platform, projectConfig);\n // NOTE(Bacon): Webpack is currently hardcoded to index.bundle on native\n // in the future (TODO) we should move this logic into a Webpack plugin and use\n // a generated file name like we do on web.\n // const server = getDefaultDevServer();\n // // TODO: Move this into BundlerDevServer and read this info from self.\n // const isNativeWebpack = server instanceof WebpackBundlerDevServer && server.isTargetingNative();\n if (this.options.isNativeWebpack) {\n entryPoint = 'index.js';\n }\n\n return stripExtension(entryPoint, 'js');\n }\n\n /** Parse request headers into options. */\n public abstract getParsedHeaders(req: ServerRequest): TManifestRequestInfo;\n\n /** Store device IDs that were sent in the request headers. */\n private async saveDevicesAsync(req: ServerRequest) {\n const deviceIds = req.headers?.['expo-dev-client-id'];\n if (deviceIds) {\n await ProjectDevices.saveDevicesAsync(this.projectRoot, deviceIds).catch((e) =>\n Log.exception(e)\n );\n }\n }\n\n /** Create the bundle URL (points to the single JS entry file). Exposed for testing. */\n public _getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n }: {\n platform: string;\n hostname?: string | null;\n mainModuleName: string;\n }): string {\n const queryParams = new URLSearchParams({\n platform: encodeURIComponent(platform),\n dev: String(this.options.mode !== 'production'),\n // TODO: Is this still needed?\n hot: String(false),\n });\n\n if (this.options.minify) {\n queryParams.append('minify', String(this.options.minify));\n }\n\n const path = `/${encodeURI(mainModuleName)}.bundle?${queryParams.toString()}`;\n\n return (\n this.options.constructUrl({\n scheme: 'http',\n // hostType: this.options.location.hostType,\n hostname,\n }) + path\n );\n }\n\n /** Log telemetry. */\n protected abstract trackManifest(version?: string): void;\n\n /** Get the manifest response to return to the runtime. This file contains info regarding where the assets can be loaded from. Exposed for testing. */\n public abstract _getManifestResponseAsync(options: TManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }>;\n\n private getExpoGoConfig({\n mainModuleName,\n hostname,\n }: {\n mainModuleName: string;\n hostname?: string | null;\n }): ExpoGoConfig {\n return {\n // localhost:19000\n debuggerHost: this.options.constructUrl({ scheme: '', hostname }),\n // http://localhost:19000/logs -- used to send logs to the CLI for displaying in the terminal.\n // This is deprecated in favor of the WebSocket connection setup in Metro.\n logUrl: this.options.constructUrl({ scheme: 'http', hostname }) + '/logs',\n // Required for Expo Go to function.\n developer: {\n tool: DEVELOPER_TOOL,\n projectRoot: this.projectRoot,\n },\n packagerOpts: {\n // Required for dev client.\n dev: this.options.mode !== 'production',\n },\n // Indicates the name of the main bundle.\n mainModuleName,\n // Add this string to make Flipper register React Native / Metro as \"running\".\n // Can be tested by running:\n // `METRO_SERVER_PORT=19000 open -a flipper.app`\n // Where 19000 is the port where the Expo project is being hosted.\n __flipperHack: 'React Native packager is running',\n };\n }\n\n /** Resolve all assets and set them on the manifest as URLs */\n private async mutateManifestWithAssetsAsync(manifest: ExpoConfig, bundleUrl: string) {\n await resolveManifestAssets(this.projectRoot, {\n manifest,\n resolver: async (path) => {\n if (this.options.isNativeWebpack) {\n // When using our custom dev server, just do assets normally\n // without the `assets/` subpath redirect.\n return resolve(bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0], path);\n }\n return bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0] + 'assets/' + path;\n },\n });\n // The server normally inserts this but if we're offline we'll do it here\n await resolveGoogleServicesFile(this.projectRoot, manifest);\n }\n\n async handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void> {\n // Save device IDs for dev client.\n await this.saveDevicesAsync(req);\n\n // Read from headers\n const options = this.getParsedHeaders(req);\n const { body, version, headers } = await this._getManifestResponseAsync(options);\n for (const [headerName, headerValue] of headers) {\n res.setHeader(headerName, headerValue);\n }\n res.end(body);\n\n // Log analytics\n this.trackManifest(version ?? null);\n }\n}\n"],"names":["Log","ProjectDevices","DEVELOPER_TOOL","ManifestMiddleware","ExpoMiddleware","constructor","projectRoot","options","_resolveProjectSettingsAsync","platform","hostname","projectConfig","getConfig","mainModuleName","resolveMainModuleName","expoGoConfig","getExpoGoConfig","hostUri","constructUrl","scheme","bundleUrl","_getBundleUrl","mutateManifestWithAssetsAsync","exp","entryPoint","resolveEntryPoint","isNativeWebpack","stripExtension","saveDevicesAsync","req","deviceIds","headers","catch","e","exception","queryParams","URLSearchParams","encodeURIComponent","dev","String","mode","hot","minify","append","path","encodeURI","toString","debuggerHost","logUrl","developer","tool","packagerOpts","__flipperHack","manifest","resolveManifestAssets","resolver","resolve","match","resolveGoogleServicesFile","handleRequestAsync","res","next","getParsedHeaders","body","version","_getManifestResponseAsync","headerName","headerValue","setHeader","end","trackManifest"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _url = require("url");
|
|
6
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
7
|
+
var _expoMiddleware = require("./ExpoMiddleware");
|
|
8
|
+
var _resolvePlatform = require("./resolvePlatform");
|
|
9
|
+
function _interopRequireWildcard(obj) {
|
|
10
|
+
if (obj && obj.__esModule) {
|
|
11
|
+
return obj;
|
|
12
|
+
} else {
|
|
13
|
+
var newObj = {};
|
|
14
|
+
if (obj != null) {
|
|
15
|
+
for(var key in obj){
|
|
16
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
17
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
18
|
+
if (desc.get || desc.set) {
|
|
19
|
+
Object.defineProperty(newObj, key, desc);
|
|
20
|
+
} else {
|
|
21
|
+
newObj[key] = obj[key];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
newObj.default = obj;
|
|
27
|
+
return newObj;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class RuntimeRedirectMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
31
|
+
constructor(projectRoot, options){
|
|
32
|
+
super(projectRoot, [
|
|
33
|
+
"/_expo/link"
|
|
34
|
+
]);
|
|
35
|
+
this.projectRoot = projectRoot;
|
|
36
|
+
this.options = options;
|
|
37
|
+
}
|
|
38
|
+
async handleRequestAsync(req, res) {
|
|
39
|
+
const { query } = (0, _url).parse(req.url, true);
|
|
40
|
+
const isDevClient = query["choice"] === "expo-dev-client";
|
|
41
|
+
const platform = (0, _resolvePlatform).parsePlatformHeader(req);
|
|
42
|
+
(0, _resolvePlatform).assertMissingRuntimePlatform(platform);
|
|
43
|
+
(0, _resolvePlatform).assertRuntimePlatform(platform);
|
|
44
|
+
const runtime = isDevClient ? "custom" : "expo";
|
|
45
|
+
this.options.onDeepLink({
|
|
46
|
+
runtime,
|
|
47
|
+
platform
|
|
48
|
+
});
|
|
49
|
+
const redirect = this.options.getLocation({
|
|
50
|
+
runtime
|
|
51
|
+
});
|
|
52
|
+
if (!redirect) {
|
|
53
|
+
Log.warn(`[redirect middleware]: Unable to determine redirect location for runtime '${runtime}' and platform '${platform}'`);
|
|
54
|
+
res.statusCode = 404;
|
|
55
|
+
res.end();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
Log.debug("Redirect ->", redirect);
|
|
59
|
+
res.setHeader("Location", redirect);
|
|
60
|
+
// Disable caching
|
|
61
|
+
(0, _expoMiddleware).disableResponseCache(res);
|
|
62
|
+
// 'Temporary Redirect'
|
|
63
|
+
res.statusCode = 307;
|
|
64
|
+
res.end();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.RuntimeRedirectMiddleware = RuntimeRedirectMiddleware;
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=RuntimeRedirectMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/RuntimeRedirectMiddleware.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport * as Log from '../../../log';\nimport { disableResponseCache, ExpoMiddleware } from './ExpoMiddleware';\nimport {\n assertMissingRuntimePlatform,\n assertRuntimePlatform,\n parsePlatformHeader,\n RuntimePlatform,\n} from './resolvePlatform';\nimport { ServerRequest, ServerResponse } from './server.types';\n\n/** Runtime to target: expo = Expo Go, custom = Dev Client. */\ntype RuntimeTarget = 'expo' | 'custom';\n\nexport class RuntimeRedirectMiddleware extends ExpoMiddleware {\n constructor(\n protected projectRoot: string,\n protected options: {\n onDeepLink: (props: {\n runtime: RuntimeTarget;\n platform: RuntimePlatform;\n }) => void | Promise<void>;\n getLocation: (props: { runtime: RuntimeTarget }) => string | null | undefined;\n }\n ) {\n super(projectRoot, ['/_expo/link']);\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n const { query } = parse(req.url!, true);\n const isDevClient = query['choice'] === 'expo-dev-client';\n const platform = parsePlatformHeader(req);\n assertMissingRuntimePlatform(platform);\n assertRuntimePlatform(platform);\n const runtime = isDevClient ? 'custom' : 'expo';\n\n this.options.onDeepLink({ runtime, platform });\n\n const redirect = this.options.getLocation({ runtime });\n if (!redirect) {\n Log.warn(\n `[redirect middleware]: Unable to determine redirect location for runtime '${runtime}' and platform '${platform}'`\n );\n res.statusCode = 404;\n res.end();\n return;\n }\n Log.debug('Redirect ->', redirect);\n res.setHeader('Location', redirect);\n\n // Disable caching\n disableResponseCache(res);\n\n // 'Temporary Redirect'\n res.statusCode = 307;\n res.end();\n }\n}\n"],"names":["Log","RuntimeRedirectMiddleware","ExpoMiddleware","constructor","projectRoot","options","handleRequestAsync","req","res","query","parse","url","isDevClient","platform","parsePlatformHeader","assertMissingRuntimePlatform","assertRuntimePlatform","runtime","onDeepLink","redirect","getLocation","warn","statusCode","end","debug","setHeader","disableResponseCache"],"mappings":"AAAA;;;;AAAsB,IAAA,IAAK,WAAL,KAAK,CAAA;AAEfA,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACsC,IAAA,eAAkB,WAAlB,kBAAkB,CAAA;AAMhE,IAAA,gBAAmB,WAAnB,mBAAmB,CAAA;;;;;;;;;;;;;;;;;;;;;;AAMnB,MAAMC,yBAAyB,SAASC,eAAc,eAAA;IAC3DC,YACYC,WAAmB,EACnBC,OAMT,CACD;QACA,KAAK,CAACD,WAAW,EAAE;YAAC,aAAa;SAAC,CAAC,CAAC;aAT1BA,WAAmB,GAAnBA,WAAmB;aACnBC,OAMT,GANSA,OAMT;KAGF;IAED,MAAMC,kBAAkB,CAACC,GAAkB,EAAEC,GAAmB,EAAiB;QAC/E,MAAM,EAAEC,KAAK,CAAA,EAAE,GAAGC,CAAAA,GAAAA,IAAK,AAAgB,CAAA,MAAhB,CAACH,GAAG,CAACI,GAAG,EAAG,IAAI,CAAC,AAAC;QACxC,MAAMC,WAAW,GAAGH,KAAK,CAAC,QAAQ,CAAC,KAAK,iBAAiB,AAAC;QAC1D,MAAMI,QAAQ,GAAGC,CAAAA,GAAAA,gBAAmB,AAAK,CAAA,oBAAL,CAACP,GAAG,CAAC,AAAC;QAC1CQ,CAAAA,GAAAA,gBAA4B,AAAU,CAAA,6BAAV,CAACF,QAAQ,CAAC,CAAC;QACvCG,CAAAA,GAAAA,gBAAqB,AAAU,CAAA,sBAAV,CAACH,QAAQ,CAAC,CAAC;QAChC,MAAMI,OAAO,GAAGL,WAAW,GAAG,QAAQ,GAAG,MAAM,AAAC;QAEhD,IAAI,CAACP,OAAO,CAACa,UAAU,CAAC;YAAED,OAAO;YAAEJ,QAAQ;SAAE,CAAC,CAAC;QAE/C,MAAMM,QAAQ,GAAG,IAAI,CAACd,OAAO,CAACe,WAAW,CAAC;YAAEH,OAAO;SAAE,CAAC,AAAC;QACvD,IAAI,CAACE,QAAQ,EAAE;YACbnB,GAAG,CAACqB,IAAI,CACN,CAAC,0EAA0E,EAAEJ,OAAO,CAAC,gBAAgB,EAAEJ,QAAQ,CAAC,CAAC,CAAC,CACnH,CAAC;YACFL,GAAG,CAACc,UAAU,GAAG,GAAG,CAAC;YACrBd,GAAG,CAACe,GAAG,EAAE,CAAC;YACV,OAAO;SACR;QACDvB,GAAG,CAACwB,KAAK,CAAC,aAAa,EAAEL,QAAQ,CAAC,CAAC;QACnCX,GAAG,CAACiB,SAAS,CAAC,UAAU,EAAEN,QAAQ,CAAC,CAAC;QAEpC,kBAAkB;QAClBO,CAAAA,GAAAA,eAAoB,AAAK,CAAA,qBAAL,CAAClB,GAAG,CAAC,CAAC;QAE1B,uBAAuB;QACvBA,GAAG,CAACc,UAAU,GAAG,GAAG,CAAC;QACrBd,GAAG,CAACe,GAAG,EAAE,CAAC;KACX;CACF;QA3CYtB,yBAAyB,GAAzBA,yBAAyB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.createDevServerMiddleware = createDevServerMiddleware;
|
|
6
|
+
var _devServer = require("@expo/dev-server");
|
|
7
|
+
function createDevServerMiddleware({ watchFolders , port }) {
|
|
8
|
+
const shim = function() {};
|
|
9
|
+
return (0, _devServer).createDevServerMiddleware({
|
|
10
|
+
// Attach a fake logger to the expo `/logs` middleware so we can collect devices for analytics.
|
|
11
|
+
// We utilize the WebSocket logs now so we don't need to print anything.
|
|
12
|
+
// TODO: Migrate to a system that uses WebSockets so we can detect when a device disconnects.
|
|
13
|
+
logger: {
|
|
14
|
+
info: shim,
|
|
15
|
+
warn: shim,
|
|
16
|
+
error: shim,
|
|
17
|
+
debug: shim
|
|
18
|
+
},
|
|
19
|
+
port,
|
|
20
|
+
watchFolders
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=createDevServerMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/createDevServerMiddleware.ts"],"sourcesContent":["import { createDevServerMiddleware as originalCreate } from '@expo/dev-server';\n\nexport function createDevServerMiddleware({\n watchFolders,\n port,\n}: {\n watchFolders: readonly string[];\n port: number;\n}) {\n const shim = function () {};\n\n return originalCreate({\n // Attach a fake logger to the expo `/logs` middleware so we can collect devices for analytics.\n // We utilize the WebSocket logs now so we don't need to print anything.\n // TODO: Migrate to a system that uses WebSockets so we can detect when a device disconnects.\n logger: {\n info: shim,\n warn: shim,\n error: shim,\n debug: shim,\n } as any,\n port,\n watchFolders,\n });\n}\n"],"names":["createDevServerMiddleware","watchFolders","port","shim","originalCreate","logger","info","warn","error","debug"],"mappings":"AAAA;;;;QAEgBA,yBAAyB,GAAzBA,yBAAyB;AAFmB,IAAA,UAAkB,WAAlB,kBAAkB,CAAA;AAEvE,SAASA,yBAAyB,CAAC,EACxCC,YAAY,CAAA,EACZC,IAAI,CAAA,EAIL,EAAE;IACD,MAAMC,IAAI,GAAG,WAAY,EAAE,AAAC;IAE5B,OAAOC,CAAAA,GAAAA,UAAc,AAYnB,CAAA,0BAZmB,CAAC;QACpB,+FAA+F;QAC/F,wEAAwE;QACxE,6FAA6F;QAC7FC,MAAM,EAAE;YACNC,IAAI,EAAEH,IAAI;YACVI,IAAI,EAAEJ,IAAI;YACVK,KAAK,EAAEL,IAAI;YACXM,KAAK,EAAEN,IAAI;SACZ;QACDD,IAAI;QACJD,YAAY;KACb,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.resolveGoogleServicesFile = resolveGoogleServicesFile;
|
|
6
|
+
exports.getAssetFieldPathsForManifestAsync = getAssetFieldPathsForManifestAsync;
|
|
7
|
+
exports.resolveManifestAssets = resolveManifestAssets;
|
|
8
|
+
var _promises = _interopRequireDefault(require("fs/promises"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _getExpoSchema = require("../../../api/getExpoSchema");
|
|
11
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
|
+
var _dir = require("../../../utils/dir");
|
|
13
|
+
var _errors = require("../../../utils/errors");
|
|
14
|
+
var _obj = require("../../../utils/obj");
|
|
15
|
+
var _url = require("../../../utils/url");
|
|
16
|
+
function _interopRequireDefault(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function _interopRequireWildcard(obj) {
|
|
22
|
+
if (obj && obj.__esModule) {
|
|
23
|
+
return obj;
|
|
24
|
+
} else {
|
|
25
|
+
var newObj = {};
|
|
26
|
+
if (obj != null) {
|
|
27
|
+
for(var key in obj){
|
|
28
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
29
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
30
|
+
if (desc.get || desc.set) {
|
|
31
|
+
Object.defineProperty(newObj, key, desc);
|
|
32
|
+
} else {
|
|
33
|
+
newObj[key] = obj[key];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
newObj.default = obj;
|
|
39
|
+
return newObj;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function resolveGoogleServicesFile(projectRoot, manifest) {
|
|
43
|
+
var ref, ref1;
|
|
44
|
+
if ((ref = manifest.android) == null ? void 0 : ref.googleServicesFile) {
|
|
45
|
+
try {
|
|
46
|
+
const contents = await _promises.default.readFile(_path.default.resolve(projectRoot, manifest.android.googleServicesFile), "utf8");
|
|
47
|
+
manifest.android.googleServicesFile = contents;
|
|
48
|
+
} catch {
|
|
49
|
+
Log.warn(`Could not parse Expo config: android.googleServicesFile: "${manifest.android.googleServicesFile}"`);
|
|
50
|
+
// Delete the field so Expo Go doesn't attempt to read it.
|
|
51
|
+
delete manifest.android.googleServicesFile;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if ((ref1 = manifest.ios) == null ? void 0 : ref1.googleServicesFile) {
|
|
55
|
+
try {
|
|
56
|
+
const contents = await _promises.default.readFile(_path.default.resolve(projectRoot, manifest.ios.googleServicesFile), "base64");
|
|
57
|
+
manifest.ios.googleServicesFile = contents;
|
|
58
|
+
} catch {
|
|
59
|
+
Log.warn(`Could not parse Expo config: ios.googleServicesFile: "${manifest.ios.googleServicesFile}"`);
|
|
60
|
+
// Delete the field so Expo Go doesn't attempt to read it.
|
|
61
|
+
delete manifest.ios.googleServicesFile;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return manifest;
|
|
65
|
+
}
|
|
66
|
+
async function getAssetFieldPathsForManifestAsync(manifest) {
|
|
67
|
+
// String array like ["icon", "notification.icon", "loading.icon", "loading.backgroundImage", "ios.icon", ...]
|
|
68
|
+
const sdkAssetFieldPaths = await (0, _getExpoSchema).getAssetSchemasAsync(manifest.sdkVersion);
|
|
69
|
+
return sdkAssetFieldPaths.filter((assetSchema)=>(0, _obj).get(manifest, assetSchema)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
async function resolveManifestAssets(projectRoot, { manifest , resolver }) {
|
|
73
|
+
try {
|
|
74
|
+
// Asset fields that the user has set like ["icon", "splash.image"]
|
|
75
|
+
const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);
|
|
76
|
+
// Get the URLs
|
|
77
|
+
const urls = await Promise.all(assetSchemas.map(async (manifestField)=>{
|
|
78
|
+
const pathOrURL = (0, _obj).get(manifest, manifestField);
|
|
79
|
+
// URL
|
|
80
|
+
if ((0, _url).validateUrl(pathOrURL, {
|
|
81
|
+
requireProtocol: true
|
|
82
|
+
})) {
|
|
83
|
+
return pathOrURL;
|
|
84
|
+
}
|
|
85
|
+
// File path
|
|
86
|
+
if (await (0, _dir).fileExistsAsync(_path.default.resolve(projectRoot, pathOrURL))) {
|
|
87
|
+
return await resolver(pathOrURL);
|
|
88
|
+
}
|
|
89
|
+
// Unknown
|
|
90
|
+
const err = new _errors.CommandError("MANIFEST_ASSET", "Could not resolve local asset: " + pathOrURL);
|
|
91
|
+
err.localAssetPath = pathOrURL;
|
|
92
|
+
err.manifestField = manifestField;
|
|
93
|
+
throw err;
|
|
94
|
+
}));
|
|
95
|
+
// Set the corresponding URL fields
|
|
96
|
+
assetSchemas.forEach((manifestField, index)=>(0, _obj).set(manifest, `${manifestField}Url`, urls[index])
|
|
97
|
+
);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
if (error.localAssetPath) {
|
|
100
|
+
Log.warn(`Unable to resolve asset "${error.localAssetPath}" from "${error.manifestField}" in your app.json or app.config.js`);
|
|
101
|
+
} else {
|
|
102
|
+
Log.warn(`Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=resolveAssets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { BundleAssetWithFileHashes } from '@expo/dev-server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Pick<ExpoConfig, 'android' | 'ios'>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","Log","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.resolveEntryPoint = resolveEntryPoint;
|
|
6
|
+
var _paths = require("@expo/config/paths");
|
|
7
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _errors = require("../../../utils/errors");
|
|
10
|
+
function _interopRequireDefault(obj) {
|
|
11
|
+
return obj && obj.__esModule ? obj : {
|
|
12
|
+
default: obj
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const supportedPlatforms = [
|
|
16
|
+
"ios",
|
|
17
|
+
"android",
|
|
18
|
+
"web"
|
|
19
|
+
];
|
|
20
|
+
function resolveEntryPoint(projectRoot, platform, projectConfig) {
|
|
21
|
+
if (platform && !supportedPlatforms.includes(platform)) {
|
|
22
|
+
throw new _errors.CommandError(`Failed to resolve the project's entry file: The platform "${platform}" is not supported.`);
|
|
23
|
+
}
|
|
24
|
+
// TODO(Bacon): support platform extension resolution like .ios, .native
|
|
25
|
+
// const platforms = [platform, 'native'].filter(Boolean) as string[];
|
|
26
|
+
const platforms = [];
|
|
27
|
+
const entry = (0, _paths).getEntryPoint(projectRoot, [
|
|
28
|
+
"./index"
|
|
29
|
+
], platforms, projectConfig);
|
|
30
|
+
if (!entry) {
|
|
31
|
+
// NOTE(Bacon): I purposefully don't mention all possible resolutions here since the package.json is the most standard and users should opt towards that.
|
|
32
|
+
throw new _errors.CommandError(_chalk.default`The project entry file could not be resolved. Please define it in the {bold package.json} "main" field.`);
|
|
33
|
+
}
|
|
34
|
+
return _path.default.relative(projectRoot, entry);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=resolveEntryPoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/resolveEntryPoint.ts"],"sourcesContent":["import { ProjectConfig } from '@expo/config';\nimport { getEntryPoint } from '@expo/config/paths';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { CommandError } from '../../../utils/errors';\n\nconst supportedPlatforms = ['ios', 'android', 'web'];\n\n/** Returns the relative entry file for the project. */\nexport function resolveEntryPoint(\n projectRoot: string,\n platform?: string,\n projectConfig?: ProjectConfig\n): string {\n if (platform && !supportedPlatforms.includes(platform)) {\n throw new CommandError(\n `Failed to resolve the project's entry file: The platform \"${platform}\" is not supported.`\n );\n }\n // TODO(Bacon): support platform extension resolution like .ios, .native\n // const platforms = [platform, 'native'].filter(Boolean) as string[];\n const platforms: string[] = [];\n\n const entry = getEntryPoint(projectRoot, ['./index'], platforms, projectConfig);\n if (!entry) {\n // NOTE(Bacon): I purposefully don't mention all possible resolutions here since the package.json is the most standard and users should opt towards that.\n throw new CommandError(\n chalk`The project entry file could not be resolved. Please define it in the {bold package.json} \"main\" field.`\n );\n }\n\n return path.relative(projectRoot, entry);\n}\n"],"names":["resolveEntryPoint","supportedPlatforms","projectRoot","platform","projectConfig","includes","CommandError","platforms","entry","getEntryPoint","chalk","path","relative"],"mappings":"AAAA;;;;QAUgBA,iBAAiB,GAAjBA,iBAAiB;AATH,IAAA,MAAoB,WAApB,oBAAoB,CAAA;AAChC,IAAA,MAAO,kCAAP,OAAO,EAAA;AACR,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEM,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;;;;;;AAEpD,MAAMC,kBAAkB,GAAG;IAAC,KAAK;IAAE,SAAS;IAAE,KAAK;CAAC,AAAC;AAG9C,SAASD,iBAAiB,CAC/BE,WAAmB,EACnBC,QAAiB,EACjBC,aAA6B,EACrB;IACR,IAAID,QAAQ,IAAI,CAACF,kBAAkB,CAACI,QAAQ,CAACF,QAAQ,CAAC,EAAE;QACtD,MAAM,IAAIG,OAAY,aAAA,CACpB,CAAC,0DAA0D,EAAEH,QAAQ,CAAC,mBAAmB,CAAC,CAC3F,CAAC;KACH;IACD,wEAAwE;IACxE,sEAAsE;IACtE,MAAMI,SAAS,GAAa,EAAE,AAAC;IAE/B,MAAMC,KAAK,GAAGC,CAAAA,GAAAA,MAAa,AAAoD,CAAA,cAApD,CAACP,WAAW,EAAE;QAAC,SAAS;KAAC,EAAEK,SAAS,EAAEH,aAAa,CAAC,AAAC;IAChF,IAAI,CAACI,KAAK,EAAE;QACV,yJAAyJ;QACzJ,MAAM,IAAIF,OAAY,aAAA,CACpBI,MAAK,QAAA,CAAC,uGAAuG,CAAC,CAC/G,CAAC;KACH;IAED,OAAOC,KAAI,QAAA,CAACC,QAAQ,CAACV,WAAW,EAAEM,KAAK,CAAC,CAAC;CAC1C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.parsePlatformHeader = parsePlatformHeader;
|
|
6
|
+
exports.assertMissingRuntimePlatform = assertMissingRuntimePlatform;
|
|
7
|
+
exports.assertRuntimePlatform = assertRuntimePlatform;
|
|
8
|
+
var _url = require("url");
|
|
9
|
+
var _errors = require("../../../utils/errors");
|
|
10
|
+
function parsePlatformHeader(req) {
|
|
11
|
+
var ref;
|
|
12
|
+
const url = (0, _url).parse(req.url, /* parseQueryString */ true);
|
|
13
|
+
const platform = ((ref = url.query) == null ? void 0 : ref.platform) || req.headers["expo-platform"] || req.headers["exponent-platform"];
|
|
14
|
+
var ref1;
|
|
15
|
+
return (ref1 = Array.isArray(platform) ? platform[0] : platform) != null ? ref1 : null;
|
|
16
|
+
}
|
|
17
|
+
function assertMissingRuntimePlatform(platform) {
|
|
18
|
+
if (!platform) {
|
|
19
|
+
throw new _errors.CommandError("PLATFORM_HEADER", `Must specify "expo-platform" header or "platform" query parameter`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function assertRuntimePlatform(platform) {
|
|
23
|
+
const stringifiedPlatform = String(platform);
|
|
24
|
+
if (![
|
|
25
|
+
"android",
|
|
26
|
+
"ios"
|
|
27
|
+
].includes(stringifiedPlatform)) {
|
|
28
|
+
throw new _errors.CommandError("PLATFORM_HEADER", `platform must be "android" or "ios". Received: "${platform}"`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=resolvePlatform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/resolvePlatform.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport { CommandError } from '../../../utils/errors';\nimport { ServerRequest } from './server.types';\n\n/** Supported platforms */\nexport type RuntimePlatform = 'ios' | 'android';\n\n/**\n * Extract the runtime platform from the server request.\n * 1. Query param `platform`: `?platform=ios`\n * 2. Header `expo-platform`: `'expo-platform': ios`\n * 2. Legacy header `exponent-platform`: `'exponent-platform': ios`\n *\n * Returns first item in the case of an array.\n */\nexport function parsePlatformHeader(req: ServerRequest): string | null {\n const url = parse(req.url!, /* parseQueryString */ true);\n const platform =\n url.query?.platform || req.headers['expo-platform'] || req.headers['exponent-platform'];\n return (Array.isArray(platform) ? platform[0] : platform) ?? null;\n}\n\n/** Assert if the runtime platform is not included. */\nexport function assertMissingRuntimePlatform(platform?: any): asserts platform {\n if (!platform) {\n throw new CommandError(\n 'PLATFORM_HEADER',\n `Must specify \"expo-platform\" header or \"platform\" query parameter`\n );\n }\n}\n\n/** Assert if the runtime platform is not correct. */\nexport function assertRuntimePlatform(platform: string): asserts platform is RuntimePlatform {\n const stringifiedPlatform = String(platform);\n if (!['android', 'ios'].includes(stringifiedPlatform)) {\n throw new CommandError(\n 'PLATFORM_HEADER',\n `platform must be \"android\" or \"ios\". Received: \"${platform}\"`\n );\n }\n}\n"],"names":["parsePlatformHeader","assertMissingRuntimePlatform","assertRuntimePlatform","req","url","parse","platform","query","headers","Array","isArray","CommandError","stringifiedPlatform","String","includes"],"mappings":"AAAA;;;;QAgBgBA,mBAAmB,GAAnBA,mBAAmB;QAQnBC,4BAA4B,GAA5BA,4BAA4B;QAU5BC,qBAAqB,GAArBA,qBAAqB;AAlCf,IAAA,IAAK,WAAL,KAAK,CAAA;AAEE,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AAc7C,SAASF,mBAAmB,CAACG,GAAkB,EAAiB;QAGnEC,GAAS;IAFX,MAAMA,GAAG,GAAGC,CAAAA,GAAAA,IAAK,AAAuC,CAAA,MAAvC,CAACF,GAAG,CAACC,GAAG,EAAG,sBAAsB,CAAC,IAAI,CAAC,AAAC;IACzD,MAAME,QAAQ,GACZF,CAAAA,CAAAA,GAAS,GAATA,GAAG,CAACG,KAAK,SAAU,GAAnBH,KAAAA,CAAmB,GAAnBA,GAAS,CAAEE,QAAQ,CAAA,IAAIH,GAAG,CAACK,OAAO,CAAC,eAAe,CAAC,IAAIL,GAAG,CAACK,OAAO,CAAC,mBAAmB,CAAC,AAAC;QACnF,IAAkD;IAAzD,OAAO,CAAA,IAAkD,GAAjDC,KAAK,CAACC,OAAO,CAACJ,QAAQ,CAAC,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGA,QAAQ,YAAjD,IAAkD,GAAI,IAAI,CAAC;CACnE;AAGM,SAASL,4BAA4B,CAACK,QAAc,EAAoB;IAC7E,IAAI,CAACA,QAAQ,EAAE;QACb,MAAM,IAAIK,OAAY,aAAA,CACpB,iBAAiB,EACjB,CAAC,iEAAiE,CAAC,CACpE,CAAC;KACH;CACF;AAGM,SAAST,qBAAqB,CAACI,QAAgB,EAAuC;IAC3F,MAAMM,mBAAmB,GAAGC,MAAM,CAACP,QAAQ,CAAC,AAAC;IAC7C,IAAI,CAAC;QAAC,SAAS;QAAE,KAAK;KAAC,CAACQ,QAAQ,CAACF,mBAAmB,CAAC,EAAE;QACrD,MAAM,IAAID,OAAY,aAAA,CACpB,iBAAiB,EACjB,CAAC,gDAAgD,EAAEL,QAAQ,CAAC,CAAC,CAAC,CAC/D,CAAC;KACH;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/server.types.ts"],"sourcesContent":["import express from 'express';\nimport http from 'http';\n\n/** Headers */\nexport type ServerHeaders = Map<string, number | string | readonly string[]>;\n/** Request */\nexport type ServerRequest = express.Request | http.IncomingMessage;\n/** Response */\nexport type ServerResponse = express.Response | http.ServerResponse;\n/** Next function */\nexport type ServerNext = (err?: Error) => void;\n"],"names":[],"mappings":"AAAA"}
|