@expo/cli 1.0.0-canary-20250320-7a205d3 → 1.0.0-canary-20250402-161f57b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +93 -91
- package/build/bin/cli.map +1 -1
- package/build/metro-require/require.js +53 -52
- package/build/src/api/endpoint.js +6 -2
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js +5 -3
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +16 -12
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +6 -4
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +5 -3
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +7 -5
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/graphql/client.js +32 -26
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/queries/AppQuery.js +6 -4
- package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
- package/build/src/api/graphql/queries/UserQuery.js +5 -3
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/graphql/types/App.js +3 -1
- package/build/src/api/graphql/types/App.js.map +1 -1
- package/build/src/api/rest/cache/FileSystemResponseCache.js +36 -32
- package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/ResponseCache.js +20 -12
- package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js +13 -11
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +55 -37
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/client.types.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +5 -3
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js +5 -3
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js +11 -7
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js +5 -3
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithUserAgent.js +8 -6
- package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
- package/build/src/api/settings.js +7 -5
- package/build/src/api/settings.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +23 -17
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +53 -31
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +27 -21
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +30 -26
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +35 -29
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +44 -30
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +29 -23
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +25 -21
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js +8 -6
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +20 -16
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js +14 -12
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/resolveOptions.js +4 -2
- package/build/src/customize/resolveOptions.js.map +1 -1
- package/build/src/customize/templates.js +58 -54
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +11 -7
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +11 -9
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEager.js +8 -6
- package/build/src/export/embed/exportEager.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +72 -62
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/exportServer.js +57 -55
- package/build/src/export/embed/exportServer.js.map +1 -1
- package/build/src/export/embed/index.js +44 -40
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +44 -36
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +39 -27
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +68 -64
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +34 -26
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +13 -9
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportDomComponents.js +53 -45
- package/build/src/export/exportDomComponents.js.map +1 -1
- package/build/src/export/exportHermes.js +75 -53
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +73 -62
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +33 -27
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +7 -5
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js +11 -9
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/html.js +10 -6
- package/build/src/export/html.js.map +1 -1
- package/build/src/export/index.js +32 -28
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +36 -30
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +64 -34
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +10 -6
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +28 -24
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +50 -46
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +13 -11
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js +19 -15
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/web/resolveOptions.js +5 -3
- package/build/src/export/web/resolveOptions.js.map +1 -1
- package/build/src/export/writeContents.js +4 -2
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/graphql/generated.js +705 -479
- package/build/src/graphql/generated.js.map +1 -1
- package/build/src/install/applyPlugins.js +11 -7
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/checkPackages.js +26 -22
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +16 -12
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js +18 -16
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +32 -26
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +22 -18
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/resolveOptions.js +21 -19
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +18 -14
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js +14 -12
- package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
- package/build/src/lint/ESlintPrerequisite.js +50 -44
- package/build/src/lint/ESlintPrerequisite.js.map +1 -1
- package/build/src/lint/index.js +12 -8
- package/build/src/lint/index.js.map +1 -1
- package/build/src/lint/lintAsync.js +10 -8
- package/build/src/lint/lintAsync.js.map +1 -1
- package/build/src/log.js +36 -16
- package/build/src/log.js.map +1 -1
- package/build/src/login/index.js +24 -20
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js +11 -7
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +38 -26
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +18 -14
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +17 -13
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js +6 -4
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +36 -32
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +29 -25
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +43 -37
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +70 -53
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +36 -32
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +19 -13
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +53 -39
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +12 -8
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/register/index.js +11 -7
- package/build/src/register/index.js.map +1 -1
- package/build/src/register/registerAsync.js +5 -3
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/index.js +36 -32
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveDevice.js +10 -8
- package/build/src/run/android/resolveDevice.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +18 -16
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +17 -15
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +12 -10
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +4 -2
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +23 -21
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js +7 -5
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +13 -7
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js +27 -23
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +80 -60
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.types.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +69 -63
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +29 -26
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +28 -25
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +29 -26
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +22 -21
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +32 -29
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +28 -24
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +7 -4
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +28 -27
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +23 -17
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +146 -132
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +29 -21
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +29 -21
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +34 -22
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +27 -17
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +53 -39
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +13 -9
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +27 -19
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/settings.js +9 -5
- package/build/src/run/ios/codeSigning/settings.js.map +1 -1
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +14 -12
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +27 -21
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +40 -36
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +23 -17
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/appleDestinations.js +38 -36
- package/build/src/run/ios/options/appleDestinations.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +20 -16
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +30 -24
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +31 -23
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +7 -5
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js +7 -5
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +48 -44
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/ios/validateExternalBinary.js +24 -22
- package/build/src/run/ios/validateExternalBinary.js.map +1 -1
- package/build/src/run/resolveBundlerProps.js +4 -2
- package/build/src/run/resolveBundlerProps.js.map +1 -1
- package/build/src/run/startBundler.js +16 -12
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/serve/index.js +20 -16
- package/build/src/serve/index.js.map +1 -1
- package/build/src/serve/serveAsync.js +36 -32
- package/build/src/serve/serveAsync.js.map +1 -1
- package/build/src/start/detectDevClient.js +13 -9
- package/build/src/start/detectDevClient.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +12 -7
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/SecurityBinPrerequisite.js +13 -11
- package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +23 -19
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +23 -19
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +51 -45
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +18 -16
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +23 -19
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +31 -25
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +25 -17
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +40 -32
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/resolvePackages.js +32 -26
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +41 -31
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +34 -29
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/ngrok/NgrokResolver.js +12 -8
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +32 -28
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +23 -17
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +33 -27
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +46 -42
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js +18 -14
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +94 -80
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +44 -40
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +65 -61
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +6 -4
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js +10 -6
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +25 -20
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js +17 -15
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +39 -35
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +18 -16
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +24 -20
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +17 -17
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidSdk.js +11 -9
- package/build/src/start/platforms/android/AndroidSdk.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js +26 -22
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +121 -83
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +20 -12
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +36 -26
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +7 -5
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +36 -28
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +19 -15
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +21 -19
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +37 -31
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +12 -12
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/assertSystemRequirements.js +9 -7
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -1
- package/build/src/start/platforms/ios/devicectl.js +88 -74
- package/build/src/start/platforms/ios/devicectl.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +22 -18
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +29 -19
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +14 -10
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +102 -74
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +57 -52
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +22 -18
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +19 -9
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/project/dotExpo.js +15 -11
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/project/settings.js +4 -2
- package/build/src/start/project/settings.js.map +1 -1
- package/build/src/start/resolveOptions.js +48 -40
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +55 -51
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/AsyncWsTunnel.js +37 -33
- package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +81 -79
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +42 -38
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +18 -14
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +18 -14
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/ReactDevToolsProxy.js +16 -10
- package/build/src/start/server/ReactDevToolsProxy.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +36 -33
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +30 -22
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +9 -5
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +293 -280
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +63 -56
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +39 -33
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
- package/build/src/start/server/metro/createExpoFallbackResolver.js +13 -11
- package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +47 -41
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +31 -27
- package/build/src/start/server/metro/createJResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +110 -98
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +34 -30
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js +13 -11
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js.map +1 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js +3 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
- package/build/src/start/server/metro/debugging/attachAtlas.js +26 -22
- package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +19 -17
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js +25 -31
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
- package/build/src/start/server/metro/debugging/getDebuggerType.js +6 -4
- package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +14 -8
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +7 -5
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +8 -6
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +7 -5
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js +14 -12
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js +14 -10
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js +6 -4
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
- package/build/src/start/server/metro/debugging/types.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createEventSocket.js +18 -16
- package/build/src/start/server/metro/dev-server/createEventSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMessageSocket.js +23 -21
- package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +23 -21
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js +4 -2
- package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/createSocketMap.js +4 -2
- package/build/src/start/server/metro/dev-server/utils/createSocketMap.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js +8 -4
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
- package/build/src/start/server/metro/externals.js +33 -25
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +28 -12
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +11 -9
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +24 -20
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +87 -81
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js +40 -36
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +20 -14
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js +10 -6
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +88 -78
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroErrors.js +8 -4
- package/build/src/start/server/metro/metroErrors.js.map +1 -1
- package/build/src/start/server/metro/metroPrivateServer.js +9 -7
- package/build/src/start/server/metro/metroPrivateServer.js.map +1 -1
- package/build/src/start/server/metro/metroVirtualModules.js +10 -8
- package/build/src/start/server/metro/metroVirtualModules.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +24 -22
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/router.js +48 -32
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +24 -22
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +24 -22
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/symbolicate.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +35 -29
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +150 -140
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +49 -39
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js +8 -6
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +17 -15
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +32 -31
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +22 -19
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DomComponentsMiddleware.js +33 -27
- package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +61 -57
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +15 -9
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +16 -15
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +4 -2
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +34 -31
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +64 -56
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js +23 -19
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +20 -19
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +11 -9
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js +17 -11
- package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js.map +1 -1
- package/build/src/start/server/middleware/inspector/CdpClient.js +12 -10
- package/build/src/start/server/middleware/inspector/CdpClient.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +35 -27
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +21 -19
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +6 -2
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +120 -96
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/mutations.js +7 -3
- package/build/src/start/server/middleware/mutations.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js +26 -18
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +23 -15
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js +11 -9
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
- package/build/src/start/server/middleware/server.types.js.map +1 -1
- package/build/src/start/server/openPlatforms.js +10 -8
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +13 -11
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +58 -50
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +11 -7
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +72 -50
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +21 -19
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +36 -28
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +28 -24
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +52 -46
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +15 -11
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/server/webpack/formatWebpackMessages.js +28 -26
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +18 -12
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +18 -12
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +31 -27
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +20 -17
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/ansi.js +7 -5
- package/build/src/utils/ansi.js.map +1 -1
- package/build/src/utils/args.js +24 -14
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/array.js +18 -6
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +54 -46
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +79 -69
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/createFileTransform.js +16 -12
- package/build/src/utils/createFileTransform.js.map +1 -1
- package/build/src/utils/createTempPath.js +12 -8
- package/build/src/utils/createTempPath.js.map +1 -1
- package/build/src/utils/delay.js +12 -6
- package/build/src/utils/delay.js.map +1 -1
- package/build/src/utils/dir.js +40 -22
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +10 -8
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +27 -23
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +41 -35
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +63 -59
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +37 -30
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/exit.js +35 -31
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/expoUpdatesCli.js +32 -22
- package/build/src/utils/expoUpdatesCli.js.map +1 -1
- package/build/src/utils/fetch.js +8 -4
- package/build/src/utils/fetch.js.map +1 -1
- package/build/src/utils/filePath.js +10 -6
- package/build/src/utils/filePath.js.map +1 -1
- package/build/src/utils/findUp.js +13 -9
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/fn.js +6 -2
- package/build/src/utils/fn.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +41 -35
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +29 -21
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +26 -20
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +8 -4
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/interactive.js +3 -1
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/ip.js +21 -19
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/isModuleSymlinked.js +11 -9
- package/build/src/utils/isModuleSymlinked.js.map +1 -1
- package/build/src/utils/jsonSchemaDeref.js +20 -18
- package/build/src/utils/jsonSchemaDeref.js.map +1 -1
- package/build/src/utils/link.js +17 -13
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +46 -28
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +16 -10
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +10 -6
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/multipartMixed.js +13 -11
- package/build/src/utils/multipartMixed.js.map +1 -1
- package/build/src/utils/nodeEnv.js +12 -6
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/nodeModules.js +10 -8
- package/build/src/utils/nodeModules.js.map +1 -1
- package/build/src/utils/npm.js +49 -35
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js +11 -5
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/open.js +10 -8
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +13 -7
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +21 -15
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +43 -33
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +11 -7
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/progress.js +11 -5
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +47 -29
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/resolveArgs.js +36 -24
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/scheme.js +40 -32
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/stream.js +5 -3
- package/build/src/utils/stream.js.map +1 -1
- package/build/src/utils/strings.js +6 -4
- package/build/src/utils/strings.js.map +1 -1
- package/build/src/utils/tar.js +18 -14
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/Telemetry.js +29 -27
- package/build/src/utils/telemetry/Telemetry.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +15 -13
- package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchDetachedClient.js +26 -22
- package/build/src/utils/telemetry/clients/FetchDetachedClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js +10 -10
- package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
- package/build/src/utils/telemetry/events.js +4 -2
- package/build/src/utils/telemetry/events.js.map +1 -1
- package/build/src/utils/telemetry/index.js +25 -29
- package/build/src/utils/telemetry/index.js.map +1 -1
- package/build/src/utils/telemetry/types.js.map +1 -1
- package/build/src/utils/telemetry/utils/constants.js +8 -4
- package/build/src/utils/telemetry/utils/constants.js.map +1 -1
- package/build/src/utils/telemetry/utils/context.js +18 -14
- package/build/src/utils/telemetry/utils/context.js.map +1 -1
- package/build/src/utils/template.js +6 -4
- package/build/src/utils/template.js.map +1 -1
- package/build/src/utils/terminal.js +4 -2
- package/build/src/utils/terminal.js.map +1 -1
- package/build/src/utils/tsconfig/evaluateTsConfig.js +21 -17
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +18 -14
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +7 -5
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +14 -12
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
- package/build/src/utils/url.js +23 -13
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +108 -86
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +22 -16
- package/build/src/utils/variadic.js.map +1 -1
- package/build/src/whoami/index.js +11 -7
- package/build/src/whoami/index.js.map +1 -1
- package/build/src/whoami/whoamiAsync.js +11 -7
- package/build/src/whoami/whoamiAsync.js.map +1 -1
- package/package.json +17 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/run/ios/appleDevice/ClientManager.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Socket } from 'net';\nimport { Duplex } from 'stream';\nimport * as tls from 'tls';\n\nimport { AFCClient } from './client/AFCClient';\nimport { DebugserverClient } from './client/DebugserverClient';\nimport { InstallationProxyClient } from './client/InstallationProxyClient';\nimport { LockdowndClient } from './client/LockdowndClient';\nimport { MobileImageMounterClient } from './client/MobileImageMounterClient';\nimport { ServiceClient } from './client/ServiceClient';\nimport { UsbmuxdClient, UsbmuxdDevice, UsbmuxdPairRecord } from './client/UsbmuxdClient';\nimport { CommandError } from '../../../utils/errors';\n\nexport class ClientManager {\n private connections: Socket[];\n constructor(\n public pairRecord: UsbmuxdPairRecord,\n public device: UsbmuxdDevice,\n private lockdowndClient: LockdowndClient\n ) {\n this.connections = [lockdowndClient.socket];\n }\n\n static async create(udid?: string) {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const device = await usbmuxClient.getDevice(udid);\n const pairRecord = await usbmuxClient.readPairRecord(device.Properties.SerialNumber);\n const lockdownSocket = await usbmuxClient.connect(device, 62078);\n const lockdownClient = new LockdowndClient(lockdownSocket);\n await lockdownClient.doHandshake(pairRecord);\n return new ClientManager(pairRecord, device, lockdownClient);\n }\n\n async getUsbmuxdClient() {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n this.connections.push(usbmuxClient.socket);\n return usbmuxClient;\n }\n\n async getLockdowndClient() {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const lockdownSocket = await usbmuxClient.connect(this.device, 62078);\n const lockdownClient = new LockdowndClient(lockdownSocket);\n this.connections.push(lockdownClient.socket);\n return lockdownClient;\n }\n\n async getLockdowndClientWithHandshake() {\n const lockdownClient = await this.getLockdowndClient();\n await lockdownClient.doHandshake(this.pairRecord);\n return lockdownClient;\n }\n\n async getAFCClient() {\n return this.getServiceClient('com.apple.afc', AFCClient);\n }\n\n async getInstallationProxyClient() {\n return this.getServiceClient('com.apple.mobile.installation_proxy', InstallationProxyClient);\n }\n\n async getMobileImageMounterClient() {\n return this.getServiceClient('com.apple.mobile.mobile_image_mounter', MobileImageMounterClient);\n }\n\n async getDebugserverClient() {\n try {\n // iOS 14 added support for a secure debug service so try to connect to that first\n return await this.getServiceClient(\n 'com.apple.debugserver.DVTSecureSocketProxy',\n DebugserverClient\n );\n } catch {\n // otherwise, fall back to the previous implementation\n return this.getServiceClient('com.apple.debugserver', DebugserverClient, true);\n }\n }\n\n private async getServiceClient<T extends ServiceClient<any>>(\n name: string,\n ServiceType: new (...args: any[]) => T,\n disableSSL = false\n ) {\n const { port: servicePort, enableServiceSSL } = await this.lockdowndClient.startService(name);\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n let usbmuxdSocket = await usbmuxClient.connect(this.device, servicePort);\n\n if (enableServiceSSL) {\n const tlsOptions: tls.ConnectionOptions = {\n rejectUnauthorized: false,\n secureContext: tls.createSecureContext({\n // Avoid using `secureProtocol` fixing the socket to a single TLS version.\n // Newer Node versions might not support older TLS versions.\n // By using the default `minVersion` and `maxVersion` options,\n // The socket will automatically use the appropriate TLS version.\n // See: https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions\n cert: this.pairRecord.RootCertificate,\n key: this.pairRecord.RootPrivateKey,\n }),\n };\n\n // Some services seem to not support TLS/SSL after the initial handshake\n // More info: https://github.com/libimobiledevice/libimobiledevice/issues/793\n if (disableSSL) {\n // According to https://nodejs.org/api/tls.html#tls_tls_connect_options_callback we can\n // pass any Duplex in to tls.connect instead of a Socket. So we'll use our proxy to keep\n // the TLS wrapper and underlying usbmuxd socket separate.\n const proxy: any = new UsbmuxdProxy(usbmuxdSocket);\n tlsOptions.socket = proxy;\n\n await new Promise<void>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(\n new CommandError('APPLE_DEVICE', 'The TLS handshake failed to complete after 5s.')\n );\n }, 5000);\n tls.connect(tlsOptions, function (this: tls.TLSSocket) {\n clearTimeout(timeoutId);\n // After the handshake, we don't need TLS or the proxy anymore,\n // since we'll just pass in the naked usbmuxd socket to the service client\n this.destroy();\n resolve();\n });\n });\n } else {\n tlsOptions.socket = usbmuxdSocket;\n usbmuxdSocket = tls.connect(tlsOptions);\n }\n }\n const client = new ServiceType(usbmuxdSocket);\n this.connections.push(client.socket);\n return client;\n }\n\n end() {\n for (const socket of this.connections) {\n // may already be closed\n try {\n socket.end();\n } catch {}\n }\n }\n}\n\nclass UsbmuxdProxy extends Duplex {\n constructor(private usbmuxdSock: Socket) {\n super();\n\n this.usbmuxdSock.on('data', (data) => {\n this.push(data);\n });\n }\n\n _write(chunk: any, encoding: string, callback: (err?: Error) => void) {\n this.usbmuxdSock.write(chunk);\n callback();\n }\n\n _read(size: number) {\n // Stub so we don't error, since we push everything we get from usbmuxd as it comes in.\n // TODO: better way to do this?\n }\n\n _destroy() {\n this.usbmuxdSock.removeAllListeners();\n }\n}\n"],"names":["ClientManager","constructor","pairRecord","device","lockdowndClient","connections","socket","create","udid","usbmuxClient","UsbmuxdClient","connectUsbmuxdSocket","getDevice","readPairRecord","Properties","SerialNumber","lockdownSocket","connect","lockdownClient","LockdowndClient","doHandshake","getUsbmuxdClient","push","getLockdowndClient","getLockdowndClientWithHandshake","getAFCClient","getServiceClient","AFCClient","getInstallationProxyClient","InstallationProxyClient","getMobileImageMounterClient","MobileImageMounterClient","getDebugserverClient","DebugserverClient","name","ServiceType","disableSSL","port","servicePort","enableServiceSSL","startService","usbmuxdSocket","tlsOptions","rejectUnauthorized","secureContext","tls","createSecureContext","cert","RootCertificate","key","RootPrivateKey","proxy","UsbmuxdProxy","Promise","resolve","reject","timeoutId","setTimeout","CommandError","clearTimeout","destroy","client","end","Duplex","usbmuxdSock","on","data","_write","chunk","encoding","callback","write","_read","size","_destroy","removeAllListeners"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/run/ios/appleDevice/ClientManager.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Socket } from 'net';\nimport { Duplex } from 'stream';\nimport * as tls from 'tls';\n\nimport { AFCClient } from './client/AFCClient';\nimport { DebugserverClient } from './client/DebugserverClient';\nimport { InstallationProxyClient } from './client/InstallationProxyClient';\nimport { LockdowndClient } from './client/LockdowndClient';\nimport { MobileImageMounterClient } from './client/MobileImageMounterClient';\nimport { ServiceClient } from './client/ServiceClient';\nimport { UsbmuxdClient, UsbmuxdDevice, UsbmuxdPairRecord } from './client/UsbmuxdClient';\nimport { CommandError } from '../../../utils/errors';\n\nexport class ClientManager {\n private connections: Socket[];\n constructor(\n public pairRecord: UsbmuxdPairRecord,\n public device: UsbmuxdDevice,\n private lockdowndClient: LockdowndClient\n ) {\n this.connections = [lockdowndClient.socket];\n }\n\n static async create(udid?: string) {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const device = await usbmuxClient.getDevice(udid);\n const pairRecord = await usbmuxClient.readPairRecord(device.Properties.SerialNumber);\n const lockdownSocket = await usbmuxClient.connect(device, 62078);\n const lockdownClient = new LockdowndClient(lockdownSocket);\n await lockdownClient.doHandshake(pairRecord);\n return new ClientManager(pairRecord, device, lockdownClient);\n }\n\n async getUsbmuxdClient() {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n this.connections.push(usbmuxClient.socket);\n return usbmuxClient;\n }\n\n async getLockdowndClient() {\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n const lockdownSocket = await usbmuxClient.connect(this.device, 62078);\n const lockdownClient = new LockdowndClient(lockdownSocket);\n this.connections.push(lockdownClient.socket);\n return lockdownClient;\n }\n\n async getLockdowndClientWithHandshake() {\n const lockdownClient = await this.getLockdowndClient();\n await lockdownClient.doHandshake(this.pairRecord);\n return lockdownClient;\n }\n\n async getAFCClient() {\n return this.getServiceClient('com.apple.afc', AFCClient);\n }\n\n async getInstallationProxyClient() {\n return this.getServiceClient('com.apple.mobile.installation_proxy', InstallationProxyClient);\n }\n\n async getMobileImageMounterClient() {\n return this.getServiceClient('com.apple.mobile.mobile_image_mounter', MobileImageMounterClient);\n }\n\n async getDebugserverClient() {\n try {\n // iOS 14 added support for a secure debug service so try to connect to that first\n return await this.getServiceClient(\n 'com.apple.debugserver.DVTSecureSocketProxy',\n DebugserverClient\n );\n } catch {\n // otherwise, fall back to the previous implementation\n return this.getServiceClient('com.apple.debugserver', DebugserverClient, true);\n }\n }\n\n private async getServiceClient<T extends ServiceClient<any>>(\n name: string,\n ServiceType: new (...args: any[]) => T,\n disableSSL = false\n ) {\n const { port: servicePort, enableServiceSSL } = await this.lockdowndClient.startService(name);\n const usbmuxClient = new UsbmuxdClient(UsbmuxdClient.connectUsbmuxdSocket());\n let usbmuxdSocket = await usbmuxClient.connect(this.device, servicePort);\n\n if (enableServiceSSL) {\n const tlsOptions: tls.ConnectionOptions = {\n rejectUnauthorized: false,\n secureContext: tls.createSecureContext({\n // Avoid using `secureProtocol` fixing the socket to a single TLS version.\n // Newer Node versions might not support older TLS versions.\n // By using the default `minVersion` and `maxVersion` options,\n // The socket will automatically use the appropriate TLS version.\n // See: https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions\n cert: this.pairRecord.RootCertificate,\n key: this.pairRecord.RootPrivateKey,\n }),\n };\n\n // Some services seem to not support TLS/SSL after the initial handshake\n // More info: https://github.com/libimobiledevice/libimobiledevice/issues/793\n if (disableSSL) {\n // According to https://nodejs.org/api/tls.html#tls_tls_connect_options_callback we can\n // pass any Duplex in to tls.connect instead of a Socket. So we'll use our proxy to keep\n // the TLS wrapper and underlying usbmuxd socket separate.\n const proxy: any = new UsbmuxdProxy(usbmuxdSocket);\n tlsOptions.socket = proxy;\n\n await new Promise<void>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(\n new CommandError('APPLE_DEVICE', 'The TLS handshake failed to complete after 5s.')\n );\n }, 5000);\n tls.connect(tlsOptions, function (this: tls.TLSSocket) {\n clearTimeout(timeoutId);\n // After the handshake, we don't need TLS or the proxy anymore,\n // since we'll just pass in the naked usbmuxd socket to the service client\n this.destroy();\n resolve();\n });\n });\n } else {\n tlsOptions.socket = usbmuxdSocket;\n usbmuxdSocket = tls.connect(tlsOptions);\n }\n }\n const client = new ServiceType(usbmuxdSocket);\n this.connections.push(client.socket);\n return client;\n }\n\n end() {\n for (const socket of this.connections) {\n // may already be closed\n try {\n socket.end();\n } catch {}\n }\n }\n}\n\nclass UsbmuxdProxy extends Duplex {\n constructor(private usbmuxdSock: Socket) {\n super();\n\n this.usbmuxdSock.on('data', (data) => {\n this.push(data);\n });\n }\n\n _write(chunk: any, encoding: string, callback: (err?: Error) => void) {\n this.usbmuxdSock.write(chunk);\n callback();\n }\n\n _read(size: number) {\n // Stub so we don't error, since we push everything we get from usbmuxd as it comes in.\n // TODO: better way to do this?\n }\n\n _destroy() {\n this.usbmuxdSock.removeAllListeners();\n }\n}\n"],"names":["ClientManager","constructor","pairRecord","device","lockdowndClient","connections","socket","create","udid","usbmuxClient","UsbmuxdClient","connectUsbmuxdSocket","getDevice","readPairRecord","Properties","SerialNumber","lockdownSocket","connect","lockdownClient","LockdowndClient","doHandshake","getUsbmuxdClient","push","getLockdowndClient","getLockdowndClientWithHandshake","getAFCClient","getServiceClient","AFCClient","getInstallationProxyClient","InstallationProxyClient","getMobileImageMounterClient","MobileImageMounterClient","getDebugserverClient","DebugserverClient","name","ServiceType","disableSSL","port","servicePort","enableServiceSSL","startService","usbmuxdSocket","tlsOptions","rejectUnauthorized","secureContext","tls","createSecureContext","cert","RootCertificate","key","RootPrivateKey","proxy","UsbmuxdProxy","Promise","resolve","reject","timeoutId","setTimeout","CommandError","clearTimeout","destroy","client","end","Duplex","usbmuxdSock","on","data","_write","chunk","encoding","callback","write","_read","size","_destroy","removeAllListeners"],"mappings":"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"}
|
|
@@ -10,24 +10,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "AFCClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: ()
|
|
13
|
+
get: function() {
|
|
14
|
+
return AFCClient;
|
|
15
|
+
}
|
|
14
16
|
});
|
|
15
17
|
function _debug() {
|
|
16
|
-
const data = /*#__PURE__*/
|
|
18
|
+
const data = /*#__PURE__*/ _interop_require_default(require("debug"));
|
|
17
19
|
_debug = function() {
|
|
18
20
|
return data;
|
|
19
21
|
};
|
|
20
22
|
return data;
|
|
21
23
|
}
|
|
22
24
|
function _fs() {
|
|
23
|
-
const data = /*#__PURE__*/
|
|
25
|
+
const data = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
|
|
24
26
|
_fs = function() {
|
|
25
27
|
return data;
|
|
26
28
|
};
|
|
27
29
|
return data;
|
|
28
30
|
}
|
|
29
31
|
function _path() {
|
|
30
|
-
const data = /*#__PURE__*/
|
|
32
|
+
const data = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
31
33
|
_path = function() {
|
|
32
34
|
return data;
|
|
33
35
|
};
|
|
@@ -40,10 +42,10 @@ function _util() {
|
|
|
40
42
|
};
|
|
41
43
|
return data;
|
|
42
44
|
}
|
|
43
|
-
const
|
|
45
|
+
const _ServiceClient = require("./ServiceClient");
|
|
44
46
|
const _errors = require("../../../../utils/errors");
|
|
45
|
-
const
|
|
46
|
-
function
|
|
47
|
+
const _AFCProtocol = require("../protocol/AFCProtocol");
|
|
48
|
+
function _interop_require_default(obj) {
|
|
47
49
|
return obj && obj.__esModule ? obj : {
|
|
48
50
|
default: obj
|
|
49
51
|
};
|
|
@@ -56,7 +58,7 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
56
58
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
57
59
|
})(nodeInterop);
|
|
58
60
|
}
|
|
59
|
-
function
|
|
61
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
60
62
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
61
63
|
return obj;
|
|
62
64
|
}
|
|
@@ -69,7 +71,9 @@ function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
69
71
|
if (cache && cache.has(obj)) {
|
|
70
72
|
return cache.get(obj);
|
|
71
73
|
}
|
|
72
|
-
var newObj = {
|
|
74
|
+
var newObj = {
|
|
75
|
+
__proto__: null
|
|
76
|
+
};
|
|
73
77
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
74
78
|
for(var key in obj){
|
|
75
79
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
@@ -87,27 +91,26 @@ function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
87
91
|
}
|
|
88
92
|
return newObj;
|
|
89
93
|
}
|
|
90
|
-
const debug = (0, _debug().default)(
|
|
94
|
+
const debug = (0, _debug().default)('expo:apple-device:client:afc');
|
|
91
95
|
const MAX_OPEN_FILES = 240;
|
|
92
|
-
class AFCClient extends
|
|
96
|
+
class AFCClient extends _ServiceClient.ServiceClient {
|
|
93
97
|
constructor(socket){
|
|
94
|
-
super(socket, new
|
|
95
|
-
this.socket = socket;
|
|
98
|
+
super(socket, new _AFCProtocol.AFCProtocolClient(socket)), this.socket = socket;
|
|
96
99
|
}
|
|
97
100
|
async getFileInfo(path) {
|
|
98
101
|
debug(`getFileInfo: ${path}`);
|
|
99
102
|
const response = await this.protocolClient.sendMessage({
|
|
100
|
-
operation:
|
|
103
|
+
operation: _AFCProtocol.AFC_OPS.GET_FILE_INFO,
|
|
101
104
|
data: toCString(path)
|
|
102
105
|
});
|
|
103
106
|
debug(`getFileInfo:response: %O`, response);
|
|
104
107
|
const strings = [];
|
|
105
|
-
let currentString =
|
|
108
|
+
let currentString = '';
|
|
106
109
|
const tokens = response.data;
|
|
107
110
|
tokens.forEach((token)=>{
|
|
108
111
|
if (token === 0) {
|
|
109
112
|
strings.push(currentString);
|
|
110
|
-
currentString =
|
|
113
|
+
currentString = '';
|
|
111
114
|
} else {
|
|
112
115
|
currentString += String.fromCharCode(token);
|
|
113
116
|
}
|
|
@@ -117,7 +120,7 @@ class AFCClient extends _serviceClient.ServiceClient {
|
|
|
117
120
|
async writeFile(fd, data) {
|
|
118
121
|
debug(`writeFile: ${Array.prototype.toString.call(fd)} data size: ${data.length}`);
|
|
119
122
|
const response = await this.protocolClient.sendMessage({
|
|
120
|
-
operation:
|
|
123
|
+
operation: _AFCProtocol.AFC_OPS.FILE_WRITE,
|
|
121
124
|
data: fd,
|
|
122
125
|
payload: data
|
|
123
126
|
});
|
|
@@ -129,23 +132,23 @@ class AFCClient extends _serviceClient.ServiceClient {
|
|
|
129
132
|
// mode + path + null terminator
|
|
130
133
|
const data = Buffer.alloc(8 + path.length + 1);
|
|
131
134
|
// write mode
|
|
132
|
-
data.writeUInt32LE(
|
|
135
|
+
data.writeUInt32LE(_AFCProtocol.AFC_FILE_OPEN_FLAGS.WRONLY, 0);
|
|
133
136
|
// then path to file
|
|
134
137
|
toCString(path).copy(data, 8);
|
|
135
138
|
const response = await this.protocolClient.sendMessage({
|
|
136
|
-
operation:
|
|
139
|
+
operation: _AFCProtocol.AFC_OPS.FILE_OPEN,
|
|
137
140
|
data
|
|
138
141
|
});
|
|
139
142
|
// debug(`openFile:response:`, response);
|
|
140
|
-
if (response.operation ===
|
|
143
|
+
if (response.operation === _AFCProtocol.AFC_OPS.FILE_OPEN_RES) {
|
|
141
144
|
return response.data;
|
|
142
145
|
}
|
|
143
|
-
throw new _errors.CommandError(
|
|
146
|
+
throw new _errors.CommandError('APPLE_DEVICE_AFC', `There was an unknown error opening file ${path}, response: ${Array.prototype.toString.call(response.data)}`);
|
|
144
147
|
}
|
|
145
148
|
async closeFile(fd) {
|
|
146
149
|
debug(`closeFile fd: ${Array.prototype.toString.call(fd)}`);
|
|
147
150
|
const response = await this.protocolClient.sendMessage({
|
|
148
|
-
operation:
|
|
151
|
+
operation: _AFCProtocol.AFC_OPS.FILE_CLOSE,
|
|
149
152
|
data: fd
|
|
150
153
|
});
|
|
151
154
|
debug(`closeFile:response:`, response);
|
|
@@ -156,7 +159,7 @@ class AFCClient extends _serviceClient.ServiceClient {
|
|
|
156
159
|
// read local file and get fd of destination
|
|
157
160
|
const [srcFile, destFile] = await Promise.all([
|
|
158
161
|
await (0, _util().promisify)(_fs().readFile)(srcPath),
|
|
159
|
-
await this.openFile(destPath)
|
|
162
|
+
await this.openFile(destPath)
|
|
160
163
|
]);
|
|
161
164
|
try {
|
|
162
165
|
await this.writeFile(destFile, srcFile);
|
|
@@ -169,7 +172,7 @@ class AFCClient extends _serviceClient.ServiceClient {
|
|
|
169
172
|
async makeDirectory(path) {
|
|
170
173
|
debug(`makeDirectory: ${path}`);
|
|
171
174
|
const response = await this.protocolClient.sendMessage({
|
|
172
|
-
operation:
|
|
175
|
+
operation: _AFCProtocol.AFC_OPS.MAKE_DIR,
|
|
173
176
|
data: toCString(path)
|
|
174
177
|
});
|
|
175
178
|
debug(`makeDirectory:response:`, response);
|
|
@@ -214,7 +217,7 @@ class AFCClient extends _serviceClient.ServiceClient {
|
|
|
214
217
|
}).catch((err)=>{
|
|
215
218
|
// Couldn't get fd for whatever reason, try again
|
|
216
219
|
// # of retries is arbitrary and can be adjusted
|
|
217
|
-
if (err.status ===
|
|
220
|
+
if (err.status === _AFCProtocol.AFC_STATUS.NO_RESOURCES && tries < 10) {
|
|
218
221
|
debug(`Received NO_RESOURCES from AFC, retrying ${filePath} upload. ${tries}`);
|
|
219
222
|
uploadFile(tries++);
|
|
220
223
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/AFCClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport * as fs from 'fs';\nimport { Socket } from 'net';\nimport * as path from 'path';\nimport { promisify } from 'util';\n\nimport { ServiceClient } from './ServiceClient';\nimport { CommandError } from '../../../../utils/errors';\nimport {\n AFC_FILE_OPEN_FLAGS,\n AFC_OPS,\n AFC_STATUS,\n AFCError,\n AFCProtocolClient,\n AFCResponse,\n} from '../protocol/AFCProtocol';\n\nconst debug = Debug('expo:apple-device:client:afc');\nconst MAX_OPEN_FILES = 240;\n\nexport class AFCClient extends ServiceClient<AFCProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new AFCProtocolClient(socket));\n }\n\n async getFileInfo(path: string): Promise<string[]> {\n debug(`getFileInfo: ${path}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.GET_FILE_INFO,\n data: toCString(path),\n });\n debug(`getFileInfo:response: %O`, response);\n\n const strings: string[] = [];\n let currentString = '';\n const tokens = response.data;\n tokens.forEach((token) => {\n if (token === 0) {\n strings.push(currentString);\n currentString = '';\n } else {\n currentString += String.fromCharCode(token);\n }\n });\n return strings;\n }\n\n async writeFile(fd: Buffer, data: Buffer): Promise<AFCResponse> {\n debug(`writeFile: ${Array.prototype.toString.call(fd)} data size: ${data.length}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_WRITE,\n data: fd,\n payload: data,\n });\n\n debug(`writeFile:response:`, response);\n return response;\n }\n\n protected async openFile(path: string): Promise<Buffer> {\n debug(`openFile: ${path}`);\n // mode + path + null terminator\n const data = Buffer.alloc(8 + path.length + 1);\n // write mode\n data.writeUInt32LE(AFC_FILE_OPEN_FLAGS.WRONLY, 0);\n // then path to file\n toCString(path).copy(data, 8);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_OPEN,\n data,\n });\n\n // debug(`openFile:response:`, response);\n\n if (response.operation === AFC_OPS.FILE_OPEN_RES) {\n return response.data;\n }\n\n throw new CommandError(\n 'APPLE_DEVICE_AFC',\n `There was an unknown error opening file ${path}, response: ${Array.prototype.toString.call(\n response.data\n )}`\n );\n }\n\n protected async closeFile(fd: Buffer): Promise<AFCResponse> {\n debug(`closeFile fd: ${Array.prototype.toString.call(fd)}`);\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_CLOSE,\n data: fd,\n });\n\n debug(`closeFile:response:`, response);\n return response;\n }\n\n protected async uploadFile(srcPath: string, destPath: string): Promise<void> {\n debug(`uploadFile: ${srcPath}, ${destPath}`);\n\n // read local file and get fd of destination\n const [srcFile, destFile] = await Promise.all([\n await promisify(fs.readFile)(srcPath),\n await this.openFile(destPath),\n ]);\n\n try {\n await this.writeFile(destFile, srcFile);\n await this.closeFile(destFile);\n } catch (err) {\n await this.closeFile(destFile);\n throw err;\n }\n }\n\n async makeDirectory(path: string): Promise<AFCResponse> {\n debug(`makeDirectory: ${path}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.MAKE_DIR,\n data: toCString(path),\n });\n\n debug(`makeDirectory:response:`, response);\n return response;\n }\n\n async uploadDirectory(srcPath: string, destPath: string): Promise<void> {\n debug(`uploadDirectory: ${srcPath}`);\n await this.makeDirectory(destPath);\n\n // AFC doesn't seem to give out more than 240 file handles,\n // so we delay any requests that would push us over until more open up\n let numOpenFiles = 0;\n const pendingFileUploads: (() => void)[] = [];\n const _this = this;\n return uploadDir(srcPath);\n\n async function uploadDir(dirPath: string): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const file of fs.readdirSync(dirPath)) {\n const filePath = path.join(dirPath, file);\n const remotePath = path.join(destPath, path.relative(srcPath, filePath));\n if (fs.lstatSync(filePath).isDirectory()) {\n promises.push(_this.makeDirectory(remotePath).then(() => uploadDir(filePath)));\n } else {\n // Create promise to add to promises array\n // this way it can be resolved once a pending upload has finished\n let resolve: (val?: any) => void;\n let reject: (err: AFCError) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n promises.push(promise);\n\n // wrap upload in a function in case we need to save it for later\n const uploadFile = (tries = 0) => {\n numOpenFiles++;\n _this\n .uploadFile(filePath, remotePath)\n .then(() => {\n resolve();\n numOpenFiles--;\n const fn = pendingFileUploads.pop();\n if (fn) {\n fn();\n }\n })\n .catch((err: AFCError) => {\n // Couldn't get fd for whatever reason, try again\n // # of retries is arbitrary and can be adjusted\n if (err.status === AFC_STATUS.NO_RESOURCES && tries < 10) {\n debug(`Received NO_RESOURCES from AFC, retrying ${filePath} upload. ${tries}`);\n uploadFile(tries++);\n } else {\n numOpenFiles--;\n reject(err);\n }\n });\n };\n\n if (numOpenFiles < MAX_OPEN_FILES) {\n uploadFile();\n } else {\n debug(\n `numOpenFiles >= ${MAX_OPEN_FILES}, adding to pending queue. Length: ${pendingFileUploads.length}`\n );\n pendingFileUploads.push(uploadFile);\n }\n }\n }\n await Promise.all(promises);\n }\n }\n}\n\nfunction toCString(s: string) {\n const buf = Buffer.alloc(s.length + 1);\n const len = buf.write(s);\n buf.writeUInt8(0, len);\n return buf;\n}\n"],"names":["AFCClient","debug","Debug","MAX_OPEN_FILES","ServiceClient","constructor","socket","AFCProtocolClient","getFileInfo","path","response","protocolClient","sendMessage","operation","AFC_OPS","GET_FILE_INFO","data","toCString","strings","currentString","tokens","forEach","token","push","String","fromCharCode","writeFile","fd","Array","prototype","toString","call","length","FILE_WRITE","payload","openFile","Buffer","alloc","writeUInt32LE","AFC_FILE_OPEN_FLAGS","WRONLY","copy","FILE_OPEN","FILE_OPEN_RES","CommandError","closeFile","FILE_CLOSE","uploadFile","srcPath","destPath","srcFile","destFile","Promise","all","promisify","fs","readFile","err","makeDirectory","MAKE_DIR","uploadDirectory","numOpenFiles","pendingFileUploads","_this","uploadDir","dirPath","promises","file","readdirSync","filePath","join","remotePath","relative","lstatSync","isDirectory","then","resolve","reject","promise","res","rej","tries","fn","pop","catch","status","AFC_STATUS","NO_RESOURCES","s","buf","len","write","writeUInt8"],"mappings":"AAAA;;;;;;CAMC,GACD;;;;+BAoBaA,WAAS;;aAATA,SAAS;;;8DApBJ,OAAO;;;;;;;+DACL,IAAI;;;;;;;+DAEF,MAAM;;;;;;;yBACF,MAAM;;;;;;+BAEF,iBAAiB;wBAClB,0BAA0B;6BAQhD,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhC,MAAMC,KAAK,GAAGC,IAAAA,MAAK,EAAA,QAAA,EAAC,8BAA8B,CAAC,AAAC;AACpD,MAAMC,cAAc,GAAG,GAAG,AAAC;AAEpB,MAAMH,SAAS,SAASI,cAAa,cAAA;IAC1CC,YAAmBC,MAAc,CAAE;QACjC,KAAK,CAACA,MAAM,EAAE,IAAIC,YAAiB,kBAAA,CAACD,MAAM,CAAC,CAAC,CAAC;QAD5BA,cAAAA,MAAc,CAAA;IAEjC;UAEME,WAAW,CAACC,IAAY,EAAqB;QACjDR,KAAK,CAAC,CAAC,aAAa,EAAEQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,SAAS,EAAEC,YAAO,QAAA,CAACC,aAAa;YAChCC,IAAI,EAAEC,SAAS,CAACR,IAAI,CAAC;SACtB,CAAC,AAAC;QACHR,KAAK,CAAC,CAAC,wBAAwB,CAAC,EAAES,QAAQ,CAAC,CAAC;QAE5C,MAAMQ,OAAO,GAAa,EAAE,AAAC;QAC7B,IAAIC,aAAa,GAAG,EAAE,AAAC;QACvB,MAAMC,MAAM,GAAGV,QAAQ,CAACM,IAAI,AAAC;QAC7BI,MAAM,CAACC,OAAO,CAAC,CAACC,KAAK,GAAK;YACxB,IAAIA,KAAK,KAAK,CAAC,EAAE;gBACfJ,OAAO,CAACK,IAAI,CAACJ,aAAa,CAAC,CAAC;gBAC5BA,aAAa,GAAG,EAAE,CAAC;YACrB,OAAO;gBACLA,aAAa,IAAIK,MAAM,CAACC,YAAY,CAACH,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAOJ,OAAO,CAAC;IACjB;UAEMQ,SAAS,CAACC,EAAU,EAAEX,IAAY,EAAwB;QAC9Df,KAAK,CAAC,CAAC,WAAW,EAAE2B,KAAK,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,EAAE,CAAC,CAAC,YAAY,EAAEX,IAAI,CAACgB,MAAM,CAAC,CAAC,CAAC,CAAC;QAEnF,MAAMtB,QAAQ,GAAG,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,SAAS,EAAEC,YAAO,QAAA,CAACmB,UAAU;YAC7BjB,IAAI,EAAEW,EAAE;YACRO,OAAO,EAAElB,IAAI;SACd,CAAC,AAAC;QAEHf,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAES,QAAQ,CAAC,CAAC;QACvC,OAAOA,QAAQ,CAAC;IAClB;UAEgByB,QAAQ,CAAC1B,IAAY,EAAmB;QACtDR,KAAK,CAAC,CAAC,UAAU,EAAEQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,gCAAgC;QAChC,MAAMO,IAAI,GAAGoB,MAAM,CAACC,KAAK,CAAC,CAAC,GAAG5B,IAAI,CAACuB,MAAM,GAAG,CAAC,CAAC,AAAC;QAC/C,aAAa;QACbhB,IAAI,CAACsB,aAAa,CAACC,YAAmB,oBAAA,CAACC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,oBAAoB;QACpBvB,SAAS,CAACR,IAAI,CAAC,CAACgC,IAAI,CAACzB,IAAI,EAAE,CAAC,CAAC,CAAC;QAE9B,MAAMN,QAAQ,GAAG,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,SAAS,EAAEC,YAAO,QAAA,CAAC4B,SAAS;YAC5B1B,IAAI;SACL,CAAC,AAAC;QAEH,yCAAyC;QAEzC,IAAIN,QAAQ,CAACG,SAAS,KAAKC,YAAO,QAAA,CAAC6B,aAAa,EAAE;YAChD,OAAOjC,QAAQ,CAACM,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,IAAI4B,OAAY,aAAA,CACpB,kBAAkB,EAClB,CAAC,wCAAwC,EAAEnC,IAAI,CAAC,YAAY,EAAEmB,KAAK,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CACzFrB,QAAQ,CAACM,IAAI,CACd,CAAC,CAAC,CACJ,CAAC;IACJ;UAEgB6B,SAAS,CAAClB,EAAU,EAAwB;QAC1D1B,KAAK,CAAC,CAAC,cAAc,EAAE2B,KAAK,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAMjB,QAAQ,GAAG,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,SAAS,EAAEC,YAAO,QAAA,CAACgC,UAAU;YAC7B9B,IAAI,EAAEW,EAAE;SACT,CAAC,AAAC;QAEH1B,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAES,QAAQ,CAAC,CAAC;QACvC,OAAOA,QAAQ,CAAC;IAClB;UAEgBqC,UAAU,CAACC,OAAe,EAAEC,QAAgB,EAAiB;QAC3EhD,KAAK,CAAC,CAAC,YAAY,EAAE+C,OAAO,CAAC,EAAE,EAAEC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE7C,4CAA4C;QAC5C,MAAM,CAACC,OAAO,EAAEC,QAAQ,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC;YAC5C,MAAMC,IAAAA,KAAS,EAAA,UAAA,EAACC,GAAE,EAAA,CAACC,QAAQ,CAAC,CAACR,OAAO,CAAC;YACrC,MAAM,IAAI,CAACb,QAAQ,CAACc,QAAQ,CAAC;SAC9B,CAAC,AAAC;QAEH,IAAI;YACF,MAAM,IAAI,CAACvB,SAAS,CAACyB,QAAQ,EAAED,OAAO,CAAC,CAAC;YACxC,MAAM,IAAI,CAACL,SAAS,CAACM,QAAQ,CAAC,CAAC;QACjC,EAAE,OAAOM,GAAG,EAAE;YACZ,MAAM,IAAI,CAACZ,SAAS,CAACM,QAAQ,CAAC,CAAC;YAC/B,MAAMM,GAAG,CAAC;QACZ,CAAC;IACH;UAEMC,aAAa,CAACjD,IAAY,EAAwB;QACtDR,KAAK,CAAC,CAAC,eAAe,EAAEQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhC,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,SAAS,EAAEC,YAAO,QAAA,CAAC6C,QAAQ;YAC3B3C,IAAI,EAAEC,SAAS,CAACR,IAAI,CAAC;SACtB,CAAC,AAAC;QAEHR,KAAK,CAAC,CAAC,uBAAuB,CAAC,EAAES,QAAQ,CAAC,CAAC;QAC3C,OAAOA,QAAQ,CAAC;IAClB;UAEMkD,eAAe,CAACZ,OAAe,EAAEC,QAAgB,EAAiB;QACtEhD,KAAK,CAAC,CAAC,iBAAiB,EAAE+C,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,CAACU,aAAa,CAACT,QAAQ,CAAC,CAAC;QAEnC,2DAA2D;QAC3D,sEAAsE;QACtE,IAAIY,YAAY,GAAG,CAAC,AAAC;QACrB,MAAMC,kBAAkB,GAAmB,EAAE,AAAC;QAC9C,MAAMC,KAAK,GAAG,IAAI,AAAC;QACnB,OAAOC,SAAS,CAAChB,OAAO,CAAC,CAAC;QAE1B,eAAegB,SAAS,CAACC,OAAe,EAAiB;YACvD,MAAMC,QAAQ,GAAoB,EAAE,AAAC;YACrC,KAAK,MAAMC,IAAI,IAAIZ,GAAE,EAAA,CAACa,WAAW,CAACH,OAAO,CAAC,CAAE;gBAC1C,MAAMI,QAAQ,GAAG5D,KAAI,EAAA,CAAC6D,IAAI,CAACL,OAAO,EAAEE,IAAI,CAAC,AAAC;gBAC1C,MAAMI,UAAU,GAAG9D,KAAI,EAAA,CAAC6D,IAAI,CAACrB,QAAQ,EAAExC,KAAI,EAAA,CAAC+D,QAAQ,CAACxB,OAAO,EAAEqB,QAAQ,CAAC,CAAC,AAAC;gBACzE,IAAId,GAAE,EAAA,CAACkB,SAAS,CAACJ,QAAQ,CAAC,CAACK,WAAW,EAAE,EAAE;oBACxCR,QAAQ,CAAC3C,IAAI,CAACwC,KAAK,CAACL,aAAa,CAACa,UAAU,CAAC,CAACI,IAAI,CAAC,IAAMX,SAAS,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjF,OAAO;oBACL,0CAA0C;oBAC1C,iEAAiE;oBACjE,IAAIO,OAAO,AAAqB,AAAC;oBACjC,IAAIC,MAAM,AAAyB,AAAC;oBACpC,MAAMC,OAAO,GAAG,IAAI1B,OAAO,CAAO,CAAC2B,GAAG,EAAEC,GAAG,GAAK;wBAC9CJ,OAAO,GAAGG,GAAG,CAAC;wBACdF,MAAM,GAAGG,GAAG,CAAC;oBACf,CAAC,CAAC,AAAC;oBACHd,QAAQ,CAAC3C,IAAI,CAACuD,OAAO,CAAC,CAAC;oBAEvB,iEAAiE;oBACjE,MAAM/B,UAAU,GAAG,CAACkC,KAAK,GAAG,CAAC,GAAK;wBAChCpB,YAAY,EAAE,CAAC;wBACfE,KAAK,CACFhB,UAAU,CAACsB,QAAQ,EAAEE,UAAU,CAAC,CAChCI,IAAI,CAAC,IAAM;4BACVC,OAAO,EAAE,CAAC;4BACVf,YAAY,EAAE,CAAC;4BACf,MAAMqB,EAAE,GAAGpB,kBAAkB,CAACqB,GAAG,EAAE,AAAC;4BACpC,IAAID,EAAE,EAAE;gCACNA,EAAE,EAAE,CAAC;4BACP,CAAC;wBACH,CAAC,CAAC,CACDE,KAAK,CAAC,CAAC3B,GAAa,GAAK;4BACxB,iDAAiD;4BACjD,gDAAgD;4BAChD,IAAIA,GAAG,CAAC4B,MAAM,KAAKC,YAAU,WAAA,CAACC,YAAY,IAAIN,KAAK,GAAG,EAAE,EAAE;gCACxDhF,KAAK,CAAC,CAAC,yCAAyC,EAAEoE,QAAQ,CAAC,SAAS,EAAEY,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/ElC,UAAU,CAACkC,KAAK,EAAE,CAAC,CAAC;4BACtB,OAAO;gCACLpB,YAAY,EAAE,CAAC;gCACfgB,MAAM,CAACpB,GAAG,CAAC,CAAC;4BACd,CAAC;wBACH,CAAC,CAAC,CAAC;oBACP,CAAC,AAAC;oBAEF,IAAII,YAAY,GAAG1D,cAAc,EAAE;wBACjC4C,UAAU,EAAE,CAAC;oBACf,OAAO;wBACL9C,KAAK,CACH,CAAC,gBAAgB,EAAEE,cAAc,CAAC,mCAAmC,EAAE2D,kBAAkB,CAAC9B,MAAM,CAAC,CAAC,CACnG,CAAC;wBACF8B,kBAAkB,CAACvC,IAAI,CAACwB,UAAU,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAMK,OAAO,CAACC,GAAG,CAACa,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH;CACD;AAED,SAASjD,SAAS,CAACuE,CAAS,EAAE;IAC5B,MAAMC,GAAG,GAAGrD,MAAM,CAACC,KAAK,CAACmD,CAAC,CAACxD,MAAM,GAAG,CAAC,CAAC,AAAC;IACvC,MAAM0D,GAAG,GAAGD,GAAG,CAACE,KAAK,CAACH,CAAC,CAAC,AAAC;IACzBC,GAAG,CAACG,UAAU,CAAC,CAAC,EAAEF,GAAG,CAAC,CAAC;IACvB,OAAOD,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/AFCClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport * as fs from 'fs';\nimport { Socket } from 'net';\nimport * as path from 'path';\nimport { promisify } from 'util';\n\nimport { ServiceClient } from './ServiceClient';\nimport { CommandError } from '../../../../utils/errors';\nimport {\n AFC_FILE_OPEN_FLAGS,\n AFC_OPS,\n AFC_STATUS,\n AFCError,\n AFCProtocolClient,\n AFCResponse,\n} from '../protocol/AFCProtocol';\n\nconst debug = Debug('expo:apple-device:client:afc');\nconst MAX_OPEN_FILES = 240;\n\nexport class AFCClient extends ServiceClient<AFCProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new AFCProtocolClient(socket));\n }\n\n async getFileInfo(path: string): Promise<string[]> {\n debug(`getFileInfo: ${path}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.GET_FILE_INFO,\n data: toCString(path),\n });\n debug(`getFileInfo:response: %O`, response);\n\n const strings: string[] = [];\n let currentString = '';\n const tokens = response.data;\n tokens.forEach((token) => {\n if (token === 0) {\n strings.push(currentString);\n currentString = '';\n } else {\n currentString += String.fromCharCode(token);\n }\n });\n return strings;\n }\n\n async writeFile(fd: Buffer, data: Buffer): Promise<AFCResponse> {\n debug(`writeFile: ${Array.prototype.toString.call(fd)} data size: ${data.length}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_WRITE,\n data: fd,\n payload: data,\n });\n\n debug(`writeFile:response:`, response);\n return response;\n }\n\n protected async openFile(path: string): Promise<Buffer> {\n debug(`openFile: ${path}`);\n // mode + path + null terminator\n const data = Buffer.alloc(8 + path.length + 1);\n // write mode\n data.writeUInt32LE(AFC_FILE_OPEN_FLAGS.WRONLY, 0);\n // then path to file\n toCString(path).copy(data, 8);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_OPEN,\n data,\n });\n\n // debug(`openFile:response:`, response);\n\n if (response.operation === AFC_OPS.FILE_OPEN_RES) {\n return response.data;\n }\n\n throw new CommandError(\n 'APPLE_DEVICE_AFC',\n `There was an unknown error opening file ${path}, response: ${Array.prototype.toString.call(\n response.data\n )}`\n );\n }\n\n protected async closeFile(fd: Buffer): Promise<AFCResponse> {\n debug(`closeFile fd: ${Array.prototype.toString.call(fd)}`);\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.FILE_CLOSE,\n data: fd,\n });\n\n debug(`closeFile:response:`, response);\n return response;\n }\n\n protected async uploadFile(srcPath: string, destPath: string): Promise<void> {\n debug(`uploadFile: ${srcPath}, ${destPath}`);\n\n // read local file and get fd of destination\n const [srcFile, destFile] = await Promise.all([\n await promisify(fs.readFile)(srcPath),\n await this.openFile(destPath),\n ]);\n\n try {\n await this.writeFile(destFile, srcFile);\n await this.closeFile(destFile);\n } catch (err) {\n await this.closeFile(destFile);\n throw err;\n }\n }\n\n async makeDirectory(path: string): Promise<AFCResponse> {\n debug(`makeDirectory: ${path}`);\n\n const response = await this.protocolClient.sendMessage({\n operation: AFC_OPS.MAKE_DIR,\n data: toCString(path),\n });\n\n debug(`makeDirectory:response:`, response);\n return response;\n }\n\n async uploadDirectory(srcPath: string, destPath: string): Promise<void> {\n debug(`uploadDirectory: ${srcPath}`);\n await this.makeDirectory(destPath);\n\n // AFC doesn't seem to give out more than 240 file handles,\n // so we delay any requests that would push us over until more open up\n let numOpenFiles = 0;\n const pendingFileUploads: (() => void)[] = [];\n const _this = this;\n return uploadDir(srcPath);\n\n async function uploadDir(dirPath: string): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const file of fs.readdirSync(dirPath)) {\n const filePath = path.join(dirPath, file);\n const remotePath = path.join(destPath, path.relative(srcPath, filePath));\n if (fs.lstatSync(filePath).isDirectory()) {\n promises.push(_this.makeDirectory(remotePath).then(() => uploadDir(filePath)));\n } else {\n // Create promise to add to promises array\n // this way it can be resolved once a pending upload has finished\n let resolve: (val?: any) => void;\n let reject: (err: AFCError) => void;\n const promise = new Promise<void>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n promises.push(promise);\n\n // wrap upload in a function in case we need to save it for later\n const uploadFile = (tries = 0) => {\n numOpenFiles++;\n _this\n .uploadFile(filePath, remotePath)\n .then(() => {\n resolve();\n numOpenFiles--;\n const fn = pendingFileUploads.pop();\n if (fn) {\n fn();\n }\n })\n .catch((err: AFCError) => {\n // Couldn't get fd for whatever reason, try again\n // # of retries is arbitrary and can be adjusted\n if (err.status === AFC_STATUS.NO_RESOURCES && tries < 10) {\n debug(`Received NO_RESOURCES from AFC, retrying ${filePath} upload. ${tries}`);\n uploadFile(tries++);\n } else {\n numOpenFiles--;\n reject(err);\n }\n });\n };\n\n if (numOpenFiles < MAX_OPEN_FILES) {\n uploadFile();\n } else {\n debug(\n `numOpenFiles >= ${MAX_OPEN_FILES}, adding to pending queue. Length: ${pendingFileUploads.length}`\n );\n pendingFileUploads.push(uploadFile);\n }\n }\n }\n await Promise.all(promises);\n }\n }\n}\n\nfunction toCString(s: string) {\n const buf = Buffer.alloc(s.length + 1);\n const len = buf.write(s);\n buf.writeUInt8(0, len);\n return buf;\n}\n"],"names":["AFCClient","debug","Debug","MAX_OPEN_FILES","ServiceClient","constructor","socket","AFCProtocolClient","getFileInfo","path","response","protocolClient","sendMessage","operation","AFC_OPS","GET_FILE_INFO","data","toCString","strings","currentString","tokens","forEach","token","push","String","fromCharCode","writeFile","fd","Array","prototype","toString","call","length","FILE_WRITE","payload","openFile","Buffer","alloc","writeUInt32LE","AFC_FILE_OPEN_FLAGS","WRONLY","copy","FILE_OPEN","FILE_OPEN_RES","CommandError","closeFile","FILE_CLOSE","uploadFile","srcPath","destPath","srcFile","destFile","Promise","all","promisify","fs","readFile","err","makeDirectory","MAKE_DIR","uploadDirectory","numOpenFiles","pendingFileUploads","_this","uploadDir","dirPath","promises","file","readdirSync","filePath","join","remotePath","relative","lstatSync","isDirectory","then","resolve","reject","promise","res","rej","tries","fn","pop","catch","status","AFC_STATUS","NO_RESOURCES","s","buf","len","write","writeUInt8"],"mappings":"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"}
|
|
@@ -10,25 +10,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "DebugserverClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: ()
|
|
13
|
+
get: function() {
|
|
14
|
+
return DebugserverClient;
|
|
15
|
+
}
|
|
14
16
|
});
|
|
15
17
|
function _debug() {
|
|
16
|
-
const data = /*#__PURE__*/
|
|
18
|
+
const data = /*#__PURE__*/ _interop_require_default(require("debug"));
|
|
17
19
|
_debug = function() {
|
|
18
20
|
return data;
|
|
19
21
|
};
|
|
20
22
|
return data;
|
|
21
23
|
}
|
|
22
24
|
function _path() {
|
|
23
|
-
const data = /*#__PURE__*/
|
|
25
|
+
const data = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
24
26
|
_path = function() {
|
|
25
27
|
return data;
|
|
26
28
|
};
|
|
27
29
|
return data;
|
|
28
30
|
}
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
function
|
|
31
|
+
const _ServiceClient = require("./ServiceClient");
|
|
32
|
+
const _GDBProtocol = require("../protocol/GDBProtocol");
|
|
33
|
+
function _interop_require_default(obj) {
|
|
32
34
|
return obj && obj.__esModule ? obj : {
|
|
33
35
|
default: obj
|
|
34
36
|
};
|
|
@@ -41,7 +43,7 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
41
43
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
42
44
|
})(nodeInterop);
|
|
43
45
|
}
|
|
44
|
-
function
|
|
46
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
45
47
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
46
48
|
return obj;
|
|
47
49
|
}
|
|
@@ -54,7 +56,9 @@ function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
54
56
|
if (cache && cache.has(obj)) {
|
|
55
57
|
return cache.get(obj);
|
|
56
58
|
}
|
|
57
|
-
var newObj = {
|
|
59
|
+
var newObj = {
|
|
60
|
+
__proto__: null
|
|
61
|
+
};
|
|
58
62
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
59
63
|
for(var key in obj){
|
|
60
64
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
@@ -72,51 +76,50 @@ function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
72
76
|
}
|
|
73
77
|
return newObj;
|
|
74
78
|
}
|
|
75
|
-
const debug = (0, _debug().default)(
|
|
76
|
-
class DebugserverClient extends
|
|
79
|
+
const debug = (0, _debug().default)('expo:apple-device:client:debugserver');
|
|
80
|
+
class DebugserverClient extends _ServiceClient.ServiceClient {
|
|
77
81
|
constructor(socket){
|
|
78
|
-
super(socket, new
|
|
79
|
-
this.socket = socket;
|
|
82
|
+
super(socket, new _GDBProtocol.GDBProtocolClient(socket)), this.socket = socket;
|
|
80
83
|
}
|
|
81
84
|
async setMaxPacketSize(size) {
|
|
82
|
-
return this.sendCommand(
|
|
85
|
+
return this.sendCommand('QSetMaxPacketSize:', [
|
|
83
86
|
size.toString()
|
|
84
87
|
]);
|
|
85
88
|
}
|
|
86
89
|
async setWorkingDir(workingDir) {
|
|
87
|
-
return this.sendCommand(
|
|
90
|
+
return this.sendCommand('QSetWorkingDir:', [
|
|
88
91
|
workingDir
|
|
89
92
|
]);
|
|
90
93
|
}
|
|
91
94
|
async checkLaunchSuccess() {
|
|
92
|
-
return this.sendCommand(
|
|
95
|
+
return this.sendCommand('qLaunchSuccess', []);
|
|
93
96
|
}
|
|
94
97
|
async attachByName(name) {
|
|
95
|
-
const hexName = Buffer.from(name).toString(
|
|
98
|
+
const hexName = Buffer.from(name).toString('hex');
|
|
96
99
|
return this.sendCommand(`vAttachName;${hexName}`, []);
|
|
97
100
|
}
|
|
98
101
|
async continue() {
|
|
99
|
-
return this.sendCommand(
|
|
102
|
+
return this.sendCommand('c', []);
|
|
100
103
|
}
|
|
101
104
|
halt() {
|
|
102
105
|
// ^C
|
|
103
|
-
debug(
|
|
104
|
-
return this.protocolClient.socket.write(
|
|
106
|
+
debug('Sending ^C to debugserver');
|
|
107
|
+
return this.protocolClient.socket.write('\u0003');
|
|
105
108
|
}
|
|
106
109
|
async kill() {
|
|
107
110
|
debug(`kill`);
|
|
108
111
|
const msg = {
|
|
109
|
-
cmd:
|
|
112
|
+
cmd: 'k',
|
|
110
113
|
args: []
|
|
111
114
|
};
|
|
112
115
|
return this.protocolClient.sendMessage(msg, (resp, resolve)=>{
|
|
113
116
|
debug(`kill:response: ${resp}`);
|
|
114
|
-
this.protocolClient.socket.write(
|
|
115
|
-
const parts = resp.split(
|
|
117
|
+
this.protocolClient.socket.write('+');
|
|
118
|
+
const parts = resp.split(';');
|
|
116
119
|
for (const part of parts){
|
|
117
|
-
if (part.includes(
|
|
120
|
+
if (part.includes('description')) {
|
|
118
121
|
// description:{hex encoded message like: "Terminated with signal 9"}
|
|
119
|
-
resolve(Buffer.from(part.split(
|
|
122
|
+
resolve(Buffer.from(part.split(':')[1], 'hex').toString('ascii'));
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
});
|
|
@@ -126,7 +129,7 @@ class DebugserverClient extends _serviceClient.ServiceClient {
|
|
|
126
129
|
// A arglen,argnum,arg,
|
|
127
130
|
async launchApp(appPath, executableName) {
|
|
128
131
|
const fullPath = _path().join(appPath, executableName);
|
|
129
|
-
const hexAppPath = Buffer.from(fullPath).toString(
|
|
132
|
+
const hexAppPath = Buffer.from(fullPath).toString('hex');
|
|
130
133
|
const appCommand = `A${hexAppPath.length},0,${hexAppPath}`;
|
|
131
134
|
return this.sendCommand(appCommand, []);
|
|
132
135
|
}
|
|
@@ -138,7 +141,7 @@ class DebugserverClient extends _serviceClient.ServiceClient {
|
|
|
138
141
|
debug(`Sending command: ${cmd}, args: ${args}`);
|
|
139
142
|
const resp = await this.protocolClient.sendMessage(msg);
|
|
140
143
|
// we need to ACK as well
|
|
141
|
-
this.protocolClient.socket.write(
|
|
144
|
+
this.protocolClient.socket.write('+');
|
|
142
145
|
return resp;
|
|
143
146
|
}
|
|
144
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/DebugserverClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\nimport * as path from 'path';\n\nimport { ServiceClient } from './ServiceClient';\nimport { GDBProtocolClient } from '../protocol/GDBProtocol';\n\nconst debug = Debug('expo:apple-device:client:debugserver');\n\nexport class DebugserverClient extends ServiceClient<GDBProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new GDBProtocolClient(socket));\n }\n\n async setMaxPacketSize(size: number) {\n return this.sendCommand('QSetMaxPacketSize:', [size.toString()]);\n }\n\n async setWorkingDir(workingDir: string) {\n return this.sendCommand('QSetWorkingDir:', [workingDir]);\n }\n\n async checkLaunchSuccess() {\n return this.sendCommand('qLaunchSuccess', []);\n }\n\n async attachByName(name: string) {\n const hexName = Buffer.from(name).toString('hex');\n return this.sendCommand(`vAttachName;${hexName}`, []);\n }\n\n async continue() {\n return this.sendCommand('c', []);\n }\n\n halt() {\n // ^C\n debug('Sending ^C to debugserver');\n return this.protocolClient.socket.write('\\u0003');\n }\n\n async kill() {\n debug(`kill`);\n const msg: any = { cmd: 'k', args: [] };\n return this.protocolClient.sendMessage(msg, (resp: string, resolve: any) => {\n debug(`kill:response: ${resp}`);\n this.protocolClient.socket.write('+');\n const parts = resp.split(';');\n for (const part of parts) {\n if (part.includes('description')) {\n // description:{hex encoded message like: \"Terminated with signal 9\"}\n resolve(Buffer.from(part.split(':')[1], 'hex').toString('ascii'));\n }\n }\n });\n }\n\n // TODO support app args\n // https://sourceware.org/gdb/onlinedocs/gdb/Packets.html#Packets\n // A arglen,argnum,arg,\n async launchApp(appPath: string, executableName: string) {\n const fullPath = path.join(appPath, executableName);\n const hexAppPath = Buffer.from(fullPath).toString('hex');\n const appCommand = `A${hexAppPath.length},0,${hexAppPath}`;\n return this.sendCommand(appCommand, []);\n }\n\n async sendCommand(cmd: string, args: string[]) {\n const msg = { cmd, args };\n debug(`Sending command: ${cmd}, args: ${args}`);\n const resp = await this.protocolClient.sendMessage(msg);\n // we need to ACK as well\n this.protocolClient.socket.write('+');\n return resp;\n }\n}\n"],"names":["DebugserverClient","debug","Debug","ServiceClient","constructor","socket","GDBProtocolClient","setMaxPacketSize","size","sendCommand","toString","setWorkingDir","workingDir","checkLaunchSuccess","attachByName","name","hexName","Buffer","from","continue","halt","protocolClient","write","kill","msg","cmd","args","sendMessage","resp","resolve","parts","split","part","includes","launchApp","appPath","executableName","fullPath","path","join","hexAppPath","appCommand","length"],"mappings":"AAAA;;;;;;CAMC
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/DebugserverClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\nimport * as path from 'path';\n\nimport { ServiceClient } from './ServiceClient';\nimport { GDBProtocolClient } from '../protocol/GDBProtocol';\n\nconst debug = Debug('expo:apple-device:client:debugserver');\n\nexport class DebugserverClient extends ServiceClient<GDBProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new GDBProtocolClient(socket));\n }\n\n async setMaxPacketSize(size: number) {\n return this.sendCommand('QSetMaxPacketSize:', [size.toString()]);\n }\n\n async setWorkingDir(workingDir: string) {\n return this.sendCommand('QSetWorkingDir:', [workingDir]);\n }\n\n async checkLaunchSuccess() {\n return this.sendCommand('qLaunchSuccess', []);\n }\n\n async attachByName(name: string) {\n const hexName = Buffer.from(name).toString('hex');\n return this.sendCommand(`vAttachName;${hexName}`, []);\n }\n\n async continue() {\n return this.sendCommand('c', []);\n }\n\n halt() {\n // ^C\n debug('Sending ^C to debugserver');\n return this.protocolClient.socket.write('\\u0003');\n }\n\n async kill() {\n debug(`kill`);\n const msg: any = { cmd: 'k', args: [] };\n return this.protocolClient.sendMessage(msg, (resp: string, resolve: any) => {\n debug(`kill:response: ${resp}`);\n this.protocolClient.socket.write('+');\n const parts = resp.split(';');\n for (const part of parts) {\n if (part.includes('description')) {\n // description:{hex encoded message like: \"Terminated with signal 9\"}\n resolve(Buffer.from(part.split(':')[1], 'hex').toString('ascii'));\n }\n }\n });\n }\n\n // TODO support app args\n // https://sourceware.org/gdb/onlinedocs/gdb/Packets.html#Packets\n // A arglen,argnum,arg,\n async launchApp(appPath: string, executableName: string) {\n const fullPath = path.join(appPath, executableName);\n const hexAppPath = Buffer.from(fullPath).toString('hex');\n const appCommand = `A${hexAppPath.length},0,${hexAppPath}`;\n return this.sendCommand(appCommand, []);\n }\n\n async sendCommand(cmd: string, args: string[]) {\n const msg = { cmd, args };\n debug(`Sending command: ${cmd}, args: ${args}`);\n const resp = await this.protocolClient.sendMessage(msg);\n // we need to ACK as well\n this.protocolClient.socket.write('+');\n return resp;\n }\n}\n"],"names":["DebugserverClient","debug","Debug","ServiceClient","constructor","socket","GDBProtocolClient","setMaxPacketSize","size","sendCommand","toString","setWorkingDir","workingDir","checkLaunchSuccess","attachByName","name","hexName","Buffer","from","continue","halt","protocolClient","write","kill","msg","cmd","args","sendMessage","resp","resolve","parts","split","part","includes","launchApp","appPath","executableName","fullPath","path","join","hexAppPath","appCommand","length"],"mappings":"AAAA;;;;;;CAMC;;;;+BAUYA;;;eAAAA;;;;gEATK;;;;;;;iEAEI;;;;;;+BAEQ;6BACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,MAAMC,QAAQC,IAAAA,gBAAK,EAAC;AAEb,MAAMF,0BAA0BG,4BAAa;IAClDC,YAAY,AAAOC,MAAc,CAAE;QACjC,KAAK,CAACA,QAAQ,IAAIC,8BAAiB,CAACD,eADnBA,SAAAA;IAEnB;IAEA,MAAME,iBAAiBC,IAAY,EAAE;QACnC,OAAO,IAAI,CAACC,WAAW,CAAC,sBAAsB;YAACD,KAAKE,QAAQ;SAAG;IACjE;IAEA,MAAMC,cAAcC,UAAkB,EAAE;QACtC,OAAO,IAAI,CAACH,WAAW,CAAC,mBAAmB;YAACG;SAAW;IACzD;IAEA,MAAMC,qBAAqB;QACzB,OAAO,IAAI,CAACJ,WAAW,CAAC,kBAAkB,EAAE;IAC9C;IAEA,MAAMK,aAAaC,IAAY,EAAE;QAC/B,MAAMC,UAAUC,OAAOC,IAAI,CAACH,MAAML,QAAQ,CAAC;QAC3C,OAAO,IAAI,CAACD,WAAW,CAAC,CAAC,YAAY,EAAEO,SAAS,EAAE,EAAE;IACtD;IAEA,MAAMG,WAAW;QACf,OAAO,IAAI,CAACV,WAAW,CAAC,KAAK,EAAE;IACjC;IAEAW,OAAO;QACL,KAAK;QACLnB,MAAM;QACN,OAAO,IAAI,CAACoB,cAAc,CAAChB,MAAM,CAACiB,KAAK,CAAC;IAC1C;IAEA,MAAMC,OAAO;QACXtB,MAAM,CAAC,IAAI,CAAC;QACZ,MAAMuB,MAAW;YAAEC,KAAK;YAAKC,MAAM,EAAE;QAAC;QACtC,OAAO,IAAI,CAACL,cAAc,CAACM,WAAW,CAACH,KAAK,CAACI,MAAcC;YACzD5B,MAAM,CAAC,eAAe,EAAE2B,MAAM;YAC9B,IAAI,CAACP,cAAc,CAAChB,MAAM,CAACiB,KAAK,CAAC;YACjC,MAAMQ,QAAQF,KAAKG,KAAK,CAAC;YACzB,KAAK,MAAMC,QAAQF,MAAO;gBACxB,IAAIE,KAAKC,QAAQ,CAAC,gBAAgB;oBAChC,qEAAqE;oBACrEJ,QAAQZ,OAAOC,IAAI,CAACc,KAAKD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAOrB,QAAQ,CAAC;gBAC1D;YACF;QACF;IACF;IAEA,wBAAwB;IACxB,iEAAiE;IACjE,uBAAuB;IACvB,MAAMwB,UAAUC,OAAe,EAAEC,cAAsB,EAAE;QACvD,MAAMC,WAAWC,QAAKC,IAAI,CAACJ,SAASC;QACpC,MAAMI,aAAavB,OAAOC,IAAI,CAACmB,UAAU3B,QAAQ,CAAC;QAClD,MAAM+B,aAAa,CAAC,CAAC,EAAED,WAAWE,MAAM,CAAC,GAAG,EAAEF,YAAY;QAC1D,OAAO,IAAI,CAAC/B,WAAW,CAACgC,YAAY,EAAE;IACxC;IAEA,MAAMhC,YAAYgB,GAAW,EAAEC,IAAc,EAAE;QAC7C,MAAMF,MAAM;YAAEC;YAAKC;QAAK;QACxBzB,MAAM,CAAC,iBAAiB,EAAEwB,IAAI,QAAQ,EAAEC,MAAM;QAC9C,MAAME,OAAO,MAAM,IAAI,CAACP,cAAc,CAACM,WAAW,CAACH;QACnD,yBAAyB;QACzB,IAAI,CAACH,cAAc,CAAChB,MAAM,CAACiB,KAAK,CAAC;QACjC,OAAOM;IACT;AACF"}
|
|
@@ -10,23 +10,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "InstallationProxyClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: ()
|
|
13
|
+
get: function() {
|
|
14
|
+
return InstallationProxyClient;
|
|
15
|
+
}
|
|
14
16
|
});
|
|
15
17
|
function _debug() {
|
|
16
|
-
const data = /*#__PURE__*/
|
|
18
|
+
const data = /*#__PURE__*/ _interop_require_default(require("debug"));
|
|
17
19
|
_debug = function() {
|
|
18
20
|
return data;
|
|
19
21
|
};
|
|
20
22
|
return data;
|
|
21
23
|
}
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
function
|
|
24
|
+
const _ServiceClient = require("./ServiceClient");
|
|
25
|
+
const _LockdownProtocol = require("../protocol/LockdownProtocol");
|
|
26
|
+
function _interop_require_default(obj) {
|
|
25
27
|
return obj && obj.__esModule ? obj : {
|
|
26
28
|
default: obj
|
|
27
29
|
};
|
|
28
30
|
}
|
|
29
|
-
const debug = (0, _debug().default)(
|
|
31
|
+
const debug = (0, _debug().default)('expo:apple-device:client:installation_proxy');
|
|
30
32
|
function isIPLookupResponse(resp) {
|
|
31
33
|
return resp.length && resp[0].LookupResult !== undefined;
|
|
32
34
|
}
|
|
@@ -37,25 +39,24 @@ function isIPInstallCFBundleIdentifierResponse(resp) {
|
|
|
37
39
|
return resp.length && resp[0].CFBundleIdentifier !== undefined;
|
|
38
40
|
}
|
|
39
41
|
function isIPInstallCompleteResponse(resp) {
|
|
40
|
-
return resp.length && resp[0].Status ===
|
|
42
|
+
return resp.length && resp[0].Status === 'Complete';
|
|
41
43
|
}
|
|
42
|
-
class InstallationProxyClient extends
|
|
44
|
+
class InstallationProxyClient extends _ServiceClient.ServiceClient {
|
|
43
45
|
constructor(socket){
|
|
44
|
-
super(socket, new
|
|
45
|
-
this.socket = socket;
|
|
46
|
+
super(socket, new _LockdownProtocol.LockdownProtocolClient(socket)), this.socket = socket;
|
|
46
47
|
}
|
|
47
48
|
async lookupApp(bundleIds, options = {
|
|
48
49
|
ReturnAttributes: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
'Path',
|
|
51
|
+
'Container',
|
|
52
|
+
'CFBundleExecutable',
|
|
53
|
+
'CFBundleIdentifier'
|
|
53
54
|
],
|
|
54
|
-
ApplicationsType:
|
|
55
|
+
ApplicationsType: 'Any'
|
|
55
56
|
}) {
|
|
56
57
|
debug(`lookupApp, options: ${JSON.stringify(options)}`);
|
|
57
58
|
let resp = await this.protocolClient.sendMessage({
|
|
58
|
-
Command:
|
|
59
|
+
Command: 'Lookup',
|
|
59
60
|
ClientOptions: {
|
|
60
61
|
BundleIDs: bundleIds,
|
|
61
62
|
...options
|
|
@@ -67,16 +68,16 @@ class InstallationProxyClient extends _serviceClient.ServiceClient {
|
|
|
67
68
|
if (isIPLookupResponse(resp)) {
|
|
68
69
|
return resp[0].LookupResult;
|
|
69
70
|
} else {
|
|
70
|
-
throw new
|
|
71
|
+
throw new _ServiceClient.ResponseError(`There was an error looking up app`, resp);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
async installApp(packagePath, bundleId, options = {
|
|
74
|
-
ApplicationsType:
|
|
75
|
-
PackageType:
|
|
75
|
+
ApplicationsType: 'Any',
|
|
76
|
+
PackageType: 'Developer'
|
|
76
77
|
}, onProgress) {
|
|
77
78
|
debug(`installApp, packagePath: ${packagePath}, bundleId: ${bundleId}`);
|
|
78
79
|
return this.protocolClient.sendMessage({
|
|
79
|
-
Command:
|
|
80
|
+
Command: 'Install',
|
|
80
81
|
PackagePath: packagePath,
|
|
81
82
|
ClientOptions: {
|
|
82
83
|
CFBundleIdentifier: bundleId,
|
|
@@ -103,7 +104,7 @@ class InstallationProxyClient extends _serviceClient.ServiceClient {
|
|
|
103
104
|
} else if (isIPInstallCFBundleIdentifierResponse(resp)) {
|
|
104
105
|
debug(`Installed app: ${resp[0].CFBundleIdentifier}`);
|
|
105
106
|
} else {
|
|
106
|
-
reject(new
|
|
107
|
+
reject(new _ServiceClient.ResponseError('There was an error installing app: ' + require('util').inspect(resp), resp));
|
|
107
108
|
}
|
|
108
109
|
});
|
|
109
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/InstallationProxyClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { LockdownProtocolClient } from '../protocol/LockdownProtocol';\nimport type { LockdownCommand, LockdownResponse } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:installation_proxy');\n\nexport type OnInstallProgressCallback = (props: {\n status: string;\n isComplete: boolean;\n // copiedFiles: number;\n progress: number;\n}) => void;\n\ninterface IPOptions {\n ApplicationsType?: 'Any';\n PackageType?: 'Developer';\n CFBundleIdentifier?: string;\n\n ReturnAttributes?: (\n | 'CFBundleIdentifier'\n | 'ApplicationDSID'\n | 'ApplicationType'\n | 'CFBundleExecutable'\n | 'CFBundleDisplayName'\n | 'CFBundleIconFile'\n | 'CFBundleName'\n | 'CFBundleShortVersionString'\n | 'CFBundleSupportedPlatforms'\n | 'CFBundleURLTypes'\n | 'CodeInfoIdentifier'\n | 'Container'\n | 'Entitlements'\n | 'HasSettingsBundle'\n | 'IsUpgradeable'\n | 'MinimumOSVersion'\n | 'Path'\n | 'SignerIdentity'\n | 'UIDeviceFamily'\n | 'UIFileSharingEnabled'\n | 'UIStatusBarHidden'\n | 'UISupportedInterfaceOrientations'\n )[];\n BundleIDs?: string[];\n [key: string]: undefined | string | string[];\n}\n\ninterface IPInstallPercentCompleteResponseItem extends LockdownResponse {\n PercentComplete: number;\n}\n\ninterface IPInstallCFBundleIdentifierResponseItem {\n CFBundleIdentifier: string;\n}\n\ninterface IPInstallCompleteResponseItem extends LockdownResponse {\n Status: 'Complete';\n}\n/*\n * [{ \"PercentComplete\": 5, \"Status\": \"CreatingStagingDirectory\" }]\n * ...\n * [{ \"PercentComplete\": 90, \"Status\": \"GeneratingApplicationMap\" }]\n * [{ \"CFBundleIdentifier\": \"my.company.app\" }]\n * [{ \"Status\": \"Complete\" }]\n */\ntype IPInstallPercentCompleteResponse = IPInstallPercentCompleteResponseItem[];\ntype IPInstallCFBundleIdentifierResponse = IPInstallCFBundleIdentifierResponseItem[];\ntype IPInstallCompleteResponse = IPInstallCompleteResponseItem[];\n\ninterface IPMessage extends LockdownCommand {\n Command: string;\n ClientOptions: IPOptions;\n}\n\ninterface IPLookupResponseItem extends LockdownResponse {\n LookupResult: IPLookupResult;\n}\n/*\n * [{\n * LookupResult: IPLookupResult,\n * Status: \"Complete\"\n * }]\n */\ntype IPLookupResponse = IPLookupResponseItem[];\n\nexport interface IPLookupResult {\n // BundleId\n [key: string]: {\n Container: string;\n CFBundleIdentifier: string;\n CFBundleExecutable: string;\n Path: string;\n };\n}\n\nfunction isIPLookupResponse(resp: any): resp is IPLookupResponse {\n return resp.length && resp[0].LookupResult !== undefined;\n}\n\nfunction isIPInstallPercentCompleteResponse(resp: any): resp is IPInstallPercentCompleteResponse {\n return resp.length && resp[0].PercentComplete !== undefined;\n}\n\nfunction isIPInstallCFBundleIdentifierResponse(\n resp: any\n): resp is IPInstallCFBundleIdentifierResponse {\n return resp.length && resp[0].CFBundleIdentifier !== undefined;\n}\n\nfunction isIPInstallCompleteResponse(resp: any): resp is IPInstallCompleteResponse {\n return resp.length && resp[0].Status === 'Complete';\n}\n\nexport class InstallationProxyClient extends ServiceClient<LockdownProtocolClient<IPMessage>> {\n constructor(public socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async lookupApp(\n bundleIds: string[],\n options: IPOptions = {\n ReturnAttributes: ['Path', 'Container', 'CFBundleExecutable', 'CFBundleIdentifier'],\n ApplicationsType: 'Any',\n }\n ) {\n debug(`lookupApp, options: ${JSON.stringify(options)}`);\n\n let resp = await this.protocolClient.sendMessage({\n Command: 'Lookup',\n ClientOptions: {\n BundleIDs: bundleIds,\n ...options,\n },\n });\n if (resp && !Array.isArray(resp)) resp = [resp];\n if (isIPLookupResponse(resp)) {\n return resp[0].LookupResult;\n } else {\n throw new ResponseError(`There was an error looking up app`, resp);\n }\n }\n\n async installApp(\n packagePath: string,\n bundleId: string,\n options: IPOptions = {\n ApplicationsType: 'Any',\n PackageType: 'Developer',\n },\n onProgress: OnInstallProgressCallback\n ) {\n debug(`installApp, packagePath: ${packagePath}, bundleId: ${bundleId}`);\n\n return this.protocolClient.sendMessage(\n {\n Command: 'Install',\n PackagePath: packagePath,\n ClientOptions: {\n CFBundleIdentifier: bundleId,\n ...options,\n },\n },\n (resp, resolve, reject) => {\n if (resp && !Array.isArray(resp)) resp = [resp];\n\n if (isIPInstallCompleteResponse(resp)) {\n onProgress({\n isComplete: true,\n progress: 100,\n status: resp[0].Status,\n });\n resolve();\n } else if (isIPInstallPercentCompleteResponse(resp)) {\n onProgress({\n isComplete: false,\n progress: resp[0].PercentComplete,\n status: resp[0].Status,\n });\n debug(`Installation status: ${resp[0].Status}, %${resp[0].PercentComplete}`);\n } else if (isIPInstallCFBundleIdentifierResponse(resp)) {\n debug(`Installed app: ${resp[0].CFBundleIdentifier}`);\n } else {\n reject(\n new ResponseError(\n 'There was an error installing app: ' + require('util').inspect(resp),\n resp\n )\n );\n }\n }\n );\n }\n}\n"],"names":["InstallationProxyClient","debug","Debug","isIPLookupResponse","resp","length","LookupResult","undefined","isIPInstallPercentCompleteResponse","PercentComplete","isIPInstallCFBundleIdentifierResponse","CFBundleIdentifier","isIPInstallCompleteResponse","Status","ServiceClient","constructor","socket","LockdownProtocolClient","lookupApp","bundleIds","options","ReturnAttributes","ApplicationsType","JSON","stringify","protocolClient","sendMessage","Command","ClientOptions","BundleIDs","Array","isArray","ResponseError","installApp","packagePath","bundleId","PackageType","onProgress","PackagePath","resolve","reject","isComplete","progress","status","require","inspect"],"mappings":"AAAA;;;;;;CAMC
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/InstallationProxyClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { LockdownProtocolClient } from '../protocol/LockdownProtocol';\nimport type { LockdownCommand, LockdownResponse } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:installation_proxy');\n\nexport type OnInstallProgressCallback = (props: {\n status: string;\n isComplete: boolean;\n // copiedFiles: number;\n progress: number;\n}) => void;\n\ninterface IPOptions {\n ApplicationsType?: 'Any';\n PackageType?: 'Developer';\n CFBundleIdentifier?: string;\n\n ReturnAttributes?: (\n | 'CFBundleIdentifier'\n | 'ApplicationDSID'\n | 'ApplicationType'\n | 'CFBundleExecutable'\n | 'CFBundleDisplayName'\n | 'CFBundleIconFile'\n | 'CFBundleName'\n | 'CFBundleShortVersionString'\n | 'CFBundleSupportedPlatforms'\n | 'CFBundleURLTypes'\n | 'CodeInfoIdentifier'\n | 'Container'\n | 'Entitlements'\n | 'HasSettingsBundle'\n | 'IsUpgradeable'\n | 'MinimumOSVersion'\n | 'Path'\n | 'SignerIdentity'\n | 'UIDeviceFamily'\n | 'UIFileSharingEnabled'\n | 'UIStatusBarHidden'\n | 'UISupportedInterfaceOrientations'\n )[];\n BundleIDs?: string[];\n [key: string]: undefined | string | string[];\n}\n\ninterface IPInstallPercentCompleteResponseItem extends LockdownResponse {\n PercentComplete: number;\n}\n\ninterface IPInstallCFBundleIdentifierResponseItem {\n CFBundleIdentifier: string;\n}\n\ninterface IPInstallCompleteResponseItem extends LockdownResponse {\n Status: 'Complete';\n}\n/*\n * [{ \"PercentComplete\": 5, \"Status\": \"CreatingStagingDirectory\" }]\n * ...\n * [{ \"PercentComplete\": 90, \"Status\": \"GeneratingApplicationMap\" }]\n * [{ \"CFBundleIdentifier\": \"my.company.app\" }]\n * [{ \"Status\": \"Complete\" }]\n */\ntype IPInstallPercentCompleteResponse = IPInstallPercentCompleteResponseItem[];\ntype IPInstallCFBundleIdentifierResponse = IPInstallCFBundleIdentifierResponseItem[];\ntype IPInstallCompleteResponse = IPInstallCompleteResponseItem[];\n\ninterface IPMessage extends LockdownCommand {\n Command: string;\n ClientOptions: IPOptions;\n}\n\ninterface IPLookupResponseItem extends LockdownResponse {\n LookupResult: IPLookupResult;\n}\n/*\n * [{\n * LookupResult: IPLookupResult,\n * Status: \"Complete\"\n * }]\n */\ntype IPLookupResponse = IPLookupResponseItem[];\n\nexport interface IPLookupResult {\n // BundleId\n [key: string]: {\n Container: string;\n CFBundleIdentifier: string;\n CFBundleExecutable: string;\n Path: string;\n };\n}\n\nfunction isIPLookupResponse(resp: any): resp is IPLookupResponse {\n return resp.length && resp[0].LookupResult !== undefined;\n}\n\nfunction isIPInstallPercentCompleteResponse(resp: any): resp is IPInstallPercentCompleteResponse {\n return resp.length && resp[0].PercentComplete !== undefined;\n}\n\nfunction isIPInstallCFBundleIdentifierResponse(\n resp: any\n): resp is IPInstallCFBundleIdentifierResponse {\n return resp.length && resp[0].CFBundleIdentifier !== undefined;\n}\n\nfunction isIPInstallCompleteResponse(resp: any): resp is IPInstallCompleteResponse {\n return resp.length && resp[0].Status === 'Complete';\n}\n\nexport class InstallationProxyClient extends ServiceClient<LockdownProtocolClient<IPMessage>> {\n constructor(public socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async lookupApp(\n bundleIds: string[],\n options: IPOptions = {\n ReturnAttributes: ['Path', 'Container', 'CFBundleExecutable', 'CFBundleIdentifier'],\n ApplicationsType: 'Any',\n }\n ) {\n debug(`lookupApp, options: ${JSON.stringify(options)}`);\n\n let resp = await this.protocolClient.sendMessage({\n Command: 'Lookup',\n ClientOptions: {\n BundleIDs: bundleIds,\n ...options,\n },\n });\n if (resp && !Array.isArray(resp)) resp = [resp];\n if (isIPLookupResponse(resp)) {\n return resp[0].LookupResult;\n } else {\n throw new ResponseError(`There was an error looking up app`, resp);\n }\n }\n\n async installApp(\n packagePath: string,\n bundleId: string,\n options: IPOptions = {\n ApplicationsType: 'Any',\n PackageType: 'Developer',\n },\n onProgress: OnInstallProgressCallback\n ) {\n debug(`installApp, packagePath: ${packagePath}, bundleId: ${bundleId}`);\n\n return this.protocolClient.sendMessage(\n {\n Command: 'Install',\n PackagePath: packagePath,\n ClientOptions: {\n CFBundleIdentifier: bundleId,\n ...options,\n },\n },\n (resp, resolve, reject) => {\n if (resp && !Array.isArray(resp)) resp = [resp];\n\n if (isIPInstallCompleteResponse(resp)) {\n onProgress({\n isComplete: true,\n progress: 100,\n status: resp[0].Status,\n });\n resolve();\n } else if (isIPInstallPercentCompleteResponse(resp)) {\n onProgress({\n isComplete: false,\n progress: resp[0].PercentComplete,\n status: resp[0].Status,\n });\n debug(`Installation status: ${resp[0].Status}, %${resp[0].PercentComplete}`);\n } else if (isIPInstallCFBundleIdentifierResponse(resp)) {\n debug(`Installed app: ${resp[0].CFBundleIdentifier}`);\n } else {\n reject(\n new ResponseError(\n 'There was an error installing app: ' + require('util').inspect(resp),\n resp\n )\n );\n }\n }\n );\n }\n}\n"],"names":["InstallationProxyClient","debug","Debug","isIPLookupResponse","resp","length","LookupResult","undefined","isIPInstallPercentCompleteResponse","PercentComplete","isIPInstallCFBundleIdentifierResponse","CFBundleIdentifier","isIPInstallCompleteResponse","Status","ServiceClient","constructor","socket","LockdownProtocolClient","lookupApp","bundleIds","options","ReturnAttributes","ApplicationsType","JSON","stringify","protocolClient","sendMessage","Command","ClientOptions","BundleIDs","Array","isArray","ResponseError","installApp","packagePath","bundleId","PackageType","onProgress","PackagePath","resolve","reject","isComplete","progress","status","require","inspect"],"mappings":"AAAA;;;;;;CAMC;;;;+BAoHYA;;;eAAAA;;;;gEAnHK;;;;;;+BAG2B;kCACN;;;;;;AAGvC,MAAMC,QAAQC,IAAAA,gBAAK,EAAC;AA0FpB,SAASC,mBAAmBC,IAAS;IACnC,OAAOA,KAAKC,MAAM,IAAID,IAAI,CAAC,EAAE,CAACE,YAAY,KAAKC;AACjD;AAEA,SAASC,mCAAmCJ,IAAS;IACnD,OAAOA,KAAKC,MAAM,IAAID,IAAI,CAAC,EAAE,CAACK,eAAe,KAAKF;AACpD;AAEA,SAASG,sCACPN,IAAS;IAET,OAAOA,KAAKC,MAAM,IAAID,IAAI,CAAC,EAAE,CAACO,kBAAkB,KAAKJ;AACvD;AAEA,SAASK,4BAA4BR,IAAS;IAC5C,OAAOA,KAAKC,MAAM,IAAID,IAAI,CAAC,EAAE,CAACS,MAAM,KAAK;AAC3C;AAEO,MAAMb,gCAAgCc,4BAAa;IACxDC,YAAY,AAAOC,MAAc,CAAE;QACjC,KAAK,CAACA,QAAQ,IAAIC,wCAAsB,CAACD,eADxBA,SAAAA;IAEnB;IAEA,MAAME,UACJC,SAAmB,EACnBC,UAAqB;QACnBC,kBAAkB;YAAC;YAAQ;YAAa;YAAsB;SAAqB;QACnFC,kBAAkB;IACpB,CAAC,EACD;QACArB,MAAM,CAAC,oBAAoB,EAAEsB,KAAKC,SAAS,CAACJ,UAAU;QAEtD,IAAIhB,OAAO,MAAM,IAAI,CAACqB,cAAc,CAACC,WAAW,CAAC;YAC/CC,SAAS;YACTC,eAAe;gBACbC,WAAWV;gBACX,GAAGC,OAAO;YACZ;QACF;QACA,IAAIhB,QAAQ,CAAC0B,MAAMC,OAAO,CAAC3B,OAAOA,OAAO;YAACA;SAAK;QAC/C,IAAID,mBAAmBC,OAAO;YAC5B,OAAOA,IAAI,CAAC,EAAE,CAACE,YAAY;QAC7B,OAAO;YACL,MAAM,IAAI0B,4BAAa,CAAC,CAAC,iCAAiC,CAAC,EAAE5B;QAC/D;IACF;IAEA,MAAM6B,WACJC,WAAmB,EACnBC,QAAgB,EAChBf,UAAqB;QACnBE,kBAAkB;QAClBc,aAAa;IACf,CAAC,EACDC,UAAqC,EACrC;QACApC,MAAM,CAAC,yBAAyB,EAAEiC,YAAY,YAAY,EAAEC,UAAU;QAEtE,OAAO,IAAI,CAACV,cAAc,CAACC,WAAW,CACpC;YACEC,SAAS;YACTW,aAAaJ;YACbN,eAAe;gBACbjB,oBAAoBwB;gBACpB,GAAGf,OAAO;YACZ;QACF,GACA,CAAChB,MAAMmC,SAASC;YACd,IAAIpC,QAAQ,CAAC0B,MAAMC,OAAO,CAAC3B,OAAOA,OAAO;gBAACA;aAAK;YAE/C,IAAIQ,4BAA4BR,OAAO;gBACrCiC,WAAW;oBACTI,YAAY;oBACZC,UAAU;oBACVC,QAAQvC,IAAI,CAAC,EAAE,CAACS,MAAM;gBACxB;gBACA0B;YACF,OAAO,IAAI/B,mCAAmCJ,OAAO;gBACnDiC,WAAW;oBACTI,YAAY;oBACZC,UAAUtC,IAAI,CAAC,EAAE,CAACK,eAAe;oBACjCkC,QAAQvC,IAAI,CAAC,EAAE,CAACS,MAAM;gBACxB;gBACAZ,MAAM,CAAC,qBAAqB,EAAEG,IAAI,CAAC,EAAE,CAACS,MAAM,CAAC,GAAG,EAAET,IAAI,CAAC,EAAE,CAACK,eAAe,EAAE;YAC7E,OAAO,IAAIC,sCAAsCN,OAAO;gBACtDH,MAAM,CAAC,eAAe,EAAEG,IAAI,CAAC,EAAE,CAACO,kBAAkB,EAAE;YACtD,OAAO;gBACL6B,OACE,IAAIR,4BAAa,CACf,wCAAwCY,QAAQ,QAAQC,OAAO,CAACzC,OAChEA;YAGN;QACF;IAEJ;AACF"}
|