@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,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getAllSpinners = getAllSpinners;
|
|
6
|
+
exports.ora = ora;
|
|
7
|
+
exports.logNewSection = logNewSection;
|
|
8
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
|
+
var _ora = _interopRequireDefault(require("ora"));
|
|
10
|
+
var _env = require("./env");
|
|
11
|
+
function _interopRequireDefault(obj) {
|
|
12
|
+
return obj && obj.__esModule ? obj : {
|
|
13
|
+
default: obj
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
const logReal = console.log;
|
|
18
|
+
// eslint-disable-next-line no-console
|
|
19
|
+
const infoReal = console.info;
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
const warnReal = console.warn;
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
const errorReal = console.error;
|
|
24
|
+
const runningSpinners = [];
|
|
25
|
+
function getAllSpinners() {
|
|
26
|
+
return runningSpinners;
|
|
27
|
+
}
|
|
28
|
+
function ora(options1) {
|
|
29
|
+
const inputOptions = typeof options1 === "string" ? {
|
|
30
|
+
text: options1
|
|
31
|
+
} : options1 || {};
|
|
32
|
+
const disabled = _env.env.CI || _env.env.EXPO_DEBUG;
|
|
33
|
+
const spinner = (0, _ora).default({
|
|
34
|
+
// Ensure our non-interactive mode emulates CI mode.
|
|
35
|
+
isEnabled: !disabled,
|
|
36
|
+
// In non-interactive mode, send the stream to stdout so it prevents looking like an error.
|
|
37
|
+
stream: disabled ? process.stdout : process.stderr,
|
|
38
|
+
...inputOptions
|
|
39
|
+
});
|
|
40
|
+
const oraStart = spinner.start.bind(spinner);
|
|
41
|
+
const oraStop = spinner.stop.bind(spinner);
|
|
42
|
+
const oraStopAndPersist = spinner.stopAndPersist.bind(spinner);
|
|
43
|
+
const logWrap = (method, args)=>{
|
|
44
|
+
oraStop();
|
|
45
|
+
method(...args);
|
|
46
|
+
spinner.start();
|
|
47
|
+
};
|
|
48
|
+
const wrapNativeLogs = ()=>{
|
|
49
|
+
// eslint-disable-next-line no-console
|
|
50
|
+
console.log = (...args)=>logWrap(logReal, args)
|
|
51
|
+
;
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.info = (...args)=>logWrap(infoReal, args)
|
|
54
|
+
;
|
|
55
|
+
// eslint-disable-next-line no-console
|
|
56
|
+
console.warn = (...args)=>logWrap(warnReal, args)
|
|
57
|
+
;
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.error = (...args)=>logWrap(errorReal, args)
|
|
60
|
+
;
|
|
61
|
+
runningSpinners.push(spinner);
|
|
62
|
+
};
|
|
63
|
+
const resetNativeLogs = ()=>{
|
|
64
|
+
// eslint-disable-next-line no-console
|
|
65
|
+
console.log = logReal;
|
|
66
|
+
// eslint-disable-next-line no-console
|
|
67
|
+
console.info = logReal;
|
|
68
|
+
// eslint-disable-next-line no-console
|
|
69
|
+
console.warn = warnReal;
|
|
70
|
+
// eslint-disable-next-line no-console
|
|
71
|
+
console.error = errorReal;
|
|
72
|
+
const index = runningSpinners.indexOf(spinner);
|
|
73
|
+
if (index >= 0) {
|
|
74
|
+
runningSpinners.splice(index, 1);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
spinner.start = (text)=>{
|
|
78
|
+
wrapNativeLogs();
|
|
79
|
+
return oraStart(text);
|
|
80
|
+
};
|
|
81
|
+
spinner.stopAndPersist = (options)=>{
|
|
82
|
+
const result = oraStopAndPersist(options);
|
|
83
|
+
resetNativeLogs();
|
|
84
|
+
return result;
|
|
85
|
+
};
|
|
86
|
+
spinner.stop = ()=>{
|
|
87
|
+
const result = oraStop();
|
|
88
|
+
resetNativeLogs();
|
|
89
|
+
return result;
|
|
90
|
+
};
|
|
91
|
+
// Always make the central logging module aware of the current spinner
|
|
92
|
+
// Log.setSpinner(spinner);
|
|
93
|
+
return spinner;
|
|
94
|
+
}
|
|
95
|
+
function logNewSection(title) {
|
|
96
|
+
const spinner = ora(_chalk.default.bold(title));
|
|
97
|
+
// Prevent the spinner from clashing with debug logs
|
|
98
|
+
spinner.start();
|
|
99
|
+
return spinner;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=ora.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/ora.ts"],"sourcesContent":["import chalk from 'chalk';\nimport oraReal, { Ora } from 'ora';\n\n// import * as Log from '../log';\nimport { env } from './env';\n\n// eslint-disable-next-line no-console\nconst logReal = console.log;\n// eslint-disable-next-line no-console\nconst infoReal = console.info;\n// eslint-disable-next-line no-console\nconst warnReal = console.warn;\n// eslint-disable-next-line no-console\nconst errorReal = console.error;\n\nconst runningSpinners: oraReal.Ora[] = [];\n\nexport function getAllSpinners() {\n return runningSpinners;\n}\n\n/**\n * A custom ora spinner that sends the stream to stdout in CI, non-TTY, or expo's non-interactive flag instead of stderr (the default).\n *\n * @param options\n * @returns\n */\nexport function ora(options?: oraReal.Options | string): oraReal.Ora {\n const inputOptions = typeof options === 'string' ? { text: options } : options || {};\n const disabled = env.CI || env.EXPO_DEBUG;\n const spinner = oraReal({\n // Ensure our non-interactive mode emulates CI mode.\n isEnabled: !disabled,\n // In non-interactive mode, send the stream to stdout so it prevents looking like an error.\n stream: disabled ? process.stdout : process.stderr,\n ...inputOptions,\n });\n\n const oraStart = spinner.start.bind(spinner);\n const oraStop = spinner.stop.bind(spinner);\n const oraStopAndPersist = spinner.stopAndPersist.bind(spinner);\n\n const logWrap = (method: any, args: any[]): void => {\n oraStop();\n method(...args);\n spinner.start();\n };\n\n const wrapNativeLogs = (): void => {\n // eslint-disable-next-line no-console\n console.log = (...args: any) => logWrap(logReal, args);\n // eslint-disable-next-line no-console\n console.info = (...args: any) => logWrap(infoReal, args);\n // eslint-disable-next-line no-console\n console.warn = (...args: any) => logWrap(warnReal, args);\n // eslint-disable-next-line no-console\n console.error = (...args: any) => logWrap(errorReal, args);\n\n runningSpinners.push(spinner);\n };\n\n const resetNativeLogs = (): void => {\n // eslint-disable-next-line no-console\n console.log = logReal;\n // eslint-disable-next-line no-console\n console.info = logReal;\n // eslint-disable-next-line no-console\n console.warn = warnReal;\n // eslint-disable-next-line no-console\n console.error = errorReal;\n\n const index = runningSpinners.indexOf(spinner);\n if (index >= 0) {\n runningSpinners.splice(index, 1);\n }\n };\n\n spinner.start = (text): Ora => {\n wrapNativeLogs();\n return oraStart(text);\n };\n\n spinner.stopAndPersist = (options): Ora => {\n const result = oraStopAndPersist(options);\n resetNativeLogs();\n return result;\n };\n\n spinner.stop = (): Ora => {\n const result = oraStop();\n resetNativeLogs();\n return result;\n };\n\n // Always make the central logging module aware of the current spinner\n // Log.setSpinner(spinner);\n\n return spinner;\n}\n\n/**\n * Create a unified section spinner.\n *\n * @param title\n * @returns\n */\nexport function logNewSection(title: string) {\n const spinner = ora(chalk.bold(title));\n // Prevent the spinner from clashing with debug logs\n spinner.start();\n return spinner;\n}\n"],"names":["getAllSpinners","ora","logNewSection","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","runningSpinners","options","inputOptions","text","disabled","env","CI","EXPO_DEBUG","spinner","oraReal","isEnabled","stream","process","stdout","stderr","oraStart","start","bind","oraStop","stop","oraStopAndPersist","stopAndPersist","logWrap","method","args","wrapNativeLogs","push","resetNativeLogs","index","indexOf","splice","result","title","chalk","bold"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getFreePortAsync = getFreePortAsync;
|
|
6
|
+
exports.choosePortAsync = choosePortAsync;
|
|
7
|
+
exports.resolvePortAsync = resolvePortAsync;
|
|
8
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
|
+
var _freeportAsync = _interopRequireDefault(require("freeport-async"));
|
|
10
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
11
|
+
var _env = require("./env");
|
|
12
|
+
var _errors = require("./errors");
|
|
13
|
+
function _interopRequireDefault(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function _interopRequireWildcard(obj) {
|
|
19
|
+
if (obj && obj.__esModule) {
|
|
20
|
+
return obj;
|
|
21
|
+
} else {
|
|
22
|
+
var newObj = {};
|
|
23
|
+
if (obj != null) {
|
|
24
|
+
for(var key in obj){
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
26
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
27
|
+
if (desc.get || desc.set) {
|
|
28
|
+
Object.defineProperty(newObj, key, desc);
|
|
29
|
+
} else {
|
|
30
|
+
newObj[key] = obj[key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
newObj.default = obj;
|
|
36
|
+
return newObj;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function getFreePortAsync(rangeStart) {
|
|
40
|
+
const port = await (0, _freeportAsync).default(rangeStart, {
|
|
41
|
+
hostnames: [
|
|
42
|
+
null,
|
|
43
|
+
"localhost"
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
if (!port) {
|
|
47
|
+
throw new _errors.CommandError("NO_PORT_FOUND", "No available port found");
|
|
48
|
+
}
|
|
49
|
+
return port;
|
|
50
|
+
}
|
|
51
|
+
async function choosePortAsync(projectRoot, { defaultPort , host , reuseExistingPort }) {
|
|
52
|
+
const [{ getRunningProcess }, { confirmAsync }, isRoot, Log1] = await Promise.all([
|
|
53
|
+
Promise.resolve().then(function() {
|
|
54
|
+
return _interopRequireWildcard(require("./getRunningProcess"));
|
|
55
|
+
}),
|
|
56
|
+
Promise.resolve().then(function() {
|
|
57
|
+
return _interopRequireWildcard(require("./prompts"));
|
|
58
|
+
}),
|
|
59
|
+
Promise.resolve().then(function() {
|
|
60
|
+
return _interopRequireWildcard(require("is-root"));
|
|
61
|
+
}),
|
|
62
|
+
Promise.resolve().then(function() {
|
|
63
|
+
return _interopRequireWildcard(require("../log"));
|
|
64
|
+
}),
|
|
65
|
+
]);
|
|
66
|
+
try {
|
|
67
|
+
const port = await (0, _freeportAsync).default(defaultPort, {
|
|
68
|
+
hostnames: [
|
|
69
|
+
host != null ? host : null
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
if (port === defaultPort) {
|
|
73
|
+
return port;
|
|
74
|
+
}
|
|
75
|
+
const isRestricted = process.platform !== "win32" && defaultPort < 1024 && !isRoot.default();
|
|
76
|
+
let message = isRestricted ? `Admin permissions are required to run a server on a port below 1024` : `Port ${_chalk.default.bold(defaultPort)} is`;
|
|
77
|
+
const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);
|
|
78
|
+
if (runningProcess) {
|
|
79
|
+
const pidTag = _chalk.default.gray(`(pid ${runningProcess.pid})`);
|
|
80
|
+
if (runningProcess.directory === projectRoot) {
|
|
81
|
+
message += ` running this app in another window`;
|
|
82
|
+
if (reuseExistingPort) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
message += ` running ${_chalk.default.cyan(runningProcess.command)} in another window`;
|
|
87
|
+
}
|
|
88
|
+
message += "\n" + _chalk.default.gray(` ${runningProcess.directory} ${pidTag}`);
|
|
89
|
+
}
|
|
90
|
+
Log1.log(`\u203A ${message}`);
|
|
91
|
+
const change = await confirmAsync({
|
|
92
|
+
message: `Use port ${port} instead?`,
|
|
93
|
+
initial: true
|
|
94
|
+
});
|
|
95
|
+
return change ? port : null;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (error.code === "ABORTED") {
|
|
98
|
+
throw error;
|
|
99
|
+
} else if (error.code === "NON_INTERACTIVE") {
|
|
100
|
+
Log1.warn(_chalk.default.yellow(error.message));
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function resolvePortAsync(projectRoot, { /** Should opt to reuse a port that is running the same project in another window. */ reuseExistingPort , /** Preferred port. */ defaultPort , /** Backup port for when the default isn't available. */ fallbackPort } = {}) {
|
|
107
|
+
let port;
|
|
108
|
+
if (typeof defaultPort === "string") {
|
|
109
|
+
port = parseInt(defaultPort, 10);
|
|
110
|
+
} else if (typeof defaultPort === "number") {
|
|
111
|
+
port = defaultPort;
|
|
112
|
+
} else {
|
|
113
|
+
port = _env.env.RCT_METRO_PORT || fallbackPort || 8081;
|
|
114
|
+
}
|
|
115
|
+
// Only check the port when the bundler is running.
|
|
116
|
+
const resolvedPort = await choosePortAsync(projectRoot, {
|
|
117
|
+
defaultPort: port,
|
|
118
|
+
reuseExistingPort
|
|
119
|
+
});
|
|
120
|
+
if (resolvedPort == null) {
|
|
121
|
+
Log.log("\u203A Skipping dev server");
|
|
122
|
+
// Skip bundling if the port is null
|
|
123
|
+
} else {
|
|
124
|
+
// Use the new or resolved port
|
|
125
|
+
process.env.RCT_METRO_PORT = String(resolvedPort);
|
|
126
|
+
}
|
|
127
|
+
return resolvedPort;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\nimport freeportAsync from 'freeport-async';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { CommandError } from './errors';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freeportAsync(rangeStart, { hostnames: [null, 'localhost'] });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n const [{ getRunningProcess }, { confirmAsync }, isRoot, Log] = await Promise.all([\n import('./getRunningProcess'),\n import('./prompts'),\n import('is-root'),\n import('../log'),\n ]);\n\n try {\n const port = await freeportAsync(defaultPort, { hostnames: [host ?? null] });\n if (port === defaultPort) {\n return port;\n }\n\n const isRestricted = process.platform !== 'win32' && defaultPort < 1024 && !isRoot.default();\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n }\n\n Log.log(`\\u203A ${message}`);\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["getFreePortAsync","choosePortAsync","resolvePortAsync","Log","rangeStart","port","freeportAsync","hostnames","CommandError","projectRoot","defaultPort","host","reuseExistingPort","getRunningProcess","confirmAsync","isRoot","Promise","all","isRestricted","process","platform","default","message","chalk","bold","runningProcess","pidTag","gray","pid","directory","cyan","command","log","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.profile = profile;
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
8
|
+
var _env = require("./env");
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
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
|
+
function profile(fn, functionName = fn.name) {
|
|
36
|
+
if (!_env.env.EXPO_PROFILE) {
|
|
37
|
+
return fn;
|
|
38
|
+
}
|
|
39
|
+
const name = _chalk.default.dim(`⏱ [profile] ${functionName != null ? functionName : "unknown"}`);
|
|
40
|
+
return (...args)=>{
|
|
41
|
+
// Start the timer.
|
|
42
|
+
Log.time(name);
|
|
43
|
+
// Invoke the method.
|
|
44
|
+
const results1 = fn(...args);
|
|
45
|
+
// If non-promise then return as-is.
|
|
46
|
+
if (!(results1 instanceof Promise)) {
|
|
47
|
+
Log.timeEnd(name);
|
|
48
|
+
return results1;
|
|
49
|
+
}
|
|
50
|
+
// Otherwise await to profile after the promise resolves.
|
|
51
|
+
return new Promise((resolve, reject)=>{
|
|
52
|
+
results1.then((results)=>{
|
|
53
|
+
resolve(results);
|
|
54
|
+
Log.timeEnd(name);
|
|
55
|
+
}, (reason)=>{
|
|
56
|
+
reject(reason);
|
|
57
|
+
Log.timeEnd(name);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/profile.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { env } from './env';\n\n/**\n * Wrap a method and profile the time it takes to execute the method using `EXPO_PROFILE`.\n * Works best with named functions (i.e. not arrow functions).\n *\n * @param fn function to profile.\n * @param functionName optional name of the function to display in the profile output.\n */\nexport function profile<IArgs extends any[], T extends (...args: IArgs) => any>(\n fn: T,\n functionName: string = fn.name\n): T {\n if (!env.EXPO_PROFILE) {\n return fn;\n }\n\n const name = chalk.dim(`⏱ [profile] ${functionName ?? 'unknown'}`);\n\n return ((...args: IArgs) => {\n // Start the timer.\n Log.time(name);\n\n // Invoke the method.\n const results = fn(...args);\n\n // If non-promise then return as-is.\n if (!(results instanceof Promise)) {\n Log.timeEnd(name);\n return results;\n }\n\n // Otherwise await to profile after the promise resolves.\n return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n results.then(\n (results) => {\n resolve(results);\n Log.timeEnd(name);\n },\n (reason) => {\n reject(reason);\n Log.timeEnd(name);\n }\n );\n });\n }) as T;\n}\n"],"names":["profile","Log","fn","functionName","name","env","EXPO_PROFILE","chalk","dim","args","time","results","Promise","timeEnd","resolve","reject","then","reason"],"mappings":"AAAA;;;;QAYgBA,OAAO,GAAPA,OAAO;AAZL,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACK,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AASpB,SAASD,OAAO,CACrBE,EAAK,EACLC,YAAoB,GAAGD,EAAE,CAACE,IAAI,EAC3B;IACH,IAAI,CAACC,IAAG,IAAA,CAACC,YAAY,EAAE;QACrB,OAAOJ,EAAE,CAAC;KACX;IAED,MAAME,IAAI,GAAGG,MAAK,QAAA,CAACC,GAAG,CAAC,CAAC,eAAa,EAAEL,YAAY,WAAZA,YAAY,GAAI,SAAS,CAAC,CAAC,CAAC,AAAC;IAEpE,OAAQ,CAAC,GAAGM,IAAI,AAAO,GAAK;QAC1B,mBAAmB;QACnBR,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC,CAAC;QAEf,qBAAqB;QACrB,MAAMO,QAAO,GAAGT,EAAE,IAAIO,IAAI,CAAC,AAAC;QAE5B,oCAAoC;QACpC,IAAI,CAAC,CAACE,QAAO,YAAYC,OAAO,CAAC,EAAE;YACjCX,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;YAClB,OAAOO,QAAO,CAAC;SAChB;QAED,yDAAyD;QACzD,OAAO,IAAIC,OAAO,CAAyB,CAACE,OAAO,EAAEC,MAAM,GAAK;YAC9DJ,QAAO,CAACK,IAAI,CACV,CAACL,OAAO,GAAK;gBACXG,OAAO,CAACH,OAAO,CAAC,CAAC;gBACjBV,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,EACD,CAACa,MAAM,GAAK;gBACVF,MAAM,CAACE,MAAM,CAAC,CAAC;gBACfhB,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,CACF,CAAC;SACH,CAAC,CAAC;KACJ,CAAO;CACT"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.setProgressBar = setProgressBar;
|
|
6
|
+
exports.getProgressBar = getProgressBar;
|
|
7
|
+
let currentProgress = null;
|
|
8
|
+
function setProgressBar(bar) {
|
|
9
|
+
currentProgress = bar;
|
|
10
|
+
}
|
|
11
|
+
function getProgressBar() {
|
|
12
|
+
return currentProgress;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/progress.ts"],"sourcesContent":["import ProgressBar from 'progress';\n\nlet currentProgress: ProgressBar | null = null;\n\nexport function setProgressBar(bar: ProgressBar | null): void {\n currentProgress = bar;\n}\n\nexport function getProgressBar(): ProgressBar | null {\n return currentProgress;\n}\n"],"names":["setProgressBar","getProgressBar","currentProgress","bar"],"mappings":"AAAA;;;;QAIgBA,cAAc,GAAdA,cAAc;QAIdC,cAAc,GAAdA,cAAc;AAN9B,IAAIC,eAAe,GAAuB,IAAI,AAAC;AAExC,SAASF,cAAc,CAACG,GAAuB,EAAQ;IAC5DD,eAAe,GAAGC,GAAG,CAAC;CACvB;AAEM,SAASF,cAAc,GAAuB;IACnD,OAAOC,eAAe,CAAC;CACxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PromptType", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _prompts.PromptType;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
exports.default = prompt;
|
|
12
|
+
exports.confirmAsync = confirmAsync;
|
|
13
|
+
exports.selectAsync = selectAsync;
|
|
14
|
+
exports.addInteractionListener = addInteractionListener;
|
|
15
|
+
exports.removeInteractionListener = removeInteractionListener;
|
|
16
|
+
exports.pauseInteractions = pauseInteractions;
|
|
17
|
+
exports.resumeInteractions = resumeInteractions;
|
|
18
|
+
exports.promptAsync = void 0;
|
|
19
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
20
|
+
var _prompts = _interopRequireWildcard(require("prompts"));
|
|
21
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
22
|
+
var _env = require("./env");
|
|
23
|
+
var _errors = require("./errors");
|
|
24
|
+
async function prompt(questions, { nonInteractiveHelp , ...options } = {}) {
|
|
25
|
+
questions = Array.isArray(questions) ? questions : [
|
|
26
|
+
questions
|
|
27
|
+
];
|
|
28
|
+
if (_env.env.CI && questions.length !== 0) {
|
|
29
|
+
let message = `Input is required, but 'npx expo' is in non-interactive mode.\n`;
|
|
30
|
+
if (nonInteractiveHelp) {
|
|
31
|
+
message += nonInteractiveHelp;
|
|
32
|
+
} else {
|
|
33
|
+
const question = questions[0];
|
|
34
|
+
const questionMessage = typeof question.message === "function" ? question.message(undefined, {}, question) : question.message;
|
|
35
|
+
message += `Required input:\n${(questionMessage || "").trim().replace(/^/gm, "> ")}`;
|
|
36
|
+
}
|
|
37
|
+
throw new _errors.CommandError("NON_INTERACTIVE", message);
|
|
38
|
+
}
|
|
39
|
+
pauseInteractions();
|
|
40
|
+
try {
|
|
41
|
+
const results = await (0, _prompts).default(questions, {
|
|
42
|
+
onCancel () {
|
|
43
|
+
throw new _errors.AbortCommandError();
|
|
44
|
+
},
|
|
45
|
+
...options
|
|
46
|
+
});
|
|
47
|
+
return results;
|
|
48
|
+
} finally{
|
|
49
|
+
resumeInteractions();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function _interopRequireDefault(obj) {
|
|
53
|
+
return obj && obj.__esModule ? obj : {
|
|
54
|
+
default: obj
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function _interopRequireWildcard(obj) {
|
|
58
|
+
if (obj && obj.__esModule) {
|
|
59
|
+
return obj;
|
|
60
|
+
} else {
|
|
61
|
+
var newObj = {};
|
|
62
|
+
if (obj != null) {
|
|
63
|
+
for(var key in obj){
|
|
64
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
65
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
66
|
+
if (desc.get || desc.set) {
|
|
67
|
+
Object.defineProperty(newObj, key, desc);
|
|
68
|
+
} else {
|
|
69
|
+
newObj[key] = obj[key];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
newObj.default = obj;
|
|
75
|
+
return newObj;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Interaction observers for detecting when keystroke tracking should pause/resume. */ const listeners = [];
|
|
79
|
+
async function confirmAsync(questions, options) {
|
|
80
|
+
const { value } = await prompt({
|
|
81
|
+
initial: true,
|
|
82
|
+
...questions,
|
|
83
|
+
name: "value",
|
|
84
|
+
type: "confirm"
|
|
85
|
+
}, options);
|
|
86
|
+
return value != null ? value : null;
|
|
87
|
+
}
|
|
88
|
+
async function selectAsync(message, choices, options) {
|
|
89
|
+
const { value } = await prompt({
|
|
90
|
+
message,
|
|
91
|
+
choices,
|
|
92
|
+
name: "value",
|
|
93
|
+
type: "select"
|
|
94
|
+
}, options);
|
|
95
|
+
return value != null ? value : null;
|
|
96
|
+
}
|
|
97
|
+
const promptAsync = prompt;
|
|
98
|
+
exports.promptAsync = promptAsync;
|
|
99
|
+
function addInteractionListener(callback) {
|
|
100
|
+
listeners.push(callback);
|
|
101
|
+
}
|
|
102
|
+
function removeInteractionListener(callback) {
|
|
103
|
+
const listenerIndex = listeners.findIndex((_callback)=>_callback === callback
|
|
104
|
+
);
|
|
105
|
+
(0, _assert).default(listenerIndex >= 0, "removeInteractionListener(): cannot remove an unregistered event listener.");
|
|
106
|
+
listeners.splice(listenerIndex, 1);
|
|
107
|
+
}
|
|
108
|
+
function pauseInteractions(options = {}) {
|
|
109
|
+
Log.debug("Interaction observers paused");
|
|
110
|
+
for (const listener of listeners){
|
|
111
|
+
listener({
|
|
112
|
+
pause: true,
|
|
113
|
+
...options
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function resumeInteractions(options = {}) {
|
|
118
|
+
Log.debug("Interaction observers resumed");
|
|
119
|
+
for (const listener of listeners){
|
|
120
|
+
listener({
|
|
121
|
+
pause: false,
|
|
122
|
+
...options
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/prompts.ts"],"sourcesContent":["import assert from 'assert';\nimport prompts, { Choice, Options, PromptObject, PromptType } from 'prompts';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { AbortCommandError, CommandError } from './errors';\n\nexport type Question<V extends string = string> = PromptObject<V> & {\n optionsPerPage?: number;\n};\n\nexport interface ExpoChoice<T> extends Choice {\n value: T;\n}\n\nexport { PromptType };\n\ntype PromptOptions = { nonInteractiveHelp?: string } & Options;\n\nexport type NamelessQuestion = Omit<Question<'value'>, 'name' | 'type'>;\n\ntype InteractionOptions = { pause: boolean; canEscape?: boolean };\n\ntype InteractionCallback = (options: InteractionOptions) => void;\n\n/** Interaction observers for detecting when keystroke tracking should pause/resume. */\nconst listeners: InteractionCallback[] = [];\n\nexport default async function prompt(\n questions: Question | Question[],\n { nonInteractiveHelp, ...options }: PromptOptions = {}\n) {\n questions = Array.isArray(questions) ? questions : [questions];\n if (env.CI && questions.length !== 0) {\n let message = `Input is required, but 'npx expo' is in non-interactive mode.\\n`;\n if (nonInteractiveHelp) {\n message += nonInteractiveHelp;\n } else {\n const question = questions[0];\n const questionMessage =\n typeof question.message === 'function'\n ? question.message(undefined, {}, question)\n : question.message;\n\n message += `Required input:\\n${(questionMessage || '').trim().replace(/^/gm, '> ')}`;\n }\n throw new CommandError('NON_INTERACTIVE', message);\n }\n\n pauseInteractions();\n try {\n const results = await prompts(questions, {\n onCancel() {\n throw new AbortCommandError();\n },\n ...options,\n });\n\n return results;\n } finally {\n resumeInteractions();\n }\n}\n\n/**\n * Create a standard yes/no confirmation that can be cancelled.\n *\n * @param questions\n * @param options\n */\nexport async function confirmAsync(\n questions: NamelessQuestion,\n options?: PromptOptions\n): Promise<boolean> {\n const { value } = await prompt(\n {\n initial: true,\n ...questions,\n name: 'value',\n type: 'confirm',\n },\n options\n );\n return value ?? null;\n}\n\n/** Select an option from a list of options. */\nexport async function selectAsync<T>(\n message: string,\n choices: ExpoChoice<T>[],\n options?: PromptOptions\n): Promise<T> {\n const { value } = await prompt(\n {\n message,\n choices,\n name: 'value',\n type: 'select',\n },\n options\n );\n return value ?? null;\n}\n\nexport const promptAsync = prompt;\n\n/** Used to pause/resume interaction observers while prompting (made for TerminalUI). */\nexport function addInteractionListener(callback: InteractionCallback) {\n listeners.push(callback);\n}\n\nexport function removeInteractionListener(callback: InteractionCallback) {\n const listenerIndex = listeners.findIndex((_callback) => _callback === callback);\n assert(\n listenerIndex >= 0,\n 'removeInteractionListener(): cannot remove an unregistered event listener.'\n );\n listeners.splice(listenerIndex, 1);\n}\n\n/** Notify all listeners that keypress observations must pause. */\nexport function pauseInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers paused');\n for (const listener of listeners) {\n listener({ pause: true, ...options });\n }\n}\n\n/** Notify all listeners that keypress observations can start.. */\nexport function resumeInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers resumed');\n for (const listener of listeners) {\n listener({ pause: false, ...options });\n }\n}\n"],"names":["PromptType","prompt","confirmAsync","selectAsync","addInteractionListener","removeInteractionListener","pauseInteractions","resumeInteractions","Log","questions","nonInteractiveHelp","options","Array","isArray","env","CI","length","message","question","questionMessage","undefined","trim","replace","CommandError","results","prompts","onCancel","AbortCommandError","listeners","value","initial","name","type","choices","promptAsync","callback","push","listenerIndex","findIndex","_callback","assert","splice","debug","listener","pause"],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getSchemesForIosAsync = getSchemesForIosAsync;
|
|
6
|
+
exports.getSchemesForAndroidAsync = getSchemesForAndroidAsync;
|
|
7
|
+
exports.getOptionalDevClientSchemeAsync = getOptionalDevClientSchemeAsync;
|
|
8
|
+
var _config = require("@expo/config");
|
|
9
|
+
var _configPlugins = require("@expo/config-plugins");
|
|
10
|
+
var _plist = _interopRequireDefault(require("@expo/plist"));
|
|
11
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
13
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
14
|
+
var _clearNativeFolder = require("../prebuild/clearNativeFolder");
|
|
15
|
+
var _array = require("./array");
|
|
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
|
+
// sort longest to ensure uniqueness.
|
|
43
|
+
// this might be undesirable as it causes the QR code to be longer.
|
|
44
|
+
function sortLongest(obj) {
|
|
45
|
+
return obj.sort((a, b)=>b.length - a.length
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
async function getSchemesForIosAsync(projectRoot) {
|
|
49
|
+
try {
|
|
50
|
+
const configPath = _configPlugins.IOSConfig.Paths.getInfoPlistPath(projectRoot);
|
|
51
|
+
const rawPlist = _fs.default.readFileSync(configPath, "utf8");
|
|
52
|
+
const plistObject = _plist.default.parse(rawPlist);
|
|
53
|
+
return sortLongest(_configPlugins.IOSConfig.Scheme.getSchemesFromPlist(plistObject));
|
|
54
|
+
} catch {
|
|
55
|
+
// No ios folder or some other error
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function getSchemesForAndroidAsync(projectRoot) {
|
|
60
|
+
try {
|
|
61
|
+
const configPath = await _configPlugins.AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);
|
|
62
|
+
const manifest = await _configPlugins.AndroidConfig.Manifest.readAndroidManifestAsync(configPath);
|
|
63
|
+
return sortLongest(await _configPlugins.AndroidConfig.Scheme.getSchemesFromManifest(manifest));
|
|
64
|
+
} catch {
|
|
65
|
+
// No android folder or some other error
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// TODO: Revisit and test after run code is merged.
|
|
70
|
+
async function getManagedDevClientSchemeAsync(projectRoot) {
|
|
71
|
+
const { exp } = (0, _config).getConfig(projectRoot);
|
|
72
|
+
try {
|
|
73
|
+
const getDefaultScheme = require((0, _resolveFrom).default(projectRoot, "expo-dev-client/getDefaultScheme"));
|
|
74
|
+
const scheme = getDefaultScheme(exp);
|
|
75
|
+
return scheme;
|
|
76
|
+
} catch {
|
|
77
|
+
Log.warn("\nDevelopment build: Unable to get the default URI scheme for the project. Please make sure the expo-dev-client package is installed.");
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function getOptionalDevClientSchemeAsync(projectRoot) {
|
|
82
|
+
const [hasIos, hasAndroid] = await Promise.all([
|
|
83
|
+
(0, _clearNativeFolder).hasRequiredIOSFilesAsync(projectRoot),
|
|
84
|
+
(0, _clearNativeFolder).hasRequiredAndroidFilesAsync(projectRoot),
|
|
85
|
+
]);
|
|
86
|
+
const [ios, android] = await Promise.all([
|
|
87
|
+
getSchemesForIosAsync(projectRoot),
|
|
88
|
+
getSchemesForAndroidAsync(projectRoot),
|
|
89
|
+
]);
|
|
90
|
+
// Allow managed projects
|
|
91
|
+
if (!hasIos && !hasAndroid) {
|
|
92
|
+
return getManagedDevClientSchemeAsync(projectRoot);
|
|
93
|
+
}
|
|
94
|
+
let matching;
|
|
95
|
+
// Allow for only one native project to exist.
|
|
96
|
+
if (!hasIos) {
|
|
97
|
+
matching = android[0];
|
|
98
|
+
} else if (!hasAndroid) {
|
|
99
|
+
matching = ios[0];
|
|
100
|
+
} else {
|
|
101
|
+
[matching] = (0, _array).intersecting(ios, android);
|
|
102
|
+
}
|
|
103
|
+
return matching != null ? matching : null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=scheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/scheme.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { AndroidConfig, IOSConfig } from '@expo/config-plugins';\nimport plist from '@expo/plist';\nimport fs from 'fs';\nimport resolveFrom from 'resolve-from';\n\nimport * as Log from '../log';\nimport {\n hasRequiredAndroidFilesAsync,\n hasRequiredIOSFilesAsync,\n} from '../prebuild/clearNativeFolder';\nimport { intersecting } from './array';\n\n// sort longest to ensure uniqueness.\n// this might be undesirable as it causes the QR code to be longer.\nfunction sortLongest(obj: string[]): string[] {\n return obj.sort((a, b) => b.length - a.length);\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForIosAsync(projectRoot: string) {\n try {\n const configPath = IOSConfig.Paths.getInfoPlistPath(projectRoot);\n const rawPlist = fs.readFileSync(configPath, 'utf8');\n const plistObject = plist.parse(rawPlist);\n return sortLongest(IOSConfig.Scheme.getSchemesFromPlist(plistObject));\n } catch {\n // No ios folder or some other error\n return [];\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForAndroidAsync(projectRoot: string) {\n try {\n const configPath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);\n const manifest = await AndroidConfig.Manifest.readAndroidManifestAsync(configPath);\n return sortLongest(await AndroidConfig.Scheme.getSchemesFromManifest(manifest));\n } catch {\n // No android folder or some other error\n return [];\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nasync function getManagedDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const { exp } = getConfig(projectRoot);\n try {\n const getDefaultScheme = require(resolveFrom(projectRoot, 'expo-dev-client/getDefaultScheme'));\n const scheme = getDefaultScheme(exp);\n return scheme;\n } catch {\n Log.warn(\n '\\nDevelopment build: Unable to get the default URI scheme for the project. Please make sure the expo-dev-client package is installed.'\n );\n return null;\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getOptionalDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const [hasIos, hasAndroid] = await Promise.all([\n hasRequiredIOSFilesAsync(projectRoot),\n hasRequiredAndroidFilesAsync(projectRoot),\n ]);\n\n const [ios, android] = await Promise.all([\n getSchemesForIosAsync(projectRoot),\n getSchemesForAndroidAsync(projectRoot),\n ]);\n\n // Allow managed projects\n if (!hasIos && !hasAndroid) {\n return getManagedDevClientSchemeAsync(projectRoot);\n }\n\n let matching: string;\n // Allow for only one native project to exist.\n if (!hasIos) {\n matching = android[0];\n } else if (!hasAndroid) {\n matching = ios[0];\n } else {\n [matching] = intersecting(ios, android);\n }\n return matching ?? null;\n}\n"],"names":["getSchemesForIosAsync","getSchemesForAndroidAsync","getOptionalDevClientSchemeAsync","Log","sortLongest","obj","sort","a","b","length","projectRoot","configPath","IOSConfig","Paths","getInfoPlistPath","rawPlist","fs","readFileSync","plistObject","plist","parse","Scheme","getSchemesFromPlist","AndroidConfig","getAndroidManifestAsync","manifest","Manifest","readAndroidManifestAsync","getSchemesFromManifest","getManagedDevClientSchemeAsync","exp","getConfig","getDefaultScheme","require","resolveFrom","scheme","warn","hasIos","hasAndroid","Promise","all","hasRequiredIOSFilesAsync","hasRequiredAndroidFilesAsync","ios","android","matching","intersecting"],"mappings":"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"}
|