@depup/expo__cli 55.0.23-depup.0 → 57.0.10-depup.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/LICENSE +21 -0
- package/README.md +13 -15
- package/build/bin/cli +4 -4
- package/build/bin/cli.map +1 -1
- package/build/src/api/endpoint.js +4 -4
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/getExpoSchema.js +3 -3
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/graphql/client.js +26 -14
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
- package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
- package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/ResponseCache.js +5 -5
- package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
- package/build/src/api/rest/client.js +35 -20
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +6 -5
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +28 -15
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +10 -3
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +76 -24
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +4 -4
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +19 -7
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +3 -3
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +7 -4
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/templates.js +4 -6
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/events/index.js +19 -15
- package/build/src/events/index.js.map +1 -1
- package/build/src/events/stream.js +94 -24
- package/build/src/events/stream.js.map +1 -1
- package/build/src/expoUpdatesExports.js +4 -4
- package/build/src/expoUpdatesExports.js.map +1 -1
- package/build/src/export/createMetadataJson.js +2 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +45 -20
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/exportServer.js +1 -1
- package/build/src/export/embed/exportServer.js.map +1 -1
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +7 -6
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +32 -28
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +5 -5
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportDomComponents.js +5 -5
- package/build/src/export/exportDomComponents.js.map +1 -1
- package/build/src/export/exportHermes.js +23 -13
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +30 -21
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +26 -34
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/html.js +3 -3
- package/build/src/export/html.js.map +1 -1
- package/build/src/export/index.js +2 -0
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +4 -4
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +6 -6
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +16 -4
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +12 -13
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +3 -3
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/static.js +6 -0
- package/build/src/export/static.js.map +1 -0
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +1 -28
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +3 -3
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
- package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
- package/build/src/lint/ESlintPrerequisite.js.map +1 -1
- package/build/src/log.js +32 -14
- package/build/src/log.js.map +1 -1
- package/build/src/login/index.js +25 -5
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +49 -14
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +3 -3
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +3 -2
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +31 -6
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +8 -5
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +7 -7
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +10 -5
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +3 -3
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +7 -7
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/register/index.js.map +1 -1
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +48 -1
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +4 -1
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +4 -4
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +163 -23
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +8 -8
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/settings.js +3 -3
- package/build/src/run/ios/codeSigning/settings.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +8 -1
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +3 -3
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/appleDestinations.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +3 -3
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +8 -3
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +9 -4
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +39 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/ios/validateExternalBinary.js.map +1 -1
- package/build/src/run/startBundler.js +4 -0
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/serve/index.js +4 -1
- package/build/src/serve/index.js.map +1 -1
- package/build/src/serve/serveAsync.js +23 -11
- package/build/src/serve/serveAsync.js.map +1 -1
- package/build/src/serve/static.js +69 -0
- package/build/src/serve/static.js.map +1 -0
- package/build/src/start/checkDependenciesOnStart.js +131 -0
- package/build/src/start/checkDependenciesOnStart.js.map +1 -0
- package/build/src/start/detectDevClient.js +3 -3
- package/build/src/start/detectDevClient.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +4 -4
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
- package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
- package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +3 -3
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +2 -0
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +6 -6
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +49 -6
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +13 -4
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +4 -0
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +36 -34
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +4 -4
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +5 -5
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +5 -5
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/devicectl.js +7 -7
- package/build/src/start/platforms/ios/devicectl.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +25 -19
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +3 -3
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +3 -3
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +6 -6
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/project/dotExpo.js +4 -3
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/resolveOptions.js +7 -7
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +1 -1
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/AsyncWsTunnel.js +120 -35
- package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
- package/build/src/start/server/Bonjour.js +8 -3
- package/build/src/start/server/Bonjour.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +23 -9
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPlugin.js +63 -3
- package/build/src/start/server/DevToolsPlugin.js.map +1 -1
- package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
- package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +20 -6
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
- package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
- package/build/src/start/server/DevelopmentSession.js +41 -24
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/MCP.js +10 -3
- package/build/src/start/server/MCP.js.map +1 -1
- package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
- package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +14 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
- package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +13 -24
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +241 -109
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +22 -4
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
- package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
- package/build/src/start/server/metro/createFileMap-fork.js +196 -0
- package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
- package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
- package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
- package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
- package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
- package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
- package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
- package/build/src/start/server/metro/externals.js +4 -4
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +141 -57
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +16 -13
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroErrors.js +3 -3
- package/build/src/start/server/metro/metroErrors.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/resolveLoader.js +3 -3
- package/build/src/start/server/metro/resolveLoader.js.map +1 -1
- package/build/src/start/server/metro/router.js +23 -14
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +13 -10
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +29 -13
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
- package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +4 -4
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DomComponentsMiddleware.js +16 -12
- package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +15 -6
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
- package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/domPolyfills.js +60 -0
- package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
- package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +15 -14
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/mutations.js +3 -3
- package/build/src/start/server/middleware/mutations.js.map +1 -1
- package/build/src/start/server/middleware/openHandlers.js +157 -0
- package/build/src/start/server/middleware/openHandlers.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js +4 -4
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +9 -7
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +3 -1
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +13 -36
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +3 -3
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +14 -55
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +5 -5
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +12 -10
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +4 -4
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +3 -3
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +21 -11
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/types.d.ts +2 -0
- package/build/src/utils/FileNotifier.js +1 -1
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/args.js +5 -5
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/array.js +8 -8
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/build-cache-providers/helpers.js +4 -4
- package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
- package/build/src/utils/build-cache-providers/index.js +5 -5
- package/build/src/utils/build-cache-providers/index.js.map +1 -1
- package/build/src/utils/cocoapods.js +5 -5
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +12 -6
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
- package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
- package/build/src/utils/createTempPath.js +3 -3
- package/build/src/utils/createTempPath.js.map +1 -1
- package/build/src/utils/delay.js +4 -4
- package/build/src/utils/delay.js.map +1 -1
- package/build/src/utils/dir.js +21 -11
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +4 -4
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +4 -4
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +39 -13
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +6 -6
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/exit.js +15 -19
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/expoUpdatesCli.js +5 -5
- package/build/src/utils/expoUpdatesCli.js.map +1 -1
- package/build/src/utils/fetch.js +4 -4
- package/build/src/utils/fetch.js.map +1 -1
- package/build/src/utils/findUp.js +3 -3
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/fn.js +3 -3
- package/build/src/utils/fn.js.map +1 -1
- package/build/src/utils/freeport.js +3 -3
- package/build/src/utils/freeport.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +3 -5
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +5 -5
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +3 -3
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +3 -3
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/ip.js +4 -4
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/link.js +3 -3
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +10 -10
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +3 -3
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/net.js +23 -4
- package/build/src/utils/net.js.map +1 -1
- package/build/src/utils/nodeEnv.js +6 -6
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/npm.js +10 -9
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js +4 -4
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/open.js +240 -11
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +4 -4
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +5 -4
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +12 -5
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/progress.js +4 -4
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +11 -11
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/qr.js +5 -4
- package/build/src/utils/qr.js.map +1 -1
- package/build/src/utils/resolveArgs.js +10 -9
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/scheme.js +4 -4
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/strings.js.map +1 -1
- package/build/src/utils/tar.js +8 -7
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/Telemetry.js +5 -0
- package/build/src/utils/telemetry/Telemetry.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
- package/build/src/utils/telemetry/index.js +4 -4
- package/build/src/utils/telemetry/index.js.map +1 -1
- package/build/src/utils/telemetry/utils/agent.js +42 -0
- package/build/src/utils/telemetry/utils/agent.js.map +1 -0
- package/build/src/utils/telemetry/utils/constants.js +3 -3
- package/build/src/utils/telemetry/utils/constants.js.map +1 -1
- package/build/src/utils/telemetry/utils/context.js +3 -2
- package/build/src/utils/telemetry/utils/context.js.map +1 -1
- package/build/src/utils/url.js +5 -17
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +12 -12
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +4 -4
- package/build/src/utils/variadic.js.map +1 -1
- package/build/src/whoami/index.js.map +1 -1
- package/changes.json +18 -26
- package/main.js +3 -0
- package/package.json +88 -80
- package/static/loading-page/index.html +45 -3
- package/static/template/+html.tsx +14 -5
- package/add-module.js +0 -8
- package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
- package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
- package/build/src/utils/resolveWatchFolders.js +0 -67
- package/build/src/utils/resolveWatchFolders.js.map +0 -1
- package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
|
@@ -15,9 +15,9 @@ function _assert() {
|
|
|
15
15
|
};
|
|
16
16
|
return data;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
const data = /*#__PURE__*/ _interop_require_default(require("
|
|
20
|
-
|
|
18
|
+
function _crypto() {
|
|
19
|
+
const data = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
|
20
|
+
_crypto = function() {
|
|
21
21
|
return data;
|
|
22
22
|
};
|
|
23
23
|
return data;
|
|
@@ -29,14 +29,10 @@ function _http() {
|
|
|
29
29
|
};
|
|
30
30
|
return data;
|
|
31
31
|
}
|
|
32
|
-
function _querystring() {
|
|
33
|
-
const data = /*#__PURE__*/ _interop_require_default(require("querystring"));
|
|
34
|
-
_querystring = function() {
|
|
35
|
-
return data;
|
|
36
|
-
};
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
32
|
const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../log"));
|
|
33
|
+
const _errors = require("../../utils/errors");
|
|
34
|
+
const _open = require("../../utils/open");
|
|
35
|
+
const _client = require("../rest/client");
|
|
40
36
|
function _interop_require_default(obj) {
|
|
41
37
|
return obj && obj.__esModule ? obj : {
|
|
42
38
|
default: obj
|
|
@@ -83,15 +79,57 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
83
79
|
}
|
|
84
80
|
return newObj;
|
|
85
81
|
}
|
|
82
|
+
const CLIENT_ID = 'expo-cli';
|
|
83
|
+
function generateCodeVerifier() {
|
|
84
|
+
return _crypto().default.randomBytes(32).toString('base64url');
|
|
85
|
+
}
|
|
86
|
+
function generateCodeChallenge(codeVerifier) {
|
|
87
|
+
return _crypto().default.createHash('sha256').update(codeVerifier).digest('base64url');
|
|
88
|
+
}
|
|
89
|
+
function generateState() {
|
|
90
|
+
return _crypto().default.randomBytes(32).toString('base64url');
|
|
91
|
+
}
|
|
92
|
+
async function exchangeCodeForSessionSecretAsync({ code, codeVerifier, redirectUri }) {
|
|
93
|
+
const response = await (0, _client.fetchAsync)('auth/token', {
|
|
94
|
+
method: 'POST',
|
|
95
|
+
headers: {
|
|
96
|
+
'Content-Type': 'application/json'
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({
|
|
99
|
+
grant_type: 'authorization_code',
|
|
100
|
+
code,
|
|
101
|
+
redirect_uri: redirectUri,
|
|
102
|
+
code_verifier: codeVerifier,
|
|
103
|
+
client_id: CLIENT_ID
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
const { session_secret: sessionSecret } = (0, _client.getResponseDataOrThrow)(await response.json());
|
|
107
|
+
if (!sessionSecret) {
|
|
108
|
+
throw new _errors.CommandError('BROWSER_AUTH', 'Failed to obtain session secret from token exchange.');
|
|
109
|
+
}
|
|
110
|
+
return sessionSecret;
|
|
111
|
+
}
|
|
86
112
|
async function getSessionUsingBrowserAuthFlowAsync({ expoWebsiteUrl, sso = false }) {
|
|
87
113
|
const scheme = 'http';
|
|
88
114
|
const hostname = 'localhost';
|
|
89
|
-
const
|
|
115
|
+
const callbackPath = '/auth/callback';
|
|
116
|
+
const codeVerifier = generateCodeVerifier();
|
|
117
|
+
const codeChallenge = generateCodeChallenge(codeVerifier);
|
|
118
|
+
const state = generateState();
|
|
119
|
+
const buildRedirectUri = (port)=>`${scheme}://${hostname}:${port}${callbackPath}`;
|
|
90
120
|
const buildExpoLoginUrl = (port, sso)=>{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
121
|
+
// Note: we avoid URLSearchParams here because better-opn calls encodeURI()
|
|
122
|
+
// on the URL before passing it to AppleScript, which would double-encode
|
|
123
|
+
// the percent-encoded values from URLSearchParams.toString().
|
|
124
|
+
const params = [
|
|
125
|
+
`client_id=${CLIENT_ID}`,
|
|
126
|
+
`redirect_uri=${buildRedirectUri(port)}`,
|
|
127
|
+
`response_type=code`,
|
|
128
|
+
`code_challenge=${codeChallenge}`,
|
|
129
|
+
`code_challenge_method=S256`,
|
|
130
|
+
`state=${state}`,
|
|
131
|
+
`confirm_account=true`
|
|
132
|
+
].join('&');
|
|
95
133
|
return `${expoWebsiteUrl}${sso ? '/sso-login' : '/login'}?${params}`;
|
|
96
134
|
};
|
|
97
135
|
// Start server and begin auth flow
|
|
@@ -110,22 +148,35 @@ async function getSessionUsingBrowserAuthFlowAsync({ expoWebsiteUrl, sso = false
|
|
|
110
148
|
connection.destroy();
|
|
111
149
|
}
|
|
112
150
|
};
|
|
113
|
-
|
|
151
|
+
const handleRequestAsync = async ()=>{
|
|
114
152
|
var _request_url;
|
|
115
|
-
if (!(request.method === 'GET' && ((_request_url = request.url) == null ? void 0 : _request_url.includes(
|
|
116
|
-
throw new
|
|
153
|
+
if (!(request.method === 'GET' && ((_request_url = request.url) == null ? void 0 : _request_url.includes(callbackPath)))) {
|
|
154
|
+
throw new _errors.CommandError('BROWSER_AUTH', 'Unexpected login response.');
|
|
117
155
|
}
|
|
118
156
|
const url = new URL(request.url, `http:${request.headers.host}`);
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
157
|
+
const code = url.searchParams.get('code');
|
|
158
|
+
const returnedState = url.searchParams.get('state');
|
|
159
|
+
if (!code) {
|
|
160
|
+
throw new _errors.CommandError('BROWSER_AUTH', 'Request missing code search parameter.');
|
|
161
|
+
}
|
|
162
|
+
if (returnedState !== state) {
|
|
163
|
+
throw new _errors.CommandError('BROWSER_AUTH', 'State mismatch. Possible CSRF attack.');
|
|
122
164
|
}
|
|
165
|
+
const address = server.address();
|
|
166
|
+
(0, _assert().default)(address !== null && typeof address === 'object');
|
|
167
|
+
const redirectUri = buildRedirectUri(address.port);
|
|
168
|
+
const sessionSecret = await exchangeCodeForSessionSecretAsync({
|
|
169
|
+
code,
|
|
170
|
+
codeVerifier,
|
|
171
|
+
redirectUri
|
|
172
|
+
});
|
|
123
173
|
resolve(sessionSecret);
|
|
124
174
|
redirectAndCleanup('success');
|
|
125
|
-
}
|
|
175
|
+
};
|
|
176
|
+
handleRequestAsync().catch((error)=>{
|
|
126
177
|
redirectAndCleanup('error');
|
|
127
178
|
reject(error);
|
|
128
|
-
}
|
|
179
|
+
});
|
|
129
180
|
});
|
|
130
181
|
server.listen(0, hostname, ()=>{
|
|
131
182
|
_log.log('Waiting for browser login...');
|
|
@@ -133,7 +184,8 @@ async function getSessionUsingBrowserAuthFlowAsync({ expoWebsiteUrl, sso = false
|
|
|
133
184
|
(0, _assert().default)(address !== null && typeof address === 'object', 'Server address and port should be set after listening has begun');
|
|
134
185
|
const port = address.port;
|
|
135
186
|
const authorizeUrl = buildExpoLoginUrl(port, sso);
|
|
136
|
-
(
|
|
187
|
+
_log.log(`If your browser doesn't automatically open, visit this link to log in: ${authorizeUrl}`);
|
|
188
|
+
(0, _open.openBrowserAsync)(authorizeUrl);
|
|
137
189
|
});
|
|
138
190
|
server.on('connection', (connection)=>{
|
|
139
191
|
connections.add(connection);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/api/user/expoSsoLauncher.ts"],"sourcesContent":["import assert from 'assert';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/user/expoSsoLauncher.ts"],"sourcesContent":["import assert from 'assert';\nimport crypto from 'crypto';\nimport http from 'http';\nimport type { Socket } from 'node:net';\n\nimport * as Log from '../../log';\nimport { CommandError } from '../../utils/errors';\nimport { openBrowserAsync } from '../../utils/open';\nimport { fetchAsync, getResponseDataOrThrow } from '../rest/client';\n\nconst CLIENT_ID = 'expo-cli';\n\nfunction generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString('base64url');\n}\n\nfunction generateCodeChallenge(codeVerifier: string): string {\n return crypto.createHash('sha256').update(codeVerifier).digest('base64url');\n}\n\nfunction generateState(): string {\n return crypto.randomBytes(32).toString('base64url');\n}\n\nasync function exchangeCodeForSessionSecretAsync({\n code,\n codeVerifier,\n redirectUri,\n}: {\n code: string;\n codeVerifier: string;\n redirectUri: string;\n}): Promise<string> {\n const response = await fetchAsync('auth/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code,\n redirect_uri: redirectUri,\n code_verifier: codeVerifier,\n client_id: CLIENT_ID,\n }),\n });\n const { session_secret: sessionSecret } = getResponseDataOrThrow<{ session_secret?: string }>(\n await response.json()\n );\n if (!sessionSecret) {\n throw new CommandError('BROWSER_AUTH', 'Failed to obtain session secret from token exchange.');\n }\n return sessionSecret;\n}\n\nexport async function getSessionUsingBrowserAuthFlowAsync({\n expoWebsiteUrl,\n sso = false,\n}: {\n expoWebsiteUrl: string;\n sso?: boolean;\n}): Promise<string> {\n const scheme = 'http';\n const hostname = 'localhost';\n const callbackPath = '/auth/callback';\n\n const codeVerifier = generateCodeVerifier();\n const codeChallenge = generateCodeChallenge(codeVerifier);\n const state = generateState();\n\n const buildRedirectUri = (port: number): string =>\n `${scheme}://${hostname}:${port}${callbackPath}`;\n\n const buildExpoLoginUrl = (port: number, sso: boolean): string => {\n // Note: we avoid URLSearchParams here because better-opn calls encodeURI()\n // on the URL before passing it to AppleScript, which would double-encode\n // the percent-encoded values from URLSearchParams.toString().\n const params = [\n `client_id=${CLIENT_ID}`,\n `redirect_uri=${buildRedirectUri(port)}`,\n `response_type=code`,\n `code_challenge=${codeChallenge}`,\n `code_challenge_method=S256`,\n `state=${state}`,\n `confirm_account=true`,\n ].join('&');\n return `${expoWebsiteUrl}${sso ? '/sso-login' : '/login'}?${params}`;\n };\n\n // Start server and begin auth flow\n const executeAuthFlow = (): Promise<string> => {\n return new Promise<string>(async (resolve, reject) => {\n const connections = new Set<Socket>();\n\n const server = http.createServer(\n (request: http.IncomingMessage, response: http.ServerResponse) => {\n const redirectAndCleanup = (result: 'success' | 'error'): void => {\n const redirectUrl = `${expoWebsiteUrl}/oauth/expo-cli?result=${result}`;\n response.writeHead(302, { Location: redirectUrl });\n response.end();\n server.close();\n for (const connection of connections) {\n connection.destroy();\n }\n };\n\n const handleRequestAsync = async (): Promise<void> => {\n if (!(request.method === 'GET' && request.url?.includes(callbackPath))) {\n throw new CommandError('BROWSER_AUTH', 'Unexpected login response.');\n }\n const url = new URL(request.url, `http:${request.headers.host}`);\n const code = url.searchParams.get('code');\n const returnedState = url.searchParams.get('state');\n\n if (!code) {\n throw new CommandError('BROWSER_AUTH', 'Request missing code search parameter.');\n }\n if (returnedState !== state) {\n throw new CommandError('BROWSER_AUTH', 'State mismatch. Possible CSRF attack.');\n }\n\n const address = server.address();\n assert(address !== null && typeof address === 'object');\n const redirectUri = buildRedirectUri(address.port);\n\n const sessionSecret = await exchangeCodeForSessionSecretAsync({\n code,\n codeVerifier,\n redirectUri,\n });\n\n resolve(sessionSecret);\n redirectAndCleanup('success');\n };\n\n handleRequestAsync().catch((error) => {\n redirectAndCleanup('error');\n reject(error);\n });\n }\n );\n\n server.listen(0, hostname, () => {\n Log.log('Waiting for browser login...');\n\n const address = server.address();\n assert(\n address !== null && typeof address === 'object',\n 'Server address and port should be set after listening has begun'\n );\n const port = address.port;\n const authorizeUrl = buildExpoLoginUrl(port, sso);\n Log.log(\n `If your browser doesn't automatically open, visit this link to log in: ${authorizeUrl}`\n );\n openBrowserAsync(authorizeUrl);\n });\n\n server.on('connection', (connection) => {\n connections.add(connection);\n\n connection.on('close', () => {\n connections.delete(connection);\n });\n });\n });\n };\n\n return await executeAuthFlow();\n}\n"],"names":["getSessionUsingBrowserAuthFlowAsync","CLIENT_ID","generateCodeVerifier","crypto","randomBytes","toString","generateCodeChallenge","codeVerifier","createHash","update","digest","generateState","exchangeCodeForSessionSecretAsync","code","redirectUri","response","fetchAsync","method","headers","body","JSON","stringify","grant_type","redirect_uri","code_verifier","client_id","session_secret","sessionSecret","getResponseDataOrThrow","json","CommandError","expoWebsiteUrl","sso","scheme","hostname","callbackPath","codeChallenge","state","buildRedirectUri","port","buildExpoLoginUrl","params","join","executeAuthFlow","Promise","resolve","reject","connections","Set","server","http","createServer","request","redirectAndCleanup","result","redirectUrl","writeHead","Location","end","close","connection","destroy","handleRequestAsync","url","includes","URL","host","searchParams","get","returnedState","address","assert","catch","error","listen","Log","log","authorizeUrl","openBrowserAsync","on","add","delete"],"mappings":"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"}
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
UserSecondFactorDeviceMethod
|
|
12
|
+
get UserSecondFactorDeviceMethod () {
|
|
13
13
|
return UserSecondFactorDeviceMethod;
|
|
14
14
|
},
|
|
15
|
-
retryUsernamePasswordAuthWithOTPAsync
|
|
15
|
+
get retryUsernamePasswordAuthWithOTPAsync () {
|
|
16
16
|
return retryUsernamePasswordAuthWithOTPAsync;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -141,7 +141,7 @@ const nonInteractiveHelp = `Use the EXPO_TOKEN environment variable to authentic
|
|
|
141
141
|
body: JSON.stringify({
|
|
142
142
|
username,
|
|
143
143
|
password,
|
|
144
|
-
secondFactorDeviceID: device.id
|
|
144
|
+
secondFactorDeviceID: device == null ? void 0 : device.id
|
|
145
145
|
})
|
|
146
146
|
});
|
|
147
147
|
return await promptForOTPAsync('cancel');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/api/user/otp.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { loginAsync } from './user';\nimport * as Log from '../../log';\nimport { AbortCommandError, CommandError } from '../../utils/errors';\nimport { learnMore } from '../../utils/link';\nimport { promptAsync, selectAsync } from '../../utils/prompts';\nimport { fetchAsync } from '../rest/client';\n\nexport enum UserSecondFactorDeviceMethod {\n AUTHENTICATOR = 'authenticator',\n SMS = 'sms',\n}\n\n/** Device properties for 2FA */\nexport type SecondFactorDevice = {\n id: string;\n method: UserSecondFactorDeviceMethod;\n sms_phone_number: string | null;\n is_primary: boolean;\n};\n\nconst nonInteractiveHelp = `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n)})`;\n\n/**\n * Prompt for an OTP with the option to cancel the question by answering empty (pressing return key).\n */\nasync function promptForOTPAsync(cancelBehavior: 'cancel' | 'menu'): Promise<string | null> {\n const enterMessage =\n cancelBehavior === 'cancel'\n ? chalk`press {bold Enter} to cancel`\n : chalk`press {bold Enter} for more options`;\n const { otp } = await promptAsync(\n {\n type: 'text',\n name: 'otp',\n message: `One-time password or backup code (${enterMessage}):`,\n },\n { nonInteractiveHelp }\n );\n return otp || null;\n}\n\n/**\n * Prompt for user to choose a backup OTP method. If selected method is SMS, a request\n * for a new OTP will be sent to that method. Then, prompt for the OTP, and retry the user login.\n */\nasync function promptForBackupOTPAsync(\n username: string,\n password: string,\n secondFactorDevices: SecondFactorDevice[]\n): Promise<string | null> {\n const nonPrimarySecondFactorDevices = secondFactorDevices.filter((device) => !device.is_primary);\n\n if (nonPrimarySecondFactorDevices.length === 0) {\n throw new CommandError(\n 'No other second-factor devices set up. Ensure you have set up and certified a backup device.'\n );\n }\n\n const hasAuthenticatorSecondFactorDevice = nonPrimarySecondFactorDevices.find(\n (device) => device.method === UserSecondFactorDeviceMethod.AUTHENTICATOR\n );\n\n const smsNonPrimarySecondFactorDevices = nonPrimarySecondFactorDevices.filter(\n (device) => device.method === UserSecondFactorDeviceMethod.SMS\n );\n\n const authenticatorChoiceSentinel = -1;\n const cancelChoiceSentinel = -2;\n\n const deviceChoices = smsNonPrimarySecondFactorDevices.map((device, idx) => ({\n title: device.sms_phone_number!,\n value: idx,\n }));\n\n if (hasAuthenticatorSecondFactorDevice) {\n deviceChoices.push({\n title: 'Authenticator',\n value: authenticatorChoiceSentinel,\n });\n }\n\n deviceChoices.push({\n title: 'Cancel',\n value: cancelChoiceSentinel,\n });\n\n const selectedValue = await selectAsync('Select a second-factor device:', deviceChoices, {\n nonInteractiveHelp,\n });\n if (selectedValue === cancelChoiceSentinel) {\n return null;\n } else if (selectedValue === authenticatorChoiceSentinel) {\n return await promptForOTPAsync('cancel');\n }\n\n const device = smsNonPrimarySecondFactorDevices[selectedValue];\n\n await fetchAsync('auth/send-sms-otp', {\n method: 'POST',\n body: JSON.stringify({\n username,\n password,\n secondFactorDeviceID: device
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/user/otp.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { loginAsync } from './user';\nimport * as Log from '../../log';\nimport { AbortCommandError, CommandError } from '../../utils/errors';\nimport { learnMore } from '../../utils/link';\nimport { promptAsync, selectAsync } from '../../utils/prompts';\nimport { fetchAsync } from '../rest/client';\n\nexport enum UserSecondFactorDeviceMethod {\n AUTHENTICATOR = 'authenticator',\n SMS = 'sms',\n}\n\n/** Device properties for 2FA */\nexport type SecondFactorDevice = {\n id: string;\n method: UserSecondFactorDeviceMethod;\n sms_phone_number: string | null;\n is_primary: boolean;\n};\n\nconst nonInteractiveHelp = `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n)})`;\n\n/**\n * Prompt for an OTP with the option to cancel the question by answering empty (pressing return key).\n */\nasync function promptForOTPAsync(cancelBehavior: 'cancel' | 'menu'): Promise<string | null> {\n const enterMessage =\n cancelBehavior === 'cancel'\n ? chalk`press {bold Enter} to cancel`\n : chalk`press {bold Enter} for more options`;\n const { otp } = await promptAsync(\n {\n type: 'text',\n name: 'otp',\n message: `One-time password or backup code (${enterMessage}):`,\n },\n { nonInteractiveHelp }\n );\n return otp || null;\n}\n\n/**\n * Prompt for user to choose a backup OTP method. If selected method is SMS, a request\n * for a new OTP will be sent to that method. Then, prompt for the OTP, and retry the user login.\n */\nasync function promptForBackupOTPAsync(\n username: string,\n password: string,\n secondFactorDevices: SecondFactorDevice[]\n): Promise<string | null> {\n const nonPrimarySecondFactorDevices = secondFactorDevices.filter((device) => !device.is_primary);\n\n if (nonPrimarySecondFactorDevices.length === 0) {\n throw new CommandError(\n 'No other second-factor devices set up. Ensure you have set up and certified a backup device.'\n );\n }\n\n const hasAuthenticatorSecondFactorDevice = nonPrimarySecondFactorDevices.find(\n (device) => device.method === UserSecondFactorDeviceMethod.AUTHENTICATOR\n );\n\n const smsNonPrimarySecondFactorDevices = nonPrimarySecondFactorDevices.filter(\n (device) => device.method === UserSecondFactorDeviceMethod.SMS\n );\n\n const authenticatorChoiceSentinel = -1;\n const cancelChoiceSentinel = -2;\n\n const deviceChoices = smsNonPrimarySecondFactorDevices.map((device, idx) => ({\n title: device.sms_phone_number!,\n value: idx,\n }));\n\n if (hasAuthenticatorSecondFactorDevice) {\n deviceChoices.push({\n title: 'Authenticator',\n value: authenticatorChoiceSentinel,\n });\n }\n\n deviceChoices.push({\n title: 'Cancel',\n value: cancelChoiceSentinel,\n });\n\n const selectedValue = await selectAsync('Select a second-factor device:', deviceChoices, {\n nonInteractiveHelp,\n });\n if (selectedValue === cancelChoiceSentinel) {\n return null;\n } else if (selectedValue === authenticatorChoiceSentinel) {\n return await promptForOTPAsync('cancel');\n }\n\n const device = smsNonPrimarySecondFactorDevices[selectedValue];\n\n await fetchAsync('auth/send-sms-otp', {\n method: 'POST',\n body: JSON.stringify({\n username,\n password,\n secondFactorDeviceID: device?.id,\n }),\n });\n\n return await promptForOTPAsync('cancel');\n}\n\n/**\n * Handle the special case error indicating that a second-factor is required for\n * authentication.\n *\n * There are three cases we need to handle:\n * 1. User's primary second-factor device was SMS, OTP was automatically sent by the server to that\n * device already. In this case we should just prompt for the SMS OTP (or backup code), which the\n * user should be receiving shortly. We should give the user a way to cancel and the prompt and move\n * to case 3 below.\n * 2. User's primary second-factor device is authenticator. In this case we should prompt for authenticator\n * OTP (or backup code) and also give the user a way to cancel and move to case 3 below.\n * 3. User doesn't have a primary device or doesn't have access to their primary device. In this case\n * we should show a picker of the SMS devices that they can have an OTP code sent to, and when\n * the user picks one we show a prompt() for the sent OTP.\n */\nexport async function retryUsernamePasswordAuthWithOTPAsync(\n username: string,\n password: string,\n metadata: {\n secondFactorDevices?: SecondFactorDevice[];\n smsAutomaticallySent?: boolean;\n }\n): Promise<void> {\n const { secondFactorDevices, smsAutomaticallySent } = metadata;\n assert(\n secondFactorDevices !== undefined && smsAutomaticallySent !== undefined,\n `Malformed OTP error metadata: ${metadata}`\n );\n\n const primaryDevice = secondFactorDevices.find((device) => device.is_primary);\n let otp: string | null = null;\n\n if (smsAutomaticallySent) {\n assert(primaryDevice, 'OTP should only automatically be sent when there is a primary device');\n Log.log(\n `One-time password was sent to the phone number ending in ${primaryDevice.sms_phone_number}.`\n );\n otp = await promptForOTPAsync('menu');\n }\n\n if (primaryDevice?.method === UserSecondFactorDeviceMethod.AUTHENTICATOR) {\n Log.log('One-time password from authenticator required.');\n otp = await promptForOTPAsync('menu');\n }\n\n // user bailed on case 1 or 2, wants to move to case 3\n if (!otp) {\n otp = await promptForBackupOTPAsync(username, password, secondFactorDevices);\n }\n\n if (!otp) {\n throw new AbortCommandError();\n }\n\n await loginAsync({\n username,\n password,\n otp,\n });\n}\n"],"names":["UserSecondFactorDeviceMethod","retryUsernamePasswordAuthWithOTPAsync","nonInteractiveHelp","learnMore","promptForOTPAsync","cancelBehavior","enterMessage","chalk","otp","promptAsync","type","name","message","promptForBackupOTPAsync","username","password","secondFactorDevices","nonPrimarySecondFactorDevices","filter","device","is_primary","length","CommandError","hasAuthenticatorSecondFactorDevice","find","method","smsNonPrimarySecondFactorDevices","authenticatorChoiceSentinel","cancelChoiceSentinel","deviceChoices","map","idx","title","sms_phone_number","value","push","selectedValue","selectAsync","fetchAsync","body","JSON","stringify","secondFactorDeviceID","id","metadata","smsAutomaticallySent","assert","undefined","primaryDevice","Log","log","AbortCommandError","loginAsync"],"mappings":"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"}
|
|
@@ -5,26 +5,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
ANONYMOUS_USERNAME
|
|
12
|
+
get ANONYMOUS_USERNAME () {
|
|
13
13
|
return ANONYMOUS_USERNAME;
|
|
14
14
|
},
|
|
15
|
-
browserLoginAsync
|
|
15
|
+
get browserLoginAsync () {
|
|
16
16
|
return browserLoginAsync;
|
|
17
17
|
},
|
|
18
|
-
getActorDisplayName
|
|
18
|
+
get getActorDisplayName () {
|
|
19
19
|
return getActorDisplayName;
|
|
20
20
|
},
|
|
21
|
-
getUserAsync
|
|
21
|
+
get getUserAsync () {
|
|
22
22
|
return getUserAsync;
|
|
23
23
|
},
|
|
24
|
-
loginAsync
|
|
24
|
+
get loginAsync () {
|
|
25
25
|
return loginAsync;
|
|
26
26
|
},
|
|
27
|
-
logoutAsync
|
|
27
|
+
get logoutAsync () {
|
|
28
28
|
return logoutAsync;
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -84,6 +84,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
84
84
|
}
|
|
85
85
|
return newObj;
|
|
86
86
|
}
|
|
87
|
+
const debug = require('debug')('expo:api:user');
|
|
87
88
|
let currentUser;
|
|
88
89
|
const ANONYMOUS_USERNAME = 'anonymous';
|
|
89
90
|
function getActorDisplayName(user) {
|
|
@@ -140,6 +141,17 @@ async function browserLoginAsync({ sso = false }) {
|
|
|
140
141
|
});
|
|
141
142
|
}
|
|
142
143
|
async function logoutAsync() {
|
|
144
|
+
var _getSession;
|
|
145
|
+
const sessionSecret = (_getSession = (0, _UserSettings.getSession)()) == null ? void 0 : _getSession.sessionSecret;
|
|
146
|
+
if (sessionSecret) {
|
|
147
|
+
try {
|
|
148
|
+
await (0, _client.fetchAsync)('auth/logout', {
|
|
149
|
+
method: 'POST'
|
|
150
|
+
});
|
|
151
|
+
} catch (error) {
|
|
152
|
+
debug('Failed to invalidate session secret on server:', error);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
143
155
|
currentUser = undefined;
|
|
144
156
|
await Promise.all([
|
|
145
157
|
_fs().promises.rm((0, _codesigning.getDevelopmentCodeSigningDirectory)(), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/api/user/user.ts"],"sourcesContent":["import { promises as fs } from 'fs';\n\nimport { getAccessToken, getSession, setSessionAsync } from './UserSettings';\nimport { getSessionUsingBrowserAuthFlowAsync } from './expoSsoLauncher';\nimport * as Log from '../../log';\nimport { getDevelopmentCodeSigningDirectory } from '../../utils/codesigning';\nimport { env } from '../../utils/env';\nimport { getExpoWebsiteBaseUrl } from '../endpoint';\nimport { UserQuery, type Actor } from '../graphql/queries/UserQuery';\nimport { fetchAsync } from '../rest/client';\n\nlet currentUser: Actor | undefined;\n\nexport const ANONYMOUS_USERNAME = 'anonymous';\n\n/**\n * Resolve the name of the actor, either normal user or robot user.\n * This should be used whenever the \"current user\" needs to be displayed.\n * The display name CANNOT be used as project owner.\n */\nexport function getActorDisplayName(user?: Actor): string {\n switch (user?.__typename) {\n case 'User':\n return user.username;\n case 'SSOUser':\n return user.username;\n case 'Robot':\n return user.firstName ? `${user.firstName} (robot)` : 'robot';\n default:\n return ANONYMOUS_USERNAME;\n }\n}\n\nexport type { Actor };\n\nexport async function getUserAsync(): Promise<Actor | undefined> {\n const hasCredentials = getAccessToken() || getSession()?.sessionSecret;\n if (!env.EXPO_OFFLINE && !currentUser && hasCredentials) {\n const user = await UserQuery.currentUserAsync();\n currentUser = user ?? undefined;\n }\n return currentUser;\n}\n\nexport async function loginAsync(credentials: {\n username: string;\n password: string;\n otp?: string;\n}): Promise<void> {\n const res = await fetchAsync('auth/loginAsync', {\n method: 'POST',\n body: JSON.stringify(credentials),\n });\n const json: any = await res.json();\n const sessionSecret = json.data.sessionSecret;\n\n const userData = await UserQuery.meUserActorAsync({\n 'expo-session': sessionSecret,\n });\n\n await setSessionAsync({\n sessionSecret,\n userId: userData.id,\n username: userData.username,\n currentConnection: 'Username-Password-Authentication',\n });\n}\n\nexport async function browserLoginAsync({ sso = false }): Promise<void> {\n const sessionSecret = await getSessionUsingBrowserAuthFlowAsync({\n expoWebsiteUrl: getExpoWebsiteBaseUrl(),\n sso,\n });\n const userData = await UserQuery.meUserActorAsync({\n 'expo-session': sessionSecret,\n });\n await setSessionAsync({\n sessionSecret,\n userId: userData.id,\n username: userData.username,\n currentConnection: 'Browser-Flow-Authentication',\n });\n}\n\nexport async function logoutAsync(): Promise<void> {\n currentUser = undefined;\n await Promise.all([\n fs.rm(getDevelopmentCodeSigningDirectory(), { recursive: true, force: true }),\n setSessionAsync(undefined),\n ]);\n Log.log('Logged out');\n}\n"],"names":["ANONYMOUS_USERNAME","browserLoginAsync","getActorDisplayName","getUserAsync","loginAsync","logoutAsync","currentUser","user","__typename","username","firstName","getSession","hasCredentials","getAccessToken","sessionSecret","env","EXPO_OFFLINE","UserQuery","currentUserAsync","undefined","credentials","res","fetchAsync","method","body","JSON","stringify","json","data","userData","meUserActorAsync","setSessionAsync","userId","id","currentConnection","sso","getSessionUsingBrowserAuthFlowAsync","expoWebsiteUrl","getExpoWebsiteBaseUrl","Promise","all","fs","rm","getDevelopmentCodeSigningDirectory","recursive","force","Log","log"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/user/user.ts"],"sourcesContent":["import { promises as fs } from 'fs';\n\nimport { getAccessToken, getSession, setSessionAsync } from './UserSettings';\nimport { getSessionUsingBrowserAuthFlowAsync } from './expoSsoLauncher';\nimport * as Log from '../../log';\nimport { getDevelopmentCodeSigningDirectory } from '../../utils/codesigning';\nimport { env } from '../../utils/env';\nimport { getExpoWebsiteBaseUrl } from '../endpoint';\nimport { UserQuery, type Actor } from '../graphql/queries/UserQuery';\nimport { fetchAsync } from '../rest/client';\n\nconst debug = require('debug')('expo:api:user') as typeof console.log;\n\nlet currentUser: Actor | undefined;\n\nexport const ANONYMOUS_USERNAME = 'anonymous';\n\n/**\n * Resolve the name of the actor, either normal user or robot user.\n * This should be used whenever the \"current user\" needs to be displayed.\n * The display name CANNOT be used as project owner.\n */\nexport function getActorDisplayName(user?: Actor): string {\n switch (user?.__typename) {\n case 'User':\n return user.username;\n case 'SSOUser':\n return user.username;\n case 'Robot':\n return user.firstName ? `${user.firstName} (robot)` : 'robot';\n default:\n return ANONYMOUS_USERNAME;\n }\n}\n\nexport type { Actor };\n\nexport async function getUserAsync(): Promise<Actor | undefined> {\n const hasCredentials = getAccessToken() || getSession()?.sessionSecret;\n if (!env.EXPO_OFFLINE && !currentUser && hasCredentials) {\n const user = await UserQuery.currentUserAsync();\n currentUser = user ?? undefined;\n }\n return currentUser;\n}\n\nexport async function loginAsync(credentials: {\n username: string;\n password: string;\n otp?: string;\n}): Promise<void> {\n const res = await fetchAsync('auth/loginAsync', {\n method: 'POST',\n body: JSON.stringify(credentials),\n });\n const json: any = await res.json();\n const sessionSecret = json.data.sessionSecret;\n\n const userData = await UserQuery.meUserActorAsync({\n 'expo-session': sessionSecret,\n });\n\n await setSessionAsync({\n sessionSecret,\n userId: userData.id,\n username: userData.username,\n currentConnection: 'Username-Password-Authentication',\n });\n}\n\nexport async function browserLoginAsync({ sso = false }): Promise<void> {\n const sessionSecret = await getSessionUsingBrowserAuthFlowAsync({\n expoWebsiteUrl: getExpoWebsiteBaseUrl(),\n sso,\n });\n const userData = await UserQuery.meUserActorAsync({\n 'expo-session': sessionSecret,\n });\n await setSessionAsync({\n sessionSecret,\n userId: userData.id,\n username: userData.username,\n currentConnection: 'Browser-Flow-Authentication',\n });\n}\n\nexport async function logoutAsync(): Promise<void> {\n const sessionSecret = getSession()?.sessionSecret;\n if (sessionSecret) {\n try {\n await fetchAsync('auth/logout', { method: 'POST' });\n } catch (error) {\n debug('Failed to invalidate session secret on server:', error);\n }\n }\n currentUser = undefined;\n await Promise.all([\n fs.rm(getDevelopmentCodeSigningDirectory(), { recursive: true, force: true }),\n setSessionAsync(undefined),\n ]);\n Log.log('Logged out');\n}\n"],"names":["ANONYMOUS_USERNAME","browserLoginAsync","getActorDisplayName","getUserAsync","loginAsync","logoutAsync","debug","require","currentUser","user","__typename","username","firstName","getSession","hasCredentials","getAccessToken","sessionSecret","env","EXPO_OFFLINE","UserQuery","currentUserAsync","undefined","credentials","res","fetchAsync","method","body","JSON","stringify","json","data","userData","meUserActorAsync","setSessionAsync","userId","id","currentConnection","sso","getSessionUsingBrowserAuthFlowAsync","expoWebsiteUrl","getExpoWebsiteBaseUrl","error","Promise","all","fs","rm","getDevelopmentCodeSigningDirectory","recursive","force","Log","log"],"mappings":";;;;;;;;;;;QAeaA;eAAAA;;QAuDSC;eAAAA;;QAhDNC;eAAAA;;QAeMC;eAAAA;;QASAC;eAAAA;;QAwCAC;eAAAA;;;;yBAtFS;;;;;;8BAE6B;iCACR;6DAC/B;6BAC8B;qBAC/B;0BACkB;2BACA;wBACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3B,MAAMC,QAAQC,QAAQ,SAAS;AAE/B,IAAIC;AAEG,MAAMR,qBAAqB;AAO3B,SAASE,oBAAoBO,IAAY;IAC9C,OAAQA,wBAAAA,KAAMC,UAAU;QACtB,KAAK;YACH,OAAOD,KAAKE,QAAQ;QACtB,KAAK;YACH,OAAOF,KAAKE,QAAQ;QACtB,KAAK;YACH,OAAOF,KAAKG,SAAS,GAAG,GAAGH,KAAKG,SAAS,CAAC,QAAQ,CAAC,GAAG;QACxD;YACE,OAAOZ;IACX;AACF;AAIO,eAAeG;QACuBU;IAA3C,MAAMC,iBAAiBC,IAAAA,4BAAc,SAAMF,cAAAA,IAAAA,wBAAU,wBAAVA,YAAcG,aAAa;IACtE,IAAI,CAACC,QAAG,CAACC,YAAY,IAAI,CAACV,eAAeM,gBAAgB;QACvD,MAAML,OAAO,MAAMU,oBAAS,CAACC,gBAAgB;QAC7CZ,cAAcC,QAAQY;IACxB;IACA,OAAOb;AACT;AAEO,eAAeJ,WAAWkB,WAIhC;IACC,MAAMC,MAAM,MAAMC,IAAAA,kBAAU,EAAC,mBAAmB;QAC9CC,QAAQ;QACRC,MAAMC,KAAKC,SAAS,CAACN;IACvB;IACA,MAAMO,OAAY,MAAMN,IAAIM,IAAI;IAChC,MAAMb,gBAAgBa,KAAKC,IAAI,CAACd,aAAa;IAE7C,MAAMe,WAAW,MAAMZ,oBAAS,CAACa,gBAAgB,CAAC;QAChD,gBAAgBhB;IAClB;IAEA,MAAMiB,IAAAA,6BAAe,EAAC;QACpBjB;QACAkB,QAAQH,SAASI,EAAE;QACnBxB,UAAUoB,SAASpB,QAAQ;QAC3ByB,mBAAmB;IACrB;AACF;AAEO,eAAenC,kBAAkB,EAAEoC,MAAM,KAAK,EAAE;IACrD,MAAMrB,gBAAgB,MAAMsB,IAAAA,oDAAmC,EAAC;QAC9DC,gBAAgBC,IAAAA,+BAAqB;QACrCH;IACF;IACA,MAAMN,WAAW,MAAMZ,oBAAS,CAACa,gBAAgB,CAAC;QAChD,gBAAgBhB;IAClB;IACA,MAAMiB,IAAAA,6BAAe,EAAC;QACpBjB;QACAkB,QAAQH,SAASI,EAAE;QACnBxB,UAAUoB,SAASpB,QAAQ;QAC3ByB,mBAAmB;IACrB;AACF;AAEO,eAAe/B;QACEQ;IAAtB,MAAMG,iBAAgBH,cAAAA,IAAAA,wBAAU,wBAAVA,YAAcG,aAAa;IACjD,IAAIA,eAAe;QACjB,IAAI;YACF,MAAMQ,IAAAA,kBAAU,EAAC,eAAe;gBAAEC,QAAQ;YAAO;QACnD,EAAE,OAAOgB,OAAO;YACdnC,MAAM,kDAAkDmC;QAC1D;IACF;IACAjC,cAAca;IACd,MAAMqB,QAAQC,GAAG,CAAC;QAChBC,cAAE,CAACC,EAAE,CAACC,IAAAA,+CAAkC,KAAI;YAAEC,WAAW;YAAMC,OAAO;QAAK;QAC3Ef,IAAAA,6BAAe,EAACZ;KACjB;IACD4B,KAAIC,GAAG,CAAC;AACV"}
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
configAsync
|
|
12
|
+
get configAsync () {
|
|
13
13
|
return configAsync;
|
|
14
14
|
},
|
|
15
|
-
logConfig
|
|
15
|
+
get logConfig () {
|
|
16
16
|
return logConfig;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/config/configAsync.ts"],"sourcesContent":["import { ExpoConfig,
|
|
1
|
+
{"version":3,"sources":["../../../src/config/configAsync.ts"],"sourcesContent":["import type { ExpoConfig, ProjectConfig } from '@expo/config';\nimport { getConfig } from '@expo/config';\nimport assert from 'assert';\nimport util from 'util';\n\nimport * as Log from '../log';\nimport { CommandError } from '../utils/errors';\nimport { setNodeEnv, loadEnvFiles } from '../utils/nodeEnv';\nimport { profile } from '../utils/profile';\n\ntype Options = {\n type?: string;\n full?: boolean;\n json?: boolean;\n};\n\nexport function logConfig(config: ExpoConfig | ProjectConfig) {\n const isObjStr = (str: string): boolean => /^\\w+: {/g.test(str);\n Log.log(\n util.inspect(config, {\n colors: true,\n compact: false,\n // Sort objects to the end so that smaller values aren't hidden between large objects.\n sorted(a: string, b: string) {\n if (isObjStr(a)) return 1;\n if (isObjStr(b)) return -1;\n return 0;\n },\n showHidden: false,\n depth: null,\n })\n );\n}\n\nexport async function configAsync(projectRoot: string, options: Options) {\n const loggingFunctions = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n };\n // Disable logging for this command if the user wants to get JSON output.\n // This will ensure that only the JSON is printed to stdout.\n if (options.json) {\n console.log = function () {};\n console.warn = function () {};\n console.error = function () {};\n }\n setNodeEnv('development');\n loadEnvFiles(projectRoot);\n\n if (options.type) {\n assert.match(options.type, /^(public|prebuild|introspect)$/);\n }\n\n let config: ProjectConfig;\n\n if (options.type === 'prebuild') {\n const { getPrebuildConfigAsync } = await import('@expo/prebuild-config');\n\n config = await profile(getPrebuildConfigAsync)(projectRoot, {\n platforms: ['ios', 'android'],\n });\n } else if (options.type === 'introspect') {\n const { getPrebuildConfigAsync } = await import('@expo/prebuild-config');\n const { compileModsAsync } = await import('@expo/config-plugins/build/plugins/mod-compiler.js');\n\n config = await profile(getPrebuildConfigAsync)(projectRoot, {\n platforms: ['ios', 'android'],\n });\n\n await compileModsAsync(config.exp, {\n projectRoot,\n introspect: true,\n platforms: ['ios', 'android'],\n assertMissingModProviders: false,\n });\n // @ts-ignore\n delete config.modRequest;\n // @ts-ignore\n delete config.modResults;\n } else if (options.type === 'public') {\n config = profile(getConfig)(projectRoot, {\n skipSDKVersionRequirement: true,\n isPublicConfig: true,\n });\n } else if (options.type) {\n throw new CommandError(\n `Invalid option: --type ${options.type}. Valid options are: public, prebuild`\n );\n } else {\n config = profile(getConfig)(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n }\n\n const configOutput = options.full ? config : config.exp;\n\n if (!options.json) {\n Log.log();\n logConfig(configOutput);\n Log.log();\n } else {\n process.stdout.write(JSON.stringify(configOutput));\n\n // Re-enable logging functions for testing.\n console.log = loggingFunctions.log;\n console.warn = loggingFunctions.warn;\n console.error = loggingFunctions.error;\n }\n}\n"],"names":["configAsync","logConfig","config","isObjStr","str","test","Log","log","util","inspect","colors","compact","sorted","a","b","showHidden","depth","projectRoot","options","loggingFunctions","console","warn","error","json","setNodeEnv","loadEnvFiles","type","assert","match","getPrebuildConfigAsync","profile","platforms","compileModsAsync","exp","introspect","assertMissingModProviders","modRequest","modResults","getConfig","skipSDKVersionRequirement","isPublicConfig","CommandError","configOutput","full","process","stdout","write","JSON","stringify"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/config/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\n\nexport const expoConfig: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--full': Boolean,\n '--json': Boolean,\n '--type': String,\n // Aliases\n '-h': '--help',\n '-t': '--type',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Show the project config`,\n chalk`npx expo config {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `--full Include all project config data`,\n `--json Output in JSON format`,\n `-t, --type <public|prebuild|introspect> Type of config to show`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n // Load modules after the help prompt so `npx expo config -h` shows as fast as possible.\n const [\n // ./configAsync\n { configAsync },\n // ../utils/errors\n { logCmdError },\n ] = await Promise.all([import('./configAsync.js'), import('../utils/errors.js')]);\n\n return configAsync(getProjectRoot(args), {\n // Parsed options\n full: args['--full'],\n json: args['--json'],\n type: args['--type'],\n }).catch(logCmdError);\n};\n"],"names":["expoConfig","argv","args","assertArgs","Boolean","String","printHelp","chalk","join","configAsync","logCmdError","Promise","all","getProjectRoot","full","json","type","catch"],"mappings":";;;;;+BAMaA;;;eAAAA;;;;gEALK;;;;;;sBAGoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/C,MAAMA,aAAsB,OAAOC;IACxC,MAAMC,OAAOC,IAAAA,gBAAU,EACrB;QACE,QAAQ;QACR,UAAUC;QACV,UAAUA;QACV,UAAUA;QACV,UAAUC;QACV,UAAU;QACV,MAAM;QACN,MAAM;IACR,GACAJ;IAGF,IAAIC,IAAI,CAAC,SAAS,EAAE;QAClBI,IAAAA,eAAS,EACP,CAAC,uBAAuB,CAAC,EACzBC,IAAAA,gBAAK,CAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,IAAAA,gBAAK,CAAA,CAAC,gHAAgH,CAAC;YACvH,CAAC,wEAAwE,CAAC;YAC1E,CAAC,8DAA8D,CAAC;YAChE,CAAC,+DAA+D,CAAC;YACjE,CAAC,mDAAmD,CAAC;SACtD,CAACC,IAAI,CAAC;IAEX;IAEA,wFAAwF;IACxF,MAAM,CACJ,gBAAgB;IAChB,EAAEC,WAAW,EAAE,EACf,kBAAkB;IAClB,EAAEC,WAAW,EAAE,CAChB,GAAG,MAAMC,QAAQC,GAAG,CAAC;QAAC,mEAAA,QAAO;QAAqB,mEAAA,QAAO;KAAsB;IAEhF,OAAOH,YAAYI,IAAAA,oBAAc,EAACX,OAAO;QACvC,iBAAiB;QACjBY,MAAMZ,IAAI,CAAC,SAAS;QACpBa,MAAMb,IAAI,CAAC,SAAS;QACpBc,MAAMd,IAAI,CAAC,SAAS;IACtB,GAAGe,KAAK,CAACP;AACX"}
|
|
1
|
+
{"version":3,"sources":["../../../src/config/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport type { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\n\nexport const expoConfig: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--full': Boolean,\n '--json': Boolean,\n '--type': String,\n // Aliases\n '-h': '--help',\n '-t': '--type',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Show the project config`,\n chalk`npx expo config {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `--full Include all project config data`,\n `--json Output in JSON format`,\n `-t, --type <public|prebuild|introspect> Type of config to show`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n // Load modules after the help prompt so `npx expo config -h` shows as fast as possible.\n const [\n // ./configAsync\n { configAsync },\n // ../utils/errors\n { logCmdError },\n ] = await Promise.all([import('./configAsync.js'), import('../utils/errors.js')]);\n\n return configAsync(getProjectRoot(args), {\n // Parsed options\n full: args['--full'],\n json: args['--json'],\n type: args['--type'],\n }).catch(logCmdError);\n};\n"],"names":["expoConfig","argv","args","assertArgs","Boolean","String","printHelp","chalk","join","configAsync","logCmdError","Promise","all","getProjectRoot","full","json","type","catch"],"mappings":";;;;;+BAMaA;;;eAAAA;;;;gEALK;;;;;;sBAGoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/C,MAAMA,aAAsB,OAAOC;IACxC,MAAMC,OAAOC,IAAAA,gBAAU,EACrB;QACE,QAAQ;QACR,UAAUC;QACV,UAAUA;QACV,UAAUA;QACV,UAAUC;QACV,UAAU;QACV,MAAM;QACN,MAAM;IACR,GACAJ;IAGF,IAAIC,IAAI,CAAC,SAAS,EAAE;QAClBI,IAAAA,eAAS,EACP,CAAC,uBAAuB,CAAC,EACzBC,IAAAA,gBAAK,CAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,IAAAA,gBAAK,CAAA,CAAC,gHAAgH,CAAC;YACvH,CAAC,wEAAwE,CAAC;YAC1E,CAAC,8DAA8D,CAAC;YAChE,CAAC,+DAA+D,CAAC;YACjE,CAAC,mDAAmD,CAAC;SACtD,CAACC,IAAI,CAAC;IAEX;IAEA,wFAAwF;IACxF,MAAM,CACJ,gBAAgB;IAChB,EAAEC,WAAW,EAAE,EACf,kBAAkB;IAClB,EAAEC,WAAW,EAAE,CAChB,GAAG,MAAMC,QAAQC,GAAG,CAAC;QAAC,mEAAA,QAAO;QAAqB,mEAAA,QAAO;KAAsB;IAEhF,OAAOH,YAAYI,IAAAA,oBAAc,EAACX,OAAO;QACvC,iBAAiB;QACjBY,MAAMZ,IAAI,CAAC,SAAS;QACpBa,MAAMb,IAAI,CAAC,SAAS;QACpBc,MAAMd,IAAI,CAAC,SAAS;IACtB,GAAGe,KAAK,CAACP;AACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/customize/customizeAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport { queryAndGenerateAsync, selectAndGenerateAsync } from './generate';\nimport { Options } from './resolveOptions';\nimport { DestinationResolutionProps } from './templates';\nimport { getRouterDirectoryModuleIdWithManifest } from '../start/server/metro/router';\nimport { getPlatformBundlers } from '../start/server/platformBundlers';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { setNodeEnv, loadEnvFiles } from '../utils/nodeEnv';\n\nexport async function customizeAsync(files: string[], options: Options, extras: any[]) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo customize` from a subdirectory of the project.\n const projectRoot = findUpProjectRootOrAssert(process.cwd());\n\n loadEnvFiles(projectRoot);\n\n // Get the static path (defaults to 'web/')\n // Doesn't matter if expo is installed or which mode is used.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const routerRoot = getRouterDirectoryModuleIdWithManifest(projectRoot, exp);\n\n // Create the destination resolution props which are used in both\n // the query and select functions.\n const props: DestinationResolutionProps = {\n webStaticPath:\n (exp.web?.staticPath ?? getPlatformBundlers(projectRoot, exp).web === 'webpack')\n ? 'web'\n : 'public',\n appDirPath: routerRoot,\n };\n\n // If the user provided files, we'll generate them without prompting.\n if (files.length) {\n return queryAndGenerateAsync(projectRoot, {\n files,\n props,\n extras,\n });\n }\n\n // Otherwise, we'll prompt the user to select which files to generate.\n await selectAndGenerateAsync(projectRoot, {\n props,\n extras,\n });\n}\n"],"names":["customizeAsync","files","options","extras","exp","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","loadEnvFiles","getConfig","skipSDKVersionRequirement","routerRoot","getRouterDirectoryModuleIdWithManifest","props","webStaticPath","web","staticPath","getPlatformBundlers","appDirPath","length","queryAndGenerateAsync","selectAndGenerateAsync"],"mappings":";;;;+BAUsBA;;;eAAAA;;;;yBAVI;;;;;;0BAEoC;wBAGP;kCACnB;wBACM;yBACD;AAElC,eAAeA,eAAeC,KAAe,EAAEC,OAAgB,EAAEC,MAAa;QAoB9EC;IAnBLC,IAAAA,mBAAU,EAAC;IACX,0EAA0E;IAC1E,qFAAqF;IACrF,MAAMC,cAAcC,IAAAA,iCAAyB,EAACC,QAAQC,GAAG;IAEzDC,IAAAA,qBAAY,EAACJ;IAEb,2CAA2C;IAC3C,6DAA6D;IAC7D,MAAM,EAAEF,GAAG,EAAE,GAAGO,IAAAA,mBAAS,EAACL,aAAa;QACrCM,2BAA2B;IAC7B;IAEA,MAAMC,aAAaC,IAAAA,8CAAsC,EAACR,aAAaF;IAEvE,iEAAiE;IACjE,kCAAkC;IAClC,MAAMW,QAAoC;QACxCC,eACE,AAACZ,EAAAA,WAAAA,IAAIa,GAAG,qBAAPb,SAASc,UAAU,KAAIC,IAAAA,qCAAmB,EAACb,aAAaF,KAAKa,GAAG,KAAK,YAClE,QACA;QACNG,YAAYP;IACd;IAEA,qEAAqE;IACrE,IAAIZ,MAAMoB,MAAM,EAAE;QAChB,OAAOC,IAAAA,+BAAqB,EAAChB,aAAa;YACxCL;YACAc;YACAZ;QACF;IACF;IAEA,sEAAsE;IACtE,MAAMoB,IAAAA,gCAAsB,EAACjB,aAAa;QACxCS;QACAZ;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../../src/customize/customizeAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport { queryAndGenerateAsync, selectAndGenerateAsync } from './generate';\nimport type { Options } from './resolveOptions';\nimport type { DestinationResolutionProps } from './templates';\nimport { getRouterDirectoryModuleIdWithManifest } from '../start/server/metro/router';\nimport { getPlatformBundlers } from '../start/server/platformBundlers';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { setNodeEnv, loadEnvFiles } from '../utils/nodeEnv';\n\nexport async function customizeAsync(files: string[], options: Options, extras: any[]) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo customize` from a subdirectory of the project.\n const projectRoot = findUpProjectRootOrAssert(process.cwd());\n\n loadEnvFiles(projectRoot);\n\n // Get the static path (defaults to 'web/')\n // Doesn't matter if expo is installed or which mode is used.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const routerRoot = getRouterDirectoryModuleIdWithManifest(projectRoot, exp);\n\n // Create the destination resolution props which are used in both\n // the query and select functions.\n const props: DestinationResolutionProps = {\n webStaticPath:\n (exp.web?.staticPath ?? getPlatformBundlers(projectRoot, exp).web === 'webpack')\n ? 'web'\n : 'public',\n appDirPath: routerRoot,\n };\n\n // If the user provided files, we'll generate them without prompting.\n if (files.length) {\n return queryAndGenerateAsync(projectRoot, {\n files,\n props,\n extras,\n });\n }\n\n // Otherwise, we'll prompt the user to select which files to generate.\n await selectAndGenerateAsync(projectRoot, {\n props,\n extras,\n });\n}\n"],"names":["customizeAsync","files","options","extras","exp","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","loadEnvFiles","getConfig","skipSDKVersionRequirement","routerRoot","getRouterDirectoryModuleIdWithManifest","props","webStaticPath","web","staticPath","getPlatformBundlers","appDirPath","length","queryAndGenerateAsync","selectAndGenerateAsync"],"mappings":";;;;+BAUsBA;;;eAAAA;;;;yBAVI;;;;;;0BAEoC;wBAGP;kCACnB;wBACM;yBACD;AAElC,eAAeA,eAAeC,KAAe,EAAEC,OAAgB,EAAEC,MAAa;QAoB9EC;IAnBLC,IAAAA,mBAAU,EAAC;IACX,0EAA0E;IAC1E,qFAAqF;IACrF,MAAMC,cAAcC,IAAAA,iCAAyB,EAACC,QAAQC,GAAG;IAEzDC,IAAAA,qBAAY,EAACJ;IAEb,2CAA2C;IAC3C,6DAA6D;IAC7D,MAAM,EAAEF,GAAG,EAAE,GAAGO,IAAAA,mBAAS,EAACL,aAAa;QACrCM,2BAA2B;IAC7B;IAEA,MAAMC,aAAaC,IAAAA,8CAAsC,EAACR,aAAaF;IAEvE,iEAAiE;IACjE,kCAAkC;IAClC,MAAMW,QAAoC;QACxCC,eACE,AAACZ,EAAAA,WAAAA,IAAIa,GAAG,qBAAPb,SAASc,UAAU,KAAIC,IAAAA,qCAAmB,EAACb,aAAaF,KAAKa,GAAG,KAAK,YAClE,QACA;QACNG,YAAYP;IACd;IAEA,qEAAqE;IACrE,IAAIZ,MAAMoB,MAAM,EAAE;QAChB,OAAOC,IAAAA,+BAAqB,EAAChB,aAAa;YACxCL;YACAc;YACAZ;QACF;IACF;IAEA,sEAAsE;IACtE,MAAMoB,IAAAA,gCAAsB,EAACjB,aAAa;QACxCS;QACAZ;IACF;AACF"}
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
queryAndGenerateAsync
|
|
12
|
+
get queryAndGenerateAsync () {
|
|
13
13
|
return queryAndGenerateAsync;
|
|
14
14
|
},
|
|
15
|
-
selectAndGenerateAsync
|
|
15
|
+
get selectAndGenerateAsync () {
|
|
16
16
|
return selectAndGenerateAsync;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -81,7 +81,10 @@ async function generateAsync(projectRoot, { answer, props, extras }) {
|
|
|
81
81
|
return (0, _dir.copyAsync)(template.file(projectRoot), projectFilePath);
|
|
82
82
|
}));
|
|
83
83
|
// Install dependencies
|
|
84
|
-
const packages = answer.map((file)=>
|
|
84
|
+
const packages = answer.map((file)=>{
|
|
85
|
+
var _TEMPLATES_file;
|
|
86
|
+
return ((_TEMPLATES_file = _templates.TEMPLATES[file]) == null ? void 0 : _TEMPLATES_file.dependencies) ?? [];
|
|
87
|
+
}).flat().filter((pkg)=>!_resolvefrom().default.silent(projectRoot, pkg));
|
|
85
88
|
if (packages.length) {
|
|
86
89
|
_log.Log.debug('Installing ' + packages.join(', '));
|
|
87
90
|
await (0, _installAsync.installAsync)(packages, {}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/customize/generate.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { DestinationResolutionProps
|
|
1
|
+
{"version":3,"sources":["../../../src/customize/generate.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport type { DestinationResolutionProps } from './templates';\nimport { selectTemplatesAsync, TEMPLATES } from './templates';\nimport { installAsync } from '../install/installAsync';\nimport { Log } from '../log';\nimport { copyAsync } from '../utils/dir';\nimport { CommandError } from '../utils/errors';\n\nexport async function queryAndGenerateAsync(\n projectRoot: string,\n {\n files,\n props,\n extras,\n }: {\n files: string[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const valid = files.filter(\n (file) => !!TEMPLATES.find((template) => template.destination(props) === file)\n );\n\n if (valid.length !== files.length) {\n const diff = files.filter(\n (file) => !TEMPLATES.find((template) => template.destination(props) === file)\n );\n throw new CommandError(\n `Invalid files: ${diff.join(', ')}. Allowed: ${TEMPLATES.map((template) =>\n template.destination(props)\n ).join(', ')}`\n );\n }\n\n if (!valid.length) {\n return;\n }\n Log.log(`Generating: ${valid.join(', ')}`);\n return generateAsync(projectRoot, {\n answer: files.map((file) =>\n TEMPLATES.findIndex((template) => template.destination(props) === file)\n ),\n props,\n extras,\n });\n}\n\n/** Select templates to generate then generate and install. */\nexport async function selectAndGenerateAsync(\n projectRoot: string,\n {\n props,\n extras,\n }: {\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const answer = await selectTemplatesAsync(projectRoot, props);\n\n if (!answer?.length) {\n Log.exit('\\n\\u203A Exiting with no change...', 0);\n }\n\n await generateAsync(projectRoot, {\n answer,\n props,\n extras,\n });\n}\n\nasync function generateAsync(\n projectRoot: string,\n {\n answer,\n props,\n extras,\n }: {\n answer: number[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n // Copy files\n await Promise.all(\n answer.map(async (file) => {\n const template = TEMPLATES[file]!;\n\n if (template.configureAsync) {\n if (await template.configureAsync(projectRoot)) {\n return;\n }\n }\n\n const projectFilePath = path.resolve(projectRoot, template.destination(props));\n // copy the file from template\n return copyAsync(template.file(projectRoot), projectFilePath);\n })\n );\n\n // Install dependencies\n const packages = answer\n .map((file) => TEMPLATES[file]?.dependencies ?? [])\n .flat()\n .filter((pkg) => !resolveFrom.silent(projectRoot, pkg));\n if (packages.length) {\n Log.debug('Installing ' + packages.join(', '));\n await installAsync(packages, {}, ['--dev', ...extras]);\n }\n}\n"],"names":["queryAndGenerateAsync","selectAndGenerateAsync","projectRoot","files","props","extras","valid","filter","file","TEMPLATES","find","template","destination","length","diff","CommandError","join","map","Log","log","generateAsync","answer","findIndex","selectTemplatesAsync","exit","Promise","all","configureAsync","projectFilePath","path","resolve","copyAsync","packages","dependencies","flat","pkg","resolveFrom","silent","debug","installAsync"],"mappings":";;;;;;;;;;;QAUsBA;eAAAA;;QA0CAC;eAAAA;;;;gEApDL;;;;;;;gEACO;;;;;;2BAGwB;8BACnB;qBACT;qBACM;wBACG;;;;;;AAEtB,eAAeD,sBACpBE,WAAmB,EACnB,EACEC,KAAK,EACLC,KAAK,EACLC,MAAM,EAMP;IAED,MAAMC,QAAQH,MAAMI,MAAM,CACxB,CAACC,OAAS,CAAC,CAACC,oBAAS,CAACC,IAAI,CAAC,CAACC,WAAaA,SAASC,WAAW,CAACR,WAAWI;IAG3E,IAAIF,MAAMO,MAAM,KAAKV,MAAMU,MAAM,EAAE;QACjC,MAAMC,OAAOX,MAAMI,MAAM,CACvB,CAACC,OAAS,CAACC,oBAAS,CAACC,IAAI,CAAC,CAACC,WAAaA,SAASC,WAAW,CAACR,WAAWI;QAE1E,MAAM,IAAIO,oBAAY,CACpB,CAAC,eAAe,EAAED,KAAKE,IAAI,CAAC,MAAM,WAAW,EAAEP,oBAAS,CAACQ,GAAG,CAAC,CAACN,WAC5DA,SAASC,WAAW,CAACR,QACrBY,IAAI,CAAC,OAAO;IAElB;IAEA,IAAI,CAACV,MAAMO,MAAM,EAAE;QACjB;IACF;IACAK,QAAG,CAACC,GAAG,CAAC,CAAC,YAAY,EAAEb,MAAMU,IAAI,CAAC,OAAO;IACzC,OAAOI,cAAclB,aAAa;QAChCmB,QAAQlB,MAAMc,GAAG,CAAC,CAACT,OACjBC,oBAAS,CAACa,SAAS,CAAC,CAACX,WAAaA,SAASC,WAAW,CAACR,WAAWI;QAEpEJ;QACAC;IACF;AACF;AAGO,eAAeJ,uBACpBC,WAAmB,EACnB,EACEE,KAAK,EACLC,MAAM,EAKP;IAED,MAAMgB,SAAS,MAAME,IAAAA,+BAAoB,EAACrB,aAAaE;IAEvD,IAAI,EAACiB,0BAAAA,OAAQR,MAAM,GAAE;QACnBK,QAAG,CAACM,IAAI,CAAC,sCAAsC;IACjD;IAEA,MAAMJ,cAAclB,aAAa;QAC/BmB;QACAjB;QACAC;IACF;AACF;AAEA,eAAee,cACblB,WAAmB,EACnB,EACEmB,MAAM,EACNjB,KAAK,EACLC,MAAM,EAMP;IAED,aAAa;IACb,MAAMoB,QAAQC,GAAG,CACfL,OAAOJ,GAAG,CAAC,OAAOT;QAChB,MAAMG,WAAWF,oBAAS,CAACD,KAAK;QAEhC,IAAIG,SAASgB,cAAc,EAAE;YAC3B,IAAI,MAAMhB,SAASgB,cAAc,CAACzB,cAAc;gBAC9C;YACF;QACF;QAEA,MAAM0B,kBAAkBC,eAAI,CAACC,OAAO,CAAC5B,aAAaS,SAASC,WAAW,CAACR;QACvE,8BAA8B;QAC9B,OAAO2B,IAAAA,cAAS,EAACpB,SAASH,IAAI,CAACN,cAAc0B;IAC/C;IAGF,uBAAuB;IACvB,MAAMI,WAAWX,OACdJ,GAAG,CAAC,CAACT;YAASC;eAAAA,EAAAA,kBAAAA,oBAAS,CAACD,KAAK,qBAAfC,gBAAiBwB,YAAY,KAAI,EAAE;OACjDC,IAAI,GACJ3B,MAAM,CAAC,CAAC4B,MAAQ,CAACC,sBAAW,CAACC,MAAM,CAACnC,aAAaiC;IACpD,IAAIH,SAASnB,MAAM,EAAE;QACnBK,QAAG,CAACoB,KAAK,CAAC,gBAAgBN,SAAShB,IAAI,CAAC;QACxC,MAAMuB,IAAAA,0BAAY,EAACP,UAAU,CAAC,GAAG;YAAC;eAAY3B;SAAO;IACvD;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/customize/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertWithOptionsArgs, printHelp } from '../utils/args';\n\nexport const expoCustomize: Command = async (argv) => {\n const args = assertWithOptionsArgs(\n {\n // Other options are parsed manually.\n '--help': Boolean,\n // Aliases\n '-h': '--help',\n },\n {\n argv,\n // Allow other options, we'll throw an error if unexpected values are passed.\n permissive: true,\n }\n );\n\n if (args['--help']) {\n printHelp(\n `Generate static project files`,\n chalk`npx expo customize {dim [files...] -- [options]}`,\n [\n chalk`[files...] List of files to generate`,\n chalk`[options] Options to pass to the install command`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n // Load modules after the help prompt so `npx expo install -h` shows as fast as possible.\n const { customizeAsync } = require('./customizeAsync') as typeof import('./customizeAsync');\n const { logCmdError } = require('../utils/errors') as typeof import('../utils/errors');\n const { resolveArgsAsync } = require('./resolveOptions') as typeof import('./resolveOptions');\n\n const { variadic, options, extras } = await resolveArgsAsync(process.argv.slice(3)).catch(\n logCmdError\n );\n return customizeAsync(variadic, options, extras).catch(logCmdError);\n};\n"],"names":["expoCustomize","argv","args","assertWithOptionsArgs","Boolean","permissive","printHelp","chalk","join","customizeAsync","require","logCmdError","resolveArgsAsync","variadic","options","extras","process","slice","catch"],"mappings":";;;;;+BAMaA;;;eAAAA;;;;gEALK;;;;;;sBAG+B;;;;;;AAE1C,MAAMA,gBAAyB,OAAOC;IAC3C,MAAMC,OAAOC,IAAAA,2BAAqB,EAChC;QACE,qCAAqC;QACrC,UAAUC;QACV,UAAU;QACV,MAAM;IACR,GACA;QACEH;QACA,6EAA6E;QAC7EI,YAAY;IACd;IAGF,IAAIH,IAAI,CAAC,SAAS,EAAE;QAClBI,IAAAA,eAAS,EACP,CAAC,6BAA6B,CAAC,EAC/BC,IAAAA,gBAAK,CAAA,CAAC,gDAAgD,CAAC,EACvD;YACEA,IAAAA,gBAAK,CAAA,CAAC,qCAAqC,CAAC;YAC5CA,IAAAA,gBAAK,CAAA,CAAC,kDAAkD,CAAC;YACzD,CAAC,sBAAsB,CAAC;SACzB,CAACC,IAAI,CAAC;IAEX;IAEA,yFAAyF;IACzF,MAAM,EAAEC,cAAc,EAAE,GAAGC,QAAQ;IACnC,MAAM,EAAEC,WAAW,EAAE,GAAGD,QAAQ;IAChC,MAAM,EAAEE,gBAAgB,EAAE,GAAGF,QAAQ;IAErC,MAAM,EAAEG,QAAQ,EAAEC,OAAO,EAAEC,MAAM,EAAE,GAAG,MAAMH,iBAAiBI,QAAQf,IAAI,CAACgB,KAAK,CAAC,IAAIC,KAAK,CACvFP;IAEF,OAAOF,eAAeI,UAAUC,SAASC,QAAQG,KAAK,CAACP;AACzD"}
|
|
1
|
+
{"version":3,"sources":["../../../src/customize/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport type { Command } from '../../bin/cli';\nimport { assertWithOptionsArgs, printHelp } from '../utils/args';\n\nexport const expoCustomize: Command = async (argv) => {\n const args = assertWithOptionsArgs(\n {\n // Other options are parsed manually.\n '--help': Boolean,\n // Aliases\n '-h': '--help',\n },\n {\n argv,\n // Allow other options, we'll throw an error if unexpected values are passed.\n permissive: true,\n }\n );\n\n if (args['--help']) {\n printHelp(\n `Generate static project files`,\n chalk`npx expo customize {dim [files...] -- [options]}`,\n [\n chalk`[files...] List of files to generate`,\n chalk`[options] Options to pass to the install command`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n // Load modules after the help prompt so `npx expo install -h` shows as fast as possible.\n const { customizeAsync } = require('./customizeAsync') as typeof import('./customizeAsync');\n const { logCmdError } = require('../utils/errors') as typeof import('../utils/errors');\n const { resolveArgsAsync } = require('./resolveOptions') as typeof import('./resolveOptions');\n\n const { variadic, options, extras } = await resolveArgsAsync(process.argv.slice(3)).catch(\n logCmdError\n );\n return customizeAsync(variadic, options, extras).catch(logCmdError);\n};\n"],"names":["expoCustomize","argv","args","assertWithOptionsArgs","Boolean","permissive","printHelp","chalk","join","customizeAsync","require","logCmdError","resolveArgsAsync","variadic","options","extras","process","slice","catch"],"mappings":";;;;;+BAMaA;;;eAAAA;;;;gEALK;;;;;;sBAG+B;;;;;;AAE1C,MAAMA,gBAAyB,OAAOC;IAC3C,MAAMC,OAAOC,IAAAA,2BAAqB,EAChC;QACE,qCAAqC;QACrC,UAAUC;QACV,UAAU;QACV,MAAM;IACR,GACA;QACEH;QACA,6EAA6E;QAC7EI,YAAY;IACd;IAGF,IAAIH,IAAI,CAAC,SAAS,EAAE;QAClBI,IAAAA,eAAS,EACP,CAAC,6BAA6B,CAAC,EAC/BC,IAAAA,gBAAK,CAAA,CAAC,gDAAgD,CAAC,EACvD;YACEA,IAAAA,gBAAK,CAAA,CAAC,qCAAqC,CAAC;YAC5CA,IAAAA,gBAAK,CAAA,CAAC,kDAAkD,CAAC;YACzD,CAAC,sBAAsB,CAAC;SACzB,CAACC,IAAI,CAAC;IAEX;IAEA,yFAAyF;IACzF,MAAM,EAAEC,cAAc,EAAE,GAAGC,QAAQ;IACnC,MAAM,EAAEC,WAAW,EAAE,GAAGD,QAAQ;IAChC,MAAM,EAAEE,gBAAgB,EAAE,GAAGF,QAAQ;IAErC,MAAM,EAAEG,QAAQ,EAAEC,OAAO,EAAEC,MAAM,EAAE,GAAG,MAAMH,iBAAiBI,QAAQf,IAAI,CAACgB,KAAK,CAAC,IAAIC,KAAK,CACvFP;IAEF,OAAOF,eAAeI,UAAUC,SAASC,QAAQG,KAAK,CAACP;AACzD"}
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
TEMPLATES
|
|
12
|
+
get TEMPLATES () {
|
|
13
13
|
return TEMPLATES;
|
|
14
14
|
},
|
|
15
|
-
selectTemplatesAsync
|
|
15
|
+
get selectTemplatesAsync () {
|
|
16
16
|
return selectTemplatesAsync;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -85,9 +85,7 @@ const TEMPLATES = [
|
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
id: 'metro.config.js',
|
|
88
|
-
dependencies: [
|
|
89
|
-
'@expo/metro-config'
|
|
90
|
-
],
|
|
88
|
+
dependencies: [],
|
|
91
89
|
destination: ()=>'metro.config.js',
|
|
92
90
|
file: (projectRoot)=>importFromVendor(projectRoot, 'metro.config.js')
|
|
93
91
|
},
|