@expo/cli 0.11.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +2 -2
- package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +1 -1
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +1 -1
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +5 -5
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +1 -1
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/actions.js +2 -2
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/otp.js +1 -1
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +2 -2
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +17 -1
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/customize/customizeAsync.js +1 -1
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +29 -2
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/templates.js +8 -0
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +54 -0
- package/build/src/customize/typescript.js.map +1 -0
- package/build/src/export/createBundles.js +1 -31
- package/build/src/export/createBundles.js.map +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +52 -4
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/index.js +1 -3
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +6 -10
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +73 -46
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +4 -4
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportHermes.js +204 -0
- package/build/src/export/exportHermes.js.map +1 -0
- package/build/src/export/exportStaticAsync.js +48 -14
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +7 -7
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +35 -12
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +1 -1
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +118 -0
- package/build/src/export/persistMetroAssets.js.map +1 -0
- package/build/src/export/printBundleSizes.js.map +1 -1
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +5 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +1 -1
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/index.js +1 -0
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +2 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/resolveOptions.js +7 -4
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +5 -9
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/index.js +2 -0
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +7 -6
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +4 -2
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +8 -5
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/register/registerAsync.js +0 -1
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +1 -1
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +7 -2
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +2 -2
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +2 -2
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +1 -1
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +2 -2
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +8 -3
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/index.js +0 -2
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +4 -4
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +3 -3
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +1 -1
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +1 -1
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +2 -2
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +1 -1
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +1 -1
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +1 -1
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/resolveOptions.js +0 -5
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +4 -3
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +4 -11
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +3 -2
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +2 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +3 -12
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +57 -36
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +15 -4
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +74 -13
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/resolveFromProject.js +13 -4
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +1 -1
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +43 -5
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -3
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +3 -3
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +8 -5
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +69 -0
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +57 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +13 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +79 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +78 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +121 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -0
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +64 -0
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +19 -0
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -0
- package/build/src/start/server/middleware/mutations.js +19 -0
- package/build/src/start/server/middleware/mutations.js.map +1 -0
- package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js +31 -0
- package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js +17 -0
- package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/server.types.js.map +1 -1
- package/build/src/start/server/middleware/suppressErrorMiddleware.js +16 -0
- package/build/src/start/server/middleware/suppressErrorMiddleware.js.map +1 -0
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +6 -6
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +19 -87
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +1 -1
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/startAsync.js +10 -32
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +1 -1
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +2 -2
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +2 -2
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +1 -1
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +2 -2
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +1 -1
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +1 -1
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +2 -2
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/git.js +1 -1
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +1 -1
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +1 -1
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/npm.js +1 -1
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/plist.js +1 -1
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +46 -18
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +1 -1
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/scheme.js +1 -1
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +85 -5
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/package.json +19 -13
- package/build/src/api/signManifest.js +0 -26
- package/build/src/api/signManifest.js.map +0 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
- package/build/src/start/server/middleware/createDevServerMiddleware.js +0 -24
- package/build/src/start/server/middleware/createDevServerMiddleware.js.map +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
|
|
7
|
+
var _open = _interopRequireDefault(require("open"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _launchBrowserTypes = require("./LaunchBrowser.types");
|
|
10
|
+
class LaunchBrowserImplLinux {
|
|
11
|
+
MAP = {
|
|
12
|
+
[_launchBrowserTypes.LaunchBrowserTypes.CHROME]: [
|
|
13
|
+
"google-chrome",
|
|
14
|
+
"google-chrome-stable",
|
|
15
|
+
"chromium"
|
|
16
|
+
],
|
|
17
|
+
[_launchBrowserTypes.LaunchBrowserTypes.EDGE]: [
|
|
18
|
+
"microsoft-edge",
|
|
19
|
+
"microsoft-edge-dev"
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* On Linux, the supported appId is an array, this function finds the available appId and caches it
|
|
24
|
+
*/ async getAppId(browserType) {
|
|
25
|
+
if (this._appId == null || !this.MAP[browserType].includes(this._appId)) {
|
|
26
|
+
for (const appId of this.MAP[browserType]){
|
|
27
|
+
try {
|
|
28
|
+
const { status } = await (0, _spawnAsync).default("which", [
|
|
29
|
+
appId
|
|
30
|
+
], {
|
|
31
|
+
stdio: "ignore"
|
|
32
|
+
});
|
|
33
|
+
if (status === 0) {
|
|
34
|
+
this._appId = appId;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
} catch {}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (this._appId == null) {
|
|
41
|
+
throw new Error(`Unable to find supported browser - tried[${this.MAP[browserType].join(", ")}]`);
|
|
42
|
+
}
|
|
43
|
+
return this._appId;
|
|
44
|
+
}
|
|
45
|
+
async isSupportedBrowser(browserType) {
|
|
46
|
+
let result = false;
|
|
47
|
+
try {
|
|
48
|
+
await this.getAppId(browserType);
|
|
49
|
+
result = true;
|
|
50
|
+
} catch {
|
|
51
|
+
result = false;
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
async createTempBrowserDir(baseDirName) {
|
|
56
|
+
return _path.default.join(require("temp-dir"), baseDirName);
|
|
57
|
+
}
|
|
58
|
+
async launchAsync(browserType, args) {
|
|
59
|
+
const appId = await this.getAppId(browserType);
|
|
60
|
+
this._process = await _open.default.openApp(appId, {
|
|
61
|
+
arguments: args
|
|
62
|
+
});
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
async close() {
|
|
66
|
+
var ref;
|
|
67
|
+
(ref = this._process) == null ? void 0 : ref.kill();
|
|
68
|
+
this._process = undefined;
|
|
69
|
+
this._appId = undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.default = LaunchBrowserImplLinux;
|
|
73
|
+
function _interopRequireDefault(obj) {
|
|
74
|
+
return obj && obj.__esModule ? obj : {
|
|
75
|
+
default: obj
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=LaunchBrowserImplLinux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/LaunchBrowserImplLinux.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport { type ChildProcess } from 'child_process';\nimport open from 'open';\nimport path from 'path';\n\nimport {\n LaunchBrowserTypes,\n type LaunchBrowserImpl,\n type LaunchBrowserInstance,\n} from './LaunchBrowser.types';\n\n/**\n * Browser implementation for Linux\n */\nexport default class LaunchBrowserImplLinux implements LaunchBrowserImpl, LaunchBrowserInstance {\n private _appId: string | undefined;\n private _process: ChildProcess | undefined;\n\n MAP = {\n [LaunchBrowserTypes.CHROME]: ['google-chrome', 'google-chrome-stable', 'chromium'],\n [LaunchBrowserTypes.EDGE]: ['microsoft-edge', 'microsoft-edge-dev'],\n };\n\n /**\n * On Linux, the supported appId is an array, this function finds the available appId and caches it\n */\n private async getAppId(browserType: LaunchBrowserTypes): Promise<string> {\n if (this._appId == null || !this.MAP[browserType].includes(this._appId)) {\n for (const appId of this.MAP[browserType]) {\n try {\n const { status } = await spawnAsync('which', [appId], { stdio: 'ignore' });\n if (status === 0) {\n this._appId = appId;\n break;\n }\n } catch {}\n }\n }\n\n if (this._appId == null) {\n throw new Error(\n `Unable to find supported browser - tried[${this.MAP[browserType].join(', ')}]`\n );\n }\n\n return this._appId;\n }\n\n async isSupportedBrowser(browserType: LaunchBrowserTypes): Promise<boolean> {\n let result = false;\n try {\n await this.getAppId(browserType);\n result = true;\n } catch {\n result = false;\n }\n return result;\n }\n\n async createTempBrowserDir(baseDirName: string) {\n return path.join(require('temp-dir'), baseDirName);\n }\n\n async launchAsync(\n browserType: LaunchBrowserTypes,\n args: string[]\n ): Promise<LaunchBrowserInstance> {\n const appId = await this.getAppId(browserType);\n this._process = await open.openApp(appId, { arguments: args });\n return this;\n }\n\n async close(): Promise<void> {\n this._process?.kill();\n this._process = undefined;\n this._appId = undefined;\n }\n}\n"],"names":["LaunchBrowserImplLinux","MAP","LaunchBrowserTypes","CHROME","EDGE","getAppId","browserType","_appId","includes","appId","status","spawnAsync","stdio","Error","join","isSupportedBrowser","result","createTempBrowserDir","baseDirName","path","require","launchAsync","args","_process","open","openApp","arguments","close","kill","undefined"],"mappings":"AAAA;;;;;AAAuB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AAEzB,IAAA,KAAM,kCAAN,MAAM,EAAA;AACN,IAAA,KAAM,kCAAN,MAAM,EAAA;AAMhB,IAAA,mBAAuB,WAAvB,uBAAuB,CAAA;AAKf,MAAMA,sBAAsB;IAIzCC,GAAG,GAAG;QACJ,CAACC,mBAAkB,mBAAA,CAACC,MAAM,CAAC,EAAE;YAAC,eAAe;YAAE,sBAAsB;YAAE,UAAU;SAAC;QAClF,CAACD,mBAAkB,mBAAA,CAACE,IAAI,CAAC,EAAE;YAAC,gBAAgB;YAAE,oBAAoB;SAAC;KACpE,CAAC;IAEF;;KAEG,CACH,MAAcC,QAAQ,CAACC,WAA+B,EAAmB;QACvE,IAAI,IAAI,CAACC,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAACN,GAAG,CAACK,WAAW,CAAC,CAACE,QAAQ,CAAC,IAAI,CAACD,MAAM,CAAC,EAAE;YACvE,KAAK,MAAME,KAAK,IAAI,IAAI,CAACR,GAAG,CAACK,WAAW,CAAC,CAAE;gBACzC,IAAI;oBACF,MAAM,EAAEI,MAAM,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,WAAU,AAAuC,CAAA,QAAvC,CAAC,OAAO,EAAE;wBAACF,KAAK;qBAAC,EAAE;wBAAEG,KAAK,EAAE,QAAQ;qBAAE,CAAC,AAAC;oBAC3E,IAAIF,MAAM,KAAK,CAAC,EAAE;wBAChB,IAAI,CAACH,MAAM,GAAGE,KAAK,CAAC;wBACpB,MAAM;qBACP;iBACF,CAAC,OAAM,EAAE;aACX;SACF;QAED,IAAI,IAAI,CAACF,MAAM,IAAI,IAAI,EAAE;YACvB,MAAM,IAAIM,KAAK,CACb,CAAC,yCAAyC,EAAE,IAAI,CAACZ,GAAG,CAACK,WAAW,CAAC,CAACQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAChF,CAAC;SACH;QAED,OAAO,IAAI,CAACP,MAAM,CAAC;KACpB;IAED,MAAMQ,kBAAkB,CAACT,WAA+B,EAAoB;QAC1E,IAAIU,MAAM,GAAG,KAAK,AAAC;QACnB,IAAI;YACF,MAAM,IAAI,CAACX,QAAQ,CAACC,WAAW,CAAC,CAAC;YACjCU,MAAM,GAAG,IAAI,CAAC;SACf,CAAC,OAAM;YACNA,MAAM,GAAG,KAAK,CAAC;SAChB;QACD,OAAOA,MAAM,CAAC;KACf;IAED,MAAMC,oBAAoB,CAACC,WAAmB,EAAE;QAC9C,OAAOC,KAAI,QAAA,CAACL,IAAI,CAACM,OAAO,CAAC,UAAU,CAAC,EAAEF,WAAW,CAAC,CAAC;KACpD;IAED,MAAMG,WAAW,CACff,WAA+B,EAC/BgB,IAAc,EACkB;QAChC,MAAMb,KAAK,GAAG,MAAM,IAAI,CAACJ,QAAQ,CAACC,WAAW,CAAC,AAAC;QAC/C,IAAI,CAACiB,QAAQ,GAAG,MAAMC,KAAI,QAAA,CAACC,OAAO,CAAChB,KAAK,EAAE;YAAEiB,SAAS,EAAEJ,IAAI;SAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;KACb;IAED,MAAMK,KAAK,GAAkB;YAC3B,GAAa;QAAb,CAAA,GAAa,GAAb,IAAI,CAACJ,QAAQ,SAAM,GAAnB,KAAA,CAAmB,GAAnB,GAAa,CAAEK,IAAI,EAAE,AAzEzB,CAyE0B;QACtB,IAAI,CAACL,QAAQ,GAAGM,SAAS,CAAC;QAC1B,IAAI,CAACtB,MAAM,GAAGsB,SAAS,CAAC;KACzB;CACF;kBA/DoB7B,sBAAsB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var osascript = _interopRequireWildcard(require("@expo/osascript"));
|
|
7
|
+
var _childProcess = require("child_process");
|
|
8
|
+
var _glob = require("glob");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _launchBrowserTypes = require("./LaunchBrowser.types");
|
|
11
|
+
class LaunchBrowserImplMacOS {
|
|
12
|
+
MAP = {
|
|
13
|
+
[_launchBrowserTypes.LaunchBrowserTypes.CHROME]: "google chrome",
|
|
14
|
+
[_launchBrowserTypes.LaunchBrowserTypes.EDGE]: "microsoft edge"
|
|
15
|
+
};
|
|
16
|
+
async isSupportedBrowser(browserType) {
|
|
17
|
+
let result = false;
|
|
18
|
+
try {
|
|
19
|
+
await osascript.execAsync(`id of application "${this.MAP[browserType]}"`);
|
|
20
|
+
result = true;
|
|
21
|
+
} catch {
|
|
22
|
+
result = false;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
async createTempBrowserDir(baseDirName) {
|
|
27
|
+
return _path.default.join(require("temp-dir"), baseDirName);
|
|
28
|
+
}
|
|
29
|
+
async launchAsync(browserType, args) {
|
|
30
|
+
var ref;
|
|
31
|
+
const appDirectory = await osascript.execAsync(`POSIX path of (path to application "${this.MAP[browserType]}")`);
|
|
32
|
+
const appPath = (ref = (0, _glob).sync("Contents/MacOS/*", {
|
|
33
|
+
cwd: appDirectory.trim(),
|
|
34
|
+
absolute: true
|
|
35
|
+
})) == null ? void 0 : ref[0];
|
|
36
|
+
if (!appPath) {
|
|
37
|
+
throw new Error(`Cannot find application path from ${appDirectory}Contents/MacOS`);
|
|
38
|
+
}
|
|
39
|
+
this._process = (0, _childProcess).spawn(appPath, args, {
|
|
40
|
+
stdio: "ignore"
|
|
41
|
+
});
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
async close() {
|
|
45
|
+
var ref;
|
|
46
|
+
(ref = this._process) == null ? void 0 : ref.kill();
|
|
47
|
+
this._process = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = LaunchBrowserImplMacOS;
|
|
51
|
+
function _interopRequireDefault(obj) {
|
|
52
|
+
return obj && obj.__esModule ? obj : {
|
|
53
|
+
default: obj
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function _interopRequireWildcard(obj) {
|
|
57
|
+
if (obj && obj.__esModule) {
|
|
58
|
+
return obj;
|
|
59
|
+
} else {
|
|
60
|
+
var newObj = {};
|
|
61
|
+
if (obj != null) {
|
|
62
|
+
for(var key in obj){
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
64
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
65
|
+
if (desc.get || desc.set) {
|
|
66
|
+
Object.defineProperty(newObj, key, desc);
|
|
67
|
+
} else {
|
|
68
|
+
newObj[key] = obj[key];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
newObj.default = obj;
|
|
74
|
+
return newObj;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=LaunchBrowserImplMacOS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/LaunchBrowserImplMacOS.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport { spawn, type ChildProcess } from 'child_process';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport {\n LaunchBrowserTypes,\n type LaunchBrowserImpl,\n type LaunchBrowserInstance,\n} from './LaunchBrowser.types';\n\n/**\n * Browser implementation for macOS\n */\nexport default class LaunchBrowserImplMacOS implements LaunchBrowserImpl, LaunchBrowserInstance {\n private _process: ChildProcess | undefined;\n\n MAP = {\n [LaunchBrowserTypes.CHROME]: 'google chrome',\n [LaunchBrowserTypes.EDGE]: 'microsoft edge',\n };\n\n async isSupportedBrowser(browserType: LaunchBrowserTypes): Promise<boolean> {\n let result = false;\n try {\n await osascript.execAsync(`id of application \"${this.MAP[browserType]}\"`);\n result = true;\n } catch {\n result = false;\n }\n return result;\n }\n\n async createTempBrowserDir(baseDirName: string) {\n return path.join(require('temp-dir'), baseDirName);\n }\n\n async launchAsync(\n browserType: LaunchBrowserTypes,\n args: string[]\n ): Promise<LaunchBrowserInstance> {\n const appDirectory = await osascript.execAsync(\n `POSIX path of (path to application \"${this.MAP[browserType]}\")`\n );\n const appPath = globSync('Contents/MacOS/*', { cwd: appDirectory.trim(), absolute: true })?.[0];\n if (!appPath) {\n throw new Error(`Cannot find application path from ${appDirectory}Contents/MacOS`);\n }\n this._process = spawn(appPath, args, { stdio: 'ignore' });\n\n return this;\n }\n\n async close(): Promise<void> {\n this._process?.kill();\n this._process = undefined;\n }\n}\n"],"names":["osascript","LaunchBrowserImplMacOS","MAP","LaunchBrowserTypes","CHROME","EDGE","isSupportedBrowser","browserType","result","execAsync","createTempBrowserDir","baseDirName","path","join","require","launchAsync","args","globSync","appDirectory","appPath","cwd","trim","absolute","Error","_process","spawn","stdio","close","kill","undefined"],"mappings":"AAAA;;;;;AAAYA,IAAAA,SAAS,mCAAM,iBAAiB,EAAvB;AACoB,IAAA,aAAe,WAAf,eAAe,CAAA;AACvB,IAAA,KAAM,WAAN,MAAM,CAAA;AACtB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAMhB,IAAA,mBAAuB,WAAvB,uBAAuB,CAAA;AAKf,MAAMC,sBAAsB;IAGzCC,GAAG,GAAG;QACJ,CAACC,mBAAkB,mBAAA,CAACC,MAAM,CAAC,EAAE,eAAe;QAC5C,CAACD,mBAAkB,mBAAA,CAACE,IAAI,CAAC,EAAE,gBAAgB;KAC5C,CAAC;IAEF,MAAMC,kBAAkB,CAACC,WAA+B,EAAoB;QAC1E,IAAIC,MAAM,GAAG,KAAK,AAAC;QACnB,IAAI;YACF,MAAMR,SAAS,CAACS,SAAS,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAACP,GAAG,CAACK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1EC,MAAM,GAAG,IAAI,CAAC;SACf,CAAC,OAAM;YACNA,MAAM,GAAG,KAAK,CAAC;SAChB;QACD,OAAOA,MAAM,CAAC;KACf;IAED,MAAME,oBAAoB,CAACC,WAAmB,EAAE;QAC9C,OAAOC,KAAI,QAAA,CAACC,IAAI,CAACC,OAAO,CAAC,UAAU,CAAC,EAAEH,WAAW,CAAC,CAAC;KACpD;IAED,MAAMI,WAAW,CACfR,WAA+B,EAC/BS,IAAc,EACkB;YAIhBC,GAA0E;QAH1F,MAAMC,YAAY,GAAG,MAAMlB,SAAS,CAACS,SAAS,CAC5C,CAAC,oCAAoC,EAAE,IAAI,CAACP,GAAG,CAACK,WAAW,CAAC,CAAC,EAAE,CAAC,CACjE,AAAC;QACF,MAAMY,OAAO,GAAGF,CAAAA,GAA0E,GAA1EA,CAAAA,GAAAA,KAAQ,AAAkE,CAAA,KAAlE,CAAC,kBAAkB,EAAE;YAAEG,GAAG,EAAEF,YAAY,CAACG,IAAI,EAAE;YAAEC,QAAQ,EAAE,IAAI;SAAE,CAAC,SAAK,GAA/EL,KAAAA,CAA+E,GAA/EA,GAA0E,AAAE,CAAC,CAAC,CAAC,AAAC;QAChG,IAAI,CAACE,OAAO,EAAE;YACZ,MAAM,IAAII,KAAK,CAAC,CAAC,kCAAkC,EAAEL,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;SACpF;QACD,IAAI,CAACM,QAAQ,GAAGC,CAAAA,GAAAA,aAAK,AAAoC,CAAA,MAApC,CAACN,OAAO,EAAEH,IAAI,EAAE;YAAEU,KAAK,EAAE,QAAQ;SAAE,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;KACb;IAED,MAAMC,KAAK,GAAkB;YAC3B,GAAa;QAAb,CAAA,GAAa,GAAb,IAAI,CAACH,QAAQ,SAAM,GAAnB,KAAA,CAAmB,GAAnB,GAAa,CAAEI,IAAI,EAAE,AAtDzB,CAsD0B;QACtB,IAAI,CAACJ,QAAQ,GAAGK,SAAS,CAAC;KAC3B;CACF;kBA3CoB5B,sBAAsB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
|
|
7
|
+
var _open = _interopRequireDefault(require("open"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _launchBrowserTypes = require("./LaunchBrowser.types");
|
|
10
|
+
class LaunchBrowserImplWindows {
|
|
11
|
+
MAP = {
|
|
12
|
+
[_launchBrowserTypes.LaunchBrowserTypes.CHROME]: {
|
|
13
|
+
appId: "chrome",
|
|
14
|
+
fullName: "Google Chrome"
|
|
15
|
+
},
|
|
16
|
+
[_launchBrowserTypes.LaunchBrowserTypes.EDGE]: {
|
|
17
|
+
appId: "msedge",
|
|
18
|
+
fullName: "Microsoft Edge"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
async isSupportedBrowser(browserType) {
|
|
22
|
+
let result = false;
|
|
23
|
+
try {
|
|
24
|
+
const env = await this.getPowershellEnv();
|
|
25
|
+
const { status } = await (0, _spawnAsync).default("powershell.exe", [
|
|
26
|
+
"-c",
|
|
27
|
+
`Get-Package -Name '${this.MAP[browserType].fullName}'`
|
|
28
|
+
], {
|
|
29
|
+
env,
|
|
30
|
+
stdio: "ignore"
|
|
31
|
+
});
|
|
32
|
+
result = status === 0;
|
|
33
|
+
} catch {
|
|
34
|
+
result = false;
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
async createTempBrowserDir(baseDirName) {
|
|
39
|
+
let tmpDir;
|
|
40
|
+
if (IS_WSL) {
|
|
41
|
+
// On WSL, the browser is actually launched in host, the `temp-dir` returns the linux /tmp path where host browsers cannot reach into.
|
|
42
|
+
// We should get the temp path through the `$TEMP` windows environment variable.
|
|
43
|
+
tmpDir = (await (0, _spawnAsync).default("powershell.exe", [
|
|
44
|
+
"-c",
|
|
45
|
+
'echo "$Env:TEMP"'
|
|
46
|
+
])).stdout.trim();
|
|
47
|
+
return `${tmpDir}\\${baseDirName}`;
|
|
48
|
+
} else {
|
|
49
|
+
tmpDir = require("temp-dir");
|
|
50
|
+
return _path.default.join(tmpDir, baseDirName);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async launchAsync(browserType, args) {
|
|
54
|
+
const appId = this.MAP[browserType].appId;
|
|
55
|
+
await openWithSystemRootEnvironment(appId, {
|
|
56
|
+
arguments: args
|
|
57
|
+
});
|
|
58
|
+
this._appId = appId;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
async close() {
|
|
62
|
+
if (this._appId != null) {
|
|
63
|
+
try {
|
|
64
|
+
// Since we wrap all spawn calls through powershell as well as from `open.openApp`, the returned ChildProcess is not the browser process.
|
|
65
|
+
// And we cannot just call `process.kill()` kill it.
|
|
66
|
+
// The implementation tries to find the pid of target chromium browser process (with --app=https://chrome-devtools-frontend.appspot.com in command arguments),
|
|
67
|
+
// and uses taskkill to terminate the process.
|
|
68
|
+
const env = await this.getPowershellEnv();
|
|
69
|
+
await (0, _spawnAsync).default("powershell.exe", [
|
|
70
|
+
"-c",
|
|
71
|
+
`taskkill.exe /pid @(Get-WmiObject Win32_Process -Filter "name = '${this._appId}.exe' AND CommandLine LIKE '%chrome-devtools-frontend.appspot.com%'" | Select-Object -ExpandProperty ProcessId)`,
|
|
72
|
+
], {
|
|
73
|
+
env,
|
|
74
|
+
stdio: "ignore"
|
|
75
|
+
});
|
|
76
|
+
} catch {}
|
|
77
|
+
this._appId = undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* This method is used to get the powershell environment variables for `Get-Package` command.
|
|
82
|
+
* Especially for powershell 7, its default `PSModulePath` is different from powershell 5 and `Get-Package` command is not available.
|
|
83
|
+
* We need to set the PSModulePath to include the default value of powershell 5.
|
|
84
|
+
*/ async getPowershellEnv() {
|
|
85
|
+
if (this._powershellEnv) {
|
|
86
|
+
return this._powershellEnv;
|
|
87
|
+
}
|
|
88
|
+
const PSModulePath = (await (0, _spawnAsync).default("powershell.exe", [
|
|
89
|
+
"-c",
|
|
90
|
+
'echo "$PSHOME\\Modules"'
|
|
91
|
+
])).stdout.trim();
|
|
92
|
+
this._powershellEnv = {
|
|
93
|
+
PSModulePath
|
|
94
|
+
};
|
|
95
|
+
return this._powershellEnv;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.default = LaunchBrowserImplWindows;
|
|
99
|
+
function _interopRequireDefault(obj) {
|
|
100
|
+
return obj && obj.__esModule ? obj : {
|
|
101
|
+
default: obj
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const IS_WSL = require("is-wsl") && !require("is-docker")();
|
|
105
|
+
/**
|
|
106
|
+
* Due to a bug in `open` on Windows PowerShell, we need to ensure `process.env.SYSTEMROOT` is set.
|
|
107
|
+
* This environment variable is set by Windows on `SystemRoot`, causing `open` to execute a command with an "unknown" drive letter.
|
|
108
|
+
*
|
|
109
|
+
* @see https://github.com/sindresorhus/open/issues/205
|
|
110
|
+
*/ async function openWithSystemRootEnvironment(appId, options) {
|
|
111
|
+
const oldSystemRoot = process.env.SYSTEMROOT;
|
|
112
|
+
try {
|
|
113
|
+
var _SYSTEMROOT;
|
|
114
|
+
process.env.SYSTEMROOT = (_SYSTEMROOT = process.env.SYSTEMROOT) != null ? _SYSTEMROOT : process.env.SystemRoot;
|
|
115
|
+
return await _open.default.openApp(appId, options);
|
|
116
|
+
} finally{
|
|
117
|
+
process.env.SYSTEMROOT = oldSystemRoot;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=LaunchBrowserImplWindows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/LaunchBrowserImplWindows.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport open from 'open';\nimport path from 'path';\n\nimport {\n LaunchBrowserTypes,\n type LaunchBrowserImpl,\n type LaunchBrowserInstance,\n} from './LaunchBrowser.types';\n\nconst IS_WSL = require('is-wsl') && !require('is-docker')();\n\n/**\n * Browser implementation for Windows and WSL\n *\n * To minimize the difference between Windows and WSL, the implementation wraps all spawn calls through powershell.\n */\nexport default class LaunchBrowserImplWindows implements LaunchBrowserImpl, LaunchBrowserInstance {\n private _appId: string | undefined;\n private _powershellEnv: { [key: string]: string } | undefined;\n\n MAP = {\n [LaunchBrowserTypes.CHROME]: {\n appId: 'chrome',\n fullName: 'Google Chrome',\n },\n [LaunchBrowserTypes.EDGE]: {\n appId: 'msedge',\n fullName: 'Microsoft Edge',\n },\n };\n\n async isSupportedBrowser(browserType: LaunchBrowserTypes): Promise<boolean> {\n let result = false;\n try {\n const env = await this.getPowershellEnv();\n const { status } = await spawnAsync(\n 'powershell.exe',\n ['-c', `Get-Package -Name '${this.MAP[browserType].fullName}'`],\n { env, stdio: 'ignore' }\n );\n result = status === 0;\n } catch {\n result = false;\n }\n return result;\n }\n\n async createTempBrowserDir(baseDirName: string) {\n let tmpDir;\n if (IS_WSL) {\n // On WSL, the browser is actually launched in host, the `temp-dir` returns the linux /tmp path where host browsers cannot reach into.\n // We should get the temp path through the `$TEMP` windows environment variable.\n tmpDir = (await spawnAsync('powershell.exe', ['-c', 'echo \"$Env:TEMP\"'])).stdout.trim();\n return `${tmpDir}\\\\${baseDirName}`;\n } else {\n tmpDir = require('temp-dir');\n return path.join(tmpDir, baseDirName);\n }\n }\n\n async launchAsync(\n browserType: LaunchBrowserTypes,\n args: string[]\n ): Promise<LaunchBrowserInstance> {\n const appId = this.MAP[browserType].appId;\n await openWithSystemRootEnvironment(appId, { arguments: args });\n this._appId = appId;\n return this;\n }\n\n async close(): Promise<void> {\n if (this._appId != null) {\n try {\n // Since we wrap all spawn calls through powershell as well as from `open.openApp`, the returned ChildProcess is not the browser process.\n // And we cannot just call `process.kill()` kill it.\n // The implementation tries to find the pid of target chromium browser process (with --app=https://chrome-devtools-frontend.appspot.com in command arguments),\n // and uses taskkill to terminate the process.\n const env = await this.getPowershellEnv();\n await spawnAsync(\n 'powershell.exe',\n [\n '-c',\n `taskkill.exe /pid @(Get-WmiObject Win32_Process -Filter \"name = '${this._appId}.exe' AND CommandLine LIKE '%chrome-devtools-frontend.appspot.com%'\" | Select-Object -ExpandProperty ProcessId)`,\n ],\n { env, stdio: 'ignore' }\n );\n } catch {}\n this._appId = undefined;\n }\n }\n\n /**\n * This method is used to get the powershell environment variables for `Get-Package` command.\n * Especially for powershell 7, its default `PSModulePath` is different from powershell 5 and `Get-Package` command is not available.\n * We need to set the PSModulePath to include the default value of powershell 5.\n */\n private async getPowershellEnv(): Promise<{ [key: string]: string }> {\n if (this._powershellEnv) {\n return this._powershellEnv;\n }\n const PSModulePath = (\n await spawnAsync('powershell.exe', ['-c', 'echo \"$PSHOME\\\\Modules\"'])\n ).stdout.trim();\n this._powershellEnv = {\n PSModulePath,\n };\n return this._powershellEnv;\n }\n}\n\n/**\n * Due to a bug in `open` on Windows PowerShell, we need to ensure `process.env.SYSTEMROOT` is set.\n * This environment variable is set by Windows on `SystemRoot`, causing `open` to execute a command with an \"unknown\" drive letter.\n *\n * @see https://github.com/sindresorhus/open/issues/205\n */\nasync function openWithSystemRootEnvironment(\n appId: string | Readonly<string[]>,\n options?: open.OpenAppOptions\n): Promise<import('child_process').ChildProcess> {\n const oldSystemRoot = process.env.SYSTEMROOT;\n try {\n process.env.SYSTEMROOT = process.env.SYSTEMROOT ?? process.env.SystemRoot;\n return await open.openApp(appId, options);\n } finally {\n process.env.SYSTEMROOT = oldSystemRoot;\n }\n}\n"],"names":["LaunchBrowserImplWindows","MAP","LaunchBrowserTypes","CHROME","appId","fullName","EDGE","isSupportedBrowser","browserType","result","env","getPowershellEnv","status","spawnAsync","stdio","createTempBrowserDir","baseDirName","tmpDir","IS_WSL","stdout","trim","require","path","join","launchAsync","args","openWithSystemRootEnvironment","arguments","_appId","close","undefined","_powershellEnv","PSModulePath","options","oldSystemRoot","process","SYSTEMROOT","SystemRoot","open","openApp"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.default = createJsInspectorMiddleware;
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var _net = _interopRequireDefault(require("net"));
|
|
8
|
+
var _tls = require("tls");
|
|
9
|
+
var _url = require("url");
|
|
10
|
+
var _jsInspector = require("./JsInspector");
|
|
11
|
+
function createJsInspectorMiddleware() {
|
|
12
|
+
return async function(req, res, next) {
|
|
13
|
+
var _url1;
|
|
14
|
+
const { origin , searchParams } = new _url.URL((_url1 = req.url) != null ? _url1 : "/", getServerBase(req));
|
|
15
|
+
const applicationId = searchParams.get("applicationId");
|
|
16
|
+
if (!applicationId) {
|
|
17
|
+
res.writeHead(400).end("Missing applicationId");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const app = await (0, _jsInspector).queryInspectorAppAsync(origin, applicationId);
|
|
21
|
+
if (!app) {
|
|
22
|
+
res.writeHead(404).end("Unable to find inspector target from metro-inspector-proxy");
|
|
23
|
+
console.warn(_chalk.default.yellow("No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine."));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (req.method === "GET") {
|
|
27
|
+
const data = JSON.stringify(app);
|
|
28
|
+
res.writeHead(200, {
|
|
29
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
30
|
+
"Cache-Control": "no-cache",
|
|
31
|
+
"Content-Length": data.length.toString()
|
|
32
|
+
});
|
|
33
|
+
res.end(data);
|
|
34
|
+
} else if (req.method === "POST" || req.method === "PUT") {
|
|
35
|
+
try {
|
|
36
|
+
await (0, _jsInspector).openJsInspector(app);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
var ref;
|
|
39
|
+
// abort(Error: Command failed: osascript -e POSIX path of (path to application "google chrome")
|
|
40
|
+
// 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)
|
|
41
|
+
console.error(_chalk.default.red("Error launching JS inspector: " + ((ref = error == null ? void 0 : error.message) != null ? ref : "Unknown error occurred")));
|
|
42
|
+
res.writeHead(500);
|
|
43
|
+
res.end();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
res.end();
|
|
47
|
+
} else {
|
|
48
|
+
res.writeHead(405);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function _interopRequireDefault(obj) {
|
|
53
|
+
return obj && obj.__esModule ? obj : {
|
|
54
|
+
default: obj
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function getServerBase(req) {
|
|
58
|
+
const scheme = req.socket instanceof _tls.TLSSocket && req.socket.encrypted === true ? "https" : "http";
|
|
59
|
+
const { localAddress , localPort } = req.socket;
|
|
60
|
+
const address = localAddress && _net.default.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;
|
|
61
|
+
return `${scheme}:${address}:${localPort}`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=createJsInspectorMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/createJsInspectorMiddleware.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { NextHandleFunction } from 'connect';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport net from 'net';\nimport { TLSSocket } from 'tls';\nimport { URL } from 'url';\n\nimport { openJsInspector, queryInspectorAppAsync } from './JsInspector';\n\nexport default function createJsInspectorMiddleware(): NextHandleFunction {\n return async function (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) {\n const { origin, searchParams } = new URL(req.url ?? '/', getServerBase(req));\n const applicationId = searchParams.get('applicationId');\n if (!applicationId) {\n res.writeHead(400).end('Missing applicationId');\n return;\n }\n\n const app = await queryInspectorAppAsync(origin, applicationId);\n if (!app) {\n res.writeHead(404).end('Unable to find inspector target from metro-inspector-proxy');\n console.warn(\n chalk.yellow(\n 'No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'\n )\n );\n return;\n }\n\n if (req.method === 'GET') {\n const data = JSON.stringify(app);\n res.writeHead(200, {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Cache-Control': 'no-cache',\n 'Content-Length': data.length.toString(),\n });\n res.end(data);\n } else if (req.method === 'POST' || req.method === 'PUT') {\n try {\n await openJsInspector(app);\n } catch (error: any) {\n // abort(Error: Command failed: osascript -e POSIX path of (path to application \"google chrome\")\n // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)\n\n console.error(\n chalk.red('Error launching JS inspector: ' + (error?.message ?? 'Unknown error occurred'))\n );\n res.writeHead(500);\n res.end();\n return;\n }\n res.end();\n } else {\n res.writeHead(405);\n }\n };\n}\n\nfunction getServerBase(req: IncomingMessage): string {\n const scheme =\n req.socket instanceof TLSSocket && req.socket.encrypted === true ? 'https' : 'http';\n const { localAddress, localPort } = req.socket;\n const address = localAddress && net.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;\n return `${scheme}:${address}:${localPort}`;\n}\n"],"names":["createJsInspectorMiddleware","req","res","next","origin","searchParams","URL","url","getServerBase","applicationId","get","writeHead","end","app","queryInspectorAppAsync","console","warn","chalk","yellow","method","data","JSON","stringify","length","toString","openJsInspector","error","red","message","scheme","socket","TLSSocket","encrypted","localAddress","localPort","address","net","isIPv6"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.prependMiddleware = prependMiddleware;
|
|
6
|
+
exports.replaceMiddlewareWith = replaceMiddlewareWith;
|
|
7
|
+
function prependMiddleware(app, middleware) {
|
|
8
|
+
app.use(middleware);
|
|
9
|
+
app.stack.unshift(app.stack.pop());
|
|
10
|
+
}
|
|
11
|
+
function replaceMiddlewareWith(app, sourceMiddleware, targetMiddleware) {
|
|
12
|
+
const item = app.stack.find((middleware)=>middleware.handle === sourceMiddleware
|
|
13
|
+
);
|
|
14
|
+
if (item) {
|
|
15
|
+
item.handle = targetMiddleware;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=middlwareMutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/middlwareMutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => middleware.handle === sourceMiddleware);\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handle"],"mappings":"AAAA;;;;QAQgBA,iBAAiB,GAAjBA,iBAAiB;QAYjBC,qBAAqB,GAArBA,qBAAqB;AAZ9B,SAASD,iBAAiB,CAACE,GAAkB,EAAEC,UAA0B,EAAE;IAChFD,GAAG,CAACE,GAAG,CAACD,UAAU,CAAC,CAAC;IACpBD,GAAG,CAACG,KAAK,CAACC,OAAO,CAACJ,GAAG,CAACG,KAAK,CAACE,GAAG,EAAE,CAAE,CAAC;CACrC;AASM,SAASN,qBAAqB,CACnCC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC,EAChC;IACA,MAAMC,IAAI,GAAGR,GAAG,CAACG,KAAK,CAACM,IAAI,CAAC,CAACR,UAAU,GAAKA,UAAU,CAACS,MAAM,KAAKJ,gBAAgB;IAAA,CAAC,AAAC;IACpF,IAAIE,IAAI,EAAE;QACRA,IAAI,CAACE,MAAM,GAAGH,gBAAgB,CAAC;KAChC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.prependMiddleware = prependMiddleware;
|
|
6
|
+
exports.replaceMiddlewareWith = replaceMiddlewareWith;
|
|
7
|
+
function prependMiddleware(app, middleware) {
|
|
8
|
+
app.use(middleware);
|
|
9
|
+
app.stack.unshift(app.stack.pop());
|
|
10
|
+
}
|
|
11
|
+
function replaceMiddlewareWith(app, sourceMiddleware, targetMiddleware) {
|
|
12
|
+
const item = app.stack.find((middleware)=>middleware.handle === sourceMiddleware
|
|
13
|
+
);
|
|
14
|
+
if (item) {
|
|
15
|
+
item.handle = targetMiddleware;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/mutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => middleware.handle === sourceMiddleware);\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handle"],"mappings":"AAAA;;;;QAQgBA,iBAAiB,GAAjBA,iBAAiB;QAYjBC,qBAAqB,GAArBA,qBAAqB;AAZ9B,SAASD,iBAAiB,CAACE,GAAkB,EAAEC,UAA0B,EAAE;IAChFD,GAAG,CAACE,GAAG,CAACD,UAAU,CAAC,CAAC;IACpBD,GAAG,CAACG,KAAK,CAACC,OAAO,CAACJ,GAAG,CAACG,KAAK,CAACE,GAAG,EAAE,CAAE,CAAC;CACrC;AASM,SAASN,qBAAqB,CACnCC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC,EAChC;IACA,MAAMC,IAAI,GAAGR,GAAG,CAACG,KAAK,CAACM,IAAI,CAAC,CAACR,UAAU,GAAKA,UAAU,CAACS,MAAM,KAAKJ,gBAAgB;IAAA,CAAC,AAAC;IACpF,IAAIE,IAAI,EAAE;QACRA,IAAI,CAACE,MAAM,GAAGH,gBAAgB,CAAC;KAChC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.remoteDevtoolsCorsMiddleware = remoteDevtoolsCorsMiddleware;
|
|
6
|
+
var _url = require("url");
|
|
7
|
+
function remoteDevtoolsCorsMiddleware(req, res, next) {
|
|
8
|
+
if (req.url) {
|
|
9
|
+
var ref;
|
|
10
|
+
const url = (0, _url).parse(req.url);
|
|
11
|
+
const origin = req.headers.origin;
|
|
12
|
+
const isValidOrigin = origin && [
|
|
13
|
+
"devtools://devtools",
|
|
14
|
+
"https://chrome-devtools-frontend.appspot.com"
|
|
15
|
+
].includes(origin);
|
|
16
|
+
if (((ref = url.pathname) == null ? void 0 : ref.endsWith(".map")) && origin && isValidOrigin) {
|
|
17
|
+
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
18
|
+
// Prevent metro overwrite Access-Control-Allow-Origin header
|
|
19
|
+
const setHeader = res.setHeader.bind(res);
|
|
20
|
+
res.setHeader = (key, ...args)=>{
|
|
21
|
+
if (key !== "Access-Control-Allow-Origin") {
|
|
22
|
+
setHeader(key, ...args);
|
|
23
|
+
}
|
|
24
|
+
return res;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
next();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=remoteDevtoolsCorsMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/remoteDevtoolsCorsMiddleware.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http';\nimport { parse as parseUrl } from 'url';\n\n// Middleware that accepts multiple Access-Control-Allow-Origin for processing *.map.\n// This is a hook middleware before metro processing *.map,\n// which originally allow only devtools://devtools\nexport function remoteDevtoolsCorsMiddleware(\n req: IncomingMessage,\n res: ServerResponse,\n next: (err?: Error) => void\n) {\n if (req.url) {\n const url = parseUrl(req.url);\n const origin = req.headers.origin;\n const isValidOrigin =\n origin &&\n ['devtools://devtools', 'https://chrome-devtools-frontend.appspot.com'].includes(origin);\n if (url.pathname?.endsWith('.map') && origin && isValidOrigin) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n\n // Prevent metro overwrite Access-Control-Allow-Origin header\n const setHeader = res.setHeader.bind(res);\n res.setHeader = (key, ...args) => {\n if (key !== 'Access-Control-Allow-Origin') {\n setHeader(key, ...args);\n }\n return res;\n };\n }\n }\n next();\n}\n"],"names":["remoteDevtoolsCorsMiddleware","req","res","next","url","parseUrl","origin","headers","isValidOrigin","includes","pathname","endsWith","setHeader","bind","key","args"],"mappings":"AAAA;;;;QAMgBA,4BAA4B,GAA5BA,4BAA4B;AALV,IAAA,IAAK,WAAL,KAAK,CAAA;AAKhC,SAASA,4BAA4B,CAC1CC,GAAoB,EACpBC,GAAmB,EACnBC,IAA2B,EAC3B;IACA,IAAIF,GAAG,CAACG,GAAG,EAAE;YAMPA,GAAY;QALhB,MAAMA,GAAG,GAAGC,CAAAA,GAAAA,IAAQ,AAAS,CAAA,MAAT,CAACJ,GAAG,CAACG,GAAG,CAAC,AAAC;QAC9B,MAAME,MAAM,GAAGL,GAAG,CAACM,OAAO,CAACD,MAAM,AAAC;QAClC,MAAME,aAAa,GACjBF,MAAM,IACN;YAAC,qBAAqB;YAAE,8CAA8C;SAAC,CAACG,QAAQ,CAACH,MAAM,CAAC,AAAC;QAC3F,IAAIF,CAAAA,CAAAA,GAAY,GAAZA,GAAG,CAACM,QAAQ,SAAU,GAAtBN,KAAAA,CAAsB,GAAtBA,GAAY,CAAEO,QAAQ,CAAC,MAAM,CAAC,KAAIL,MAAM,IAAIE,aAAa,EAAE;YAC7DN,GAAG,CAACU,SAAS,CAAC,6BAA6B,EAAEN,MAAM,CAAC,CAAC;YAErD,6DAA6D;YAC7D,MAAMM,SAAS,GAAGV,GAAG,CAACU,SAAS,CAACC,IAAI,CAACX,GAAG,CAAC,AAAC;YAC1CA,GAAG,CAACU,SAAS,GAAG,CAACE,GAAG,EAAKC,GAAAA,IAAI,GAAK;gBAChC,IAAID,GAAG,KAAK,6BAA6B,EAAE;oBACzCF,SAAS,CAACE,GAAG,KAAKC,IAAI,CAAC,CAAC;iBACzB;gBACD,OAAOb,GAAG,CAAC;aACZ,CAAC;SACH;KACF;IACDC,IAAI,EAAE,CAAC;CACR"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.remoteDevtoolsSecurityHeadersMiddleware = remoteDevtoolsSecurityHeadersMiddleware;
|
|
6
|
+
function remoteDevtoolsSecurityHeadersMiddleware(req, res, next) {
|
|
7
|
+
// Block any cross origin request.
|
|
8
|
+
if (typeof req.headers.origin === "string" && !req.headers.origin.match(/^https?:\/\/localhost:/) && !req.headers.origin.match(/^https:\/\/chrome-devtools-frontend\.appspot\.com/)) {
|
|
9
|
+
next(new Error(`Unauthorized request from ${req.headers.origin}. ` + "This may happen because of a conflicting browser extension to intercept HTTP requests. " + "Please try again without browser extensions or using incognito mode."));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
// Block MIME-type sniffing.
|
|
13
|
+
res.setHeader("X-Content-Type-Options", "nosniff");
|
|
14
|
+
next();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=remoteDevtoolsSecurityHeadersMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http';\n\n// Like securityHeadersMiddleware but further allow cross-origin requests\n// from https://chrome-devtools-frontend.appspot.com/\nexport function remoteDevtoolsSecurityHeadersMiddleware(\n req: IncomingMessage,\n res: ServerResponse,\n next: (err?: Error) => void\n) {\n // Block any cross origin request.\n if (\n typeof req.headers.origin === 'string' &&\n !req.headers.origin.match(/^https?:\\/\\/localhost:/) &&\n !req.headers.origin.match(/^https:\\/\\/chrome-devtools-frontend\\.appspot\\.com/)\n ) {\n next(\n new Error(\n `Unauthorized request from ${req.headers.origin}. ` +\n 'This may happen because of a conflicting browser extension to intercept HTTP requests. ' +\n 'Please try again without browser extensions or using incognito mode.'\n )\n );\n return;\n }\n\n // Block MIME-type sniffing.\n res.setHeader('X-Content-Type-Options', 'nosniff');\n\n next();\n}\n"],"names":["remoteDevtoolsSecurityHeadersMiddleware","req","res","next","headers","origin","match","Error","setHeader"],"mappings":"AAAA;;;;QAIgBA,uCAAuC,GAAvCA,uCAAuC;AAAhD,SAASA,uCAAuC,CACrDC,GAAoB,EACpBC,GAAmB,EACnBC,IAA2B,EAC3B;IACA,kCAAkC;IAClC,IACE,OAAOF,GAAG,CAACG,OAAO,CAACC,MAAM,KAAK,QAAQ,IACtC,CAACJ,GAAG,CAACG,OAAO,CAACC,MAAM,CAACC,KAAK,0BAA0B,IACnD,CAACL,GAAG,CAACG,OAAO,CAACC,MAAM,CAACC,KAAK,qDAAqD,EAC9E;QACAH,IAAI,CACF,IAAII,KAAK,CACP,CAAC,0BAA0B,EAAEN,GAAG,CAACG,OAAO,CAACC,MAAM,CAAC,EAAE,CAAC,GACjD,yFAAyF,GACzF,sEAAsE,CACzE,CACF,CAAC;QACF,OAAO;KACR;IAED,4BAA4B;IAC5BH,GAAG,CAACM,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IAEnDL,IAAI,EAAE,CAAC;CACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport { BundleAssetWithFileHashes } from '../../../export/fork-bundleAsync';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Pick<ExpoConfig, 'android' | 'ios'>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n strict,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n strict?: boolean;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n\n if (strict) {\n throw new CommandError(\n 'MANIFEST_ASSET',\n 'Failed to export manifest assets: ' + error.message\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","Log","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","strict","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/resolvePlatform.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/resolvePlatform.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport { ServerRequest } from './server.types';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')(\n 'expo:start:server:middleware:resolvePlatform'\n) as typeof console.log;\n\n/** Supported platforms */\nexport type RuntimePlatform = 'ios' | 'android';\n\n/**\n * Extract the runtime platform from the server request.\n * 1. Query param `platform`: `?platform=ios`\n * 2. Header `expo-platform`: `'expo-platform': ios`\n * 3. Legacy header `exponent-platform`: `'exponent-platform': ios`\n *\n * Returns first item in the case of an array.\n */\nexport function parsePlatformHeader(req: ServerRequest): string | null {\n const url = parse(req.url!, /* parseQueryString */ true);\n const platform =\n url.query?.platform || req.headers['expo-platform'] || req.headers['exponent-platform'];\n return (Array.isArray(platform) ? platform[0] : platform) ?? null;\n}\n\n/** Guess the platform from the user-agent header. */\nexport function resolvePlatformFromUserAgentHeader(req: ServerRequest): string | null {\n let platform = null;\n const userAgent = req.headers['user-agent'];\n if (userAgent?.match(/Android/i)) {\n platform = 'android';\n }\n if (userAgent?.match(/iPhone|iPad/i)) {\n platform = 'ios';\n }\n debug(`Resolved platform ${platform} from user-agent header: ${userAgent}`);\n return platform;\n}\n\n/** Assert if the runtime platform is not included. */\nexport function assertMissingRuntimePlatform(platform?: any): asserts platform {\n if (!platform) {\n throw new CommandError(\n 'PLATFORM_HEADER',\n `Must specify \"expo-platform\" header or \"platform\" query parameter`\n );\n }\n}\n\n/** Assert if the runtime platform is not correct. */\nexport function assertRuntimePlatform(platform: string): asserts platform is RuntimePlatform {\n const stringifiedPlatform = String(platform);\n if (!['android', 'ios', 'web'].includes(stringifiedPlatform)) {\n throw new CommandError(\n 'PLATFORM_HEADER',\n `platform must be \"android\", \"ios\", or \"web\". Received: \"${platform}\"`\n );\n }\n}\n"],"names":["parsePlatformHeader","resolvePlatformFromUserAgentHeader","assertMissingRuntimePlatform","assertRuntimePlatform","debug","require","req","url","parse","platform","query","headers","Array","isArray","userAgent","match","CommandError","stringifiedPlatform","String","includes"],"mappings":"AAAA;;;;QAoBgBA,mBAAmB,GAAnBA,mBAAmB;QAQnBC,kCAAkC,GAAlCA,kCAAkC;QAclCC,4BAA4B,GAA5BA,4BAA4B;QAU5BC,qBAAqB,GAArBA,qBAAqB;AApDf,IAAA,IAAK,WAAL,KAAK,CAAA;AAGE,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AAEpD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAC5B,8CAA8C,CAC/C,AAAsB,AAAC;AAajB,SAASL,mBAAmB,CAACM,GAAkB,EAAiB;QAGnEC,GAAS;IAFX,MAAMA,GAAG,GAAGC,CAAAA,GAAAA,IAAK,AAAuC,CAAA,MAAvC,CAACF,GAAG,CAACC,GAAG,EAAG,sBAAsB,CAAC,IAAI,CAAC,AAAC;IACzD,MAAME,QAAQ,GACZF,CAAAA,CAAAA,GAAS,GAATA,GAAG,CAACG,KAAK,SAAU,GAAnBH,KAAAA,CAAmB,GAAnBA,GAAS,CAAEE,QAAQ,CAAA,IAAIH,GAAG,CAACK,OAAO,CAAC,eAAe,CAAC,IAAIL,GAAG,CAACK,OAAO,CAAC,mBAAmB,CAAC,AAAC;QACnF,IAAkD;IAAzD,OAAO,CAAA,IAAkD,GAAjDC,KAAK,CAACC,OAAO,CAACJ,QAAQ,CAAC,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGA,QAAQ,YAAjD,IAAkD,GAAI,IAAI,CAAC;CACnE;AAGM,SAASR,kCAAkC,CAACK,GAAkB,EAAiB;IACpF,IAAIG,QAAQ,GAAG,IAAI,AAAC;IACpB,MAAMK,SAAS,GAAGR,GAAG,CAACK,OAAO,CAAC,YAAY,CAAC,AAAC;IAC5C,IAAIG,SAAS,QAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEC,KAAK,YAAY,EAAE;QAChCN,QAAQ,GAAG,SAAS,CAAC;KACtB;IACD,IAAIK,SAAS,QAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEC,KAAK,gBAAgB,EAAE;QACpCN,QAAQ,GAAG,KAAK,CAAC;KAClB;IACDL,KAAK,CAAC,CAAC,kBAAkB,EAAEK,QAAQ,CAAC,yBAAyB,EAAEK,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAOL,QAAQ,CAAC;CACjB;AAGM,SAASP,4BAA4B,CAACO,QAAc,EAAoB;IAC7E,IAAI,CAACA,QAAQ,EAAE;QACb,MAAM,IAAIO,OAAY,aAAA,CACpB,iBAAiB,EACjB,CAAC,iEAAiE,CAAC,CACpE,CAAC;KACH;CACF;AAGM,SAASb,qBAAqB,CAACM,QAAgB,EAAuC;IAC3F,MAAMQ,mBAAmB,GAAGC,MAAM,CAACT,QAAQ,CAAC,AAAC;IAC7C,IAAI,CAAC;QAAC,SAAS;QAAE,KAAK;QAAE,KAAK;KAAC,CAACU,QAAQ,CAACF,mBAAmB,CAAC,EAAE;QAC5D,MAAM,IAAID,OAAY,aAAA,CACpB,iBAAiB,EACjB,CAAC,wDAAwD,EAAEP,QAAQ,CAAC,CAAC,CAAC,CACvE,CAAC;KACH;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/server.types.ts"],"sourcesContent":["import express from 'express';\nimport http from 'http';\n\n/** Headers */\nexport type ServerHeaders = Map<string, number | string | readonly string[]>;\n/** Request */\nexport type ServerRequest = express.Request | http.IncomingMessage;\n/** Response */\nexport type ServerResponse = express.Response | http.ServerResponse;\n/** Next function */\nexport type ServerNext = (err?: Error) => void;\n\n/** The `connect()` app that is a http.RequestListener and having the `use()` function for middlewares. */\nexport interface ConnectAppType extends http.RequestListener {\n use: Function;\n}\n"],"names":[],"mappings":"AAAA"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/server.types.ts"],"sourcesContent":["import express from 'express';\nimport http from 'http';\n\n/** Headers */\nexport type ServerHeaders = Map<string, number | string | readonly string[]>;\n/** Request */\nexport type ServerRequest = express.Request | http.IncomingMessage;\n/** Response */\nexport type ServerResponse = express.Response | http.ServerResponse;\n/** Next function */\nexport type ServerNext = (err?: Error | null) => void;\n\n/** The `connect()` app that is a http.RequestListener and having the `use()` function for middlewares. */\nexport interface ConnectAppType extends http.RequestListener {\n use: Function;\n}\n"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.suppressRemoteDebuggingErrorMiddleware = suppressRemoteDebuggingErrorMiddleware;
|
|
6
|
+
function suppressRemoteDebuggingErrorMiddleware(req, res, next) {
|
|
7
|
+
var ref;
|
|
8
|
+
if ((ref = req.url) == null ? void 0 : ref.match(/\/debugger-ui\/.+\.map$/)) {
|
|
9
|
+
res.writeHead(404);
|
|
10
|
+
res.end("Sourcemap for /debugger-ui/ is not supported.");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
next();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=suppressErrorMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/suppressErrorMiddleware.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http';\n\n// Middleware to suppress `EISDIR` error when opening javascript inspector in remote debugging.\n// A workaround for https://github.com/facebook/react-native/issues/28844\n// The root cause is that metro cannot serve sourcemap requests for /debugger-ui/\nexport function suppressRemoteDebuggingErrorMiddleware(\n req: IncomingMessage,\n res: ServerResponse,\n next: (err?: Error) => void\n) {\n if (req.url?.match(/\\/debugger-ui\\/.+\\.map$/)) {\n res.writeHead(404);\n res.end('Sourcemap for /debugger-ui/ is not supported.');\n return;\n }\n next();\n}\n"],"names":["suppressRemoteDebuggingErrorMiddleware","req","res","next","url","match","writeHead","end"],"mappings":"AAAA;;;;QAKgBA,sCAAsC,GAAtCA,sCAAsC;AAA/C,SAASA,sCAAsC,CACpDC,GAAoB,EACpBC,GAAmB,EACnBC,IAA2B,EAC3B;QACIF,GAAO;IAAX,IAAIA,CAAAA,GAAO,GAAPA,GAAG,CAACG,GAAG,SAAO,GAAdH,KAAAA,CAAc,GAAdA,GAAO,CAAEI,KAAK,2BAA2B,EAAE;QAC7CH,GAAG,CAACI,SAAS,CAAC,GAAG,CAAC,CAAC;QACnBJ,GAAG,CAACK,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACzD,OAAO;KACR;IACDJ,IAAI,EAAE,CAAC;CACR"}
|