@expo/cli 0.18.0 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +90 -114
- package/build/bin/cli.map +1 -1
- package/build/src/api/endpoint.js +11 -3
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js +7 -4
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +13 -11
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +7 -4
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +7 -4
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +7 -4
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/graphql/client.js +55 -35
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/queries/AppQuery.js +9 -7
- package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
- package/build/src/api/graphql/queries/UserQuery.js +7 -5
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/graphql/types/App.js +6 -4
- package/build/src/api/graphql/types/App.js.map +1 -1
- package/build/src/api/rest/cache/FileSystemCache.js +6 -4
- package/build/src/api/rest/cache/FileSystemCache.js.map +1 -1
- package/build/src/api/rest/cache/response.js +4 -1
- package/build/src/api/rest/cache/response.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js +21 -12
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +36 -29
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +4 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js +5 -2
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js +40 -19
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js +7 -4
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/settings.js +9 -4
- package/build/src/api/settings.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +16 -8
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +10 -8
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +66 -41
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +46 -25
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +70 -50
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +66 -41
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +62 -43
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +46 -30
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js +14 -11
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +61 -46
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js +10 -8
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/resolveOptions.js +7 -4
- package/build/src/customize/resolveOptions.js.map +1 -1
- package/build/src/customize/templates.js +31 -34
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +43 -28
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +7 -6
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +51 -38
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/index.js +48 -36
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +7 -4
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +20 -8
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +84 -67
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +62 -43
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +47 -26
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportHermes.js +19 -11
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +49 -38
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +19 -11
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +42 -39
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +9 -6
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js +7 -4
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/html.js +12 -4
- package/build/src/export/html.js.map +1 -1
- package/build/src/export/index.js +49 -33
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +22 -6
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +38 -24
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +15 -7
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +19 -15
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +42 -38
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +15 -12
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js +47 -31
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/web/resolveOptions.js +4 -1
- package/build/src/export/web/resolveOptions.js.map +1 -1
- package/build/src/export/writeContents.js +12 -7
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/graphql/generated.js +141 -128
- package/build/src/graphql/generated.js.map +1 -1
- package/build/src/install/applyPlugins.js +43 -25
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/checkPackages.js +55 -35
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +52 -35
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js +15 -13
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +90 -65
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +48 -27
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/resolveOptions.js +8 -5
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +15 -7
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/lint/ESlintPrerequisite.js +174 -0
- package/build/src/lint/ESlintPrerequisite.js.map +1 -0
- package/build/src/lint/index.js +66 -0
- package/build/src/lint/index.js.map +1 -0
- package/build/src/lint/lintAsync.js +33 -0
- package/build/src/lint/lintAsync.js.map +1 -0
- package/build/src/log.js +20 -14
- package/build/src/log.js.map +1 -1
- package/build/src/login/index.js +43 -25
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js +43 -25
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +65 -42
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +50 -29
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +19 -13
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js +54 -28
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +52 -38
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +68 -51
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +15 -10
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +60 -35
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +66 -40
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +67 -44
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +70 -49
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +44 -23
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/register/index.js +43 -25
- package/build/src/register/index.js.map +1 -1
- package/build/src/register/registerAsync.js +14 -11
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/index.js +47 -31
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveDevice.js +9 -6
- package/build/src/run/android/resolveDevice.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +10 -9
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +14 -12
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +6 -3
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +12 -9
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +27 -24
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js +11 -8
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +15 -7
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js +49 -35
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +75 -51
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +31 -24
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +66 -33
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +73 -47
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +53 -26
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +15 -6
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +54 -27
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +56 -30
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +18 -4
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +22 -13
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +57 -31
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +79 -66
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +28 -14
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +24 -11
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +26 -13
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +23 -10
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +27 -20
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +49 -28
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +61 -36
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/settings.js +11 -3
- package/build/src/run/ios/codeSigning/settings.js.map +1 -1
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +7 -5
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +14 -8
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +50 -34
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +52 -31
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +17 -13
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +63 -39
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +57 -34
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +15 -12
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js +6 -3
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +63 -42
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/resolveBundlerProps.js +8 -5
- package/build/src/run/resolveBundlerProps.js.map +1 -1
- package/build/src/run/startBundler.js +47 -26
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/detectDevClient.js +6 -3
- package/build/src/start/detectDevClient.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +15 -7
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/SecurityBinPrerequisite.js +7 -4
- package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +44 -23
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +44 -23
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +61 -36
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +15 -12
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +49 -28
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +98 -53
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +17 -9
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +23 -15
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/resolvePackages.js +19 -13
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +63 -41
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +64 -39
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/ngrok/NgrokResolver.js +12 -5
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +59 -41
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +59 -36
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +57 -31
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +56 -42
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js +43 -22
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +60 -38
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +85 -68
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +78 -57
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +9 -6
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js +41 -20
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +55 -35
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js +19 -17
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +15 -12
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +6 -4
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +70 -50
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +9 -6
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidSdk.js +11 -8
- package/build/src/start/platforms/android/AndroidSdk.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js +43 -22
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +73 -52
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +57 -31
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +63 -42
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +11 -10
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +18 -11
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +14 -14
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +7 -4
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +80 -54
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +7 -4
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/assertSystemRequirements.js +11 -8
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +50 -29
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +53 -29
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +18 -12
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +65 -42
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +67 -44
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +8 -5
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +19 -16
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/project/dotExpo.js +13 -5
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/project/settings.js +6 -4
- package/build/src/start/project/settings.js.map +1 -1
- package/build/src/start/resolveOptions.js +26 -19
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +66 -46
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +64 -44
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +81 -69
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +21 -16
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +49 -31
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/ReactDevToolsProxy.js +14 -6
- package/build/src/start/server/ReactDevToolsProxy.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +44 -23
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +46 -34
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +135 -108
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +24 -17
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +18 -8
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +31 -20
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +76 -51
- package/build/src/start/server/metro/createJResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +22 -14
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js +4 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +10 -9
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js +14 -13
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
- package/build/src/start/server/metro/debugging/getDebuggerType.js +5 -2
- package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +5 -2
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/PageReload.js +5 -2
- package/build/src/start/server/metro/debugging/messageHandlers/PageReload.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +7 -4
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +7 -4
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +7 -4
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js +7 -4
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js +4 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
- package/build/src/start/server/metro/externals.js +21 -10
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +20 -7
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +21 -17
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +15 -7
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +57 -44
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +43 -34
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroErrors.js +11 -2
- package/build/src/start/server/metro/metroErrors.js.map +1 -1
- package/build/src/start/server/metro/metroVirtualModules.js +10 -2
- package/build/src/start/server/metro/metroVirtualModules.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +5 -2
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/router.js +27 -20
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +21 -14
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +7 -7
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +12 -4
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +107 -81
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +72 -42
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js +4 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +4 -1
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +13 -5
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +15 -12
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +30 -23
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +47 -21
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +8 -5
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +6 -3
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +23 -16
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +84 -60
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js +14 -7
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +47 -26
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +11 -8
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +30 -24
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +16 -8
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +4 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +16 -12
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +59 -37
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +22 -16
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +9 -6
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +11 -4
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +26 -18
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/mutations.js +11 -4
- package/build/src/start/server/middleware/mutations.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js +65 -41
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +14 -6
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/suppressErrorMiddleware.js +4 -1
- package/build/src/start/server/middleware/suppressErrorMiddleware.js.map +1 -1
- package/build/src/start/server/openPlatforms.js +7 -6
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +5 -2
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +62 -33
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +12 -4
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +52 -51
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +22 -19
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +18 -11
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +21 -15
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +81 -56
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +47 -26
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/server/webpack/formatWebpackMessages.js +35 -25
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +13 -5
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +54 -28
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +73 -52
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +46 -25
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/getDevClientProperties.js +29 -21
- package/build/src/utils/analytics/getDevClientProperties.js.map +1 -1
- package/build/src/utils/analytics/getMetroDebugProperties.js +4 -1
- package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
- package/build/src/utils/analytics/getMetroProperties.js +4 -1
- package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +14 -6
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/ansi.js +5 -2
- package/build/src/utils/ansi.js.map +1 -1
- package/build/src/utils/args.js +57 -29
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/array.js +16 -9
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +77 -53
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +80 -58
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/createFileTransform.js +13 -5
- package/build/src/utils/createFileTransform.js.map +1 -1
- package/build/src/utils/delay.js +13 -6
- package/build/src/utils/delay.js.map +1 -1
- package/build/src/utils/dir.js +24 -21
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +16 -13
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +26 -20
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +50 -24
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +35 -33
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +17 -9
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/exit.js +10 -7
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/findUp.js +22 -4
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/fn.js +11 -3
- package/build/src/utils/fn.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +71 -45
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +52 -26
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +64 -38
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +14 -9
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/interactive.js +5 -2
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/ip.js +5 -2
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/isModuleSymlinked.js +7 -4
- package/build/src/utils/isModuleSymlinked.js.map +1 -1
- package/build/src/utils/link.js +13 -5
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +22 -17
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +56 -30
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +43 -22
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/nodeEnv.js +6 -1
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/nodeModules.js +9 -6
- package/build/src/utils/nodeModules.js.map +1 -1
- package/build/src/utils/npm.js +32 -24
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js +12 -4
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/open.js +7 -4
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +25 -21
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +53 -27
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +58 -32
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +49 -28
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/progress.js +16 -12
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +33 -28
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/resolveArgs.js +23 -20
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/scheme.js +61 -37
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/strings.js +11 -4
- package/build/src/utils/strings.js.map +1 -1
- package/build/src/utils/tar.js +43 -22
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/DetachedClient.js +8 -5
- package/build/src/utils/telemetry/DetachedClient.js.map +1 -1
- package/build/src/utils/telemetry/RudderClient.js +12 -9
- package/build/src/utils/telemetry/RudderClient.js.map +1 -1
- package/build/src/utils/telemetry/flushDetached.js +8 -7
- package/build/src/utils/telemetry/flushDetached.js.map +1 -1
- package/build/src/utils/telemetry/getContext.js +48 -28
- package/build/src/utils/telemetry/getContext.js.map +1 -1
- package/build/src/utils/telemetry/index.js +16 -11
- package/build/src/utils/telemetry/index.js.map +1 -1
- package/build/src/utils/template.js +27 -2
- package/build/src/utils/template.js.map +1 -1
- package/build/src/utils/terminal.js +5 -2
- package/build/src/utils/terminal.js.map +1 -1
- package/build/src/utils/tsconfig/evaluateTsConfig.js +18 -12
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +18 -10
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +8 -4
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +12 -9
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
- package/build/src/utils/url.js +17 -10
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +32 -25
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +15 -11
- package/build/src/utils/variadic.js.map +1 -1
- package/build/src/whoami/index.js +43 -25
- package/build/src/whoami/index.js.map +1 -1
- package/build/src/whoami/whoamiAsync.js +44 -23
- package/build/src/whoami/whoamiAsync.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/platforms/ios/simctl.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\n\nimport { xcrunAsync } from './xcrun';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\ntype DeviceState = 'Shutdown' | 'Booted';\n\nexport type OSType = 'iOS' | 'tvOS' | 'watchOS' | 'macOS';\n\nexport type Device = {\n availabilityError?: 'runtime profile not found';\n /** '/Users/name/Library/Developer/CoreSimulator/Devices/00E55DC0-0364-49DF-9EC6-77BE587137D4/data' */\n dataPath: string;\n /** @example `2811236352` */\n dataPathSize?: number;\n /** '/Users/name/Library/Logs/CoreSimulator/00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n logPath: string;\n /** @example `479232` */\n logPathSize?: number;\n /** '00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n udid: string;\n /** 'com.apple.CoreSimulator.SimRuntime.iOS-15-1' */\n runtime: string;\n /** If the device is \"available\" which generally means that the OS files haven't been deleted (this can happen when Xcode updates). */\n isAvailable: boolean;\n /** 'com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro' */\n deviceTypeIdentifier: string;\n state: DeviceState;\n /** 'iPhone 13 Pro' */\n name: string;\n /** Type of OS the device uses. */\n osType: OSType;\n /** '15.1' */\n osVersion: string;\n /** 'iPhone 13 Pro (15.1)' */\n windowName: string;\n};\n\ntype SimulatorDeviceList = {\n devices: {\n [runtime: string]: Device[];\n };\n};\n\ntype DeviceContext = Pick<Device, 'udid'>;\n\n/** Returns true if the given value is an `OSType`, if we don't recognize the value we continue anyways but warn. */\nexport function isOSType(value: any): value is OSType {\n if (!value || typeof value !== 'string') return false;\n\n const knownTypes = ['iOS', 'tvOS', 'watchOS', 'macOS'];\n if (!knownTypes.includes(value)) {\n Log.warn(`Unknown OS type: ${value}. Expected one of: ${knownTypes.join(', ')}`);\n }\n return true;\n}\n\n/**\n * Returns the local path for the installed tar.app. Returns null when the app isn't installed.\n *\n * @param device context for selecting a device.\n * @param props.appId bundle identifier for app.\n * @returns local file path to installed app binary, e.g. '/Users/evanbacon/Library/Developer/CoreSimulator/Devices/EFEEA6EF-E3F5-4EDE-9B72-29EAFA7514AE/data/Containers/Bundle/Application/FA43A0C6-C2AD-442D-B8B1-EAF3E88CF3BF/Exponent-2.21.3.tar.app'\n */\nexport async function getContainerPathAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n }: {\n appId: string;\n }\n): Promise<string | null> {\n try {\n const { stdout } = await simctlAsync(['get_app_container', resolveId(device), appId]);\n return stdout.trim();\n } catch (error: any) {\n if (error.stderr?.match(/No such file or directory/)) {\n return null;\n }\n throw error;\n }\n}\n\n/** Return a value from an installed app's Info.plist. */\nexport async function getInfoPlistValueAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n key,\n containerPath,\n }: {\n appId: string;\n key: string;\n containerPath?: string;\n }\n): Promise<string | null> {\n const ensuredContainerPath = containerPath ?? (await getContainerPathAsync(device, { appId }));\n if (ensuredContainerPath) {\n try {\n const { output } = await spawnAsync(\n 'defaults',\n ['read', `${ensuredContainerPath}/Info`, key],\n {\n stdio: 'pipe',\n }\n );\n return output.join('\\n').trim();\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Open a URL on a device. The url can have any protocol. */\nexport async function openUrlAsync(\n device: Partial<DeviceContext>,\n options: { url: string }\n): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['openurl', resolveId(device), options.url]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to lookup in current state: Shut/)) {\n throw error;\n }\n\n // If the device was in a weird in-between state (\"Shutting Down\" or \"Shutdown\"), then attempt to reboot it and try again.\n // This can happen when quitting the Simulator app, and immediately pressing `i` to reopen the project.\n\n // First boot the simulator\n await bootDeviceAsync({ udid: resolveId(device) });\n\n // Finally, try again...\n return await openUrlAsync(device, options);\n }\n}\n\n/** Open a simulator using a bundle identifier. If no app with a matching bundle identifier is installed then an error will be thrown. */\nexport async function openAppIdAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n const results = await openAppIdInternalAsync(device, options);\n // Similar to 194, this is a conformance issue which indicates that the given device has no app that can handle our launch request.\n if (results.status === 4) {\n throw new CommandError('APP_NOT_INSTALLED', results.stderr);\n }\n return results;\n}\nasync function openAppIdInternalAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n try {\n return await simctlAsync(['launch', resolveId(device), options.appId]);\n } catch (error: any) {\n if ('status' in error) {\n return error;\n }\n throw error;\n }\n}\n\n// This will only boot in headless mode if the Simulator app is not running.\nexport async function bootAsync(device: DeviceContext): Promise<Device | null> {\n await bootDeviceAsync(device);\n return isDeviceBootedAsync(device);\n}\n\n/** Returns a list of devices whose current state is 'Booted' as an array. */\nexport async function getBootedSimulatorsAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flatMap((runtime) =>\n runtime.filter((device) => device.state === 'Booted')\n );\n}\n\n/** Returns the current device if its state is 'Booted'. */\nexport async function isDeviceBootedAsync(device: Partial<DeviceContext>): Promise<Device | null> {\n // Simulators can be booted even if the app isn't running :(\n const devices = await getBootedSimulatorsAsync();\n if (device.udid) {\n return devices.find((bootedDevice) => bootedDevice.udid === device.udid) ?? null;\n }\n\n return devices[0] ?? null;\n}\n\n/** Boot a device. */\nexport async function bootDeviceAsync(device: DeviceContext): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['boot', device.udid]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to boot device in current state: Booted/)) {\n throw error;\n }\n }\n}\n\n/** Install a binary file on the device. */\nexport async function installAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Local absolute file path to an app binary that is built and provisioned for iOS simulators. */\n filePath: string;\n }\n): Promise<any> {\n return simctlAsync(['install', resolveId(device), options.filePath]);\n}\n\n/** Uninstall an app from the provided device. */\nexport async function uninstallAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Bundle identifier */\n appId: string;\n }\n): Promise<any> {\n return simctlAsync(['uninstall', resolveId(device), options.appId]);\n}\n\nfunction parseSimControlJSONResults(input: string): any {\n try {\n return JSON.parse(input);\n } catch (error: any) {\n // Nov 15, 2020: Observed this can happen when opening the simulator and the simulator prompts the user to update the xcode command line tools.\n // Unexpected token I in JSON at position 0\n if (error.message.includes('Unexpected token')) {\n Log.error(`Apple's simctl returned malformed JSON:\\n${input}`);\n }\n throw error;\n }\n}\n\n/** Get all runtime devices given a certain type. */\nasync function getRuntimesAsync(\n type: 'devices' | 'devicetypes' | 'runtimes' | 'pairs',\n query?: string | 'available'\n): Promise<SimulatorDeviceList> {\n const result = await simctlAsync(['list', type, '--json', query]);\n const info = parseSimControlJSONResults(result.stdout) as SimulatorDeviceList;\n\n for (const runtime of Object.keys(info.devices)) {\n // Given a string like 'com.apple.CoreSimulator.SimRuntime.tvOS-13-4'\n const runtimeSuffix = runtime.split('com.apple.CoreSimulator.SimRuntime.').pop()!;\n // Create an array [tvOS, 13, 4]\n const [osType, ...osVersionComponents] = runtimeSuffix.split('-');\n // Join the end components [13, 4] -> '13.4'\n const osVersion = osVersionComponents.join('.');\n const sims = info.devices[runtime];\n for (const device of sims) {\n device.runtime = runtime;\n device.osVersion = osVersion;\n device.windowName = `${device.name} (${osVersion})`;\n device.osType = osType as OSType;\n }\n }\n return info;\n}\n\n/** Return a list of iOS simulators. */\nexport async function getDevicesAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flat();\n}\n\n/** Run a `simctl` command. */\nexport async function simctlAsync(\n args: (string | undefined)[],\n options?: SpawnOptions\n): Promise<SpawnResult> {\n return xcrunAsync(['simctl', ...args], options);\n}\n\nfunction resolveId(device: Partial<DeviceContext>): string {\n return device.udid ?? 'booted';\n}\n"],"names":["isOSType","getContainerPathAsync","getInfoPlistValueAsync","openUrlAsync","openAppIdAsync","bootAsync","getBootedSimulatorsAsync","isDeviceBootedAsync","bootDeviceAsync","installAsync","uninstallAsync","getDevicesAsync","simctlAsync","Log","value","knownTypes","includes","warn","join","device","appId","stdout","resolveId","trim","error","stderr","match","key","containerPath","ensuredContainerPath","output","spawnAsync","stdio","options","url","udid","results","openAppIdInternalAsync","status","CommandError","simulatorDeviceInfo","getRuntimesAsync","Object","values","devices","flatMap","runtime","filter","state","find","bootedDevice","filePath","parseSimControlJSONResults","input","JSON","parse","message","type","query","result","info","keys","runtimeSuffix","split","pop","osType","osVersionComponents","osVersion","sims","windowName","name","flat","args","xcrunAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/ios/simctl.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\n\nimport { xcrunAsync } from './xcrun';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\ntype DeviceState = 'Shutdown' | 'Booted';\n\nexport type OSType = 'iOS' | 'tvOS' | 'watchOS' | 'macOS';\n\nexport type Device = {\n availabilityError?: 'runtime profile not found';\n /** '/Users/name/Library/Developer/CoreSimulator/Devices/00E55DC0-0364-49DF-9EC6-77BE587137D4/data' */\n dataPath: string;\n /** @example `2811236352` */\n dataPathSize?: number;\n /** '/Users/name/Library/Logs/CoreSimulator/00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n logPath: string;\n /** @example `479232` */\n logPathSize?: number;\n /** '00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n udid: string;\n /** 'com.apple.CoreSimulator.SimRuntime.iOS-15-1' */\n runtime: string;\n /** If the device is \"available\" which generally means that the OS files haven't been deleted (this can happen when Xcode updates). */\n isAvailable: boolean;\n /** 'com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro' */\n deviceTypeIdentifier: string;\n state: DeviceState;\n /** 'iPhone 13 Pro' */\n name: string;\n /** Type of OS the device uses. */\n osType: OSType;\n /** '15.1' */\n osVersion: string;\n /** 'iPhone 13 Pro (15.1)' */\n windowName: string;\n};\n\ntype SimulatorDeviceList = {\n devices: {\n [runtime: string]: Device[];\n };\n};\n\ntype DeviceContext = Pick<Device, 'udid'>;\n\n/** Returns true if the given value is an `OSType`, if we don't recognize the value we continue anyways but warn. */\nexport function isOSType(value: any): value is OSType {\n if (!value || typeof value !== 'string') return false;\n\n const knownTypes = ['iOS', 'tvOS', 'watchOS', 'macOS'];\n if (!knownTypes.includes(value)) {\n Log.warn(`Unknown OS type: ${value}. Expected one of: ${knownTypes.join(', ')}`);\n }\n return true;\n}\n\n/**\n * Returns the local path for the installed tar.app. Returns null when the app isn't installed.\n *\n * @param device context for selecting a device.\n * @param props.appId bundle identifier for app.\n * @returns local file path to installed app binary, e.g. '/Users/evanbacon/Library/Developer/CoreSimulator/Devices/EFEEA6EF-E3F5-4EDE-9B72-29EAFA7514AE/data/Containers/Bundle/Application/FA43A0C6-C2AD-442D-B8B1-EAF3E88CF3BF/Exponent-2.21.3.tar.app'\n */\nexport async function getContainerPathAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n }: {\n appId: string;\n }\n): Promise<string | null> {\n try {\n const { stdout } = await simctlAsync(['get_app_container', resolveId(device), appId]);\n return stdout.trim();\n } catch (error: any) {\n if (error.stderr?.match(/No such file or directory/)) {\n return null;\n }\n throw error;\n }\n}\n\n/** Return a value from an installed app's Info.plist. */\nexport async function getInfoPlistValueAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n key,\n containerPath,\n }: {\n appId: string;\n key: string;\n containerPath?: string;\n }\n): Promise<string | null> {\n const ensuredContainerPath = containerPath ?? (await getContainerPathAsync(device, { appId }));\n if (ensuredContainerPath) {\n try {\n const { output } = await spawnAsync(\n 'defaults',\n ['read', `${ensuredContainerPath}/Info`, key],\n {\n stdio: 'pipe',\n }\n );\n return output.join('\\n').trim();\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Open a URL on a device. The url can have any protocol. */\nexport async function openUrlAsync(\n device: Partial<DeviceContext>,\n options: { url: string }\n): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['openurl', resolveId(device), options.url]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to lookup in current state: Shut/)) {\n throw error;\n }\n\n // If the device was in a weird in-between state (\"Shutting Down\" or \"Shutdown\"), then attempt to reboot it and try again.\n // This can happen when quitting the Simulator app, and immediately pressing `i` to reopen the project.\n\n // First boot the simulator\n await bootDeviceAsync({ udid: resolveId(device) });\n\n // Finally, try again...\n return await openUrlAsync(device, options);\n }\n}\n\n/** Open a simulator using a bundle identifier. If no app with a matching bundle identifier is installed then an error will be thrown. */\nexport async function openAppIdAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n const results = await openAppIdInternalAsync(device, options);\n // Similar to 194, this is a conformance issue which indicates that the given device has no app that can handle our launch request.\n if (results.status === 4) {\n throw new CommandError('APP_NOT_INSTALLED', results.stderr);\n }\n return results;\n}\nasync function openAppIdInternalAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n try {\n return await simctlAsync(['launch', resolveId(device), options.appId]);\n } catch (error: any) {\n if ('status' in error) {\n return error;\n }\n throw error;\n }\n}\n\n// This will only boot in headless mode if the Simulator app is not running.\nexport async function bootAsync(device: DeviceContext): Promise<Device | null> {\n await bootDeviceAsync(device);\n return isDeviceBootedAsync(device);\n}\n\n/** Returns a list of devices whose current state is 'Booted' as an array. */\nexport async function getBootedSimulatorsAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flatMap((runtime) =>\n runtime.filter((device) => device.state === 'Booted')\n );\n}\n\n/** Returns the current device if its state is 'Booted'. */\nexport async function isDeviceBootedAsync(device: Partial<DeviceContext>): Promise<Device | null> {\n // Simulators can be booted even if the app isn't running :(\n const devices = await getBootedSimulatorsAsync();\n if (device.udid) {\n return devices.find((bootedDevice) => bootedDevice.udid === device.udid) ?? null;\n }\n\n return devices[0] ?? null;\n}\n\n/** Boot a device. */\nexport async function bootDeviceAsync(device: DeviceContext): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['boot', device.udid]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to boot device in current state: Booted/)) {\n throw error;\n }\n }\n}\n\n/** Install a binary file on the device. */\nexport async function installAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Local absolute file path to an app binary that is built and provisioned for iOS simulators. */\n filePath: string;\n }\n): Promise<any> {\n return simctlAsync(['install', resolveId(device), options.filePath]);\n}\n\n/** Uninstall an app from the provided device. */\nexport async function uninstallAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Bundle identifier */\n appId: string;\n }\n): Promise<any> {\n return simctlAsync(['uninstall', resolveId(device), options.appId]);\n}\n\nfunction parseSimControlJSONResults(input: string): any {\n try {\n return JSON.parse(input);\n } catch (error: any) {\n // Nov 15, 2020: Observed this can happen when opening the simulator and the simulator prompts the user to update the xcode command line tools.\n // Unexpected token I in JSON at position 0\n if (error.message.includes('Unexpected token')) {\n Log.error(`Apple's simctl returned malformed JSON:\\n${input}`);\n }\n throw error;\n }\n}\n\n/** Get all runtime devices given a certain type. */\nasync function getRuntimesAsync(\n type: 'devices' | 'devicetypes' | 'runtimes' | 'pairs',\n query?: string | 'available'\n): Promise<SimulatorDeviceList> {\n const result = await simctlAsync(['list', type, '--json', query]);\n const info = parseSimControlJSONResults(result.stdout) as SimulatorDeviceList;\n\n for (const runtime of Object.keys(info.devices)) {\n // Given a string like 'com.apple.CoreSimulator.SimRuntime.tvOS-13-4'\n const runtimeSuffix = runtime.split('com.apple.CoreSimulator.SimRuntime.').pop()!;\n // Create an array [tvOS, 13, 4]\n const [osType, ...osVersionComponents] = runtimeSuffix.split('-');\n // Join the end components [13, 4] -> '13.4'\n const osVersion = osVersionComponents.join('.');\n const sims = info.devices[runtime];\n for (const device of sims) {\n device.runtime = runtime;\n device.osVersion = osVersion;\n device.windowName = `${device.name} (${osVersion})`;\n device.osType = osType as OSType;\n }\n }\n return info;\n}\n\n/** Return a list of iOS simulators. */\nexport async function getDevicesAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flat();\n}\n\n/** Run a `simctl` command. */\nexport async function simctlAsync(\n args: (string | undefined)[],\n options?: SpawnOptions\n): Promise<SpawnResult> {\n return xcrunAsync(['simctl', ...args], options);\n}\n\nfunction resolveId(device: Partial<DeviceContext>): string {\n return device.udid ?? 'booted';\n}\n"],"names":["isOSType","getContainerPathAsync","getInfoPlistValueAsync","openUrlAsync","openAppIdAsync","bootAsync","getBootedSimulatorsAsync","isDeviceBootedAsync","bootDeviceAsync","installAsync","uninstallAsync","getDevicesAsync","simctlAsync","value","knownTypes","includes","Log","warn","join","device","appId","stdout","resolveId","trim","error","stderr","match","key","containerPath","ensuredContainerPath","output","spawnAsync","stdio","options","url","udid","results","openAppIdInternalAsync","status","CommandError","simulatorDeviceInfo","getRuntimesAsync","Object","values","devices","flatMap","runtime","filter","state","find","bootedDevice","filePath","parseSimControlJSONResults","input","JSON","parse","message","type","query","result","info","keys","runtimeSuffix","split","pop","osType","osVersionComponents","osVersion","sims","windowName","name","flat","args","xcrunAsync"],"mappings":"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"}
|
|
@@ -2,9 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
SimulatorLogStreamer: ()=>SimulatorLogStreamer,
|
|
13
|
+
onMessage: ()=>onMessage
|
|
14
|
+
});
|
|
6
15
|
function _chalk() {
|
|
7
|
-
const data = _interopRequireDefault(require("chalk"));
|
|
16
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
8
17
|
_chalk = function() {
|
|
9
18
|
return data;
|
|
10
19
|
};
|
|
@@ -25,55 +34,72 @@ function _os() {
|
|
|
25
34
|
return data;
|
|
26
35
|
}
|
|
27
36
|
function _path() {
|
|
28
|
-
const data = _interopRequireDefault(require("path"));
|
|
37
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
29
38
|
_path = function() {
|
|
30
39
|
return data;
|
|
31
40
|
};
|
|
32
41
|
return data;
|
|
33
42
|
}
|
|
34
43
|
function _wrapAnsi() {
|
|
35
|
-
const data = _interopRequireDefault(require("wrap-ansi"));
|
|
44
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("wrap-ansi"));
|
|
36
45
|
_wrapAnsi = function() {
|
|
37
46
|
return data;
|
|
38
47
|
};
|
|
39
48
|
return data;
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
const _simctl = require("./simctl");
|
|
51
|
+
const _log = /*#__PURE__*/ _interopRequireWildcard(require("../../../log"));
|
|
52
|
+
const _errors = require("../../../utils/errors");
|
|
53
|
+
const _exit = require("../../../utils/exit");
|
|
45
54
|
function _interopRequireDefault(obj) {
|
|
46
55
|
return obj && obj.__esModule ? obj : {
|
|
47
56
|
default: obj
|
|
48
57
|
};
|
|
49
58
|
}
|
|
50
|
-
function
|
|
51
|
-
if (
|
|
59
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
60
|
+
if (typeof WeakMap !== "function") return null;
|
|
61
|
+
var cacheBabelInterop = new WeakMap();
|
|
62
|
+
var cacheNodeInterop = new WeakMap();
|
|
63
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
64
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
65
|
+
})(nodeInterop);
|
|
66
|
+
}
|
|
67
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
68
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
52
69
|
return obj;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
}
|
|
71
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
72
|
+
return {
|
|
73
|
+
default: obj
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
77
|
+
if (cache && cache.has(obj)) {
|
|
78
|
+
return cache.get(obj);
|
|
79
|
+
}
|
|
80
|
+
var newObj = {};
|
|
81
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
82
|
+
for(var key in obj){
|
|
83
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
84
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
85
|
+
if (desc && (desc.get || desc.set)) {
|
|
86
|
+
Object.defineProperty(newObj, key, desc);
|
|
87
|
+
} else {
|
|
88
|
+
newObj[key] = obj[key];
|
|
65
89
|
}
|
|
66
90
|
}
|
|
67
|
-
newObj.default = obj;
|
|
68
|
-
return newObj;
|
|
69
91
|
}
|
|
92
|
+
newObj.default = obj;
|
|
93
|
+
if (cache) {
|
|
94
|
+
cache.set(obj, newObj);
|
|
95
|
+
}
|
|
96
|
+
return newObj;
|
|
70
97
|
}
|
|
71
98
|
class SimulatorLogStreamer {
|
|
72
99
|
static cache = [];
|
|
73
100
|
static getStreamer = (device, resolver)=>{
|
|
74
101
|
var ref;
|
|
75
|
-
return (ref = SimulatorLogStreamer.cache.find((streamer)=>streamer.device.udid === device.udid
|
|
76
|
-
)) != null ? ref : new SimulatorLogStreamer(device, resolver);
|
|
102
|
+
return (ref = SimulatorLogStreamer.cache.find((streamer)=>streamer.device.udid === device.udid)) != null ? ref : new SimulatorLogStreamer(device, resolver);
|
|
77
103
|
};
|
|
78
104
|
constructor(device, resolver){
|
|
79
105
|
this.device = device;
|
|
@@ -97,7 +123,7 @@ class SimulatorLogStreamer {
|
|
|
97
123
|
throw new _errors.CommandError(`Could not find pid for ${this.device.udid}`);
|
|
98
124
|
}
|
|
99
125
|
// xcrun simctl spawn booted log stream --process --style json
|
|
100
|
-
this.childProcess = _childProcess().spawn("xcrun", [
|
|
126
|
+
this.childProcess = (0, _childProcess().spawn)("xcrun", [
|
|
101
127
|
"simctl",
|
|
102
128
|
"spawn",
|
|
103
129
|
this.device.udid,
|
|
@@ -121,11 +147,9 @@ class SimulatorLogStreamer {
|
|
|
121
147
|
this.childProcess.stdout.on("data", (data)=>{
|
|
122
148
|
// Sometimes more than one chunk comes at a time, here we split by system newline,
|
|
123
149
|
// then trim and filter.
|
|
124
|
-
const strings = data.toString().split(_os().EOL).map((value)=>value.trim()
|
|
125
|
-
)// This filters out the first log which says something like:
|
|
150
|
+
const strings = data.toString().split(_os().EOL).map((value)=>value.trim())// This filters out the first log which says something like:
|
|
126
151
|
// Filtering the log data using "process BEGINSWITH[cd] "my-app" AND type == 1024"
|
|
127
|
-
.filter((value)=>value.startsWith("{")
|
|
128
|
-
);
|
|
152
|
+
.filter((value)=>value.startsWith("{"));
|
|
129
153
|
strings.forEach((str)=>{
|
|
130
154
|
const simLog = parseMessageJson(str);
|
|
131
155
|
if (!simLog) {
|
|
@@ -135,15 +159,15 @@ class SimulatorLogStreamer {
|
|
|
135
159
|
});
|
|
136
160
|
});
|
|
137
161
|
this.childProcess.on("error", ({ message })=>{
|
|
138
|
-
|
|
162
|
+
_log.debug("[simctl error]:", message);
|
|
139
163
|
});
|
|
140
|
-
this.off = (0, _exit
|
|
164
|
+
this.off = (0, _exit.installExitHooks)(()=>{
|
|
141
165
|
this.detachAsync.bind(this);
|
|
142
166
|
});
|
|
143
167
|
}
|
|
144
168
|
detachAsync() {
|
|
145
|
-
var _obj,
|
|
146
|
-
(
|
|
169
|
+
var _obj, ref;
|
|
170
|
+
(ref = (_obj = this).off) == null ? void 0 : ref.call(_obj);
|
|
147
171
|
this.off = null;
|
|
148
172
|
if (this.childProcess) {
|
|
149
173
|
return new Promise((resolve)=>{
|
|
@@ -156,13 +180,12 @@ class SimulatorLogStreamer {
|
|
|
156
180
|
return Promise.resolve();
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
|
-
exports.SimulatorLogStreamer = SimulatorLogStreamer;
|
|
160
183
|
function parseMessageJson(data) {
|
|
161
184
|
const stringData = data.toString();
|
|
162
185
|
try {
|
|
163
186
|
return JSON.parse(stringData);
|
|
164
187
|
} catch {
|
|
165
|
-
|
|
188
|
+
_log.debug("Failed to parse simctl JSON message:\n" + stringData);
|
|
166
189
|
}
|
|
167
190
|
return null;
|
|
168
191
|
}
|
|
@@ -197,11 +220,11 @@ function isRunningBoardServicesLog(simLog) {
|
|
|
197
220
|
}
|
|
198
221
|
function formatMessage(simLog) {
|
|
199
222
|
var ref;
|
|
200
|
-
var
|
|
223
|
+
var ref1;
|
|
201
224
|
// TODO: Maybe change "TCC" to "Consent" or "System".
|
|
202
|
-
const category = _chalk().default.gray(`[${(
|
|
225
|
+
const category = _chalk().default.gray(`[${(ref1 = (ref = simLog.source) == null ? void 0 : ref.image) != null ? ref1 : simLog.subsystem}]`);
|
|
203
226
|
const message = simLog.eventMessage;
|
|
204
|
-
return _wrapAnsi().default(category + " " + message, process.stdout.columns || 80);
|
|
227
|
+
return (0, _wrapAnsi().default)(category + " " + message, process.stdout.columns || 80);
|
|
205
228
|
}
|
|
206
229
|
function onMessage(simLog) {
|
|
207
230
|
let hasLogged = false;
|
|
@@ -211,18 +234,18 @@ function onMessage(simLog) {
|
|
|
211
234
|
!isReactLog(simLog) && !isCoreTelephonyLog(simLog) && !isWebKitLog(simLog) && !isRunningBoardServicesLog(simLog)) {
|
|
212
235
|
hasLogged = true;
|
|
213
236
|
// Sim: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.
|
|
214
|
-
|
|
237
|
+
_log.error(formatMessage(simLog));
|
|
215
238
|
}
|
|
216
239
|
} else if (simLog.eventMessage) {
|
|
217
240
|
var ref;
|
|
218
241
|
// If the source has a file (i.e. not a system log).
|
|
219
242
|
if (((ref = simLog.source) == null ? void 0 : ref.file) || simLog.eventMessage.includes("Terminating app due to uncaught exception")) {
|
|
220
243
|
hasLogged = true;
|
|
221
|
-
|
|
244
|
+
_log.log(formatMessage(simLog));
|
|
222
245
|
}
|
|
223
246
|
}
|
|
224
247
|
if (!hasLogged) {
|
|
225
|
-
|
|
248
|
+
_log.debug(formatMessage(simLog));
|
|
226
249
|
} else {
|
|
227
250
|
// console.log('DATA:', JSON.stringify(simLog));
|
|
228
251
|
}
|
|
@@ -233,7 +256,7 @@ function onMessage(simLog) {
|
|
|
233
256
|
* @param bundleIdentifier
|
|
234
257
|
* @returns Image name like `Exponent` and `null` when the app is not installed on the provided simulator.
|
|
235
258
|
*/ async function getImageNameFromBundleIdentifierAsync(udid, bundleIdentifier) {
|
|
236
|
-
const containerPath = await (0, _simctl
|
|
259
|
+
const containerPath = await (0, _simctl.getContainerPathAsync)({
|
|
237
260
|
udid
|
|
238
261
|
}, {
|
|
239
262
|
appId: bundleIdentifier
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/platforms/ios/simctlLogging.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { ChildProcessWithoutNullStreams, spawn } from 'child_process';\nimport { EOL } from 'os';\nimport path from 'path';\nimport wrapAnsi from 'wrap-ansi';\n\nimport { Device, getContainerPathAsync } from './simctl';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\n\nexport type SimControlLog = {\n /**\n * 258753568922927108\n */\n traceID: number;\n /**\n *\n * \"Connection 1: done\",\n */\n eventMessage: string;\n /**\n * \"logEvent\" | \"activityCreateEvent\",\n */\n eventType: 'logEvent' | 'activityCreateEvent';\n source: null | {\n /**\n * 'RCTDefaultLogFunction_block_invoke' | '__TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION__'\n */\n symbol: string;\n line: number;\n /**\n * 'TCC' | 'Security' | 'CFNetwork' | 'libnetwork.dylib' | 'myapp'\n *\n * TCC is apple sys, it means \"Transparency, Consent, and Control\"\n */\n image: string;\n /**\n * 'RCTLog.mm' | ''\n */\n file: string;\n };\n /**\n * \"Connection %llu: done\"\n */\n formatString: string;\n /**\n * 0\n */\n activityIdentifier: number;\n subsystem:\n | ''\n | 'com.apple.network'\n | 'com.facebook.react.log'\n | 'com.apple.TCC'\n | 'com.apple.CoreTelephony'\n | 'com.apple.WebKit'\n | 'com.apple.runningboard'\n | string;\n category: '' | 'access' | 'connection' | 'plugin';\n /**\n * \"2021-03-15 15:36:28.004331-0700\"\n */\n timestamp: string;\n /**\n * 706567072091713\n */\n machTimestamp: number;\n /**\n * \"Default\"\n */\n messageType: 'Default' | 'Error';\n /**\n * 15192\n */\n processID: number;\n};\n\ntype ProcessResolver =\n | {\n pid: string;\n }\n | {\n appId: string;\n };\n\nexport class SimulatorLogStreamer {\n private childProcess: ChildProcessWithoutNullStreams | null = null;\n\n static cache: SimulatorLogStreamer[] = [];\n\n static getStreamer = (device: Pick<Device, 'udid'>, resolver: ProcessResolver) => {\n return (\n SimulatorLogStreamer.cache.find((streamer) => streamer.device.udid === device.udid) ??\n new SimulatorLogStreamer(device, resolver)\n );\n };\n\n constructor(\n public device: Pick<Device, 'udid'>,\n public resolver: ProcessResolver\n ) {}\n\n isAttached() {\n return !!this.childProcess;\n }\n\n async resolvePidAsync() {\n if ('pid' in this.resolver) {\n return this.resolver.pid;\n }\n return getImageNameFromBundleIdentifierAsync(this.device.udid, this.resolver.appId);\n }\n\n async attachAsync() {\n await this.detachAsync();\n\n const pid = await this.resolvePidAsync();\n\n if (!pid) {\n throw new CommandError(`Could not find pid for ${this.device.udid}`);\n }\n\n // xcrun simctl spawn booted log stream --process --style json\n this.childProcess = spawn('xcrun', [\n 'simctl',\n 'spawn',\n this.device.udid,\n 'log',\n 'stream',\n '--process',\n pid,\n // ndjson provides a better format than json.\n '--style',\n 'ndjson',\n // Provide the source so we can filter logs better\n '--source',\n // log, activity, trace -- activity was related to layouts, trace didn't work, so that leaves log.\n // Passing nothing combines all three, but we don't use activity.\n '--type',\n 'log',\n // backtrace doesn't seem very useful in basic cases.\n // TODO: Maybe we can format as a stack trace for native errors.\n '--no-backtrace',\n ]);\n\n this.childProcess.stdout.on('data', (data: Buffer) => {\n // Sometimes more than one chunk comes at a time, here we split by system newline,\n // then trim and filter.\n const strings = data\n .toString()\n .split(EOL)\n .map((value) => value.trim())\n // This filters out the first log which says something like:\n // Filtering the log data using \"process BEGINSWITH[cd] \"my-app\" AND type == 1024\"\n .filter((value) => value.startsWith('{'));\n\n strings.forEach((str) => {\n const simLog = parseMessageJson(str);\n if (!simLog) {\n return;\n }\n onMessage(simLog);\n });\n });\n\n this.childProcess.on('error', ({ message }) => {\n Log.debug('[simctl error]:', message);\n });\n\n this.off = installExitHooks(() => {\n this.detachAsync.bind(this);\n });\n }\n\n private off: (() => void) | null = null;\n\n detachAsync() {\n this.off?.();\n this.off = null;\n if (this.childProcess) {\n return new Promise<void>((resolve) => {\n this.childProcess?.on('close', resolve);\n this.childProcess?.kill();\n this.childProcess = null;\n });\n }\n return Promise.resolve();\n }\n}\n\nfunction parseMessageJson(data: string) {\n const stringData = data.toString();\n try {\n return JSON.parse(stringData) as SimControlLog;\n } catch {\n Log.debug('Failed to parse simctl JSON message:\\n' + stringData);\n }\n return null;\n}\n\n// There are a lot of networking logs in RN that aren't relevant to the user.\nfunction isNetworkLog(simLog: SimControlLog): boolean {\n return (\n simLog.subsystem === 'com.apple.network' ||\n simLog.category === 'connection' ||\n simLog.source?.image === 'CFNetwork'\n );\n}\n\nfunction isReactLog(simLog: SimControlLog): boolean {\n return simLog.subsystem === 'com.facebook.react.log' && simLog.source?.file === 'RCTLog.mm';\n}\n\n// It's not clear what these are but they aren't very useful.\n// (The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated)\n// We can add them later if need.\nfunction isCoreTelephonyLog(simLog: SimControlLog): boolean {\n // [CoreTelephony] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099\n // \"The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.\" UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}\n return simLog.subsystem === 'com.apple.CoreTelephony';\n}\n\n// https://stackoverflow.com/a/65313219/4047926\nfunction isWebKitLog(simLog: SimControlLog): boolean {\n // [WebKit] 0x1143ca500 - ProcessAssertion: Failed to acquire RBS Background assertion 'WebProcess Background Assertion' for process with PID 27084, error: Error Domain=RBSAssertionErrorDomain Code=3 \"Target is not running or required target\n // entitlement is missing\" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:\"com.apple.webkit\" name:\"Background\" sourceEnvironment:\"(null)\">, NSLocalizedFailureReason=Target is not running or required target entitlement is missing}\n return simLog.subsystem === 'com.apple.WebKit';\n}\n\n// Similar to WebKit logs\nfunction isRunningBoardServicesLog(simLog: SimControlLog): boolean {\n // [RunningBoardServices] Error acquiring assertion: <Error Domain=RBSAssertionErrorDomain Code=3 \"Target is not running or required target entitlement is missing\" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:\"com.apple.webkit\"\n // name:\"Background\" sourceEnvironment:\"(null)\">, NSLocalizedFailureReason=Target is not running or required target entitlement is missing}>\n return simLog.subsystem === 'com.apple.runningboard';\n}\n\nfunction formatMessage(simLog: SimControlLog): string {\n // TODO: Maybe change \"TCC\" to \"Consent\" or \"System\".\n const category = chalk.gray(`[${simLog.source?.image ?? simLog.subsystem}]`);\n const message = simLog.eventMessage;\n return wrapAnsi(category + ' ' + message, process.stdout.columns || 80);\n}\n\nexport function onMessage(simLog: SimControlLog) {\n let hasLogged = false;\n\n if (simLog.messageType === 'Error') {\n if (\n // Hide all networking errors which are mostly useless.\n !isNetworkLog(simLog) &&\n // Showing React errors will result in duplicate messages.\n !isReactLog(simLog) &&\n !isCoreTelephonyLog(simLog) &&\n !isWebKitLog(simLog) &&\n !isRunningBoardServicesLog(simLog)\n ) {\n hasLogged = true;\n // Sim: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.\n Log.error(formatMessage(simLog));\n }\n } else if (simLog.eventMessage) {\n // If the source has a file (i.e. not a system log).\n if (\n simLog.source?.file ||\n simLog.eventMessage.includes('Terminating app due to uncaught exception')\n ) {\n hasLogged = true;\n Log.log(formatMessage(simLog));\n }\n }\n\n if (!hasLogged) {\n Log.debug(formatMessage(simLog));\n } else {\n // console.log('DATA:', JSON.stringify(simLog));\n }\n}\n\n/**\n *\n * @param udid\n * @param bundleIdentifier\n * @returns Image name like `Exponent` and `null` when the app is not installed on the provided simulator.\n */\nasync function getImageNameFromBundleIdentifierAsync(\n udid: string,\n bundleIdentifier: string\n): Promise<string | null> {\n const containerPath = await getContainerPathAsync({ udid }, { appId: bundleIdentifier });\n\n if (containerPath) {\n return getImageNameFromContainerPath(containerPath);\n }\n return null;\n}\n\nfunction getImageNameFromContainerPath(binaryPath: string): string {\n return path.basename(binaryPath).split('.')[0];\n}\n"],"names":["onMessage","Log","SimulatorLogStreamer","cache","getStreamer","device","resolver","find","streamer","udid","constructor","childProcess","off","isAttached","resolvePidAsync","pid","getImageNameFromBundleIdentifierAsync","appId","attachAsync","detachAsync","CommandError","spawn","stdout","on","data","strings","toString","split","EOL","map","value","trim","filter","startsWith","forEach","str","simLog","parseMessageJson","message","debug","installExitHooks","bind","Promise","resolve","kill","stringData","JSON","parse","isNetworkLog","subsystem","category","source","image","isReactLog","file","isCoreTelephonyLog","isWebKitLog","isRunningBoardServicesLog","formatMessage","chalk","gray","eventMessage","wrapAnsi","process","columns","hasLogged","messageType","error","includes","log","bundleIdentifier","containerPath","getContainerPathAsync","getImageNameFromContainerPath","binaryPath","path","basename"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/ios/simctlLogging.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { ChildProcessWithoutNullStreams, spawn } from 'child_process';\nimport { EOL } from 'os';\nimport path from 'path';\nimport wrapAnsi from 'wrap-ansi';\n\nimport { Device, getContainerPathAsync } from './simctl';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\nimport { installExitHooks } from '../../../utils/exit';\n\nexport type SimControlLog = {\n /**\n * 258753568922927108\n */\n traceID: number;\n /**\n *\n * \"Connection 1: done\",\n */\n eventMessage: string;\n /**\n * \"logEvent\" | \"activityCreateEvent\",\n */\n eventType: 'logEvent' | 'activityCreateEvent';\n source: null | {\n /**\n * 'RCTDefaultLogFunction_block_invoke' | '__TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION__'\n */\n symbol: string;\n line: number;\n /**\n * 'TCC' | 'Security' | 'CFNetwork' | 'libnetwork.dylib' | 'myapp'\n *\n * TCC is apple sys, it means \"Transparency, Consent, and Control\"\n */\n image: string;\n /**\n * 'RCTLog.mm' | ''\n */\n file: string;\n };\n /**\n * \"Connection %llu: done\"\n */\n formatString: string;\n /**\n * 0\n */\n activityIdentifier: number;\n subsystem:\n | ''\n | 'com.apple.network'\n | 'com.facebook.react.log'\n | 'com.apple.TCC'\n | 'com.apple.CoreTelephony'\n | 'com.apple.WebKit'\n | 'com.apple.runningboard'\n | string;\n category: '' | 'access' | 'connection' | 'plugin';\n /**\n * \"2021-03-15 15:36:28.004331-0700\"\n */\n timestamp: string;\n /**\n * 706567072091713\n */\n machTimestamp: number;\n /**\n * \"Default\"\n */\n messageType: 'Default' | 'Error';\n /**\n * 15192\n */\n processID: number;\n};\n\ntype ProcessResolver =\n | {\n pid: string;\n }\n | {\n appId: string;\n };\n\nexport class SimulatorLogStreamer {\n private childProcess: ChildProcessWithoutNullStreams | null = null;\n\n static cache: SimulatorLogStreamer[] = [];\n\n static getStreamer = (device: Pick<Device, 'udid'>, resolver: ProcessResolver) => {\n return (\n SimulatorLogStreamer.cache.find((streamer) => streamer.device.udid === device.udid) ??\n new SimulatorLogStreamer(device, resolver)\n );\n };\n\n constructor(\n public device: Pick<Device, 'udid'>,\n public resolver: ProcessResolver\n ) {}\n\n isAttached() {\n return !!this.childProcess;\n }\n\n async resolvePidAsync() {\n if ('pid' in this.resolver) {\n return this.resolver.pid;\n }\n return getImageNameFromBundleIdentifierAsync(this.device.udid, this.resolver.appId);\n }\n\n async attachAsync() {\n await this.detachAsync();\n\n const pid = await this.resolvePidAsync();\n\n if (!pid) {\n throw new CommandError(`Could not find pid for ${this.device.udid}`);\n }\n\n // xcrun simctl spawn booted log stream --process --style json\n this.childProcess = spawn('xcrun', [\n 'simctl',\n 'spawn',\n this.device.udid,\n 'log',\n 'stream',\n '--process',\n pid,\n // ndjson provides a better format than json.\n '--style',\n 'ndjson',\n // Provide the source so we can filter logs better\n '--source',\n // log, activity, trace -- activity was related to layouts, trace didn't work, so that leaves log.\n // Passing nothing combines all three, but we don't use activity.\n '--type',\n 'log',\n // backtrace doesn't seem very useful in basic cases.\n // TODO: Maybe we can format as a stack trace for native errors.\n '--no-backtrace',\n ]);\n\n this.childProcess.stdout.on('data', (data: Buffer) => {\n // Sometimes more than one chunk comes at a time, here we split by system newline,\n // then trim and filter.\n const strings = data\n .toString()\n .split(EOL)\n .map((value) => value.trim())\n // This filters out the first log which says something like:\n // Filtering the log data using \"process BEGINSWITH[cd] \"my-app\" AND type == 1024\"\n .filter((value) => value.startsWith('{'));\n\n strings.forEach((str) => {\n const simLog = parseMessageJson(str);\n if (!simLog) {\n return;\n }\n onMessage(simLog);\n });\n });\n\n this.childProcess.on('error', ({ message }) => {\n Log.debug('[simctl error]:', message);\n });\n\n this.off = installExitHooks(() => {\n this.detachAsync.bind(this);\n });\n }\n\n private off: (() => void) | null = null;\n\n detachAsync() {\n this.off?.();\n this.off = null;\n if (this.childProcess) {\n return new Promise<void>((resolve) => {\n this.childProcess?.on('close', resolve);\n this.childProcess?.kill();\n this.childProcess = null;\n });\n }\n return Promise.resolve();\n }\n}\n\nfunction parseMessageJson(data: string) {\n const stringData = data.toString();\n try {\n return JSON.parse(stringData) as SimControlLog;\n } catch {\n Log.debug('Failed to parse simctl JSON message:\\n' + stringData);\n }\n return null;\n}\n\n// There are a lot of networking logs in RN that aren't relevant to the user.\nfunction isNetworkLog(simLog: SimControlLog): boolean {\n return (\n simLog.subsystem === 'com.apple.network' ||\n simLog.category === 'connection' ||\n simLog.source?.image === 'CFNetwork'\n );\n}\n\nfunction isReactLog(simLog: SimControlLog): boolean {\n return simLog.subsystem === 'com.facebook.react.log' && simLog.source?.file === 'RCTLog.mm';\n}\n\n// It's not clear what these are but they aren't very useful.\n// (The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated)\n// We can add them later if need.\nfunction isCoreTelephonyLog(simLog: SimControlLog): boolean {\n // [CoreTelephony] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099\n // \"The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.\" UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}\n return simLog.subsystem === 'com.apple.CoreTelephony';\n}\n\n// https://stackoverflow.com/a/65313219/4047926\nfunction isWebKitLog(simLog: SimControlLog): boolean {\n // [WebKit] 0x1143ca500 - ProcessAssertion: Failed to acquire RBS Background assertion 'WebProcess Background Assertion' for process with PID 27084, error: Error Domain=RBSAssertionErrorDomain Code=3 \"Target is not running or required target\n // entitlement is missing\" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:\"com.apple.webkit\" name:\"Background\" sourceEnvironment:\"(null)\">, NSLocalizedFailureReason=Target is not running or required target entitlement is missing}\n return simLog.subsystem === 'com.apple.WebKit';\n}\n\n// Similar to WebKit logs\nfunction isRunningBoardServicesLog(simLog: SimControlLog): boolean {\n // [RunningBoardServices] Error acquiring assertion: <Error Domain=RBSAssertionErrorDomain Code=3 \"Target is not running or required target entitlement is missing\" UserInfo={RBSAssertionAttribute=<RBSDomainAttribute| domain:\"com.apple.webkit\"\n // name:\"Background\" sourceEnvironment:\"(null)\">, NSLocalizedFailureReason=Target is not running or required target entitlement is missing}>\n return simLog.subsystem === 'com.apple.runningboard';\n}\n\nfunction formatMessage(simLog: SimControlLog): string {\n // TODO: Maybe change \"TCC\" to \"Consent\" or \"System\".\n const category = chalk.gray(`[${simLog.source?.image ?? simLog.subsystem}]`);\n const message = simLog.eventMessage;\n return wrapAnsi(category + ' ' + message, process.stdout.columns || 80);\n}\n\nexport function onMessage(simLog: SimControlLog) {\n let hasLogged = false;\n\n if (simLog.messageType === 'Error') {\n if (\n // Hide all networking errors which are mostly useless.\n !isNetworkLog(simLog) &&\n // Showing React errors will result in duplicate messages.\n !isReactLog(simLog) &&\n !isCoreTelephonyLog(simLog) &&\n !isWebKitLog(simLog) &&\n !isRunningBoardServicesLog(simLog)\n ) {\n hasLogged = true;\n // Sim: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.\n Log.error(formatMessage(simLog));\n }\n } else if (simLog.eventMessage) {\n // If the source has a file (i.e. not a system log).\n if (\n simLog.source?.file ||\n simLog.eventMessage.includes('Terminating app due to uncaught exception')\n ) {\n hasLogged = true;\n Log.log(formatMessage(simLog));\n }\n }\n\n if (!hasLogged) {\n Log.debug(formatMessage(simLog));\n } else {\n // console.log('DATA:', JSON.stringify(simLog));\n }\n}\n\n/**\n *\n * @param udid\n * @param bundleIdentifier\n * @returns Image name like `Exponent` and `null` when the app is not installed on the provided simulator.\n */\nasync function getImageNameFromBundleIdentifierAsync(\n udid: string,\n bundleIdentifier: string\n): Promise<string | null> {\n const containerPath = await getContainerPathAsync({ udid }, { appId: bundleIdentifier });\n\n if (containerPath) {\n return getImageNameFromContainerPath(containerPath);\n }\n return null;\n}\n\nfunction getImageNameFromContainerPath(binaryPath: string): string {\n return path.basename(binaryPath).split('.')[0];\n}\n"],"names":["SimulatorLogStreamer","onMessage","cache","getStreamer","device","resolver","find","streamer","udid","constructor","childProcess","off","isAttached","resolvePidAsync","pid","getImageNameFromBundleIdentifierAsync","appId","attachAsync","detachAsync","CommandError","spawn","stdout","on","data","strings","toString","split","EOL","map","value","trim","filter","startsWith","forEach","str","simLog","parseMessageJson","message","Log","debug","installExitHooks","bind","Promise","resolve","kill","stringData","JSON","parse","isNetworkLog","subsystem","category","source","image","isReactLog","file","isCoreTelephonyLog","isWebKitLog","isRunningBoardServicesLog","formatMessage","chalk","gray","eventMessage","wrapAnsi","process","columns","hasLogged","messageType","error","includes","log","bundleIdentifier","containerPath","getContainerPathAsync","getImageNameFromContainerPath","binaryPath","path","basename"],"mappings":"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"}
|
|
@@ -2,22 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
exports
|
|
5
|
+
Object.defineProperty(exports, "xcrunAsync", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>xcrunAsync
|
|
8
|
+
});
|
|
6
9
|
function _spawnAsync() {
|
|
7
|
-
const data = _interopRequireDefault(require("@expo/spawn-async"));
|
|
10
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("@expo/spawn-async"));
|
|
8
11
|
_spawnAsync = function() {
|
|
9
12
|
return data;
|
|
10
13
|
};
|
|
11
14
|
return data;
|
|
12
15
|
}
|
|
13
16
|
function _chalk() {
|
|
14
|
-
const data = _interopRequireDefault(require("chalk"));
|
|
17
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
15
18
|
_chalk = function() {
|
|
16
19
|
return data;
|
|
17
20
|
};
|
|
18
21
|
return data;
|
|
19
22
|
}
|
|
20
|
-
|
|
23
|
+
const _errors = require("../../../utils/errors");
|
|
21
24
|
function _interopRequireDefault(obj) {
|
|
22
25
|
return obj && obj.__esModule ? obj : {
|
|
23
26
|
default: obj
|
|
@@ -27,7 +30,7 @@ const debug = require("debug")("expo:start:platforms:ios:xcrun");
|
|
|
27
30
|
async function xcrunAsync(args, options) {
|
|
28
31
|
debug("Running: xcrun " + args.join(" "));
|
|
29
32
|
try {
|
|
30
|
-
return await _spawnAsync().default("xcrun", args.filter(Boolean), options);
|
|
33
|
+
return await (0, _spawnAsync().default)("xcrun", args.filter(Boolean), options);
|
|
31
34
|
} catch (e) {
|
|
32
35
|
throwXcrunError(e);
|
|
33
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/platforms/ios/xcrun.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport chalk from 'chalk';\n\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:platforms:ios:xcrun') as typeof console.log;\n\nexport async function xcrunAsync(args: (string | undefined)[], options?: SpawnOptions) {\n debug('Running: xcrun ' + args.join(' '));\n try {\n return await spawnAsync('xcrun', args.filter(Boolean) as string[], options);\n } catch (e) {\n throwXcrunError(e);\n }\n}\n\nfunction throwXcrunError(e: any): never {\n if (isLicenseOutOfDate(e.stdout) || isLicenseOutOfDate(e.stderr)) {\n throw new CommandError(\n 'XCODE_LICENSE_NOT_ACCEPTED',\n 'Xcode license is not accepted. Please run `sudo xcodebuild -license`.'\n );\n } else if (e.stderr?.includes('not a developer tool or in PATH')) {\n throw new CommandError(\n 'SIMCTL_NOT_AVAILABLE',\n `You may need to run ${chalk.bold(\n 'sudo xcode-select -s /Applications/Xcode.app'\n )} and try again.`\n );\n }\n // Attempt to craft a better error message...\n if (Array.isArray(e.output)) {\n e.message += '\\n' + e.output.join('\\n').trim();\n } else if (e.stderr) {\n e.message += '\\n' + e.stderr;\n }\n throw e;\n}\n\nfunction isLicenseOutOfDate(text: string) {\n if (!text) {\n return false;\n }\n\n const lower = text.toLowerCase();\n return lower.includes('xcode') && lower.includes('license');\n}\n"],"names":["xcrunAsync","debug","require","args","options","join","spawnAsync","filter","Boolean","e","throwXcrunError","isLicenseOutOfDate","stdout","stderr","CommandError","includes","chalk","bold","Array","isArray","output","message","trim","text","lower","toLowerCase"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/ios/xcrun.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport chalk from 'chalk';\n\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:platforms:ios:xcrun') as typeof console.log;\n\nexport async function xcrunAsync(args: (string | undefined)[], options?: SpawnOptions) {\n debug('Running: xcrun ' + args.join(' '));\n try {\n return await spawnAsync('xcrun', args.filter(Boolean) as string[], options);\n } catch (e) {\n throwXcrunError(e);\n }\n}\n\nfunction throwXcrunError(e: any): never {\n if (isLicenseOutOfDate(e.stdout) || isLicenseOutOfDate(e.stderr)) {\n throw new CommandError(\n 'XCODE_LICENSE_NOT_ACCEPTED',\n 'Xcode license is not accepted. Please run `sudo xcodebuild -license`.'\n );\n } else if (e.stderr?.includes('not a developer tool or in PATH')) {\n throw new CommandError(\n 'SIMCTL_NOT_AVAILABLE',\n `You may need to run ${chalk.bold(\n 'sudo xcode-select -s /Applications/Xcode.app'\n )} and try again.`\n );\n }\n // Attempt to craft a better error message...\n if (Array.isArray(e.output)) {\n e.message += '\\n' + e.output.join('\\n').trim();\n } else if (e.stderr) {\n e.message += '\\n' + e.stderr;\n }\n throw e;\n}\n\nfunction isLicenseOutOfDate(text: string) {\n if (!text) {\n return false;\n }\n\n const lower = text.toLowerCase();\n return lower.includes('xcode') && lower.includes('license');\n}\n"],"names":["xcrunAsync","debug","require","args","options","join","spawnAsync","filter","Boolean","e","throwXcrunError","isLicenseOutOfDate","stdout","stderr","CommandError","includes","chalk","bold","Array","isArray","output","message","trim","text","lower","toLowerCase"],"mappings":"AAAA;;;;+BAOsBA,YAAU;;aAAVA,UAAU;;;8DAPS,mBAAmB;;;;;;;8DAC1C,OAAO;;;;;;wBAEI,uBAAuB;;;;;;AAEpD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,gCAAgC,CAAC,AAAsB,AAAC;AAEhF,eAAeF,UAAU,CAACG,IAA4B,EAAEC,OAAsB,EAAE;IACrFH,KAAK,CAAC,iBAAiB,GAAGE,IAAI,CAACE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI;QACF,OAAO,MAAMC,IAAAA,WAAU,EAAA,QAAA,EAAC,OAAO,EAAEH,IAAI,CAACI,MAAM,CAACC,OAAO,CAAC,EAAcJ,OAAO,CAAC,CAAC;IAC9E,EAAE,OAAOK,CAAC,EAAE;QACVC,eAAe,CAACD,CAAC,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAASC,eAAe,CAACD,CAAM,EAAS;QAM3BA,GAAQ;IALnB,IAAIE,kBAAkB,CAACF,CAAC,CAACG,MAAM,CAAC,IAAID,kBAAkB,CAACF,CAAC,CAACI,MAAM,CAAC,EAAE;QAChE,MAAM,IAAIC,OAAY,aAAA,CACpB,4BAA4B,EAC5B,uEAAuE,CACxE,CAAC;IACJ,OAAO,IAAIL,CAAAA,GAAQ,GAARA,CAAC,CAACI,MAAM,SAAU,GAAlBJ,KAAAA,CAAkB,GAAlBA,GAAQ,CAAEM,QAAQ,CAAC,iCAAiC,CAAC,EAAE;QAChE,MAAM,IAAID,OAAY,aAAA,CACpB,sBAAsB,EACtB,CAAC,oBAAoB,EAAEE,MAAK,EAAA,QAAA,CAACC,IAAI,CAC/B,8CAA8C,CAC/C,CAAC,eAAe,CAAC,CACnB,CAAC;IACJ,CAAC;IACD,6CAA6C;IAC7C,IAAIC,KAAK,CAACC,OAAO,CAACV,CAAC,CAACW,MAAM,CAAC,EAAE;QAC3BX,CAAC,CAACY,OAAO,IAAI,IAAI,GAAGZ,CAAC,CAACW,MAAM,CAACf,IAAI,CAAC,IAAI,CAAC,CAACiB,IAAI,EAAE,CAAC;IACjD,OAAO,IAAIb,CAAC,CAACI,MAAM,EAAE;QACnBJ,CAAC,CAACY,OAAO,IAAI,IAAI,GAAGZ,CAAC,CAACI,MAAM,CAAC;IAC/B,CAAC;IACD,MAAMJ,CAAC,CAAC;AACV,CAAC;AAED,SAASE,kBAAkB,CAACY,IAAY,EAAE;IACxC,IAAI,CAACA,IAAI,EAAE;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAMC,KAAK,GAAGD,IAAI,CAACE,WAAW,EAAE,AAAC;IACjC,OAAOD,KAAK,CAACT,QAAQ,CAAC,OAAO,CAAC,IAAIS,KAAK,CAACT,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -2,19 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
DevicesFile: ()=>DevicesFile,
|
|
13
|
+
getDevicesInfoAsync: ()=>getDevicesInfoAsync,
|
|
14
|
+
readDevicesInfoAsync: ()=>readDevicesInfoAsync,
|
|
15
|
+
setDevicesInfoAsync: ()=>setDevicesInfoAsync,
|
|
16
|
+
saveDevicesAsync: ()=>saveDevicesAsync
|
|
17
|
+
});
|
|
18
|
+
const _dotExpo = require("./dotExpo");
|
|
11
19
|
const debug = require("debug")("expo:start:project:devices");
|
|
12
20
|
const DEVICES_FILE_NAME = "devices.json";
|
|
13
21
|
const MILLISECONDS_IN_30_DAYS = 30 * 24 * 60 * 60 * 1000;
|
|
14
|
-
const DevicesFile = (0, _dotExpo
|
|
22
|
+
const DevicesFile = (0, _dotExpo.createTemporaryProjectFile)(DEVICES_FILE_NAME, {
|
|
15
23
|
devices: []
|
|
16
24
|
});
|
|
17
|
-
exports.DevicesFile = DevicesFile;
|
|
18
25
|
let devicesInfo = null;
|
|
19
26
|
async function getDevicesInfoAsync(projectRoot) {
|
|
20
27
|
if (devicesInfo) {
|
|
@@ -57,12 +64,10 @@ async function saveDevicesAsync(projectRoot, deviceIds) {
|
|
|
57
64
|
] : deviceIds;
|
|
58
65
|
debug(`Saving devices: ${newDeviceIds}`);
|
|
59
66
|
const { devices } = await getDevicesInfoAsync(projectRoot);
|
|
60
|
-
const newDevicesJson = devices.filter((device)=>!newDeviceIds.includes(device.installationId)
|
|
61
|
-
).concat(newDeviceIds.map((deviceId)=>({
|
|
67
|
+
const newDevicesJson = devices.filter((device)=>!newDeviceIds.includes(device.installationId)).concat(newDeviceIds.map((deviceId)=>({
|
|
62
68
|
installationId: deviceId,
|
|
63
69
|
lastUsed: currentTime
|
|
64
|
-
})
|
|
65
|
-
));
|
|
70
|
+
})));
|
|
66
71
|
await setDevicesInfoAsync(projectRoot, {
|
|
67
72
|
devices: filterOldDevices(newDevicesJson)
|
|
68
73
|
});
|
|
@@ -70,10 +75,8 @@ async function saveDevicesAsync(projectRoot, deviceIds) {
|
|
|
70
75
|
function filterOldDevices(devices) {
|
|
71
76
|
const currentTime = Date.now();
|
|
72
77
|
return devices// filter out any devices that haven't been used to open this project in 30 days
|
|
73
|
-
.filter((device)=>currentTime - device.lastUsed <= MILLISECONDS_IN_30_DAYS
|
|
74
|
-
)
|
|
75
|
-
.sort((a, b)=>b.lastUsed - a.lastUsed
|
|
76
|
-
).slice(0, 10);
|
|
78
|
+
.filter((device)=>currentTime - device.lastUsed <= MILLISECONDS_IN_30_DAYS)// keep only the 10 most recently used devices
|
|
79
|
+
.sort((a, b)=>b.lastUsed - a.lastUsed).slice(0, 10);
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
//# sourceMappingURL=devices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/project/devices.ts"],"sourcesContent":["import { createTemporaryProjectFile } from './dotExpo';\n\nconst debug = require('debug')('expo:start:project:devices') as typeof console.log;\n\nexport type DeviceInfo = {\n installationId: string;\n lastUsed: number;\n};\n\nexport type DevicesInfo = {\n devices: DeviceInfo[];\n};\n\nconst DEVICES_FILE_NAME = 'devices.json';\n\nconst MILLISECONDS_IN_30_DAYS = 30 * 24 * 60 * 60 * 1000;\n\nexport const DevicesFile = createTemporaryProjectFile<DevicesInfo>(DEVICES_FILE_NAME, {\n devices: [],\n});\n\nlet devicesInfo: DevicesInfo | null = null;\n\nexport async function getDevicesInfoAsync(projectRoot: string): Promise<DevicesInfo> {\n if (devicesInfo) {\n return devicesInfo;\n }\n return readDevicesInfoAsync(projectRoot);\n}\n\nexport async function readDevicesInfoAsync(projectRoot: string): Promise<DevicesInfo> {\n try {\n devicesInfo = await DevicesFile.readAsync(projectRoot);\n\n // if the file on disk has old devices, filter them out here before we use them\n const filteredDevices = filterOldDevices(devicesInfo.devices);\n if (filteredDevices.length < devicesInfo.devices.length) {\n devicesInfo = {\n ...devicesInfo,\n devices: filteredDevices,\n };\n // save the newly filtered list for consistency\n try {\n await setDevicesInfoAsync(projectRoot, devicesInfo);\n } catch {\n // do nothing here, we'll just keep using the filtered list in memory for now\n }\n }\n\n return devicesInfo;\n } catch {\n return await DevicesFile.setAsync(projectRoot, { devices: [] });\n }\n}\n\nexport async function setDevicesInfoAsync(\n projectRoot: string,\n json: DevicesInfo\n): Promise<DevicesInfo> {\n devicesInfo = json;\n return await DevicesFile.setAsync(projectRoot, json);\n}\n\nexport async function saveDevicesAsync(\n projectRoot: string,\n deviceIds: string | string[]\n): Promise<void> {\n const currentTime = Date.now();\n const newDeviceIds = typeof deviceIds === 'string' ? [deviceIds] : deviceIds;\n\n debug(`Saving devices: ${newDeviceIds}`);\n const { devices } = await getDevicesInfoAsync(projectRoot);\n const newDevicesJson = devices\n .filter((device) => !newDeviceIds.includes(device.installationId))\n .concat(newDeviceIds.map((deviceId) => ({ installationId: deviceId, lastUsed: currentTime })));\n await setDevicesInfoAsync(projectRoot, { devices: filterOldDevices(newDevicesJson) });\n}\n\nfunction filterOldDevices(devices: DeviceInfo[]) {\n const currentTime = Date.now();\n return (\n devices\n // filter out any devices that haven't been used to open this project in 30 days\n .filter((device) => currentTime - device.lastUsed <= MILLISECONDS_IN_30_DAYS)\n // keep only the 10 most recently used devices\n .sort((a, b) => b.lastUsed - a.lastUsed)\n .slice(0, 10)\n );\n}\n"],"names":["getDevicesInfoAsync","readDevicesInfoAsync","setDevicesInfoAsync","saveDevicesAsync","debug","require","DEVICES_FILE_NAME","MILLISECONDS_IN_30_DAYS","
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/project/devices.ts"],"sourcesContent":["import { createTemporaryProjectFile } from './dotExpo';\n\nconst debug = require('debug')('expo:start:project:devices') as typeof console.log;\n\nexport type DeviceInfo = {\n installationId: string;\n lastUsed: number;\n};\n\nexport type DevicesInfo = {\n devices: DeviceInfo[];\n};\n\nconst DEVICES_FILE_NAME = 'devices.json';\n\nconst MILLISECONDS_IN_30_DAYS = 30 * 24 * 60 * 60 * 1000;\n\nexport const DevicesFile = createTemporaryProjectFile<DevicesInfo>(DEVICES_FILE_NAME, {\n devices: [],\n});\n\nlet devicesInfo: DevicesInfo | null = null;\n\nexport async function getDevicesInfoAsync(projectRoot: string): Promise<DevicesInfo> {\n if (devicesInfo) {\n return devicesInfo;\n }\n return readDevicesInfoAsync(projectRoot);\n}\n\nexport async function readDevicesInfoAsync(projectRoot: string): Promise<DevicesInfo> {\n try {\n devicesInfo = await DevicesFile.readAsync(projectRoot);\n\n // if the file on disk has old devices, filter them out here before we use them\n const filteredDevices = filterOldDevices(devicesInfo.devices);\n if (filteredDevices.length < devicesInfo.devices.length) {\n devicesInfo = {\n ...devicesInfo,\n devices: filteredDevices,\n };\n // save the newly filtered list for consistency\n try {\n await setDevicesInfoAsync(projectRoot, devicesInfo);\n } catch {\n // do nothing here, we'll just keep using the filtered list in memory for now\n }\n }\n\n return devicesInfo;\n } catch {\n return await DevicesFile.setAsync(projectRoot, { devices: [] });\n }\n}\n\nexport async function setDevicesInfoAsync(\n projectRoot: string,\n json: DevicesInfo\n): Promise<DevicesInfo> {\n devicesInfo = json;\n return await DevicesFile.setAsync(projectRoot, json);\n}\n\nexport async function saveDevicesAsync(\n projectRoot: string,\n deviceIds: string | string[]\n): Promise<void> {\n const currentTime = Date.now();\n const newDeviceIds = typeof deviceIds === 'string' ? [deviceIds] : deviceIds;\n\n debug(`Saving devices: ${newDeviceIds}`);\n const { devices } = await getDevicesInfoAsync(projectRoot);\n const newDevicesJson = devices\n .filter((device) => !newDeviceIds.includes(device.installationId))\n .concat(newDeviceIds.map((deviceId) => ({ installationId: deviceId, lastUsed: currentTime })));\n await setDevicesInfoAsync(projectRoot, { devices: filterOldDevices(newDevicesJson) });\n}\n\nfunction filterOldDevices(devices: DeviceInfo[]) {\n const currentTime = Date.now();\n return (\n devices\n // filter out any devices that haven't been used to open this project in 30 days\n .filter((device) => currentTime - device.lastUsed <= MILLISECONDS_IN_30_DAYS)\n // keep only the 10 most recently used devices\n .sort((a, b) => b.lastUsed - a.lastUsed)\n .slice(0, 10)\n );\n}\n"],"names":["DevicesFile","getDevicesInfoAsync","readDevicesInfoAsync","setDevicesInfoAsync","saveDevicesAsync","debug","require","DEVICES_FILE_NAME","MILLISECONDS_IN_30_DAYS","createTemporaryProjectFile","devices","devicesInfo","projectRoot","readAsync","filteredDevices","filterOldDevices","length","setAsync","json","deviceIds","currentTime","Date","now","newDeviceIds","newDevicesJson","filter","device","includes","installationId","concat","map","deviceId","lastUsed","sort","a","b","slice"],"mappings":"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"}
|
|
@@ -2,24 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
createTemporaryProjectFile: ()=>createTemporaryProjectFile,
|
|
13
|
+
ensureDotExpoProjectDirectoryInitialized: ()=>ensureDotExpoProjectDirectoryInitialized
|
|
14
|
+
});
|
|
7
15
|
function _jsonFile() {
|
|
8
|
-
const data = _interopRequireDefault(require("@expo/json-file"));
|
|
16
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("@expo/json-file"));
|
|
9
17
|
_jsonFile = function() {
|
|
10
18
|
return data;
|
|
11
19
|
};
|
|
12
20
|
return data;
|
|
13
21
|
}
|
|
14
22
|
function _fs() {
|
|
15
|
-
const data = _interopRequireDefault(require("fs"));
|
|
23
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("fs"));
|
|
16
24
|
_fs = function() {
|
|
17
25
|
return data;
|
|
18
26
|
};
|
|
19
27
|
return data;
|
|
20
28
|
}
|
|
21
29
|
function _path() {
|
|
22
|
-
const data = _interopRequireDefault(require("path"));
|
|
30
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
23
31
|
_path = function() {
|
|
24
32
|
return data;
|
|
25
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/project/dotExpo.ts"],"sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\n\n/** Create a set of functions for managing a file in the project's `.expo` directory. */\nexport function createTemporaryProjectFile<T extends JSONObject>(fileName: string, defaults: T) {\n function getFile(projectRoot: string): JsonFile<T> {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n return new JsonFile<T>(path.join(dotExpoDir, fileName));\n }\n\n async function readAsync(projectRoot: string): Promise<T> {\n let projectSettings;\n try {\n projectSettings = await getFile(projectRoot).readAsync();\n } catch {\n projectSettings = await getFile(projectRoot).writeAsync(defaults);\n }\n // Set defaults for any missing fields\n return { ...defaults, ...projectSettings };\n }\n\n async function setAsync(projectRoot: string, json: Partial<T>): Promise<T> {\n try {\n return await getFile(projectRoot).mergeAsync(json, {\n cantReadFileDefault: defaults,\n });\n } catch {\n return await getFile(projectRoot).writeAsync({\n ...defaults,\n ...json,\n });\n }\n }\n\n return {\n getFile,\n readAsync,\n setAsync,\n };\n}\n\nfunction getDotExpoProjectDirectory(projectRoot: string): string {\n return path.join(projectRoot, '.expo');\n}\n\nexport function ensureDotExpoProjectDirectoryInitialized(projectRoot: string): string {\n const dirPath = getDotExpoProjectDirectory(projectRoot);\n fs.mkdirSync(dirPath, { recursive: true });\n\n const readmeFilePath = path.resolve(dirPath, 'README.md');\n if (!fs.existsSync(readmeFilePath)) {\n fs.writeFileSync(\n readmeFilePath,\n `> Why do I have a folder named \".expo\" in my project?\nThe \".expo\" folder is created when an Expo project is started using \"expo start\" command.\n> What do the files contain?\n- \"devices.json\": contains information about devices that have recently opened this project. This is used to populate the \"Development sessions\" list in your development builds.\n- \"settings.json\": contains the server configuration that is used to serve the application manifest.\n> Should I commit the \".expo\" folder?\nNo, you should not share the \".expo\" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.\nUpon project creation, the \".expo\" folder is already added to your \".gitignore\" file.\n`\n );\n }\n return dirPath;\n}\n"],"names":["createTemporaryProjectFile","ensureDotExpoProjectDirectoryInitialized","fileName","defaults","getFile","projectRoot","dotExpoDir","JsonFile","path","join","readAsync","projectSettings","writeAsync","setAsync","json","mergeAsync","cantReadFileDefault","getDotExpoProjectDirectory","dirPath","fs","mkdirSync","recursive","readmeFilePath","resolve","existsSync","writeFileSync"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/project/dotExpo.ts"],"sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\n\n/** Create a set of functions for managing a file in the project's `.expo` directory. */\nexport function createTemporaryProjectFile<T extends JSONObject>(fileName: string, defaults: T) {\n function getFile(projectRoot: string): JsonFile<T> {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n return new JsonFile<T>(path.join(dotExpoDir, fileName));\n }\n\n async function readAsync(projectRoot: string): Promise<T> {\n let projectSettings;\n try {\n projectSettings = await getFile(projectRoot).readAsync();\n } catch {\n projectSettings = await getFile(projectRoot).writeAsync(defaults);\n }\n // Set defaults for any missing fields\n return { ...defaults, ...projectSettings };\n }\n\n async function setAsync(projectRoot: string, json: Partial<T>): Promise<T> {\n try {\n return await getFile(projectRoot).mergeAsync(json, {\n cantReadFileDefault: defaults,\n });\n } catch {\n return await getFile(projectRoot).writeAsync({\n ...defaults,\n ...json,\n });\n }\n }\n\n return {\n getFile,\n readAsync,\n setAsync,\n };\n}\n\nfunction getDotExpoProjectDirectory(projectRoot: string): string {\n return path.join(projectRoot, '.expo');\n}\n\nexport function ensureDotExpoProjectDirectoryInitialized(projectRoot: string): string {\n const dirPath = getDotExpoProjectDirectory(projectRoot);\n fs.mkdirSync(dirPath, { recursive: true });\n\n const readmeFilePath = path.resolve(dirPath, 'README.md');\n if (!fs.existsSync(readmeFilePath)) {\n fs.writeFileSync(\n readmeFilePath,\n `> Why do I have a folder named \".expo\" in my project?\nThe \".expo\" folder is created when an Expo project is started using \"expo start\" command.\n> What do the files contain?\n- \"devices.json\": contains information about devices that have recently opened this project. This is used to populate the \"Development sessions\" list in your development builds.\n- \"settings.json\": contains the server configuration that is used to serve the application manifest.\n> Should I commit the \".expo\" folder?\nNo, you should not share the \".expo\" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.\nUpon project creation, the \".expo\" folder is already added to your \".gitignore\" file.\n`\n );\n }\n return dirPath;\n}\n"],"names":["createTemporaryProjectFile","ensureDotExpoProjectDirectoryInitialized","fileName","defaults","getFile","projectRoot","dotExpoDir","JsonFile","path","join","readAsync","projectSettings","writeAsync","setAsync","json","mergeAsync","cantReadFileDefault","getDotExpoProjectDirectory","dirPath","fs","mkdirSync","recursive","readmeFilePath","resolve","existsSync","writeFileSync"],"mappings":"AAAA;;;;;;;;;;;IAKgBA,0BAA0B,MAA1BA,0BAA0B;IAyC1BC,wCAAwC,MAAxCA,wCAAwC;;;8DA9CnB,iBAAiB;;;;;;;8DACvC,IAAI;;;;;;;8DACF,MAAM;;;;;;;;;;;AAGhB,SAASD,0BAA0B,CAAuBE,QAAgB,EAAEC,QAAW,EAAE;IAC9F,SAASC,OAAO,CAACC,WAAmB,EAAe;QACjD,MAAMC,UAAU,GAAGL,wCAAwC,CAACI,WAAW,CAAC,AAAC;QACzE,OAAO,IAAIE,CAAAA,SAAQ,EAAA,CAAA,QAAA,CAAIC,KAAI,EAAA,QAAA,CAACC,IAAI,CAACH,UAAU,EAAEJ,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,eAAeQ,SAAS,CAACL,WAAmB,EAAc;QACxD,IAAIM,eAAe,AAAC;QACpB,IAAI;YACFA,eAAe,GAAG,MAAMP,OAAO,CAACC,WAAW,CAAC,CAACK,SAAS,EAAE,CAAC;QAC3D,EAAE,OAAM;YACNC,eAAe,GAAG,MAAMP,OAAO,CAACC,WAAW,CAAC,CAACO,UAAU,CAACT,QAAQ,CAAC,CAAC;QACpE,CAAC;QACD,sCAAsC;QACtC,OAAO;YAAE,GAAGA,QAAQ;YAAE,GAAGQ,eAAe;SAAE,CAAC;IAC7C,CAAC;IAED,eAAeE,QAAQ,CAACR,WAAmB,EAAES,IAAgB,EAAc;QACzE,IAAI;YACF,OAAO,MAAMV,OAAO,CAACC,WAAW,CAAC,CAACU,UAAU,CAACD,IAAI,EAAE;gBACjDE,mBAAmB,EAAEb,QAAQ;aAC9B,CAAC,CAAC;QACL,EAAE,OAAM;YACN,OAAO,MAAMC,OAAO,CAACC,WAAW,CAAC,CAACO,UAAU,CAAC;gBAC3C,GAAGT,QAAQ;gBACX,GAAGW,IAAI;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACLV,OAAO;QACPM,SAAS;QACTG,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAASI,0BAA0B,CAACZ,WAAmB,EAAU;IAC/D,OAAOG,KAAI,EAAA,QAAA,CAACC,IAAI,CAACJ,WAAW,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAEM,SAASJ,wCAAwC,CAACI,WAAmB,EAAU;IACpF,MAAMa,OAAO,GAAGD,0BAA0B,CAACZ,WAAW,CAAC,AAAC;IACxDc,GAAE,EAAA,QAAA,CAACC,SAAS,CAACF,OAAO,EAAE;QAAEG,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAE3C,MAAMC,cAAc,GAAGd,KAAI,EAAA,QAAA,CAACe,OAAO,CAACL,OAAO,EAAE,WAAW,CAAC,AAAC;IAC1D,IAAI,CAACC,GAAE,EAAA,QAAA,CAACK,UAAU,CAACF,cAAc,CAAC,EAAE;QAClCH,GAAE,EAAA,QAAA,CAACM,aAAa,CACdH,cAAc,EACd,CAAC;;;;;;;;AAQP,CAAC,CACI,CAAC;IACJ,CAAC;IACD,OAAOJ,OAAO,CAAC;AACjB,CAAC"}
|