@expo/cli 0.0.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/build/bin/cli +152 -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 +75 -0
- package/build/src/config/index.js.map +1 -0
- package/build/src/export/createBundles.js +62 -0
- package/build/src/export/createBundles.js.map +1 -0
- package/build/src/export/createMetadataJson.js +36 -0
- package/build/src/export/createMetadataJson.js.map +1 -0
- package/build/src/export/exportApp.js +102 -0
- package/build/src/export/exportApp.js.map +1 -0
- package/build/src/export/exportAssets.js +106 -0
- package/build/src/export/exportAssets.js.map +1 -0
- package/build/src/export/exportAsync.js +49 -0
- package/build/src/export/exportAsync.js.map +1 -0
- package/build/src/export/fork-bundleAsync.js +138 -0
- package/build/src/export/fork-bundleAsync.js.map +1 -0
- package/build/src/export/getPublicExpoManifest.js +28 -0
- package/build/src/export/getPublicExpoManifest.js.map +1 -0
- package/build/src/export/getResolvedLocales.js +35 -0
- package/build/src/export/getResolvedLocales.js.map +1 -0
- package/build/src/export/index.js +77 -0
- package/build/src/export/index.js.map +1 -0
- package/build/src/export/printBundleSizes.js +122 -0
- package/build/src/export/printBundleSizes.js.map +1 -0
- package/build/src/export/resolveOptions.js +24 -0
- package/build/src/export/resolveOptions.js.map +1 -0
- package/build/src/export/saveAssets.js +65 -0
- package/build/src/export/saveAssets.js.map +1 -0
- package/build/src/export/writeContents.js +108 -0
- package/build/src/export/writeContents.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 +49 -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 +62 -0
- package/build/src/login/index.js.map +1 -0
- package/build/src/logout/index.js +48 -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 +90 -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 +48 -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/run/android/index.js +97 -0
- package/build/src/run/android/index.js.map +1 -0
- package/build/src/run/android/resolveDevice.js +23 -0
- package/build/src/run/android/resolveDevice.js.map +1 -0
- package/build/src/run/android/resolveGradleProps.js +37 -0
- package/build/src/run/android/resolveGradleProps.js.map +1 -0
- package/build/src/run/android/resolveInstallApkName.js +72 -0
- package/build/src/run/android/resolveInstallApkName.js.map +1 -0
- package/build/src/run/android/resolveLaunchProps.js +32 -0
- package/build/src/run/android/resolveLaunchProps.js.map +1 -0
- package/build/src/run/android/resolveOptions.js +25 -0
- package/build/src/run/android/resolveOptions.js.map +1 -0
- package/build/src/run/android/runAndroidAsync.js +74 -0
- package/build/src/run/android/runAndroidAsync.js.map +1 -0
- package/build/src/run/ensureNativeProject.js +33 -0
- package/build/src/run/ensureNativeProject.js.map +1 -0
- package/build/src/run/hints.js +22 -0
- package/build/src/run/hints.js.map +1 -0
- package/build/src/run/resolveBundlerProps.js +31 -0
- package/build/src/run/resolveBundlerProps.js.map +1 -0
- package/build/src/run/startBundler.js +76 -0
- package/build/src/run/startBundler.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 +116 -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 +111 -0
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
- package/build/src/start/platforms/PlatformManager.js +121 -0
- package/build/src/start/platforms/PlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/ADBServer.js +129 -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 +183 -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 +80 -0
- package/build/src/start/platforms/android/activateWindow.js.map +1 -0
- package/build/src/start/platforms/android/adb.js +263 -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/gradle.js +86 -0
- package/build/src/start/platforms/android/gradle.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 +312 -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 +159 -0
- package/build/src/start/server/UrlCreator.js.map +1 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js +97 -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 +66 -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 +110 -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 +299 -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 +77 -0
- package/build/src/utils/args.js.map +1 -0
- package/build/src/utils/array.js +56 -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 +38 -0
- package/build/src/utils/dir.js.map +1 -0
- package/build/src/utils/downloadAppAsync.js +74 -0
- package/build/src/utils/downloadAppAsync.js.map +1 -0
- package/build/src/utils/downloadExpoGoAsync.js +99 -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 +62 -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/resolveArgs.js +94 -0
- package/build/src/utils/resolveArgs.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 +47 -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 +132 -4
- package/static/loading-page/index.html +270 -0
- package/index.js +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.createTemporaryProjectFile = createTemporaryProjectFile;
|
|
6
|
+
exports.ensureDotExpoProjectDirectoryInitialized = ensureDotExpoProjectDirectoryInitialized;
|
|
7
|
+
var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
|
|
8
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
function _interopRequireDefault(obj) {
|
|
11
|
+
return obj && obj.__esModule ? obj : {
|
|
12
|
+
default: obj
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createTemporaryProjectFile(fileName, defaults) {
|
|
16
|
+
function getFile(projectRoot) {
|
|
17
|
+
const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);
|
|
18
|
+
return new _jsonFile.default(_path.default.join(dotExpoDir, fileName));
|
|
19
|
+
}
|
|
20
|
+
async function readAsync(projectRoot) {
|
|
21
|
+
let projectSettings;
|
|
22
|
+
try {
|
|
23
|
+
projectSettings = await getFile(projectRoot).readAsync();
|
|
24
|
+
} catch {
|
|
25
|
+
projectSettings = await getFile(projectRoot).writeAsync(defaults);
|
|
26
|
+
}
|
|
27
|
+
// Set defaults for any missing fields
|
|
28
|
+
return {
|
|
29
|
+
...defaults,
|
|
30
|
+
...projectSettings
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async function setAsync(projectRoot, json) {
|
|
34
|
+
try {
|
|
35
|
+
return await getFile(projectRoot).mergeAsync(json, {
|
|
36
|
+
cantReadFileDefault: defaults
|
|
37
|
+
});
|
|
38
|
+
} catch {
|
|
39
|
+
return await getFile(projectRoot).writeAsync({
|
|
40
|
+
...defaults,
|
|
41
|
+
...json
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
getFile,
|
|
47
|
+
readAsync,
|
|
48
|
+
setAsync
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function getDotExpoProjectDirectory(projectRoot) {
|
|
52
|
+
return _path.default.join(projectRoot, ".expo");
|
|
53
|
+
}
|
|
54
|
+
function ensureDotExpoProjectDirectoryInitialized(projectRoot) {
|
|
55
|
+
const dirPath = getDotExpoProjectDirectory(projectRoot);
|
|
56
|
+
_fs.default.mkdirSync(dirPath, {
|
|
57
|
+
recursive: true
|
|
58
|
+
});
|
|
59
|
+
const readmeFilePath = _path.default.resolve(dirPath, "README.md");
|
|
60
|
+
if (!_fs.default.existsSync(readmeFilePath)) {
|
|
61
|
+
_fs.default.writeFileSync(readmeFilePath, `> Why do I have a folder named ".expo" in my project?
|
|
62
|
+
The ".expo" folder is created when an Expo project is started using "expo start" command.
|
|
63
|
+
> What do the files contain?
|
|
64
|
+
- "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds.
|
|
65
|
+
- "settings.json": contains the server configuration that is used to serve the application manifest.
|
|
66
|
+
> Should I commit the ".expo" folder?
|
|
67
|
+
No, you should not share the ".expo" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.
|
|
68
|
+
Upon project creation, the ".expo" folder is already added to your ".gitignore" file.
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
return dirPath;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=dotExpo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/project/dotExpo.ts"],"sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\n\n/** Create a set of functions for managing a file in the project's `.expo` directory. */\nexport function createTemporaryProjectFile<T extends JSONObject>(fileName: string, defaults: T) {\n function getFile(projectRoot: string): JsonFile<T> {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n return new JsonFile<T>(path.join(dotExpoDir, fileName));\n }\n\n async function readAsync(projectRoot: string): Promise<T> {\n let projectSettings;\n try {\n projectSettings = await getFile(projectRoot).readAsync();\n } catch {\n projectSettings = await getFile(projectRoot).writeAsync(defaults);\n }\n // Set defaults for any missing fields\n return { ...defaults, ...projectSettings };\n }\n\n async function setAsync(projectRoot: string, json: Partial<T>): Promise<T> {\n try {\n return await getFile(projectRoot).mergeAsync(json, {\n cantReadFileDefault: defaults,\n });\n } catch {\n return await getFile(projectRoot).writeAsync({\n ...defaults,\n ...json,\n });\n }\n }\n\n return {\n getFile,\n readAsync,\n setAsync,\n };\n}\n\nfunction getDotExpoProjectDirectory(projectRoot: string): string {\n return path.join(projectRoot, '.expo');\n}\n\nexport function ensureDotExpoProjectDirectoryInitialized(projectRoot: string): string {\n const dirPath = getDotExpoProjectDirectory(projectRoot);\n fs.mkdirSync(dirPath, { recursive: true });\n\n const readmeFilePath = path.resolve(dirPath, 'README.md');\n if (!fs.existsSync(readmeFilePath)) {\n fs.writeFileSync(\n readmeFilePath,\n `> Why do I have a folder named \".expo\" in my project?\nThe \".expo\" folder is created when an Expo project is started using \"expo start\" command.\n> What do the files contain?\n- \"devices.json\": contains information about devices that have recently opened this project. This is used to populate the \"Development sessions\" list in your development builds.\n- \"settings.json\": contains the server configuration that is used to serve the application manifest.\n> Should I commit the \".expo\" folder?\nNo, you should not share the \".expo\" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.\nUpon project creation, the \".expo\" folder is already added to your \".gitignore\" file.\n`\n );\n }\n return dirPath;\n}\n"],"names":["createTemporaryProjectFile","ensureDotExpoProjectDirectoryInitialized","fileName","defaults","getFile","projectRoot","dotExpoDir","JsonFile","path","join","readAsync","projectSettings","writeAsync","setAsync","json","mergeAsync","cantReadFileDefault","getDotExpoProjectDirectory","dirPath","fs","mkdirSync","recursive","readmeFilePath","resolve","existsSync","writeFileSync"],"mappings":"AAAA;;;;QAKgBA,0BAA0B,GAA1BA,0BAA0B;QAyC1BC,wCAAwC,GAAxCA,wCAAwC;AA9CnB,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACvC,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;;;;;;AAGhB,SAASD,0BAA0B,CAAuBE,QAAgB,EAAEC,QAAW,EAAE;IAC9F,SAASC,OAAO,CAACC,WAAmB,EAAe;QACjD,MAAMC,UAAU,GAAGL,wCAAwC,CAACI,WAAW,CAAC,AAAC;QACzE,OAAO,IAAIE,SAAQ,QAAA,CAAIC,KAAI,QAAA,CAACC,IAAI,CAACH,UAAU,EAAEJ,QAAQ,CAAC,CAAC,CAAC;KACzD;IAED,eAAeQ,SAAS,CAACL,WAAmB,EAAc;QACxD,IAAIM,eAAe,AAAC;QACpB,IAAI;YACFA,eAAe,GAAG,MAAMP,OAAO,CAACC,WAAW,CAAC,CAACK,SAAS,EAAE,CAAC;SAC1D,CAAC,OAAM;YACNC,eAAe,GAAG,MAAMP,OAAO,CAACC,WAAW,CAAC,CAACO,UAAU,CAACT,QAAQ,CAAC,CAAC;SACnE;QACD,sCAAsC;QACtC,OAAO;YAAE,GAAGA,QAAQ;YAAE,GAAGQ,eAAe;SAAE,CAAC;KAC5C;IAED,eAAeE,QAAQ,CAACR,WAAmB,EAAES,IAAgB,EAAc;QACzE,IAAI;YACF,OAAO,MAAMV,OAAO,CAACC,WAAW,CAAC,CAACU,UAAU,CAACD,IAAI,EAAE;gBACjDE,mBAAmB,EAAEb,QAAQ;aAC9B,CAAC,CAAC;SACJ,CAAC,OAAM;YACN,OAAO,MAAMC,OAAO,CAACC,WAAW,CAAC,CAACO,UAAU,CAAC;gBAC3C,GAAGT,QAAQ;gBACX,GAAGW,IAAI;aACR,CAAC,CAAC;SACJ;KACF;IAED,OAAO;QACLV,OAAO;QACPM,SAAS;QACTG,QAAQ;KACT,CAAC;CACH;AAED,SAASI,0BAA0B,CAACZ,WAAmB,EAAU;IAC/D,OAAOG,KAAI,QAAA,CAACC,IAAI,CAACJ,WAAW,EAAE,OAAO,CAAC,CAAC;CACxC;AAEM,SAASJ,wCAAwC,CAACI,WAAmB,EAAU;IACpF,MAAMa,OAAO,GAAGD,0BAA0B,CAACZ,WAAW,CAAC,AAAC;IACxDc,GAAE,QAAA,CAACC,SAAS,CAACF,OAAO,EAAE;QAAEG,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAE3C,MAAMC,cAAc,GAAGd,KAAI,QAAA,CAACe,OAAO,CAACL,OAAO,EAAE,WAAW,CAAC,AAAC;IAC1D,IAAI,CAACC,GAAE,QAAA,CAACK,UAAU,CAACF,cAAc,CAAC,EAAE;QAClCH,GAAE,QAAA,CAACM,aAAa,CACdH,cAAc,EACd,CAAC;;;;;;;;AAQP,CAAC,CACI,CAAC;KACH;IACD,OAAOJ,OAAO,CAAC;CAChB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.ProjectSettings = void 0;
|
|
6
|
+
var _dotExpo = require("./dotExpo");
|
|
7
|
+
const SETTINGS_FILE_NAME = "settings.json";
|
|
8
|
+
const ProjectSettings = (0, _dotExpo).createTemporaryProjectFile(SETTINGS_FILE_NAME, {
|
|
9
|
+
urlRandomness: null
|
|
10
|
+
});
|
|
11
|
+
exports.ProjectSettings = ProjectSettings;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/project/settings.ts"],"sourcesContent":["import { createTemporaryProjectFile } from './dotExpo';\n\nconst SETTINGS_FILE_NAME = 'settings.json';\n\nexport const ProjectSettings = createTemporaryProjectFile<{\n urlRandomness: string | null;\n}>(SETTINGS_FILE_NAME, {\n urlRandomness: null,\n});\n"],"names":["SETTINGS_FILE_NAME","ProjectSettings","createTemporaryProjectFile","urlRandomness"],"mappings":"AAAA;;;;;AAA2C,IAAA,QAAW,WAAX,WAAW,CAAA;AAEtD,MAAMA,kBAAkB,GAAG,eAAe,AAAC;AAEpC,MAAMC,eAAe,GAAGC,CAAAA,GAAAA,QAA0B,AAIvD,CAAA,2BAJuD,CAEtDF,kBAAkB,EAAE;IACrBG,aAAa,EAAE,IAAI;CACpB,CAAC,AAAC;QAJUF,eAAe,GAAfA,eAAe"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.resolveOptionsAsync = resolveOptionsAsync;
|
|
6
|
+
exports.resolveSchemeAsync = resolveSchemeAsync;
|
|
7
|
+
exports.resolveHostType = resolveHostType;
|
|
8
|
+
exports.resolvePortsAsync = resolvePortsAsync;
|
|
9
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
10
|
+
var _errors = require("../utils/errors");
|
|
11
|
+
var _port = require("../utils/port");
|
|
12
|
+
function _interopRequireDefault(obj) {
|
|
13
|
+
return obj && obj.__esModule ? obj : {
|
|
14
|
+
default: obj
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function _interopRequireWildcard(obj) {
|
|
18
|
+
if (obj && obj.__esModule) {
|
|
19
|
+
return obj;
|
|
20
|
+
} else {
|
|
21
|
+
var newObj = {};
|
|
22
|
+
if (obj != null) {
|
|
23
|
+
for(var key in obj){
|
|
24
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
25
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
26
|
+
if (desc.get || desc.set) {
|
|
27
|
+
Object.defineProperty(newObj, key, desc);
|
|
28
|
+
} else {
|
|
29
|
+
newObj[key] = obj[key];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
newObj.default = obj;
|
|
35
|
+
return newObj;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function resolveOptionsAsync(projectRoot, args) {
|
|
39
|
+
const forceManifestType = args["--force-manifest-type"];
|
|
40
|
+
if (forceManifestType) {
|
|
41
|
+
_assert.default.match(forceManifestType, /^(classic|expo-updates)$/);
|
|
42
|
+
}
|
|
43
|
+
const host = resolveHostType({
|
|
44
|
+
host: args["--host"],
|
|
45
|
+
offline: args["--offline"],
|
|
46
|
+
lan: args["--lan"],
|
|
47
|
+
localhost: args["--localhost"],
|
|
48
|
+
tunnel: args["--tunnel"]
|
|
49
|
+
});
|
|
50
|
+
const scheme = await resolveSchemeAsync(projectRoot, {
|
|
51
|
+
scheme: args["--scheme"],
|
|
52
|
+
devClient: args["--dev-client"]
|
|
53
|
+
});
|
|
54
|
+
var ref;
|
|
55
|
+
return {
|
|
56
|
+
forceManifestType,
|
|
57
|
+
privateKeyPath: (ref = args["private-key-path"]) != null ? ref : null,
|
|
58
|
+
android: !!args["--android"],
|
|
59
|
+
web: !!args["--web"],
|
|
60
|
+
ios: !!args["--ios"],
|
|
61
|
+
offline: !!args["--offline"],
|
|
62
|
+
clear: !!args["--clear"],
|
|
63
|
+
dev: !args["--no-dev"],
|
|
64
|
+
https: !!args["--https"],
|
|
65
|
+
maxWorkers: args["--max-workers"],
|
|
66
|
+
port: args["--port"],
|
|
67
|
+
minify: !!args["--minify"],
|
|
68
|
+
devClient: !!args["--dev-client"],
|
|
69
|
+
scheme,
|
|
70
|
+
host
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function resolveSchemeAsync(projectRoot, options) {
|
|
74
|
+
const resolveFrom = await Promise.resolve().then(function() {
|
|
75
|
+
return _interopRequireWildcard(require("resolve-from"));
|
|
76
|
+
}).then((m)=>m.default
|
|
77
|
+
);
|
|
78
|
+
const isDevClientPackageInstalled = (()=>{
|
|
79
|
+
try {
|
|
80
|
+
// we check if `expo-dev-launcher` is installed instead of `expo-dev-client`
|
|
81
|
+
// because someone could install only launcher.
|
|
82
|
+
resolveFrom(projectRoot, "expo-dev-launcher");
|
|
83
|
+
return true;
|
|
84
|
+
} catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
})();
|
|
88
|
+
if (typeof options.scheme === "string") {
|
|
89
|
+
var _scheme;
|
|
90
|
+
// Use the custom scheme
|
|
91
|
+
return (_scheme = options.scheme) != null ? _scheme : null;
|
|
92
|
+
} else if (options.devClient || isDevClientPackageInstalled) {
|
|
93
|
+
const { getOptionalDevClientSchemeAsync } = await Promise.resolve().then(function() {
|
|
94
|
+
return _interopRequireWildcard(require("../utils/scheme"));
|
|
95
|
+
});
|
|
96
|
+
// Attempt to find the scheme or warn the user how to setup a custom scheme
|
|
97
|
+
return await getOptionalDevClientSchemeAsync(projectRoot);
|
|
98
|
+
} else {
|
|
99
|
+
// Ensure this is reset when users don't use `--scheme`, `--dev-client` and don't have the `expo-dev-client` package installed.
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function resolveHostType(options) {
|
|
104
|
+
if ([
|
|
105
|
+
options.offline,
|
|
106
|
+
options.host,
|
|
107
|
+
options.lan,
|
|
108
|
+
options.localhost,
|
|
109
|
+
options.tunnel
|
|
110
|
+
].filter((i)=>i
|
|
111
|
+
).length > 1) {
|
|
112
|
+
throw new _errors.CommandError("BAD_ARGS", "Specify at most one of: --offline, --host, --tunnel, --lan, --localhost");
|
|
113
|
+
}
|
|
114
|
+
if (options.offline) {
|
|
115
|
+
// Force `lan` in offline mode.
|
|
116
|
+
return "lan";
|
|
117
|
+
} else if (options.host) {
|
|
118
|
+
_assert.default.match(options.host, /^(lan|tunnel|localhost)$/);
|
|
119
|
+
return options.host;
|
|
120
|
+
} else if (options.tunnel) {
|
|
121
|
+
return "tunnel";
|
|
122
|
+
} else if (options.lan) {
|
|
123
|
+
return "lan";
|
|
124
|
+
} else if (options.localhost) {
|
|
125
|
+
return "localhost";
|
|
126
|
+
}
|
|
127
|
+
return "lan";
|
|
128
|
+
}
|
|
129
|
+
async function resolvePortsAsync(projectRoot, options, settings) {
|
|
130
|
+
const multiBundlerSettings = {};
|
|
131
|
+
if (settings.webOnly) {
|
|
132
|
+
const webpackPort = await (0, _port).resolvePortAsync(projectRoot, {
|
|
133
|
+
defaultPort: options.port,
|
|
134
|
+
// Default web port
|
|
135
|
+
fallbackPort: 19006
|
|
136
|
+
});
|
|
137
|
+
if (!webpackPort) {
|
|
138
|
+
throw new _errors.AbortCommandError();
|
|
139
|
+
}
|
|
140
|
+
multiBundlerSettings.webpackPort = webpackPort;
|
|
141
|
+
} else {
|
|
142
|
+
const devClientDefaultPort = process.env.RCT_METRO_PORT ? parseInt(process.env.RCT_METRO_PORT, 10) : 8081;
|
|
143
|
+
const expoGoDefaultPort = 19000;
|
|
144
|
+
const metroPort = await (0, _port).resolvePortAsync(projectRoot, {
|
|
145
|
+
defaultPort: options.port,
|
|
146
|
+
fallbackPort: options.devClient ? devClientDefaultPort : expoGoDefaultPort
|
|
147
|
+
});
|
|
148
|
+
if (!metroPort) {
|
|
149
|
+
throw new _errors.AbortCommandError();
|
|
150
|
+
}
|
|
151
|
+
multiBundlerSettings.metroPort = metroPort;
|
|
152
|
+
}
|
|
153
|
+
return multiBundlerSettings;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=resolveOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/start/resolveOptions.ts"],"sourcesContent":["import assert from 'assert';\n\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport { resolvePortAsync } from '../utils/port';\n\nexport type Options = {\n forceManifestType: 'classic' | 'expo-updates';\n privateKeyPath: string | null;\n android: boolean;\n web: boolean;\n ios: boolean;\n offline: boolean;\n clear: boolean;\n dev: boolean;\n https: boolean;\n maxWorkers: number;\n port: number;\n /** Should instruct the bundler to create minified bundles. */\n minify: boolean;\n devClient: boolean;\n scheme: string | null;\n host: 'localhost' | 'lan' | 'tunnel';\n};\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const forceManifestType = args['--force-manifest-type'];\n if (forceManifestType) {\n assert.match(forceManifestType, /^(classic|expo-updates)$/);\n }\n const host = resolveHostType({\n host: args['--host'],\n offline: args['--offline'],\n lan: args['--lan'],\n localhost: args['--localhost'],\n tunnel: args['--tunnel'],\n });\n\n const scheme = await resolveSchemeAsync(projectRoot, {\n scheme: args['--scheme'],\n devClient: args['--dev-client'],\n });\n\n return {\n forceManifestType,\n privateKeyPath: args['private-key-path'] ?? null,\n\n android: !!args['--android'],\n web: !!args['--web'],\n ios: !!args['--ios'],\n offline: !!args['--offline'],\n\n clear: !!args['--clear'],\n dev: !args['--no-dev'],\n https: !!args['--https'],\n maxWorkers: args['--max-workers'],\n port: args['--port'],\n minify: !!args['--minify'],\n\n devClient: !!args['--dev-client'],\n\n scheme,\n host,\n };\n}\n\nexport async function resolveSchemeAsync(\n projectRoot: string,\n options: { scheme?: string; devClient?: boolean }\n): Promise<string | null> {\n const resolveFrom = await import('resolve-from').then((m) => m.default);\n\n const isDevClientPackageInstalled = (() => {\n try {\n // we check if `expo-dev-launcher` is installed instead of `expo-dev-client`\n // because someone could install only launcher.\n resolveFrom(projectRoot, 'expo-dev-launcher');\n return true;\n } catch {\n return false;\n }\n })();\n\n if (typeof options.scheme === 'string') {\n // Use the custom scheme\n return options.scheme ?? null;\n } else if (options.devClient || isDevClientPackageInstalled) {\n const { getOptionalDevClientSchemeAsync } = await import('../utils/scheme');\n // Attempt to find the scheme or warn the user how to setup a custom scheme\n return await getOptionalDevClientSchemeAsync(projectRoot);\n } else {\n // Ensure this is reset when users don't use `--scheme`, `--dev-client` and don't have the `expo-dev-client` package installed.\n return null;\n }\n}\n\n/** Resolve and assert host type options. */\nexport function resolveHostType(options: {\n host?: string;\n offline?: boolean;\n lan?: boolean;\n localhost?: boolean;\n tunnel?: boolean;\n}): 'lan' | 'tunnel' | 'localhost' {\n if (\n [options.offline, options.host, options.lan, options.localhost, options.tunnel].filter((i) => i)\n .length > 1\n ) {\n throw new CommandError(\n 'BAD_ARGS',\n 'Specify at most one of: --offline, --host, --tunnel, --lan, --localhost'\n );\n }\n\n if (options.offline) {\n // Force `lan` in offline mode.\n return 'lan';\n } else if (options.host) {\n assert.match(options.host, /^(lan|tunnel|localhost)$/);\n return options.host as 'lan' | 'tunnel' | 'localhost';\n } else if (options.tunnel) {\n return 'tunnel';\n } else if (options.lan) {\n return 'lan';\n } else if (options.localhost) {\n return 'localhost';\n }\n return 'lan';\n}\n\n/** Resolve the port options for all supported bundlers. */\nexport async function resolvePortsAsync(\n projectRoot: string,\n options: Partial<Pick<Options, 'port' | 'devClient'>>,\n settings: { webOnly?: boolean }\n) {\n const multiBundlerSettings: { webpackPort?: number; metroPort?: number } = {};\n\n if (settings.webOnly) {\n const webpackPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n // Default web port\n fallbackPort: 19006,\n });\n if (!webpackPort) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.webpackPort = webpackPort;\n } else {\n const devClientDefaultPort = process.env.RCT_METRO_PORT\n ? parseInt(process.env.RCT_METRO_PORT, 10)\n : 8081;\n const expoGoDefaultPort = 19000;\n const metroPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n fallbackPort: options.devClient ? devClientDefaultPort : expoGoDefaultPort,\n });\n if (!metroPort) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.metroPort = metroPort;\n }\n\n return multiBundlerSettings;\n}\n"],"names":["resolveOptionsAsync","resolveSchemeAsync","resolveHostType","resolvePortsAsync","projectRoot","args","forceManifestType","assert","match","host","offline","lan","localhost","tunnel","scheme","devClient","privateKeyPath","android","web","ios","clear","dev","https","maxWorkers","port","minify","options","resolveFrom","then","m","default","isDevClientPackageInstalled","getOptionalDevClientSchemeAsync","filter","i","length","CommandError","settings","multiBundlerSettings","webOnly","webpackPort","resolvePortAsync","defaultPort","fallbackPort","AbortCommandError","devClientDefaultPort","process","env","RCT_METRO_PORT","parseInt","expoGoDefaultPort","metroPort"],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
6
|
+
var path = _interopRequireWildcard(require("path"));
|
|
7
|
+
var _slugify = _interopRequireDefault(require("slugify"));
|
|
8
|
+
var _userSettings = _interopRequireDefault(require("../../api/user/UserSettings"));
|
|
9
|
+
var _user = require("../../api/user/user");
|
|
10
|
+
var Log = _interopRequireWildcard(require("../../log"));
|
|
11
|
+
var _delay = require("../../utils/delay");
|
|
12
|
+
var _errors = require("../../utils/errors");
|
|
13
|
+
var _ngrokResolver = require("../doctor/ngrok/NgrokResolver");
|
|
14
|
+
var _adbReverse = require("../platforms/android/adbReverse");
|
|
15
|
+
var _settings = require("../project/settings");
|
|
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
|
+
const NGROK_CONFIG = {
|
|
43
|
+
authToken: "5W1bR67GNbWcXqmxZzBG1_56GezNeaX6sSRvn8npeQ8",
|
|
44
|
+
domain: "exp.direct"
|
|
45
|
+
};
|
|
46
|
+
const TUNNEL_TIMEOUT = 10 * 1000;
|
|
47
|
+
class AsyncNgrok {
|
|
48
|
+
constructor(projectRoot, port){
|
|
49
|
+
this.projectRoot = projectRoot;
|
|
50
|
+
this.port = port;
|
|
51
|
+
this.serverUrl = null;
|
|
52
|
+
this.resolver = new _ngrokResolver.NgrokResolver(projectRoot);
|
|
53
|
+
}
|
|
54
|
+
getActiveUrl() {
|
|
55
|
+
return this.serverUrl;
|
|
56
|
+
}
|
|
57
|
+
/** Exposed for testing. */ async _getProjectHostnameAsync() {
|
|
58
|
+
const user = await (0, _user).getUserAsync();
|
|
59
|
+
if ((user == null ? void 0 : user.__typename) === "Robot") {
|
|
60
|
+
throw new _errors.CommandError("NGROK_ROBOT", "Cannot use ngrok with a robot user.");
|
|
61
|
+
}
|
|
62
|
+
const username = (0, _user).getActorDisplayName(user);
|
|
63
|
+
return [
|
|
64
|
+
// NOTE: https://github.com/expo/expo/pull/16556#discussion_r822944286
|
|
65
|
+
await this.getProjectRandomnessAsync(),
|
|
66
|
+
(0, _slugify).default(username),
|
|
67
|
+
// Use the port to distinguish between multiple tunnels (webpack, metro).
|
|
68
|
+
this.port,
|
|
69
|
+
NGROK_CONFIG.domain,
|
|
70
|
+
].join(".");
|
|
71
|
+
}
|
|
72
|
+
/** Start ngrok on the given port for the project. */ async startAsync({ timeout } = {}) {
|
|
73
|
+
// Ensure the instance is loaded first, this can linger so we should run it before the timeout.
|
|
74
|
+
await this.resolver.resolveAsync({
|
|
75
|
+
// For now, prefer global install since the package has native code (harder to install) and doesn't change very often.
|
|
76
|
+
prefersGlobalInstall: true
|
|
77
|
+
});
|
|
78
|
+
// Ensure ADB reverse is running.
|
|
79
|
+
if (!await (0, _adbReverse).startAdbReverseAsync([
|
|
80
|
+
this.port
|
|
81
|
+
])) {
|
|
82
|
+
// TODO: Better error message.
|
|
83
|
+
throw new _errors.CommandError("NGROK_ADB", `Cannot start tunnel URL because \`adb reverse\` failed for the connected Android device(s).`);
|
|
84
|
+
}
|
|
85
|
+
this.serverUrl = await this._connectToNgrokAsync({
|
|
86
|
+
timeout
|
|
87
|
+
});
|
|
88
|
+
Log.debug("[ngrok] Tunnel URL:", this.serverUrl);
|
|
89
|
+
Log.log("Tunnel ready.");
|
|
90
|
+
}
|
|
91
|
+
/** Stop the ngrok process if it's running. */ async stopAsync() {
|
|
92
|
+
var ref;
|
|
93
|
+
Log.debug("[ngrok] Stopping Tunnel");
|
|
94
|
+
await ((ref = this.resolver.get()) == null ? void 0 : ref.kill == null ? void 0 : ref.kill());
|
|
95
|
+
this.serverUrl = null;
|
|
96
|
+
}
|
|
97
|
+
/** Exposed for testing. */ async _connectToNgrokAsync(options = {}, attempts = 0) {
|
|
98
|
+
// Attempt to stop any hanging processes, this increases the chances of a successful connection.
|
|
99
|
+
await this.stopAsync();
|
|
100
|
+
// Get the instance quietly or assert otherwise.
|
|
101
|
+
const instance = await this.resolver.resolveAsync({
|
|
102
|
+
shouldPrompt: false,
|
|
103
|
+
autoInstall: false
|
|
104
|
+
});
|
|
105
|
+
var _timeout;
|
|
106
|
+
// TODO(Bacon): Consider dropping the timeout functionality:
|
|
107
|
+
// https://github.com/expo/expo/pull/16556#discussion_r822307373
|
|
108
|
+
const results = await (0, _delay).resolveWithTimeout(()=>this.connectToNgrokInternalAsync(instance, attempts)
|
|
109
|
+
, {
|
|
110
|
+
timeout: (_timeout = options.timeout) != null ? _timeout : TUNNEL_TIMEOUT,
|
|
111
|
+
errorMessage: "ngrok tunnel took too long to connect."
|
|
112
|
+
});
|
|
113
|
+
if (typeof results === "string") {
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
// Wait 100ms and then try again
|
|
117
|
+
await (0, _delay).delayAsync(100);
|
|
118
|
+
return this._connectToNgrokAsync(options, attempts + 1);
|
|
119
|
+
}
|
|
120
|
+
async connectToNgrokInternalAsync(instance, attempts = 0) {
|
|
121
|
+
try {
|
|
122
|
+
// Global config path.
|
|
123
|
+
const configPath = path.join(_userSettings.default.getDirectory(), "ngrok.yml");
|
|
124
|
+
Log.debug("[ngrok] Global config path:", configPath);
|
|
125
|
+
const hostname = await this._getProjectHostnameAsync();
|
|
126
|
+
Log.debug("[ngrok] Hostname:", hostname);
|
|
127
|
+
const url = await instance.connect({
|
|
128
|
+
authtoken: NGROK_CONFIG.authToken,
|
|
129
|
+
proto: "http",
|
|
130
|
+
hostname,
|
|
131
|
+
configPath,
|
|
132
|
+
onStatusChange (status) {
|
|
133
|
+
if (status === "closed") {
|
|
134
|
+
Log.error("We noticed your tunnel is having issues. " + "This may be due to intermittent problems with ngrok. " + "If you have trouble connecting to your app, try to restart the project, " + "or switch the host to `lan`.");
|
|
135
|
+
} else if (status === "connected") {
|
|
136
|
+
Log.log("Tunnel connected.");
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
port: this.port
|
|
140
|
+
});
|
|
141
|
+
return url;
|
|
142
|
+
} catch (error) {
|
|
143
|
+
// Attempt to connect 3 times
|
|
144
|
+
if (attempts >= 2) {
|
|
145
|
+
throw new _errors.CommandError("NGROK_CONNECT", error.toString());
|
|
146
|
+
}
|
|
147
|
+
// Attempt to fix the issue
|
|
148
|
+
if ((error == null ? void 0 : error.error_code) === 103) {
|
|
149
|
+
// Change randomness to avoid conflict if killing ngrok doesn't help
|
|
150
|
+
await this._resetProjectRandomnessAsync();
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async getProjectRandomnessAsync() {
|
|
156
|
+
const { urlRandomness: randomness } = await _settings.ProjectSettings.readAsync(this.projectRoot);
|
|
157
|
+
if (randomness) {
|
|
158
|
+
return randomness;
|
|
159
|
+
}
|
|
160
|
+
return await this._resetProjectRandomnessAsync();
|
|
161
|
+
}
|
|
162
|
+
async _resetProjectRandomnessAsync() {
|
|
163
|
+
const randomness = _crypto.default.randomBytes(5).toString("base64url");
|
|
164
|
+
await _settings.ProjectSettings.setAsync(this.projectRoot, {
|
|
165
|
+
urlRandomness: randomness
|
|
166
|
+
});
|
|
167
|
+
Log.debug("[ngrok] Resetting project randomness:", randomness);
|
|
168
|
+
return randomness;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.AsyncNgrok = AsyncNgrok;
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=AsyncNgrok.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/server/AsyncNgrok.ts"],"sourcesContent":["import crypto from 'crypto';\nimport * as path from 'path';\nimport slugify from 'slugify';\n\nimport UserSettings from '../../api/user/UserSettings';\nimport { getActorDisplayName, getUserAsync } from '../../api/user/user';\nimport * as Log from '../../log';\nimport { delayAsync, resolveWithTimeout } from '../../utils/delay';\nimport { CommandError } from '../../utils/errors';\nimport { NgrokInstance, NgrokResolver } from '../doctor/ngrok/NgrokResolver';\nimport { startAdbReverseAsync } from '../platforms/android/adbReverse';\nimport { ProjectSettings } from '../project/settings';\n\nconst NGROK_CONFIG = {\n authToken: '5W1bR67GNbWcXqmxZzBG1_56GezNeaX6sSRvn8npeQ8',\n domain: 'exp.direct',\n};\n\nconst TUNNEL_TIMEOUT = 10 * 1000;\n\nexport class AsyncNgrok {\n /** Resolves the best instance of ngrok, exposed for testing. */\n resolver: NgrokResolver;\n\n /** Info about the currently running instance of ngrok. */\n private serverUrl: string | null = null;\n\n constructor(private projectRoot: string, private port: number) {\n this.resolver = new NgrokResolver(projectRoot);\n }\n\n public getActiveUrl(): string | null {\n return this.serverUrl;\n }\n\n /** Exposed for testing. */\n async _getProjectHostnameAsync() {\n const user = await getUserAsync();\n if (user?.__typename === 'Robot') {\n throw new CommandError('NGROK_ROBOT', 'Cannot use ngrok with a robot user.');\n }\n const username = getActorDisplayName(user);\n\n return [\n // NOTE: https://github.com/expo/expo/pull/16556#discussion_r822944286\n await this.getProjectRandomnessAsync(),\n slugify(username),\n // Use the port to distinguish between multiple tunnels (webpack, metro).\n this.port,\n NGROK_CONFIG.domain,\n ].join('.');\n }\n\n /** Start ngrok on the given port for the project. */\n async startAsync({ timeout }: { timeout?: number } = {}): Promise<void> {\n // Ensure the instance is loaded first, this can linger so we should run it before the timeout.\n await this.resolver.resolveAsync({\n // For now, prefer global install since the package has native code (harder to install) and doesn't change very often.\n prefersGlobalInstall: true,\n });\n\n // Ensure ADB reverse is running.\n if (!(await startAdbReverseAsync([this.port]))) {\n // TODO: Better error message.\n throw new CommandError(\n 'NGROK_ADB',\n `Cannot start tunnel URL because \\`adb reverse\\` failed for the connected Android device(s).`\n );\n }\n\n this.serverUrl = await this._connectToNgrokAsync({ timeout });\n\n Log.debug('[ngrok] Tunnel URL:', this.serverUrl);\n Log.log('Tunnel ready.');\n }\n\n /** Stop the ngrok process if it's running. */\n public async stopAsync(): Promise<void> {\n Log.debug('[ngrok] Stopping Tunnel');\n\n await this.resolver.get()?.kill?.();\n this.serverUrl = null;\n }\n\n /** Exposed for testing. */\n async _connectToNgrokAsync(\n options: { timeout?: number } = {},\n attempts: number = 0\n ): Promise<string> {\n // Attempt to stop any hanging processes, this increases the chances of a successful connection.\n await this.stopAsync();\n\n // Get the instance quietly or assert otherwise.\n const instance = await this.resolver.resolveAsync({\n shouldPrompt: false,\n autoInstall: false,\n });\n\n // TODO(Bacon): Consider dropping the timeout functionality:\n // https://github.com/expo/expo/pull/16556#discussion_r822307373\n const results = await resolveWithTimeout(\n () => this.connectToNgrokInternalAsync(instance, attempts),\n {\n timeout: options.timeout ?? TUNNEL_TIMEOUT,\n errorMessage: 'ngrok tunnel took too long to connect.',\n }\n );\n if (typeof results === 'string') {\n return results;\n }\n\n // Wait 100ms and then try again\n await delayAsync(100);\n\n return this._connectToNgrokAsync(options, attempts + 1);\n }\n\n private async connectToNgrokInternalAsync(\n instance: NgrokInstance,\n attempts: number = 0\n ): Promise<string | false> {\n try {\n // Global config path.\n const configPath = path.join(UserSettings.getDirectory(), 'ngrok.yml');\n Log.debug('[ngrok] Global config path:', configPath);\n const hostname = await this._getProjectHostnameAsync();\n Log.debug('[ngrok] Hostname:', hostname);\n\n const url = await instance.connect({\n authtoken: NGROK_CONFIG.authToken,\n proto: 'http',\n hostname,\n configPath,\n onStatusChange(status) {\n if (status === 'closed') {\n Log.error(\n 'We noticed your tunnel is having issues. ' +\n 'This may be due to intermittent problems with ngrok. ' +\n 'If you have trouble connecting to your app, try to restart the project, ' +\n 'or switch the host to `lan`.'\n );\n } else if (status === 'connected') {\n Log.log('Tunnel connected.');\n }\n },\n port: this.port,\n });\n return url;\n } catch (error: any) {\n // Attempt to connect 3 times\n if (attempts >= 2) {\n throw new CommandError('NGROK_CONNECT', error.toString());\n }\n\n // Attempt to fix the issue\n if (error?.error_code === 103) {\n // Change randomness to avoid conflict if killing ngrok doesn't help\n await this._resetProjectRandomnessAsync();\n }\n return false;\n }\n }\n\n private async getProjectRandomnessAsync() {\n const { urlRandomness: randomness } = await ProjectSettings.readAsync(this.projectRoot);\n if (randomness) {\n return randomness;\n }\n return await this._resetProjectRandomnessAsync();\n }\n\n async _resetProjectRandomnessAsync() {\n const randomness = crypto.randomBytes(5).toString('base64url');\n await ProjectSettings.setAsync(this.projectRoot, { urlRandomness: randomness });\n Log.debug('[ngrok] Resetting project randomness:', randomness);\n return randomness;\n }\n}\n"],"names":["path","Log","NGROK_CONFIG","authToken","domain","TUNNEL_TIMEOUT","AsyncNgrok","constructor","projectRoot","port","serverUrl","resolver","NgrokResolver","getActiveUrl","_getProjectHostnameAsync","user","getUserAsync","__typename","CommandError","username","getActorDisplayName","getProjectRandomnessAsync","slugify","join","startAsync","timeout","resolveAsync","prefersGlobalInstall","startAdbReverseAsync","_connectToNgrokAsync","debug","log","stopAsync","get","kill","options","attempts","instance","shouldPrompt","autoInstall","results","resolveWithTimeout","connectToNgrokInternalAsync","errorMessage","delayAsync","configPath","UserSettings","getDirectory","hostname","url","connect","authtoken","proto","onStatusChange","status","error","toString","error_code","_resetProjectRandomnessAsync","urlRandomness","randomness","ProjectSettings","readAsync","crypto","randomBytes","setAsync"],"mappings":"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"}
|