@expo/cli 0.17.9 → 0.18.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 +11 -7
- package/build/bin/cli.map +1 -1
- package/build/src/api/getExpoSchema.js +23 -5
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/graphql/client.js +28 -10
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/queries/AppQuery.js +16 -4
- package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
- package/build/src/api/graphql/queries/UserQuery.js +8 -2
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/graphql/types/App.js +8 -2
- package/build/src/api/graphql/types/App.js.map +1 -1
- package/build/src/api/rest/cache/FileSystemCache.js +21 -9
- package/build/src/api/rest/cache/FileSystemCache.js.map +1 -1
- package/build/src/api/rest/cache/response.js +9 -3
- package/build/src/api/rest/cache/response.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js +32 -8
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +23 -5
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +9 -4
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js +8 -2
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/settings.js +8 -2
- package/build/src/api/settings.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +18 -6
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +26 -8
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +17 -5
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +32 -8
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +17 -5
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +19 -12
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +25 -7
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +9 -3
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js +8 -2
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +16 -4
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js +10 -4
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/templates.js +33 -9
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +8 -2
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +8 -2
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +58 -18
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/index.js +17 -5
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +8 -2
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +16 -4
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +32 -12
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +27 -9
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +10 -2
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportHermes.js +29 -17
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +69 -37
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +33 -9
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +61 -16
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +8 -2
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js +15 -3
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/index.js +11 -5
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +9 -3
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +27 -15
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +18 -6
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +8 -2
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +43 -19
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +16 -4
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js +9 -3
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/install/applyPlugins.js +8 -2
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/checkPackages.js +18 -6
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +8 -2
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js +14 -8
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +27 -9
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +17 -5
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +17 -5
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/log.js +9 -3
- package/build/src/log.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +37 -13
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +16 -4
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +29 -11
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js +24 -6
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +14 -8
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +9 -3
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +119 -0
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -0
- package/build/src/prebuild/resolveOptions.js +32 -8
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +44 -14
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +18 -2
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +49 -13
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +16 -4
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/run/android/index.js +20 -4
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +55 -0
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -0
- package/build/src/run/android/resolveInstallApkName.js +18 -6
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +10 -4
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +5 -3
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +13 -4
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js +15 -3
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +10 -4
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js +8 -2
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +57 -21
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +25 -7
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +10 -4
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +34 -10
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +16 -4
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +8 -2
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +17 -5
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +17 -5
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +25 -7
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +24 -6
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +8 -2
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +16 -4
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +8 -2
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +16 -4
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +16 -4
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +17 -5
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +8 -2
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +9 -3
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +25 -7
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +22 -10
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +19 -7
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +17 -5
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +9 -3
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +1 -2
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +27 -9
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js +8 -2
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +10 -2
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/startBundler.js +16 -4
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/detectDevClient.js +29 -0
- package/build/src/start/detectDevClient.js.map +1 -0
- package/build/src/start/doctor/SecurityBinPrerequisite.js +8 -2
- package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +16 -4
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +16 -4
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +79 -29
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +24 -6
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +25 -7
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +27 -9
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +24 -6
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +8 -2
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/resolvePackages.js +25 -7
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +32 -21
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +33 -9
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +18 -6
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +29 -11
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +18 -6
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +17 -11
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +27 -9
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +17 -11
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +8 -2
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +9 -3
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js +8 -2
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +30 -14
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js +33 -13
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +17 -5
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +13 -7
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +19 -7
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidSdk.js +34 -10
- package/build/src/start/platforms/android/AndroidSdk.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js +16 -4
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +21 -4
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +32 -8
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +23 -6
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +10 -4
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +26 -8
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +50 -18
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/assertSystemRequirements.js +4 -3
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +16 -4
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +8 -2
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +9 -3
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +12 -6
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +40 -10
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +16 -4
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/dotExpo.js +27 -9
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/resolveOptions.js +33 -15
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +34 -10
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +16 -4
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +28 -10
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +16 -4
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +9 -3
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/ReactDevToolsProxy.js +26 -8
- package/build/src/start/server/ReactDevToolsProxy.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +19 -6
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +91 -55
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +231 -83
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +30 -15
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +26 -8
- 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/createExpoMetroResolver.js +56 -20
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +90 -45
- package/build/src/start/server/metro/createJResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +29 -28
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js +27 -0
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -0
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +11 -8
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js +63 -0
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -0
- package/build/src/start/server/metro/debugging/{inspectorHandlers/utils.js → getDebuggerType.js} +1 -6
- package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -0
- package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/NetworkResponse.js +8 -5
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -0
- package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/PageReload.js +7 -6
- package/build/src/start/server/metro/debugging/messageHandlers/PageReload.js.map +1 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +25 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +22 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +28 -0
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
- package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/VscodeRuntimeGetProperties.js +10 -6
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -0
- package/build/src/start/server/metro/debugging/pageIsSupported.js +14 -0
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -0
- package/build/src/start/server/metro/debugging/types.js.map +1 -0
- package/build/src/start/server/metro/externals.js +51 -64
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +8 -2
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +8 -2
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +34 -10
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +96 -30
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +40 -21
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroVirtualModules.js +82 -0
- package/build/src/start/server/metro/metroVirtualModules.js.map +1 -0
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +8 -2
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/router.js +44 -17
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +56 -14
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +25 -12
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +8 -2
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +148 -46
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +31 -13
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +22 -10
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +16 -4
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +42 -12
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +8 -2
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +41 -11
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +40 -10
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js +24 -6
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +8 -2
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +24 -6
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +25 -8
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +10 -4
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +24 -6
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +33 -9
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +27 -11
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +33 -9
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +12 -2
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js +17 -5
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +8 -2
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +8 -2
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +37 -13
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +16 -4
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +91 -37
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +27 -9
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +27 -9
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +26 -8
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +36 -12
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +17 -5
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +8 -2
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +35 -11
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +36 -11
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +32 -8
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/getDevClientProperties.js +26 -8
- package/build/src/utils/analytics/getDevClientProperties.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +2 -2
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/args.js +32 -8
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/cocoapods.js +64 -28
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +79 -29
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/createFileTransform.js +24 -69
- package/build/src/utils/createFileTransform.js.map +1 -1
- package/build/src/utils/dir.js +33 -26
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +40 -10
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +26 -11
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +18 -6
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +40 -31
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +20 -5
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/findUp.js +18 -6
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +19 -7
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +18 -6
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +18 -6
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +9 -3
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/ip.js +8 -2
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/isModuleSymlinked.js +16 -4
- package/build/src/utils/isModuleSymlinked.js.map +1 -1
- package/build/src/utils/link.js +18 -6
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +25 -13
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +18 -6
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +8 -2
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/nodeEnv.js +2 -0
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/nodeModules.js +23 -5
- package/build/src/utils/nodeModules.js.map +1 -1
- package/build/src/utils/npm.js +64 -17
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/open.js +9 -3
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +16 -4
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +24 -6
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +22 -10
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +8 -2
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/progress.js +8 -2
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +16 -4
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/scheme.js +75 -23
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/tar.js +16 -4
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/DetachedClient.js +87 -0
- package/build/src/utils/telemetry/DetachedClient.js.map +1 -0
- package/build/src/utils/telemetry/RudderClient.js +98 -0
- package/build/src/utils/telemetry/RudderClient.js.map +1 -0
- package/build/src/utils/telemetry/flushDetached.js +43 -0
- package/build/src/utils/telemetry/flushDetached.js.map +1 -0
- package/build/src/utils/telemetry/getContext.js +92 -0
- package/build/src/utils/telemetry/getContext.js.map +1 -0
- package/build/src/utils/telemetry/index.js +32 -0
- package/build/src/utils/telemetry/index.js.map +1 -0
- package/build/src/utils/telemetry/types.js +6 -0
- package/build/src/utils/telemetry/types.js.map +1 -0
- package/build/src/utils/tsconfig/evaluateTsConfig.js +16 -4
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +18 -6
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +10 -4
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
- package/build/src/utils/url.js +19 -10
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +18 -6
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/whoami/whoamiAsync.js +8 -2
- package/build/src/whoami/whoamiAsync.js.map +1 -1
- package/package.json +15 -16
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +27907 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +9494 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +10015 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +28375 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +9714 -0
- package/build/src/run/android/resolveGradleProps.js +0 -37
- package/build/src/run/android/resolveGradleProps.js.map +0 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +0 -52
- package/build/src/start/server/metro/bundleApiRoutes.js.map +0 -1
- package/build/src/start/server/metro/debugging/InspectorDevice.js +0 -80
- package/build/src/start/server/metro/debugging/InspectorDevice.js.map +0 -1
- package/build/src/start/server/metro/debugging/InspectorProxy.js +0 -116
- package/build/src/start/server/metro/debugging/InspectorProxy.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/NetworkResponse.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/PageReload.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js +0 -21
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js +0 -56
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js +0 -18
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js +0 -24
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeGetProperties.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/types.js.map +0 -1
- package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js.map +0 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js +0 -38
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +0 -1
- package/build/src/start/server/type-generation/__typetests__/generateFixtures.js +0 -38
- package/build/src/start/server/type-generation/__typetests__/generateFixtures.js.map +0 -1
- package/build/src/start/server/type-generation/__typetests__/route.test.js +0 -184
- package/build/src/start/server/type-generation/__typetests__/route.test.js.map +0 -1
- package/build/src/utils/analytics/rudderstackClient.js +0 -147
- package/build/src/utils/analytics/rudderstackClient.js.map +0 -1
- /package/build/src/start/server/metro/debugging/{inspectorHandlers/types.js → types.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/withMetroResolvers.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport { ConfigT as MetroConfig } from 'metro-config';\nimport type { ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\n\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { env } from '../../../utils/env';\n\nconst debug = require('debug')('expo:metro:withMetroResolvers') as typeof console.log;\n\nexport type MetroResolver = NonNullable<MetroConfig['resolver']['resolveRequest']>;\n\n/** Expo Metro Resolvers can return `null` to skip without throwing an error. Metro Resolvers will throw either a `FailedToResolveNameError` or `FailedToResolvePathError`. */\nexport type ExpoCustomMetroResolver = (\n ...args: Parameters<MetroResolver>\n) => ReturnType<MetroResolver> | null;\n\n/** @returns `MetroResolver` utilizing the upstream `resolve` method. */\nexport function getDefaultMetroResolver(projectRoot: string): MetroResolver {\n return (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return metroResolver.resolve(context, moduleName, platform);\n };\n}\n\nfunction optionsKeyForContext(context: ResolutionContext) {\n const canonicalize = require('metro-core/src/canonicalize');\n\n // Compound key for the resolver cache\n return JSON.stringify(context.customResolverOptions ?? {}, canonicalize) ?? '';\n}\n\n/**\n * Extend the Metro config `resolver.resolveRequest` method with additional resolvers that can\n * exit early by returning a `Resolution` or skip to the next resolver by returning `null`.\n *\n * @param config Metro config.\n * @param resolvers custom MetroResolver to chain.\n * @returns a new `MetroConfig` with the `resolver.resolveRequest` method chained.\n */\nexport function withMetroResolvers(\n config: MetroConfig,\n resolvers: ExpoCustomMetroResolver[]\n): MetroConfig {\n debug(\n `Appending ${\n resolvers.length\n } custom resolvers to Metro config. (has custom resolver: ${!!config.resolver?.resolveRequest})`\n );\n // const hasUserDefinedResolver = !!config.resolver?.resolveRequest;\n // const defaultResolveRequest = getDefaultMetroResolver(projectRoot);\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const upstreamResolveRequest = context.resolveRequest;\n\n const universalContext = {\n ...context,\n resolveRequest(\n ctx: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n for (const resolver of resolvers) {\n try {\n const res = resolver(ctx, moduleName, platform);\n if (res) {\n return res;\n }\n } catch (error: any) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n debug(\n `Custom resolver threw: ${error.constructor.name}. (module: ${moduleName}, platform: ${platform})`\n );\n }\n }\n // If we haven't returned by now, use the original resolver or upstream resolver.\n return upstreamResolveRequest(ctx, moduleName, platform);\n },\n };\n\n // If the user defined a resolver, run it first and depend on the documented\n // chaining logic: https://facebook.github.io/metro/docs/resolution/#resolution-algorithm\n //\n // config.resolver.resolveRequest = (context, moduleName, platform) => {\n //\n // // Do work...\n //\n // return context.resolveRequest(context, moduleName, platform);\n // };\n const firstResolver = originalResolveRequest ?? universalContext.resolveRequest;\n return firstResolver(universalContext, moduleName, platform);\n },\n },\n };\n}\n\n/**\n * Hook into the Metro resolver chain and mutate the context so users can resolve against our custom assumptions.\n * For example, this will set `preferNativePlatform` to false when bundling for web.\n * */\nexport function withMetroMutatedResolverContext(\n config: MetroConfig,\n getContext: (\n ctx: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ) => CustomResolutionContext\n): MetroConfig {\n const defaultResolveRequest = getDefaultMetroResolver(config.projectRoot);\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const universalContext = getContext(context, moduleName, platform);\n const firstResolver =\n originalResolveRequest ?? universalContext.resolveRequest ?? defaultResolveRequest;\n return firstResolver(universalContext, moduleName, platform);\n },\n },\n };\n}\n\nexport function withMetroErrorReportingResolver(config: MetroConfig): MetroConfig {\n if (!env.EXPO_METRO_UNSTABLE_ERRORS) {\n return config;\n }\n\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n function mutateResolutionError(\n error: Error,\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n if (!platform) {\n debug('Cannot mutate resolution error');\n return error;\n }\n\n const mapByOrigin = depGraph.get(optionsKeyForContext(context));\n const mapByPlatform = mapByOrigin?.get(platform);\n\n if (!mapByPlatform) {\n return error;\n }\n\n // collect all references inversely using some expensive lookup\n\n const getReferences = (origin: string) => {\n const inverseOrigin: { origin: string; previous: string; request: string }[] = [];\n\n if (!mapByPlatform) {\n return inverseOrigin;\n }\n\n for (const [originKey, mapByTarget] of mapByPlatform) {\n // search comparing origin to path\n\n const found = [...mapByTarget.values()].find((resolution) => resolution.path === origin);\n if (found) {\n inverseOrigin.push({\n origin,\n previous: originKey,\n request: found.request,\n });\n }\n }\n\n return inverseOrigin;\n };\n\n const pad = (num: number) => {\n return new Array(num).fill(' ').join('');\n };\n\n const root = config.server?.unstable_serverRoot ?? config.projectRoot;\n\n type InverseDepResult = {\n origin: string;\n request: string;\n previous: InverseDepResult[];\n };\n const recurseBackWithLimit = (\n req: { origin: string; request: string },\n limit: number,\n count: number = 0\n ) => {\n const results: InverseDepResult = {\n origin: req.origin,\n request: req.request,\n previous: [],\n };\n\n if (count >= limit) {\n return results;\n }\n\n const inverse = getReferences(req.origin);\n for (const match of inverse) {\n // Use more qualified name if possible\n // results.origin = match.origin;\n // Found entry point\n if (req.origin === match.previous) {\n continue;\n }\n results.previous.push(\n recurseBackWithLimit({ origin: match.previous, request: match.request }, limit, count + 1)\n );\n }\n return results;\n };\n\n const inverseTree = recurseBackWithLimit(\n { origin: context.originModulePath, request: moduleName },\n // TODO: Do we need to expose this?\n 35\n );\n\n if (inverseTree.previous.length > 0) {\n debug('Found inverse graph:', JSON.stringify(inverseTree, null, 2));\n let extraMessage = chalk.bold('Import stack:');\n const printRecursive = (tree: InverseDepResult, depth: number = 0) => {\n let filename = path.relative(root, tree.origin);\n if (filename.match(/\\?ctx=[\\w\\d]+$/)) {\n filename = filename.replace(/\\?ctx=[\\w\\d]+$/, chalk.dim(' (require.context)'));\n } else {\n let formattedRequest = chalk.green(`\"${tree.request}\"`);\n\n if (\n // If bundling for web and the import is pulling internals from outside of react-native\n // then mark it as an invalid import.\n platform === 'web' &&\n !/^(node_modules\\/)?react-native\\//.test(filename) &&\n tree.request.match(/^react-native\\/.*/)\n ) {\n formattedRequest =\n formattedRequest +\n chalk`\\n {yellow Importing react-native internals is not supported on web.}`;\n }\n\n filename = filename + chalk`\\n{gray |} {cyan import} ${formattedRequest}\\n`;\n }\n let line = '\\n' + pad(depth) + chalk.gray(' ') + filename;\n if (filename.match(/node_modules/)) {\n line = chalk.gray(\n // Bold the node module name\n line.replace(/node_modules\\/([^/]+)/, (_match, p1) => {\n return 'node_modules/' + chalk.bold(p1);\n })\n );\n }\n extraMessage += line;\n for (const child of tree.previous) {\n printRecursive(\n child,\n // Only add depth if there are multiple children\n tree.previous.length > 1 ? depth + 1 : depth\n );\n }\n };\n printRecursive(inverseTree);\n\n // @ts-expect-error\n error._expoImportStack = extraMessage;\n } else {\n debug('Found no inverse tree for:', context.originModulePath);\n }\n\n return error;\n }\n\n const depGraph: Map<\n // custom options\n string,\n Map<\n // platform\n string,\n Map<\n // origin module name\n string,\n Set<{\n // required module name\n path: string;\n // This isn't entirely accurate since a module can be imported multiple times in a file,\n // and use different names. But it's good enough for now.\n request: string;\n }>\n >\n >\n > = new Map();\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const storeResult = (res: NonNullable<ReturnType<ExpoCustomMetroResolver>>) => {\n if (!platform) return;\n\n const key = optionsKeyForContext(context);\n if (!depGraph.has(key)) depGraph.set(key, new Map());\n const mapByTarget = depGraph.get(key);\n if (!mapByTarget!.has(platform)) mapByTarget!.set(platform, new Map());\n const mapByPlatform = mapByTarget!.get(platform);\n if (!mapByPlatform!.has(context.originModulePath))\n mapByPlatform!.set(context.originModulePath, new Set());\n const setForModule = mapByPlatform!.get(context.originModulePath)!;\n\n const qualifiedModuleName = res?.type === 'sourceFile' ? res.filePath : moduleName;\n setForModule.add({ path: qualifiedModuleName, request: moduleName });\n };\n\n // If the user defined a resolver, run it first and depend on the documented\n // chaining logic: https://facebook.github.io/metro/docs/resolution/#resolution-algorithm\n //\n // config.resolver.resolveRequest = (context, moduleName, platform) => {\n //\n // // Do work...\n //\n // return context.resolveRequest(context, moduleName, platform);\n // };\n try {\n const firstResolver = originalResolveRequest ?? context.resolveRequest;\n const res = firstResolver(context, moduleName, platform);\n storeResult(res);\n return res;\n } catch (error: any) {\n throw mutateResolutionError(error, context, moduleName, platform);\n }\n },\n },\n };\n}\n"],"names":["getDefaultMetroResolver","withMetroResolvers","withMetroMutatedResolverContext","withMetroErrorReportingResolver","metroResolver","debug","require","projectRoot","context","moduleName","platform","resolve","optionsKeyForContext","canonicalize","JSON","stringify","customResolverOptions","config","resolvers","length","resolver","resolveRequest","originalResolveRequest","upstreamResolveRequest","universalContext","ctx","res","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","constructor","name","firstResolver","getContext","defaultResolveRequest","env","EXPO_METRO_UNSTABLE_ERRORS","mutateResolutionError","mapByOrigin","depGraph","get","mapByPlatform","getReferences","origin","inverseOrigin","originKey","mapByTarget","found","values","find","resolution","path","push","previous","request","pad","num","Array","fill","join","root","server","unstable_serverRoot","recurseBackWithLimit","req","limit","count","results","inverse","match","inverseTree","originModulePath","extraMessage","chalk","bold","printRecursive","tree","depth","filename","relative","replace","dim","formattedRequest","green","test","line","gray","_match","p1","child","_expoImportStack","Map","storeResult","key","has","set","Set","setForModule","qualifiedModuleName","type","filePath","add"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/withMetroResolvers.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport { ConfigT as MetroConfig } from 'metro-config';\nimport type { ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\n\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { env } from '../../../utils/env';\n\nconst debug = require('debug')('expo:metro:withMetroResolvers') as typeof console.log;\n\nexport type MetroResolver = NonNullable<MetroConfig['resolver']['resolveRequest']>;\n\n/** Expo Metro Resolvers can return `null` to skip without throwing an error. Metro Resolvers will throw either a `FailedToResolveNameError` or `FailedToResolvePathError`. */\nexport type ExpoCustomMetroResolver = (\n ...args: Parameters<MetroResolver>\n) => ReturnType<MetroResolver> | null;\n\n/** @returns `MetroResolver` utilizing the upstream `resolve` method. */\nexport function getDefaultMetroResolver(projectRoot: string): MetroResolver {\n return (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return metroResolver.resolve(context, moduleName, platform);\n };\n}\n\nfunction optionsKeyForContext(context: ResolutionContext) {\n const canonicalize = require('metro-core/src/canonicalize');\n\n // Compound key for the resolver cache\n return JSON.stringify(context.customResolverOptions ?? {}, canonicalize) ?? '';\n}\n\n/**\n * Extend the Metro config `resolver.resolveRequest` method with additional resolvers that can\n * exit early by returning a `Resolution` or skip to the next resolver by returning `null`.\n *\n * @param config Metro config.\n * @param resolvers custom MetroResolver to chain.\n * @returns a new `MetroConfig` with the `resolver.resolveRequest` method chained.\n */\nexport function withMetroResolvers(\n config: MetroConfig,\n resolvers: ExpoCustomMetroResolver[]\n): MetroConfig {\n debug(\n `Appending ${\n resolvers.length\n } custom resolvers to Metro config. (has custom resolver: ${!!config.resolver?.resolveRequest})`\n );\n // const hasUserDefinedResolver = !!config.resolver?.resolveRequest;\n // const defaultResolveRequest = getDefaultMetroResolver(projectRoot);\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const upstreamResolveRequest = context.resolveRequest;\n\n const universalContext = {\n ...context,\n resolveRequest(\n ctx: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n for (const resolver of resolvers) {\n try {\n const res = resolver(ctx, moduleName, platform);\n if (res) {\n return res;\n }\n } catch (error: any) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n debug(\n `Custom resolver threw: ${error.constructor.name}. (module: ${moduleName}, platform: ${platform})`\n );\n }\n }\n // If we haven't returned by now, use the original resolver or upstream resolver.\n return upstreamResolveRequest(ctx, moduleName, platform);\n },\n };\n\n // If the user defined a resolver, run it first and depend on the documented\n // chaining logic: https://facebook.github.io/metro/docs/resolution/#resolution-algorithm\n //\n // config.resolver.resolveRequest = (context, moduleName, platform) => {\n //\n // // Do work...\n //\n // return context.resolveRequest(context, moduleName, platform);\n // };\n const firstResolver = originalResolveRequest ?? universalContext.resolveRequest;\n return firstResolver(universalContext, moduleName, platform);\n },\n },\n };\n}\n\n/**\n * Hook into the Metro resolver chain and mutate the context so users can resolve against our custom assumptions.\n * For example, this will set `preferNativePlatform` to false when bundling for web.\n * */\nexport function withMetroMutatedResolverContext(\n config: MetroConfig,\n getContext: (\n ctx: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ) => CustomResolutionContext\n): MetroConfig {\n const defaultResolveRequest = getDefaultMetroResolver(config.projectRoot);\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const universalContext = getContext(context, moduleName, platform);\n const firstResolver =\n originalResolveRequest ?? universalContext.resolveRequest ?? defaultResolveRequest;\n return firstResolver(universalContext, moduleName, platform);\n },\n },\n };\n}\n\nexport function withMetroErrorReportingResolver(config: MetroConfig): MetroConfig {\n if (!env.EXPO_METRO_UNSTABLE_ERRORS) {\n return config;\n }\n\n const originalResolveRequest = config.resolver?.resolveRequest;\n\n function mutateResolutionError(\n error: Error,\n context: ResolutionContext,\n moduleName: string,\n platform: string | null\n ) {\n if (!platform) {\n debug('Cannot mutate resolution error');\n return error;\n }\n\n const mapByOrigin = depGraph.get(optionsKeyForContext(context));\n const mapByPlatform = mapByOrigin?.get(platform);\n\n if (!mapByPlatform) {\n return error;\n }\n\n // collect all references inversely using some expensive lookup\n\n const getReferences = (origin: string) => {\n const inverseOrigin: { origin: string; previous: string; request: string }[] = [];\n\n if (!mapByPlatform) {\n return inverseOrigin;\n }\n\n for (const [originKey, mapByTarget] of mapByPlatform) {\n // search comparing origin to path\n\n const found = [...mapByTarget.values()].find((resolution) => resolution.path === origin);\n if (found) {\n inverseOrigin.push({\n origin,\n previous: originKey,\n request: found.request,\n });\n }\n }\n\n return inverseOrigin;\n };\n\n const pad = (num: number) => {\n return new Array(num).fill(' ').join('');\n };\n\n const root = config.server?.unstable_serverRoot ?? config.projectRoot;\n\n type InverseDepResult = {\n origin: string;\n request: string;\n previous: InverseDepResult[];\n };\n const recurseBackWithLimit = (\n req: { origin: string; request: string },\n limit: number,\n count: number = 0\n ) => {\n const results: InverseDepResult = {\n origin: req.origin,\n request: req.request,\n previous: [],\n };\n\n if (count >= limit) {\n return results;\n }\n\n const inverse = getReferences(req.origin);\n for (const match of inverse) {\n // Use more qualified name if possible\n // results.origin = match.origin;\n // Found entry point\n if (req.origin === match.previous) {\n continue;\n }\n results.previous.push(\n recurseBackWithLimit({ origin: match.previous, request: match.request }, limit, count + 1)\n );\n }\n return results;\n };\n\n const inverseTree = recurseBackWithLimit(\n { origin: context.originModulePath, request: moduleName },\n // TODO: Do we need to expose this?\n 35\n );\n\n if (inverseTree.previous.length > 0) {\n debug('Found inverse graph:', JSON.stringify(inverseTree, null, 2));\n let extraMessage = chalk.bold('Import stack:');\n const printRecursive = (tree: InverseDepResult, depth: number = 0) => {\n let filename = path.relative(root, tree.origin);\n if (filename.match(/\\?ctx=[\\w\\d]+$/)) {\n filename = filename.replace(/\\?ctx=[\\w\\d]+$/, chalk.dim(' (require.context)'));\n } else {\n let formattedRequest = chalk.green(`\"${tree.request}\"`);\n\n if (\n // If bundling for web and the import is pulling internals from outside of react-native\n // then mark it as an invalid import.\n platform === 'web' &&\n !/^(node_modules\\/)?react-native\\//.test(filename) &&\n tree.request.match(/^react-native\\/.*/)\n ) {\n formattedRequest =\n formattedRequest +\n chalk`\\n {yellow Importing react-native internals is not supported on web.}`;\n }\n\n filename = filename + chalk`\\n{gray |} {cyan import} ${formattedRequest}\\n`;\n }\n let line = '\\n' + pad(depth) + chalk.gray(' ') + filename;\n if (filename.match(/node_modules/)) {\n line = chalk.gray(\n // Bold the node module name\n line.replace(/node_modules\\/([^/]+)/, (_match, p1) => {\n return 'node_modules/' + chalk.bold(p1);\n })\n );\n }\n extraMessage += line;\n for (const child of tree.previous) {\n printRecursive(\n child,\n // Only add depth if there are multiple children\n tree.previous.length > 1 ? depth + 1 : depth\n );\n }\n };\n printRecursive(inverseTree);\n\n // @ts-expect-error\n error._expoImportStack = extraMessage;\n } else {\n debug('Found no inverse tree for:', context.originModulePath);\n }\n\n return error;\n }\n\n const depGraph: Map<\n // custom options\n string,\n Map<\n // platform\n string,\n Map<\n // origin module name\n string,\n Set<{\n // required module name\n path: string;\n // This isn't entirely accurate since a module can be imported multiple times in a file,\n // and use different names. But it's good enough for now.\n request: string;\n }>\n >\n >\n > = new Map();\n\n return {\n ...config,\n resolver: {\n ...config.resolver,\n resolveRequest(context, moduleName, platform) {\n const storeResult = (res: NonNullable<ReturnType<ExpoCustomMetroResolver>>) => {\n if (!platform) return;\n\n const key = optionsKeyForContext(context);\n if (!depGraph.has(key)) depGraph.set(key, new Map());\n const mapByTarget = depGraph.get(key);\n if (!mapByTarget!.has(platform)) mapByTarget!.set(platform, new Map());\n const mapByPlatform = mapByTarget!.get(platform);\n if (!mapByPlatform!.has(context.originModulePath))\n mapByPlatform!.set(context.originModulePath, new Set());\n const setForModule = mapByPlatform!.get(context.originModulePath)!;\n\n const qualifiedModuleName = res?.type === 'sourceFile' ? res.filePath : moduleName;\n setForModule.add({ path: qualifiedModuleName, request: moduleName });\n };\n\n // If the user defined a resolver, run it first and depend on the documented\n // chaining logic: https://facebook.github.io/metro/docs/resolution/#resolution-algorithm\n //\n // config.resolver.resolveRequest = (context, moduleName, platform) => {\n //\n // // Do work...\n //\n // return context.resolveRequest(context, moduleName, platform);\n // };\n try {\n const firstResolver = originalResolveRequest ?? context.resolveRequest;\n const res = firstResolver(context, moduleName, platform);\n storeResult(res);\n return res;\n } catch (error: any) {\n throw mutateResolutionError(error, context, moduleName, platform);\n }\n },\n },\n };\n}\n"],"names":["getDefaultMetroResolver","withMetroResolvers","withMetroMutatedResolverContext","withMetroErrorReportingResolver","metroResolver","debug","require","projectRoot","context","moduleName","platform","resolve","optionsKeyForContext","canonicalize","JSON","stringify","customResolverOptions","config","resolvers","length","resolver","resolveRequest","originalResolveRequest","upstreamResolveRequest","universalContext","ctx","res","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","constructor","name","firstResolver","getContext","defaultResolveRequest","env","EXPO_METRO_UNSTABLE_ERRORS","mutateResolutionError","mapByOrigin","depGraph","get","mapByPlatform","getReferences","origin","inverseOrigin","originKey","mapByTarget","found","values","find","resolution","path","push","previous","request","pad","num","Array","fill","join","root","server","unstable_serverRoot","recurseBackWithLimit","req","limit","count","results","inverse","match","inverseTree","originModulePath","extraMessage","chalk","bold","printRecursive","tree","depth","filename","relative","replace","dim","formattedRequest","green","test","line","gray","_match","p1","child","_expoImportStack","Map","storeResult","key","has","set","Set","setForModule","qualifiedModuleName","type","filePath","add"],"mappings":"AAMA;;;;QAmBgBA,uBAAuB,GAAvBA,uBAAuB;QAqBvBC,kBAAkB,GAAlBA,kBAAkB;QAuElBC,+BAA+B,GAA/BA,+BAA+B;QAyB/BC,+BAA+B,GAA/BA,+BAA+B;SAxI7B,MAAO;gDAAP,OAAO;IAAP,MAAO;;;;;SAGbC,aAAa;iDAAM,gBAAgB;IAAnCA,aAAa;;;;;SACR,KAAM;gDAAN,MAAM;IAAN,KAAM;;;;;AAEgD,IAAA,YAAe,WAAf,eAAe,CAAA;AAClE,IAAA,IAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,AAAsB,AAAC;AAU/E,SAASN,uBAAuB,CAACO,WAAmB,EAAiB;IAC1E,OAAO,CAACC,OAA0B,EAAEC,UAAkB,EAAEC,QAAuB,GAAK;QAClF,OAAON,aAAa,GAACO,OAAO,CAACH,OAAO,EAAEC,UAAU,EAAEC,QAAQ,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,SAASE,oBAAoB,CAACJ,OAA0B,EAAE;IACxD,MAAMK,YAAY,GAAGP,OAAO,CAAC,6BAA6B,CAAC,AAAC;QAGtCE,sBAA6B,EAA5CM,GAAiE;IADxE,sCAAsC;IACtC,OAAOA,CAAAA,GAAiE,GAAjEA,IAAI,CAACC,SAAS,CAACP,CAAAA,sBAA6B,GAA7BA,OAAO,CAACQ,qBAAqB,YAA7BR,sBAA6B,GAAI,EAAE,EAAEK,YAAY,CAAC,YAAjEC,GAAiE,GAAI,EAAE,CAAC;CAChF;AAUM,SAASb,kBAAkB,CAChCgB,MAAmB,EACnBC,SAAoC,EACvB;QAImDD,GAAe,EAIhDA,IAAe;IAP9CZ,KAAK,CACH,CAAC,UAAU,EACTa,SAAS,CAACC,MAAM,CACjB,yDAAyD,EAAE,CAAC,CAACF,CAAAA,CAAAA,GAAe,GAAfA,MAAM,CAACG,QAAQ,SAAgB,GAA/BH,KAAAA,CAA+B,GAA/BA,GAAe,CAAEI,cAAc,CAAA,CAAC,CAAC,CAAC,CACjG,CAAC;IACF,oEAAoE;IACpE,sEAAsE;IACtE,MAAMC,sBAAsB,GAAGL,CAAAA,IAAe,GAAfA,MAAM,CAACG,QAAQ,SAAgB,GAA/BH,KAAAA,CAA+B,GAA/BA,IAAe,CAAEI,cAAc,AAAC;IAE/D,OAAO;QACL,GAAGJ,MAAM;QACTG,QAAQ,EAAE;YACR,GAAGH,MAAM,CAACG,QAAQ;YAClBC,cAAc,EAACb,OAAO,EAAEC,WAAU,EAAEC,SAAQ,EAAE;gBAC5C,MAAMa,sBAAsB,GAAGf,OAAO,CAACa,cAAc,AAAC;gBAEtD,MAAMG,gBAAgB,GAAG;oBACvB,GAAGhB,OAAO;oBACVa,cAAc,EACZI,GAA4B,EAC5BhB,UAAkB,EAClBC,QAAuB,EACvB;wBACA,KAAK,MAAMU,QAAQ,IAAIF,SAAS,CAAE;4BAChC,IAAI;gCACF,MAAMQ,GAAG,GAAGN,QAAQ,CAACK,GAAG,EAAEhB,UAAU,EAAEC,QAAQ,CAAC,AAAC;gCAChD,IAAIgB,GAAG,EAAE;oCACP,OAAOA,GAAG,CAAC;iCACZ;6BACF,CAAC,OAAOC,KAAK,EAAO;gCACnB,0FAA0F;gCAC1F,2FAA2F;gCAC3F,MAAMC,iBAAiB,GACrBC,CAAAA,GAAAA,YAA0B,AAAO,CAAA,2BAAP,CAACF,KAAK,CAAC,IAAIG,CAAAA,GAAAA,YAA0B,AAAO,CAAA,2BAAP,CAACH,KAAK,CAAC,AAAC;gCACzE,IAAI,CAACC,iBAAiB,EAAE;oCACtB,MAAMD,KAAK,CAAC;iCACb;gCACDtB,KAAK,CACH,CAAC,uBAAuB,EAAEsB,KAAK,CAACI,WAAW,CAACC,IAAI,CAAC,WAAW,EAAEvB,UAAU,CAAC,YAAY,EAAEC,QAAQ,CAAC,CAAC,CAAC,CACnG,CAAC;6BACH;yBACF;wBACD,iFAAiF;wBACjF,OAAOa,sBAAsB,CAACE,GAAG,EAAEhB,UAAU,EAAEC,QAAQ,CAAC,CAAC;qBAC1D;iBACF,AAAC;gBAEF,4EAA4E;gBAC5E,yFAAyF;gBACzF,EAAE;gBACF,wEAAwE;gBACxE,EAAE;gBACF,iBAAiB;gBACjB,EAAE;gBACF,iEAAiE;gBACjE,KAAK;gBACL,MAAMuB,aAAa,GAAGX,sBAAsB,WAAtBA,sBAAsB,GAAIE,gBAAgB,CAACH,cAAc,AAAC;gBAChF,OAAOY,aAAa,CAACT,gBAAgB,EAAEf,WAAU,EAAEC,SAAQ,CAAC,CAAC;aAC9D;SACF;KACF,CAAC;CACH;AAMM,SAASR,+BAA+B,CAC7Ce,MAAmB,EACnBiB,UAI4B,EACf;QAEkBjB,IAAe;IAD9C,MAAMkB,qBAAqB,GAAGnC,uBAAuB,CAACiB,MAAM,CAACV,WAAW,CAAC,AAAC;IAC1E,MAAMe,sBAAsB,GAAGL,CAAAA,IAAe,GAAfA,MAAM,CAACG,QAAQ,SAAgB,GAA/BH,KAAAA,CAA+B,GAA/BA,IAAe,CAAEI,cAAc,AAAC;IAE/D,OAAO;QACL,GAAGJ,MAAM;QACTG,QAAQ,EAAE;YACR,GAAGH,MAAM,CAACG,QAAQ;YAClBC,cAAc,EAACb,OAAO,EAAEC,UAAU,EAAEC,QAAQ,EAAE;gBAC5C,MAAMc,gBAAgB,GAAGU,UAAU,CAAC1B,OAAO,EAAEC,UAAU,EAAEC,QAAQ,CAAC,AAAC;oBAEjEY,GAAyD;gBAD3D,MAAMW,aAAa,GACjBX,CAAAA,GAAyD,GAAzDA,sBAAsB,WAAtBA,sBAAsB,GAAIE,gBAAgB,CAACH,cAAc,YAAzDC,GAAyD,GAAIa,qBAAqB,AAAC;gBACrF,OAAOF,aAAa,CAACT,gBAAgB,EAAEf,UAAU,EAAEC,QAAQ,CAAC,CAAC;aAC9D;SACF;KACF,CAAC;CACH;AAEM,SAASP,+BAA+B,CAACc,MAAmB,EAAe;QAKjDA,IAAe;IAJ9C,IAAI,CAACmB,IAAG,IAAA,CAACC,0BAA0B,EAAE;QACnC,OAAOpB,MAAM,CAAC;KACf;IAED,MAAMK,sBAAsB,GAAGL,CAAAA,IAAe,GAAfA,MAAM,CAACG,QAAQ,SAAgB,GAA/BH,KAAAA,CAA+B,GAA/BA,IAAe,CAAEI,cAAc,AAAC;IAE/D,SAASiB,qBAAqB,CAC5BX,KAAY,EACZnB,OAA0B,EAC1BC,UAAkB,EAClBC,QAAuB,EACvB;YA0CaO,GAAa;QAzC1B,IAAI,CAACP,QAAQ,EAAE;YACbL,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACxC,OAAOsB,KAAK,CAAC;SACd;QAED,MAAMY,WAAW,GAAGC,QAAQ,CAACC,GAAG,CAAC7B,oBAAoB,CAACJ,OAAO,CAAC,CAAC,AAAC;QAChE,MAAMkC,aAAa,GAAGH,WAAW,QAAK,GAAhBA,KAAAA,CAAgB,GAAhBA,WAAW,CAAEE,GAAG,CAAC/B,QAAQ,CAAC,AAAC;QAEjD,IAAI,CAACgC,aAAa,EAAE;YAClB,OAAOf,KAAK,CAAC;SACd;QAED,+DAA+D;QAE/D,MAAMgB,aAAa,GAAG,CAACC,MAAc,GAAK;YACxC,MAAMC,aAAa,GAA4D,EAAE,AAAC;YAElF,IAAI,CAACH,aAAa,EAAE;gBAClB,OAAOG,aAAa,CAAC;aACtB;YAED,KAAK,MAAM,CAACC,SAAS,EAAEC,WAAW,CAAC,IAAIL,aAAa,CAAE;gBACpD,kCAAkC;gBAElC,MAAMM,KAAK,GAAG;uBAAID,WAAW,CAACE,MAAM,EAAE;iBAAC,CAACC,IAAI,CAAC,CAACC,UAAU,GAAKA,UAAU,CAACC,IAAI,KAAKR,MAAM;gBAAA,CAAC,AAAC;gBACzF,IAAII,KAAK,EAAE;oBACTH,aAAa,CAACQ,IAAI,CAAC;wBACjBT,MAAM;wBACNU,QAAQ,EAAER,SAAS;wBACnBS,OAAO,EAAEP,KAAK,CAACO,OAAO;qBACvB,CAAC,CAAC;iBACJ;aACF;YAED,OAAOV,aAAa,CAAC;SACtB,AAAC;QAEF,MAAMW,GAAG,GAAG,CAACC,GAAW,GAAK;YAC3B,OAAO,IAAIC,KAAK,CAACD,GAAG,CAAC,CAACE,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1C,AAAC;YAEW3C,IAAkC;QAA/C,MAAM4C,IAAI,GAAG5C,CAAAA,IAAkC,GAAlCA,CAAAA,GAAa,GAAbA,MAAM,CAAC6C,MAAM,SAAqB,GAAlC7C,KAAAA,CAAkC,GAAlCA,GAAa,CAAE8C,mBAAmB,YAAlC9C,IAAkC,GAAIA,MAAM,CAACV,WAAW,AAAC;QAOtE,MAAMyD,oBAAoB,GAAG,CAC3BC,GAAwC,EACxCC,KAAa,EACbC,KAAa,GAAG,CAAC,GACd;YACH,MAAMC,OAAO,GAAqB;gBAChCxB,MAAM,EAAEqB,GAAG,CAACrB,MAAM;gBAClBW,OAAO,EAAEU,GAAG,CAACV,OAAO;gBACpBD,QAAQ,EAAE,EAAE;aACb,AAAC;YAEF,IAAIa,KAAK,IAAID,KAAK,EAAE;gBAClB,OAAOE,OAAO,CAAC;aAChB;YAED,MAAMC,OAAO,GAAG1B,aAAa,CAACsB,GAAG,CAACrB,MAAM,CAAC,AAAC;YAC1C,KAAK,MAAM0B,KAAK,IAAID,OAAO,CAAE;gBAC3B,sCAAsC;gBACtC,iCAAiC;gBACjC,oBAAoB;gBACpB,IAAIJ,GAAG,CAACrB,MAAM,KAAK0B,KAAK,CAAChB,QAAQ,EAAE;oBACjC,SAAS;iBACV;gBACDc,OAAO,CAACd,QAAQ,CAACD,IAAI,CACnBW,oBAAoB,CAAC;oBAAEpB,MAAM,EAAE0B,KAAK,CAAChB,QAAQ;oBAAEC,OAAO,EAAEe,KAAK,CAACf,OAAO;iBAAE,EAAEW,KAAK,EAAEC,KAAK,GAAG,CAAC,CAAC,CAC3F,CAAC;aACH;YACD,OAAOC,OAAO,CAAC;SAChB,AAAC;QAEF,MAAMG,WAAW,GAAGP,oBAAoB,CACtC;YAAEpB,MAAM,EAAEpC,OAAO,CAACgE,gBAAgB;YAAEjB,OAAO,EAAE9C,UAAU;SAAE,EACzD,mCAAmC;AACnC,UAAE,CACH,AAAC;QAEF,IAAI8D,WAAW,CAACjB,QAAQ,CAACnC,MAAM,GAAG,CAAC,EAAE;YACnCd,KAAK,CAAC,sBAAsB,EAAES,IAAI,CAACC,SAAS,CAACwD,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,IAAIE,YAAY,GAAGC,MAAK,UAAA,CAACC,IAAI,CAAC,eAAe,CAAC,AAAC;YAC/C,MAAMC,cAAc,GAAG,CAACC,IAAsB,EAAEC,KAAa,GAAG,CAAC,GAAK;gBACpE,IAAIC,QAAQ,GAAG3B,KAAI,UAAA,CAAC4B,QAAQ,CAACnB,IAAI,EAAEgB,IAAI,CAACjC,MAAM,CAAC,AAAC;gBAChD,IAAImC,QAAQ,CAACT,KAAK,kBAAkB,EAAE;oBACpCS,QAAQ,GAAGA,QAAQ,CAACE,OAAO,mBAAmBP,MAAK,UAAA,CAACQ,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBAChF,MAAM;oBACL,IAAIC,gBAAgB,GAAGT,MAAK,UAAA,CAACU,KAAK,CAAC,CAAC,CAAC,EAAEP,IAAI,CAACtB,OAAO,CAAC,CAAC,CAAC,CAAC,AAAC;oBAExD,IACE,uFAAuF;oBACvF,qCAAqC;oBACrC7C,QAAQ,KAAK,KAAK,IAClB,CAAC,mCAAmC2E,IAAI,CAACN,QAAQ,CAAC,IAClDF,IAAI,CAACtB,OAAO,CAACe,KAAK,qBAAqB,EACvC;wBACAa,gBAAgB,GACdA,gBAAgB,GAChBT,MAAK,UAAA,CAAC,8EAA8E,CAAC,CAAC;qBACzF;oBAEDK,QAAQ,GAAGA,QAAQ,GAAGL,MAAK,UAAA,CAAC,0BAA0B,EAAES,gBAAgB,CAAC,EAAE,CAAC,CAAC;iBAC9E;gBACD,IAAIG,IAAI,GAAG,IAAI,GAAG9B,GAAG,CAACsB,KAAK,CAAC,GAAGJ,MAAK,UAAA,CAACa,IAAI,CAAC,GAAG,CAAC,GAAGR,QAAQ,AAAC;gBAC1D,IAAIA,QAAQ,CAACT,KAAK,gBAAgB,EAAE;oBAClCgB,IAAI,GAAGZ,MAAK,UAAA,CAACa,IAAI,CACf,4BAA4B;oBAC5BD,IAAI,CAACL,OAAO,0BAA0B,CAACO,MAAM,EAAEC,EAAE,GAAK;wBACpD,OAAO,eAAe,GAAGf,MAAK,UAAA,CAACC,IAAI,CAACc,EAAE,CAAC,CAAC;qBACzC,CAAC,CACH,CAAC;iBACH;gBACDhB,YAAY,IAAIa,IAAI,CAAC;gBACrB,KAAK,MAAMI,KAAK,IAAIb,IAAI,CAACvB,QAAQ,CAAE;oBACjCsB,cAAc,CACZc,KAAK,EACL,gDAAgD;oBAChDb,IAAI,CAACvB,QAAQ,CAACnC,MAAM,GAAG,CAAC,GAAG2D,KAAK,GAAG,CAAC,GAAGA,KAAK,CAC7C,CAAC;iBACH;aACF,AAAC;YACFF,cAAc,CAACL,WAAW,CAAC,CAAC;YAE5B,mBAAmB;YACnB5C,KAAK,CAACgE,gBAAgB,GAAGlB,YAAY,CAAC;SACvC,MAAM;YACLpE,KAAK,CAAC,4BAA4B,EAAEG,OAAO,CAACgE,gBAAgB,CAAC,CAAC;SAC/D;QAED,OAAO7C,KAAK,CAAC;KACd;IAED,MAAMa,QAAQ,GAkBV,IAAIoD,GAAG,EAAE,AAAC;IAEd,OAAO;QACL,GAAG3E,MAAM;QACTG,QAAQ,EAAE;YACR,GAAGH,MAAM,CAACG,QAAQ;YAClBC,cAAc,EAACb,OAAO,EAAEC,UAAU,EAAEC,QAAQ,EAAE;gBAC5C,MAAMmF,WAAW,GAAG,CAACnE,GAAqD,GAAK;oBAC7E,IAAI,CAAChB,QAAQ,EAAE,OAAO;oBAEtB,MAAMoF,GAAG,GAAGlF,oBAAoB,CAACJ,OAAO,CAAC,AAAC;oBAC1C,IAAI,CAACgC,QAAQ,CAACuD,GAAG,CAACD,GAAG,CAAC,EAAEtD,QAAQ,CAACwD,GAAG,CAACF,GAAG,EAAE,IAAIF,GAAG,EAAE,CAAC,CAAC;oBACrD,MAAM7C,WAAW,GAAGP,QAAQ,CAACC,GAAG,CAACqD,GAAG,CAAC,AAAC;oBACtC,IAAI,CAAC/C,WAAW,CAAEgD,GAAG,CAACrF,QAAQ,CAAC,EAAEqC,WAAW,CAAEiD,GAAG,CAACtF,QAAQ,EAAE,IAAIkF,GAAG,EAAE,CAAC,CAAC;oBACvE,MAAMlD,aAAa,GAAGK,WAAW,CAAEN,GAAG,CAAC/B,QAAQ,CAAC,AAAC;oBACjD,IAAI,CAACgC,aAAa,CAAEqD,GAAG,CAACvF,OAAO,CAACgE,gBAAgB,CAAC,EAC/C9B,aAAa,CAAEsD,GAAG,CAACxF,OAAO,CAACgE,gBAAgB,EAAE,IAAIyB,GAAG,EAAE,CAAC,CAAC;oBAC1D,MAAMC,YAAY,GAAGxD,aAAa,CAAED,GAAG,CAACjC,OAAO,CAACgE,gBAAgB,CAAC,AAAC,AAAC;oBAEnE,MAAM2B,mBAAmB,GAAGzE,CAAAA,GAAG,QAAM,GAATA,KAAAA,CAAS,GAATA,GAAG,CAAE0E,IAAI,CAAA,KAAK,YAAY,GAAG1E,GAAG,CAAC2E,QAAQ,GAAG5F,UAAU,AAAC;oBACnFyF,YAAY,CAACI,GAAG,CAAC;wBAAElD,IAAI,EAAE+C,mBAAmB;wBAAE5C,OAAO,EAAE9C,UAAU;qBAAE,CAAC,CAAC;iBACtE,AAAC;gBAEF,4EAA4E;gBAC5E,yFAAyF;gBACzF,EAAE;gBACF,wEAAwE;gBACxE,EAAE;gBACF,iBAAiB;gBACjB,EAAE;gBACF,iEAAiE;gBACjE,KAAK;gBACL,IAAI;oBACF,MAAMwB,aAAa,GAAGX,sBAAsB,WAAtBA,sBAAsB,GAAId,OAAO,CAACa,cAAc,AAAC;oBACvE,MAAMK,GAAG,GAAGO,aAAa,CAACzB,OAAO,EAAEC,UAAU,EAAEC,QAAQ,CAAC,AAAC;oBACzDmF,WAAW,CAACnE,GAAG,CAAC,CAAC;oBACjB,OAAOA,GAAG,CAAC;iBACZ,CAAC,OAAOC,KAAK,EAAO;oBACnB,MAAMW,qBAAqB,CAACX,KAAK,EAAEnB,OAAO,EAAEC,UAAU,EAAEC,QAAQ,CAAC,CAAC;iBACnE;aACF;SACF;KACF,CAAC;CACH"}
|
|
@@ -2,8 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
function _fs() {
|
|
6
|
+
const data = _interopRequireDefault(require("fs"));
|
|
7
|
+
_fs = function() {
|
|
8
|
+
return data;
|
|
9
|
+
};
|
|
10
|
+
return data;
|
|
11
|
+
}
|
|
12
|
+
function _path() {
|
|
13
|
+
const data = _interopRequireDefault(require("path"));
|
|
14
|
+
_path = function() {
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
7
19
|
var _expoMiddleware = require("./ExpoMiddleware");
|
|
8
20
|
function _interopRequireDefault(obj) {
|
|
9
21
|
return obj && obj.__esModule ? obj : {
|
|
@@ -19,16 +31,16 @@ class CreateFileMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
19
31
|
this.projectRoot = projectRoot;
|
|
20
32
|
}
|
|
21
33
|
resolvePath(inputPath) {
|
|
22
|
-
return this.resolveExtension(_path.default.join(this.projectRoot, inputPath));
|
|
34
|
+
return this.resolveExtension(_path().default.join(this.projectRoot, inputPath));
|
|
23
35
|
}
|
|
24
36
|
resolveExtension(inputPath) {
|
|
25
37
|
let resolvedPath = inputPath;
|
|
26
|
-
const extension = _path.default.extname(inputPath);
|
|
38
|
+
const extension = _path().default.extname(inputPath);
|
|
27
39
|
if (extension === ".js") {
|
|
28
40
|
// Automatically convert JS files to TS files when added to a project
|
|
29
41
|
// with TypeScript.
|
|
30
|
-
const tsconfigPath = _path.default.join(this.projectRoot, "tsconfig.json");
|
|
31
|
-
if (_fs.default.existsSync(tsconfigPath)) {
|
|
42
|
+
const tsconfigPath = _path().default.join(this.projectRoot, "tsconfig.json");
|
|
43
|
+
if (_fs().default.existsSync(tsconfigPath)) {
|
|
32
44
|
resolvedPath = resolvedPath.replace(/\.js$/, ".tsx");
|
|
33
45
|
}
|
|
34
46
|
}
|
|
@@ -78,18 +90,18 @@ class CreateFileMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
78
90
|
return;
|
|
79
91
|
}
|
|
80
92
|
debug(`Requested: %O`, properties);
|
|
81
|
-
const resolvedPath = properties.absolutePath ? this.resolveExtension(_path.default.resolve(properties.absolutePath)) : this.resolvePath(properties.path);
|
|
82
|
-
if (_fs.default.existsSync(resolvedPath)) {
|
|
93
|
+
const resolvedPath = properties.absolutePath ? this.resolveExtension(_path().default.resolve(properties.absolutePath)) : this.resolvePath(properties.path);
|
|
94
|
+
if (_fs().default.existsSync(resolvedPath)) {
|
|
83
95
|
res.statusCode = 409;
|
|
84
96
|
res.end("File already exists.");
|
|
85
97
|
return;
|
|
86
98
|
}
|
|
87
99
|
debug(`Resolved path:`, resolvedPath);
|
|
88
100
|
try {
|
|
89
|
-
await _fs.default.promises.mkdir(_path.default.dirname(resolvedPath), {
|
|
101
|
+
await _fs().default.promises.mkdir(_path().default.dirname(resolvedPath), {
|
|
90
102
|
recursive: true
|
|
91
103
|
});
|
|
92
|
-
await _fs.default.promises.writeFile(resolvedPath, properties.contents, "utf8");
|
|
104
|
+
await _fs().default.promises.writeFile(resolvedPath, properties.contents, "utf8");
|
|
93
105
|
} catch (e1) {
|
|
94
106
|
debug("Error writing file", e1);
|
|
95
107
|
res.statusCode = 500;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/CreateFileMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\n\nconst debug = require('debug')('expo:start:server:middleware:createFile') as typeof console.log;\n\nexport type TouchFileBody = {\n /** @deprecated */\n path: string;\n absolutePath?: string;\n contents: string;\n};\n\n/**\n * Middleware for creating a file given a `POST` request with\n * `{ contents: string, path: string }` in the body.\n */\nexport class CreateFileMiddleware extends ExpoMiddleware {\n constructor(protected projectRoot: string) {\n super(projectRoot, ['/_expo/touch']);\n }\n\n protected resolvePath(inputPath: string): string {\n return this.resolveExtension(path.join(this.projectRoot, inputPath));\n }\n\n protected resolveExtension(inputPath: string): string {\n let resolvedPath = inputPath;\n const extension = path.extname(inputPath);\n if (extension === '.js') {\n // Automatically convert JS files to TS files when added to a project\n // with TypeScript.\n const tsconfigPath = path.join(this.projectRoot, 'tsconfig.json');\n if (fs.existsSync(tsconfigPath)) {\n resolvedPath = resolvedPath.replace(/\\.js$/, '.tsx');\n }\n }\n\n return resolvedPath;\n }\n\n protected async parseRawBody(req: ServerRequest): Promise<TouchFileBody> {\n const rawBody = await new Promise<string>((resolve, reject) => {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n resolve(body);\n });\n req.on('error', (err) => {\n reject(err);\n });\n });\n\n const properties = JSON.parse(rawBody);\n this.assertTouchFileBody(properties);\n\n return properties;\n }\n\n private assertTouchFileBody(body: any): asserts body is TouchFileBody {\n if (typeof body !== 'object' || body == null) {\n throw new Error('Expected object');\n }\n if (typeof body.path !== 'string') {\n throw new Error('Expected \"path\" in body to be string');\n }\n if (typeof body.contents !== 'string') {\n throw new Error('Expected \"contents\" in body to be string');\n }\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n if (req.method !== 'POST') {\n res.statusCode = 405;\n res.end('Method Not Allowed');\n return;\n }\n\n let properties: TouchFileBody;\n\n try {\n properties = await this.parseRawBody(req);\n } catch (e) {\n debug('Error parsing request body', e);\n res.statusCode = 400;\n res.end('Bad Request');\n return;\n }\n\n debug(`Requested: %O`, properties);\n\n const resolvedPath = properties.absolutePath\n ? this.resolveExtension(path.resolve(properties.absolutePath))\n : this.resolvePath(properties.path);\n\n if (fs.existsSync(resolvedPath)) {\n res.statusCode = 409;\n res.end('File already exists.');\n return;\n }\n\n debug(`Resolved path:`, resolvedPath);\n\n try {\n await fs.promises.mkdir(path.dirname(resolvedPath), { recursive: true });\n await fs.promises.writeFile(resolvedPath, properties.contents, 'utf8');\n } catch (e) {\n debug('Error writing file', e);\n res.statusCode = 500;\n res.end('Error writing file.');\n return;\n }\n\n debug(`File created`);\n res.statusCode = 200;\n res.end('OK');\n }\n}\n"],"names":["debug","require","CreateFileMiddleware","ExpoMiddleware","constructor","projectRoot","resolvePath","inputPath","resolveExtension","path","join","resolvedPath","extension","extname","tsconfigPath","fs","existsSync","replace","parseRawBody","req","rawBody","Promise","resolve","reject","body","on","chunk","toString","err","properties","JSON","parse","assertTouchFileBody","Error","contents","handleRequestAsync","res","method","statusCode","end","e","absolutePath","promises","mkdir","dirname","recursive","writeFile"],"mappings":"AAMA;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/CreateFileMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\n\nconst debug = require('debug')('expo:start:server:middleware:createFile') as typeof console.log;\n\nexport type TouchFileBody = {\n /** @deprecated */\n path: string;\n absolutePath?: string;\n contents: string;\n};\n\n/**\n * Middleware for creating a file given a `POST` request with\n * `{ contents: string, path: string }` in the body.\n */\nexport class CreateFileMiddleware extends ExpoMiddleware {\n constructor(protected projectRoot: string) {\n super(projectRoot, ['/_expo/touch']);\n }\n\n protected resolvePath(inputPath: string): string {\n return this.resolveExtension(path.join(this.projectRoot, inputPath));\n }\n\n protected resolveExtension(inputPath: string): string {\n let resolvedPath = inputPath;\n const extension = path.extname(inputPath);\n if (extension === '.js') {\n // Automatically convert JS files to TS files when added to a project\n // with TypeScript.\n const tsconfigPath = path.join(this.projectRoot, 'tsconfig.json');\n if (fs.existsSync(tsconfigPath)) {\n resolvedPath = resolvedPath.replace(/\\.js$/, '.tsx');\n }\n }\n\n return resolvedPath;\n }\n\n protected async parseRawBody(req: ServerRequest): Promise<TouchFileBody> {\n const rawBody = await new Promise<string>((resolve, reject) => {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n resolve(body);\n });\n req.on('error', (err) => {\n reject(err);\n });\n });\n\n const properties = JSON.parse(rawBody);\n this.assertTouchFileBody(properties);\n\n return properties;\n }\n\n private assertTouchFileBody(body: any): asserts body is TouchFileBody {\n if (typeof body !== 'object' || body == null) {\n throw new Error('Expected object');\n }\n if (typeof body.path !== 'string') {\n throw new Error('Expected \"path\" in body to be string');\n }\n if (typeof body.contents !== 'string') {\n throw new Error('Expected \"contents\" in body to be string');\n }\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n if (req.method !== 'POST') {\n res.statusCode = 405;\n res.end('Method Not Allowed');\n return;\n }\n\n let properties: TouchFileBody;\n\n try {\n properties = await this.parseRawBody(req);\n } catch (e) {\n debug('Error parsing request body', e);\n res.statusCode = 400;\n res.end('Bad Request');\n return;\n }\n\n debug(`Requested: %O`, properties);\n\n const resolvedPath = properties.absolutePath\n ? this.resolveExtension(path.resolve(properties.absolutePath))\n : this.resolvePath(properties.path);\n\n if (fs.existsSync(resolvedPath)) {\n res.statusCode = 409;\n res.end('File already exists.');\n return;\n }\n\n debug(`Resolved path:`, resolvedPath);\n\n try {\n await fs.promises.mkdir(path.dirname(resolvedPath), { recursive: true });\n await fs.promises.writeFile(resolvedPath, properties.contents, 'utf8');\n } catch (e) {\n debug('Error writing file', e);\n res.statusCode = 500;\n res.end('Error writing file.');\n return;\n }\n\n debug(`File created`);\n res.statusCode = 200;\n res.end('OK');\n }\n}\n"],"names":["debug","require","CreateFileMiddleware","ExpoMiddleware","constructor","projectRoot","resolvePath","inputPath","resolveExtension","path","join","resolvedPath","extension","extname","tsconfigPath","fs","existsSync","replace","parseRawBody","req","rawBody","Promise","resolve","reject","body","on","chunk","toString","err","properties","JSON","parse","assertTouchFileBody","Error","contents","handleRequestAsync","res","method","statusCode","end","e","absolutePath","promises","mkdir","dirname","recursive","writeFile"],"mappings":"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"}
|
|
@@ -8,8 +8,20 @@ Object.defineProperty(exports, "DevToolsPluginEndpoint", {
|
|
|
8
8
|
return _devToolsPluginManager.DevToolsPluginEndpoint;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
function _assert() {
|
|
12
|
+
const data = _interopRequireDefault(require("assert"));
|
|
13
|
+
_assert = function() {
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
function _send() {
|
|
19
|
+
const data = _interopRequireDefault(require("send"));
|
|
20
|
+
_send = function() {
|
|
21
|
+
return data;
|
|
22
|
+
};
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
13
25
|
var _expoMiddleware = require("./ExpoMiddleware");
|
|
14
26
|
var _devToolsPluginManager = require("../DevToolsPluginManager");
|
|
15
27
|
function _interopRequireDefault(obj) {
|
|
@@ -32,7 +44,7 @@ class DevToolsPluginMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
32
44
|
return true;
|
|
33
45
|
}
|
|
34
46
|
async handleRequestAsync(req, res) {
|
|
35
|
-
(
|
|
47
|
+
_assert().default(req.headers.host, "Request headers must include host");
|
|
36
48
|
var _url;
|
|
37
49
|
const { pathname } = new URL((_url = req.url) != null ? _url : "/", `http://${req.headers.host}`);
|
|
38
50
|
const pluginName = this.queryPossiblePluginName(pathname.substring(_devToolsPluginManager.DevToolsPluginEndpoint.length + 1));
|
|
@@ -43,7 +55,7 @@ class DevToolsPluginMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
43
55
|
return;
|
|
44
56
|
}
|
|
45
57
|
const pathInPluginRoot = pathname.substring(_devToolsPluginManager.DevToolsPluginEndpoint.length + pluginName.length + 1) || "/";
|
|
46
|
-
(
|
|
58
|
+
_send().default(req, pathInPluginRoot, {
|
|
47
59
|
root: webpageRoot
|
|
48
60
|
}).pipe(res);
|
|
49
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/DevToolsPluginMiddleware.ts"],"sourcesContent":["import assert from 'assert';\nimport send from 'send';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\nimport DevToolsPluginManager, { DevToolsPluginEndpoint } from '../DevToolsPluginManager';\n\nexport { DevToolsPluginEndpoint };\n\nexport class DevToolsPluginMiddleware extends ExpoMiddleware {\n constructor(\n projectRoot: string,\n private readonly pluginManager: DevToolsPluginManager\n ) {\n super(projectRoot, [DevToolsPluginEndpoint]);\n }\n\n override shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url?.startsWith(DevToolsPluginEndpoint)) {\n return false;\n }\n return true;\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n assert(req.headers.host, 'Request headers must include host');\n const { pathname } = new URL(req.url ?? '/', `http://${req.headers.host}`);\n const pluginName = this.queryPossiblePluginName(\n pathname.substring(DevToolsPluginEndpoint.length + 1)\n );\n const webpageRoot = await this.pluginManager.queryPluginWebpageRootAsync(pluginName);\n if (!webpageRoot) {\n res.statusCode = 404;\n res.end();\n return;\n }\n\n const pathInPluginRoot =\n pathname.substring(DevToolsPluginEndpoint.length + pluginName.length + 1) || '/';\n send(req, pathInPluginRoot, { root: webpageRoot }).pipe(res);\n }\n\n private queryPossiblePluginName(pathname: string): string {\n const parts = pathname.split('/');\n if (parts[0][0] === '@' && parts.length > 1) {\n // Scoped package name\n return `${parts[0]}/${parts[1]}`;\n }\n return parts[0];\n }\n}\n"],"names":["DevToolsPluginEndpoint","DevToolsPluginMiddleware","ExpoMiddleware","constructor","projectRoot","pluginManager","shouldHandleRequest","req","url","startsWith","handleRequestAsync","res","assert","headers","host","pathname","URL","pluginName","queryPossiblePluginName","substring","length","webpageRoot","queryPluginWebpageRootAsync","statusCode","end","pathInPluginRoot","send","root","pipe","parts","split"],"mappings":"AAAA;;;;+BAOSA,wBAAsB;;;eAAtBA,sBAAsB,uBAAA;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/DevToolsPluginMiddleware.ts"],"sourcesContent":["import assert from 'assert';\nimport send from 'send';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\nimport DevToolsPluginManager, { DevToolsPluginEndpoint } from '../DevToolsPluginManager';\n\nexport { DevToolsPluginEndpoint };\n\nexport class DevToolsPluginMiddleware extends ExpoMiddleware {\n constructor(\n projectRoot: string,\n private readonly pluginManager: DevToolsPluginManager\n ) {\n super(projectRoot, [DevToolsPluginEndpoint]);\n }\n\n override shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url?.startsWith(DevToolsPluginEndpoint)) {\n return false;\n }\n return true;\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n assert(req.headers.host, 'Request headers must include host');\n const { pathname } = new URL(req.url ?? '/', `http://${req.headers.host}`);\n const pluginName = this.queryPossiblePluginName(\n pathname.substring(DevToolsPluginEndpoint.length + 1)\n );\n const webpageRoot = await this.pluginManager.queryPluginWebpageRootAsync(pluginName);\n if (!webpageRoot) {\n res.statusCode = 404;\n res.end();\n return;\n }\n\n const pathInPluginRoot =\n pathname.substring(DevToolsPluginEndpoint.length + pluginName.length + 1) || '/';\n send(req, pathInPluginRoot, { root: webpageRoot }).pipe(res);\n }\n\n private queryPossiblePluginName(pathname: string): string {\n const parts = pathname.split('/');\n if (parts[0][0] === '@' && parts.length > 1) {\n // Scoped package name\n return `${parts[0]}/${parts[1]}`;\n }\n return parts[0];\n }\n}\n"],"names":["DevToolsPluginEndpoint","DevToolsPluginMiddleware","ExpoMiddleware","constructor","projectRoot","pluginManager","shouldHandleRequest","req","url","startsWith","handleRequestAsync","res","assert","headers","host","pathname","URL","pluginName","queryPossiblePluginName","substring","length","webpageRoot","queryPluginWebpageRootAsync","statusCode","end","pathInPluginRoot","send","root","pipe","parts","split"],"mappings":"AAAA;;;;+BAOSA,wBAAsB;;;eAAtBA,sBAAsB,uBAAA;;;SAPZ,OAAQ;gDAAR,QAAQ;IAAR,OAAQ;;;;;SACV,KAAM;gDAAN,MAAM;IAAN,KAAM;;;;;AAEQ,IAAA,eAAkB,WAAlB,kBAAkB,CAAA;AAEa,IAAA,sBAA0B,WAA1B,0BAA0B,CAAA;;;;;;AAIjF,MAAMC,wBAAwB,SAASC,eAAc,eAAA;IAC1DC,YACEC,WAAmB,EACFC,aAAoC,CACrD;QACA,KAAK,CAACD,WAAW,EAAE;YAACJ,sBAAsB,uBAAA;SAAC,CAAC,CAAC;aAF5BK,aAAoC,GAApCA,aAAoC;KAGtD;IAED,AAASC,mBAAmB,CAACC,GAAkB,EAAW;YACnDA,GAAO;QAAZ,IAAI,EAACA,CAAAA,GAAO,GAAPA,GAAG,CAACC,GAAG,SAAY,GAAnBD,KAAAA,CAAmB,GAAnBA,GAAO,CAAEE,UAAU,CAACT,sBAAsB,uBAAA,CAAC,CAAA,EAAE;YAChD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;KACb;IAED,MAAMU,kBAAkB,CAACH,GAAkB,EAAEI,GAAmB,EAAiB;QAC/EC,OAAM,UAAA,CAACL,GAAG,CAACM,OAAO,CAACC,IAAI,EAAE,mCAAmC,CAAC,CAAC;YACjCP,IAAO;QAApC,MAAM,EAAEQ,QAAQ,CAAA,EAAE,GAAG,IAAIC,GAAG,CAACT,CAAAA,IAAO,GAAPA,GAAG,CAACC,GAAG,YAAPD,IAAO,GAAI,GAAG,EAAE,CAAC,OAAO,EAAEA,GAAG,CAACM,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC,AAAC;QAC3E,MAAMG,UAAU,GAAG,IAAI,CAACC,uBAAuB,CAC7CH,QAAQ,CAACI,SAAS,CAACnB,sBAAsB,uBAAA,CAACoB,MAAM,GAAG,CAAC,CAAC,CACtD,AAAC;QACF,MAAMC,WAAW,GAAG,MAAM,IAAI,CAAChB,aAAa,CAACiB,2BAA2B,CAACL,UAAU,CAAC,AAAC;QACrF,IAAI,CAACI,WAAW,EAAE;YAChBV,GAAG,CAACY,UAAU,GAAG,GAAG,CAAC;YACrBZ,GAAG,CAACa,GAAG,EAAE,CAAC;YACV,OAAO;SACR;QAED,MAAMC,gBAAgB,GACpBV,QAAQ,CAACI,SAAS,CAACnB,sBAAsB,uBAAA,CAACoB,MAAM,GAAGH,UAAU,CAACG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,AAAC;QACnFM,KAAI,UAAA,CAACnB,GAAG,EAAEkB,gBAAgB,EAAE;YAAEE,IAAI,EAAEN,WAAW;SAAE,CAAC,CAACO,IAAI,CAACjB,GAAG,CAAC,CAAC;KAC9D;IAED,AAAQO,uBAAuB,CAACH,QAAgB,EAAU;QACxD,MAAMc,KAAK,GAAGd,QAAQ,CAACe,KAAK,CAAC,GAAG,CAAC,AAAC;QAClC,IAAID,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIA,KAAK,CAACT,MAAM,GAAG,CAAC,EAAE;YAC3C,sBAAsB;YACtB,OAAO,CAAC,EAAES,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;QACD,OAAOA,KAAK,CAAC,CAAC,CAAC,CAAC;KACjB;CACF;QAzCY5B,wBAAwB,GAAxBA,wBAAwB"}
|
|
@@ -3,18 +3,48 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
exports.ResponseContentType = void 0;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
function _configPlugins() {
|
|
7
|
+
const data = require("@expo/config-plugins");
|
|
8
|
+
_configPlugins = function() {
|
|
9
|
+
return data;
|
|
10
|
+
};
|
|
11
|
+
return data;
|
|
12
|
+
}
|
|
13
|
+
function _accepts() {
|
|
14
|
+
const data = _interopRequireDefault(require("accepts"));
|
|
15
|
+
_accepts = function() {
|
|
16
|
+
return data;
|
|
17
|
+
};
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
function _crypto() {
|
|
21
|
+
const data = _interopRequireDefault(require("crypto"));
|
|
22
|
+
_crypto = function() {
|
|
23
|
+
return data;
|
|
24
|
+
};
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
function _formData() {
|
|
28
|
+
const data = _interopRequireDefault(require("form-data"));
|
|
29
|
+
_formData = function() {
|
|
30
|
+
return data;
|
|
31
|
+
};
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
function _structuredHeaders() {
|
|
35
|
+
const data = require("structured-headers");
|
|
36
|
+
_structuredHeaders = function() {
|
|
37
|
+
return data;
|
|
38
|
+
};
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
11
41
|
var _manifestMiddleware = require("./ManifestMiddleware");
|
|
12
42
|
var _resolvePlatform = require("./resolvePlatform");
|
|
13
43
|
var _userSettings = _interopRequireDefault(require("../../../api/user/UserSettings"));
|
|
14
44
|
var _user = require("../../../api/user/user");
|
|
15
|
-
var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
|
|
16
45
|
var _codesigning = require("../../../utils/codesigning");
|
|
17
46
|
var _errors = require("../../../utils/errors");
|
|
47
|
+
var _telemetry = require("../../../utils/telemetry");
|
|
18
48
|
var _url = require("../../../utils/url");
|
|
19
49
|
function _interopRequireDefault(obj) {
|
|
20
50
|
return obj && obj.__esModule ? obj : {
|
|
@@ -42,7 +72,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
42
72
|
// accept them with "accept: */*". To make it easier to debug manifest responses by visiting their
|
|
43
73
|
// URLs in a browser, we denote the response as "text/plain" if the user agent appears not to be
|
|
44
74
|
// an Expo Updates client.
|
|
45
|
-
const accept = (
|
|
75
|
+
const accept = _accepts().default(req);
|
|
46
76
|
const acceptedType = accept.types([
|
|
47
77
|
"unknown/unknown",
|
|
48
78
|
"multipart/mixed",
|
|
@@ -86,7 +116,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
86
116
|
var ref, ref1;
|
|
87
117
|
const { exp , hostUri , expoGoConfig , bundleUrl } = await this._resolveProjectSettingsAsync(requestOptions);
|
|
88
118
|
var _runtimeVersion;
|
|
89
|
-
const runtimeVersion = await _configPlugins.Updates.getRuntimeVersionAsync(this.projectRoot, {
|
|
119
|
+
const runtimeVersion = await _configPlugins().Updates.getRuntimeVersionAsync(this.projectRoot, {
|
|
90
120
|
...exp,
|
|
91
121
|
runtimeVersion: (_runtimeVersion = exp.runtimeVersion) != null ? _runtimeVersion : {
|
|
92
122
|
policy: "sdkVersion"
|
|
@@ -102,7 +132,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
102
132
|
codeSigningInfo
|
|
103
133
|
});
|
|
104
134
|
const expoUpdatesManifest = {
|
|
105
|
-
id: _crypto.default.randomUUID(),
|
|
135
|
+
id: _crypto().default.randomUUID(),
|
|
106
136
|
createdAt: new Date().toISOString(),
|
|
107
137
|
runtimeVersion,
|
|
108
138
|
launchAsset: {
|
|
@@ -130,7 +160,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
130
160
|
if (codeSigningInfo) {
|
|
131
161
|
const signature = (0, _codesigning).signManifestString(stringifiedManifest, codeSigningInfo);
|
|
132
162
|
manifestPartHeaders = {
|
|
133
|
-
"expo-signature": (
|
|
163
|
+
"expo-signature": _structuredHeaders().serializeDictionary(convertToDictionaryItemsRepresentation({
|
|
134
164
|
keyid: codeSigningInfo.keyId,
|
|
135
165
|
sig: signature,
|
|
136
166
|
alg: "rsa-v1_5-sha256"
|
|
@@ -185,7 +215,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
185
215
|
}
|
|
186
216
|
}
|
|
187
217
|
getFormData({ stringifiedManifest , manifestPartHeaders , certificateChainBody }) {
|
|
188
|
-
const form = new _formData.default();
|
|
218
|
+
const form = new (_formData()).default();
|
|
189
219
|
form.append("manifest", stringifiedManifest, {
|
|
190
220
|
contentType: "application/json",
|
|
191
221
|
header: {
|
|
@@ -200,7 +230,7 @@ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddle
|
|
|
200
230
|
return form;
|
|
201
231
|
}
|
|
202
232
|
trackManifest(version) {
|
|
203
|
-
(0,
|
|
233
|
+
(0, _telemetry).logEventAsync("Serve Expo Updates Manifest", {
|
|
204
234
|
runtimeVersion: version
|
|
205
235
|
});
|
|
206
236
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/ExpoGoManifestHandlerMiddleware.ts"],"sourcesContent":["import { ExpoUpdatesManifest } from '@expo/config';\nimport { Updates } from '@expo/config-plugins';\nimport accepts from 'accepts';\nimport crypto from 'crypto';\nimport FormData from 'form-data';\nimport { serializeDictionary, Dictionary } from 'structured-headers';\n\nimport { ManifestMiddleware, ManifestRequestInfo } from './ManifestMiddleware';\nimport { assertRuntimePlatform, parsePlatformHeader } from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME } from '../../../api/user/user';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport {\n CodeSigningInfo,\n getCodeSigningInfoAsync,\n signManifestString,\n} from '../../../utils/codesigning';\nimport { CommandError } from '../../../utils/errors';\nimport { stripPort } from '../../../utils/url';\n\nconst debug = require('debug')('expo:start:server:middleware:ExpoGoManifestHandlerMiddleware');\n\nexport enum ResponseContentType {\n TEXT_PLAIN,\n APPLICATION_JSON,\n APPLICATION_EXPO_JSON,\n MULTIPART_MIXED,\n}\n\ninterface ExpoGoManifestRequestInfo extends ManifestRequestInfo {\n responseContentType: ResponseContentType;\n expectSignature: string | null;\n}\n\nexport class ExpoGoManifestHandlerMiddleware extends ManifestMiddleware<ExpoGoManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ExpoGoManifestRequestInfo {\n let platform = parsePlatformHeader(req);\n\n if (!platform) {\n debug(\n `No \"expo-platform\" header or \"platform\" query parameter specified. Falling back to \"ios\".`\n );\n platform = 'ios';\n }\n\n assertRuntimePlatform(platform);\n\n // Expo Updates clients explicitly accept \"multipart/mixed\" responses while browsers implicitly\n // accept them with \"accept: */*\". To make it easier to debug manifest responses by visiting their\n // URLs in a browser, we denote the response as \"text/plain\" if the user agent appears not to be\n // an Expo Updates client.\n const accept = accepts(req);\n const acceptedType = accept.types([\n 'unknown/unknown',\n 'multipart/mixed',\n 'application/json',\n 'application/expo+json',\n 'text/plain',\n ]);\n\n let responseContentType;\n switch (acceptedType) {\n case 'multipart/mixed':\n responseContentType = ResponseContentType.MULTIPART_MIXED;\n break;\n case 'application/json':\n responseContentType = ResponseContentType.APPLICATION_JSON;\n break;\n case 'application/expo+json':\n responseContentType = ResponseContentType.APPLICATION_EXPO_JSON;\n break;\n default:\n responseContentType = ResponseContentType.TEXT_PLAIN;\n break;\n }\n\n const expectSignature = req.headers['expo-expect-signature'];\n\n return {\n responseContentType,\n platform,\n expectSignature: expectSignature ? String(expectSignature) : null,\n hostname: stripPort(req.headers['host']),\n protocol: req.headers['x-forwarded-proto'] as 'http' | 'https' | undefined,\n };\n }\n\n private getDefaultResponseHeaders(): ServerHeaders {\n const headers = new Map<string, number | string | readonly string[]>();\n // set required headers for Expo Updates manifest specification\n headers.set('expo-protocol-version', 0);\n headers.set('expo-sfv-version', 0);\n headers.set('cache-control', 'private, max-age=0');\n return headers;\n }\n\n public async _getManifestResponseAsync(requestOptions: ExpoGoManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } =\n await this._resolveProjectSettingsAsync(requestOptions);\n\n const runtimeVersion = await Updates.getRuntimeVersionAsync(\n this.projectRoot,\n { ...exp, runtimeVersion: exp.runtimeVersion ?? { policy: 'sdkVersion' } },\n requestOptions.platform\n );\n if (!runtimeVersion) {\n throw new CommandError(\n 'MANIFEST_MIDDLEWARE',\n `Unable to determine runtime version for platform '${requestOptions.platform}'`\n );\n }\n\n const codeSigningInfo = await getCodeSigningInfoAsync(\n exp,\n requestOptions.expectSignature,\n this.options.privateKeyPath\n );\n\n const easProjectId = exp.extra?.eas?.projectId as string | undefined | null;\n const scopeKey = await ExpoGoManifestHandlerMiddleware.getScopeKeyAsync({\n slug: exp.slug,\n codeSigningInfo,\n });\n\n const expoUpdatesManifest: ExpoUpdatesManifest = {\n id: crypto.randomUUID(),\n createdAt: new Date().toISOString(),\n runtimeVersion,\n launchAsset: {\n key: 'bundle',\n contentType: 'application/javascript',\n url: bundleUrl,\n },\n assets: [], // assets are not used in development\n metadata: {}, // required for the client to detect that this is an expo-updates manifest\n extra: {\n eas: {\n projectId: easProjectId ?? undefined,\n },\n expoClient: {\n ...exp,\n hostUri,\n },\n expoGo: expoGoConfig,\n scopeKey,\n },\n };\n\n const stringifiedManifest = JSON.stringify(expoUpdatesManifest);\n\n let manifestPartHeaders: { 'expo-signature': string } | null = null;\n let certificateChainBody: string | null = null;\n if (codeSigningInfo) {\n const signature = signManifestString(stringifiedManifest, codeSigningInfo);\n manifestPartHeaders = {\n 'expo-signature': serializeDictionary(\n convertToDictionaryItemsRepresentation({\n keyid: codeSigningInfo.keyId,\n sig: signature,\n alg: 'rsa-v1_5-sha256',\n })\n ),\n };\n certificateChainBody = codeSigningInfo.certificateChainForResponse.join('\\n');\n }\n\n const headers = this.getDefaultResponseHeaders();\n\n switch (requestOptions.responseContentType) {\n case ResponseContentType.MULTIPART_MIXED: {\n const form = this.getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n });\n headers.set('content-type', `multipart/mixed; boundary=${form.getBoundary()}`);\n return {\n body: form.getBuffer().toString(),\n version: runtimeVersion,\n headers,\n };\n }\n case ResponseContentType.APPLICATION_EXPO_JSON:\n case ResponseContentType.APPLICATION_JSON:\n case ResponseContentType.TEXT_PLAIN: {\n headers.set(\n 'content-type',\n ExpoGoManifestHandlerMiddleware.getContentTypeForResponseContentType(\n requestOptions.responseContentType\n )\n );\n if (manifestPartHeaders) {\n Object.entries(manifestPartHeaders).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n return {\n body: stringifiedManifest,\n version: runtimeVersion,\n headers,\n };\n }\n }\n }\n\n private static getContentTypeForResponseContentType(\n responseContentType: ResponseContentType\n ): string {\n switch (responseContentType) {\n case ResponseContentType.MULTIPART_MIXED:\n return 'multipart/mixed';\n case ResponseContentType.APPLICATION_EXPO_JSON:\n return 'application/expo+json';\n case ResponseContentType.APPLICATION_JSON:\n return 'application/json';\n case ResponseContentType.TEXT_PLAIN:\n return 'text/plain';\n }\n }\n\n private getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n }: {\n stringifiedManifest: string;\n manifestPartHeaders: { 'expo-signature': string } | null;\n certificateChainBody: string | null;\n }): FormData {\n const form = new FormData();\n form.append('manifest', stringifiedManifest, {\n contentType: 'application/json',\n header: {\n ...manifestPartHeaders,\n },\n });\n if (certificateChainBody && certificateChainBody.length > 0) {\n form.append('certificate_chain', certificateChainBody, {\n contentType: 'application/x-pem-file',\n });\n }\n return form;\n }\n\n protected trackManifest(version?: string) {\n logEventAsync('Serve Expo Updates Manifest', {\n runtimeVersion: version,\n });\n }\n\n private static async getScopeKeyAsync({\n slug,\n codeSigningInfo,\n }: {\n slug: string;\n codeSigningInfo: CodeSigningInfo | null;\n }): Promise<string> {\n const scopeKeyFromCodeSigningInfo = codeSigningInfo?.scopeKey;\n if (scopeKeyFromCodeSigningInfo) {\n return scopeKeyFromCodeSigningInfo;\n }\n\n // Log.warn(\n // env.EXPO_OFFLINE\n // ? 'Using anonymous scope key in manifest for offline mode.'\n // : 'Using anonymous scope key in manifest.'\n // );\n return await getAnonymousScopeKeyAsync(slug);\n }\n}\n\nasync function getAnonymousScopeKeyAsync(slug: string): Promise<string> {\n const userAnonymousIdentifier = await UserSettings.getAnonymousIdentifierAsync();\n return `@${ANONYMOUS_USERNAME}/${slug}-${userAnonymousIdentifier}`;\n}\n\nfunction convertToDictionaryItemsRepresentation(obj: { [key: string]: string }): Dictionary {\n return new Map(\n Object.entries(obj).map(([k, v]) => {\n return [k, [v, new Map()]];\n })\n );\n}\n"],"names":["debug","require","ResponseContentType","TEXT_PLAIN","APPLICATION_JSON","APPLICATION_EXPO_JSON","MULTIPART_MIXED","ExpoGoManifestHandlerMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertRuntimePlatform","accept","accepts","acceptedType","types","responseContentType","expectSignature","headers","String","hostname","stripPort","protocol","getDefaultResponseHeaders","Map","set","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","runtimeVersion","Updates","getRuntimeVersionAsync","projectRoot","policy","CommandError","codeSigningInfo","getCodeSigningInfoAsync","options","privateKeyPath","easProjectId","extra","eas","projectId","scopeKey","getScopeKeyAsync","slug","expoUpdatesManifest","id","crypto","randomUUID","createdAt","Date","toISOString","launchAsset","key","contentType","url","assets","metadata","undefined","expoClient","expoGo","stringifiedManifest","JSON","stringify","manifestPartHeaders","certificateChainBody","signature","signManifestString","serializeDictionary","convertToDictionaryItemsRepresentation","keyid","keyId","sig","alg","certificateChainForResponse","join","form","getFormData","getBoundary","body","getBuffer","toString","version","getContentTypeForResponseContentType","Object","entries","forEach","value","FormData","append","header","length","trackManifest","logEventAsync","scopeKeyFromCodeSigningInfo","getAnonymousScopeKeyAsync","userAnonymousIdentifier","UserSettings","getAnonymousIdentifierAsync","ANONYMOUS_USERNAME","obj","map","k","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/ExpoGoManifestHandlerMiddleware.ts"],"sourcesContent":["import { ExpoUpdatesManifest } from '@expo/config';\nimport { Updates } from '@expo/config-plugins';\nimport accepts from 'accepts';\nimport crypto from 'crypto';\nimport FormData from 'form-data';\nimport { serializeDictionary, Dictionary } from 'structured-headers';\n\nimport { ManifestMiddleware, ManifestRequestInfo } from './ManifestMiddleware';\nimport { assertRuntimePlatform, parsePlatformHeader } from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME } from '../../../api/user/user';\nimport {\n CodeSigningInfo,\n getCodeSigningInfoAsync,\n signManifestString,\n} from '../../../utils/codesigning';\nimport { CommandError } from '../../../utils/errors';\nimport { logEventAsync } from '../../../utils/telemetry';\nimport { stripPort } from '../../../utils/url';\n\nconst debug = require('debug')('expo:start:server:middleware:ExpoGoManifestHandlerMiddleware');\n\nexport enum ResponseContentType {\n TEXT_PLAIN,\n APPLICATION_JSON,\n APPLICATION_EXPO_JSON,\n MULTIPART_MIXED,\n}\n\ninterface ExpoGoManifestRequestInfo extends ManifestRequestInfo {\n responseContentType: ResponseContentType;\n expectSignature: string | null;\n}\n\nexport class ExpoGoManifestHandlerMiddleware extends ManifestMiddleware<ExpoGoManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ExpoGoManifestRequestInfo {\n let platform = parsePlatformHeader(req);\n\n if (!platform) {\n debug(\n `No \"expo-platform\" header or \"platform\" query parameter specified. Falling back to \"ios\".`\n );\n platform = 'ios';\n }\n\n assertRuntimePlatform(platform);\n\n // Expo Updates clients explicitly accept \"multipart/mixed\" responses while browsers implicitly\n // accept them with \"accept: */*\". To make it easier to debug manifest responses by visiting their\n // URLs in a browser, we denote the response as \"text/plain\" if the user agent appears not to be\n // an Expo Updates client.\n const accept = accepts(req);\n const acceptedType = accept.types([\n 'unknown/unknown',\n 'multipart/mixed',\n 'application/json',\n 'application/expo+json',\n 'text/plain',\n ]);\n\n let responseContentType;\n switch (acceptedType) {\n case 'multipart/mixed':\n responseContentType = ResponseContentType.MULTIPART_MIXED;\n break;\n case 'application/json':\n responseContentType = ResponseContentType.APPLICATION_JSON;\n break;\n case 'application/expo+json':\n responseContentType = ResponseContentType.APPLICATION_EXPO_JSON;\n break;\n default:\n responseContentType = ResponseContentType.TEXT_PLAIN;\n break;\n }\n\n const expectSignature = req.headers['expo-expect-signature'];\n\n return {\n responseContentType,\n platform,\n expectSignature: expectSignature ? String(expectSignature) : null,\n hostname: stripPort(req.headers['host']),\n protocol: req.headers['x-forwarded-proto'] as 'http' | 'https' | undefined,\n };\n }\n\n private getDefaultResponseHeaders(): ServerHeaders {\n const headers = new Map<string, number | string | readonly string[]>();\n // set required headers for Expo Updates manifest specification\n headers.set('expo-protocol-version', 0);\n headers.set('expo-sfv-version', 0);\n headers.set('cache-control', 'private, max-age=0');\n return headers;\n }\n\n public async _getManifestResponseAsync(requestOptions: ExpoGoManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } =\n await this._resolveProjectSettingsAsync(requestOptions);\n\n const runtimeVersion = await Updates.getRuntimeVersionAsync(\n this.projectRoot,\n { ...exp, runtimeVersion: exp.runtimeVersion ?? { policy: 'sdkVersion' } },\n requestOptions.platform\n );\n if (!runtimeVersion) {\n throw new CommandError(\n 'MANIFEST_MIDDLEWARE',\n `Unable to determine runtime version for platform '${requestOptions.platform}'`\n );\n }\n\n const codeSigningInfo = await getCodeSigningInfoAsync(\n exp,\n requestOptions.expectSignature,\n this.options.privateKeyPath\n );\n\n const easProjectId = exp.extra?.eas?.projectId as string | undefined | null;\n const scopeKey = await ExpoGoManifestHandlerMiddleware.getScopeKeyAsync({\n slug: exp.slug,\n codeSigningInfo,\n });\n\n const expoUpdatesManifest: ExpoUpdatesManifest = {\n id: crypto.randomUUID(),\n createdAt: new Date().toISOString(),\n runtimeVersion,\n launchAsset: {\n key: 'bundle',\n contentType: 'application/javascript',\n url: bundleUrl,\n },\n assets: [], // assets are not used in development\n metadata: {}, // required for the client to detect that this is an expo-updates manifest\n extra: {\n eas: {\n projectId: easProjectId ?? undefined,\n },\n expoClient: {\n ...exp,\n hostUri,\n },\n expoGo: expoGoConfig,\n scopeKey,\n },\n };\n\n const stringifiedManifest = JSON.stringify(expoUpdatesManifest);\n\n let manifestPartHeaders: { 'expo-signature': string } | null = null;\n let certificateChainBody: string | null = null;\n if (codeSigningInfo) {\n const signature = signManifestString(stringifiedManifest, codeSigningInfo);\n manifestPartHeaders = {\n 'expo-signature': serializeDictionary(\n convertToDictionaryItemsRepresentation({\n keyid: codeSigningInfo.keyId,\n sig: signature,\n alg: 'rsa-v1_5-sha256',\n })\n ),\n };\n certificateChainBody = codeSigningInfo.certificateChainForResponse.join('\\n');\n }\n\n const headers = this.getDefaultResponseHeaders();\n\n switch (requestOptions.responseContentType) {\n case ResponseContentType.MULTIPART_MIXED: {\n const form = this.getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n });\n headers.set('content-type', `multipart/mixed; boundary=${form.getBoundary()}`);\n return {\n body: form.getBuffer().toString(),\n version: runtimeVersion,\n headers,\n };\n }\n case ResponseContentType.APPLICATION_EXPO_JSON:\n case ResponseContentType.APPLICATION_JSON:\n case ResponseContentType.TEXT_PLAIN: {\n headers.set(\n 'content-type',\n ExpoGoManifestHandlerMiddleware.getContentTypeForResponseContentType(\n requestOptions.responseContentType\n )\n );\n if (manifestPartHeaders) {\n Object.entries(manifestPartHeaders).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n return {\n body: stringifiedManifest,\n version: runtimeVersion,\n headers,\n };\n }\n }\n }\n\n private static getContentTypeForResponseContentType(\n responseContentType: ResponseContentType\n ): string {\n switch (responseContentType) {\n case ResponseContentType.MULTIPART_MIXED:\n return 'multipart/mixed';\n case ResponseContentType.APPLICATION_EXPO_JSON:\n return 'application/expo+json';\n case ResponseContentType.APPLICATION_JSON:\n return 'application/json';\n case ResponseContentType.TEXT_PLAIN:\n return 'text/plain';\n }\n }\n\n private getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n }: {\n stringifiedManifest: string;\n manifestPartHeaders: { 'expo-signature': string } | null;\n certificateChainBody: string | null;\n }): FormData {\n const form = new FormData();\n form.append('manifest', stringifiedManifest, {\n contentType: 'application/json',\n header: {\n ...manifestPartHeaders,\n },\n });\n if (certificateChainBody && certificateChainBody.length > 0) {\n form.append('certificate_chain', certificateChainBody, {\n contentType: 'application/x-pem-file',\n });\n }\n return form;\n }\n\n protected trackManifest(version?: string) {\n logEventAsync('Serve Expo Updates Manifest', {\n runtimeVersion: version,\n });\n }\n\n private static async getScopeKeyAsync({\n slug,\n codeSigningInfo,\n }: {\n slug: string;\n codeSigningInfo: CodeSigningInfo | null;\n }): Promise<string> {\n const scopeKeyFromCodeSigningInfo = codeSigningInfo?.scopeKey;\n if (scopeKeyFromCodeSigningInfo) {\n return scopeKeyFromCodeSigningInfo;\n }\n\n // Log.warn(\n // env.EXPO_OFFLINE\n // ? 'Using anonymous scope key in manifest for offline mode.'\n // : 'Using anonymous scope key in manifest.'\n // );\n return await getAnonymousScopeKeyAsync(slug);\n }\n}\n\nasync function getAnonymousScopeKeyAsync(slug: string): Promise<string> {\n const userAnonymousIdentifier = await UserSettings.getAnonymousIdentifierAsync();\n return `@${ANONYMOUS_USERNAME}/${slug}-${userAnonymousIdentifier}`;\n}\n\nfunction convertToDictionaryItemsRepresentation(obj: { [key: string]: string }): Dictionary {\n return new Map(\n Object.entries(obj).map(([k, v]) => {\n return [k, [v, new Map()]];\n })\n );\n}\n"],"names":["debug","require","ResponseContentType","TEXT_PLAIN","APPLICATION_JSON","APPLICATION_EXPO_JSON","MULTIPART_MIXED","ExpoGoManifestHandlerMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertRuntimePlatform","accept","accepts","acceptedType","types","responseContentType","expectSignature","headers","String","hostname","stripPort","protocol","getDefaultResponseHeaders","Map","set","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","runtimeVersion","Updates","getRuntimeVersionAsync","projectRoot","policy","CommandError","codeSigningInfo","getCodeSigningInfoAsync","options","privateKeyPath","easProjectId","extra","eas","projectId","scopeKey","getScopeKeyAsync","slug","expoUpdatesManifest","id","crypto","randomUUID","createdAt","Date","toISOString","launchAsset","key","contentType","url","assets","metadata","undefined","expoClient","expoGo","stringifiedManifest","JSON","stringify","manifestPartHeaders","certificateChainBody","signature","signManifestString","serializeDictionary","convertToDictionaryItemsRepresentation","keyid","keyId","sig","alg","certificateChainForResponse","join","form","getFormData","getBoundary","body","getBuffer","toString","version","getContentTypeForResponseContentType","Object","entries","forEach","value","FormData","append","header","length","trackManifest","logEventAsync","scopeKeyFromCodeSigningInfo","getAnonymousScopeKeyAsync","userAnonymousIdentifier","UserSettings","getAnonymousIdentifierAsync","ANONYMOUS_USERNAME","obj","map","k","v"],"mappings":"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"}
|
|
@@ -3,7 +3,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
exports.disableResponseCache = disableResponseCache;
|
|
6
|
-
|
|
6
|
+
function _url() {
|
|
7
|
+
const data = require("url");
|
|
8
|
+
_url = function() {
|
|
9
|
+
return data;
|
|
10
|
+
};
|
|
11
|
+
return data;
|
|
12
|
+
}
|
|
7
13
|
var Log = _interopRequireWildcard(require("../../../log"));
|
|
8
14
|
function _interopRequireWildcard(obj) {
|
|
9
15
|
if (obj && obj.__esModule) {
|
|
@@ -38,7 +44,7 @@ class ExpoMiddleware {
|
|
|
38
44
|
if (!req.url) {
|
|
39
45
|
return false;
|
|
40
46
|
}
|
|
41
|
-
const parsed = (
|
|
47
|
+
const parsed = _url().parse(req.url);
|
|
42
48
|
// Strip the query params
|
|
43
49
|
if (!parsed.pathname) {
|
|
44
50
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/ExpoMiddleware.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport { ServerNext, ServerRequest, ServerResponse } from './server.types';\nimport * as Log from '../../../log';\n\n/** Base middleware creator for Expo dev servers. */\nexport abstract class ExpoMiddleware {\n constructor(\n protected projectRoot: string,\n protected supportedPaths: string[]\n ) {}\n\n /**\n * Returns true when the middleware should handle the incoming server request.\n * Exposed for testing.\n */\n public shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url) {\n return false;\n }\n const parsed = parse(req.url);\n // Strip the query params\n if (!parsed.pathname) {\n return false;\n }\n\n return this.supportedPaths.includes(parsed.pathname);\n }\n\n abstract handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void>;\n\n /** Create a server middleware handler. */\n public getHandler() {\n const internalMiddleware = async (\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ) => {\n try {\n return await this.handleRequestAsync(req, res, next);\n } catch (error: any) {\n Log.exception(error);\n // 5xx = Server Error HTTP code\n res.statusCode = 500;\n if (typeof error === 'object' && error !== null) {\n res.end(\n JSON.stringify({\n error: error.toString(),\n })\n );\n } else {\n res.end(`Unexpected error: ${error}`);\n }\n }\n };\n const middleware = async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!this.shouldHandleRequest(req)) {\n return next();\n }\n return internalMiddleware(req, res, next);\n };\n\n middleware.internal = internalMiddleware;\n\n return middleware;\n }\n}\n\nexport function disableResponseCache(res: ServerResponse): ServerResponse {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, must-revalidate');\n res.setHeader('Expires', '-1');\n res.setHeader('Pragma', 'no-cache');\n return res;\n}\n"],"names":["disableResponseCache","Log","ExpoMiddleware","constructor","projectRoot","supportedPaths","shouldHandleRequest","req","url","parsed","parse","pathname","includes","getHandler","internalMiddleware","res","next","handleRequestAsync","error","exception","statusCode","end","JSON","stringify","toString","middleware","internal","setHeader"],"mappings":"AAAA;;;;QAwEgBA,oBAAoB,GAApBA,oBAAoB;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/ExpoMiddleware.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport { ServerNext, ServerRequest, ServerResponse } from './server.types';\nimport * as Log from '../../../log';\n\n/** Base middleware creator for Expo dev servers. */\nexport abstract class ExpoMiddleware {\n constructor(\n protected projectRoot: string,\n protected supportedPaths: string[]\n ) {}\n\n /**\n * Returns true when the middleware should handle the incoming server request.\n * Exposed for testing.\n */\n public shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url) {\n return false;\n }\n const parsed = parse(req.url);\n // Strip the query params\n if (!parsed.pathname) {\n return false;\n }\n\n return this.supportedPaths.includes(parsed.pathname);\n }\n\n abstract handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void>;\n\n /** Create a server middleware handler. */\n public getHandler() {\n const internalMiddleware = async (\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ) => {\n try {\n return await this.handleRequestAsync(req, res, next);\n } catch (error: any) {\n Log.exception(error);\n // 5xx = Server Error HTTP code\n res.statusCode = 500;\n if (typeof error === 'object' && error !== null) {\n res.end(\n JSON.stringify({\n error: error.toString(),\n })\n );\n } else {\n res.end(`Unexpected error: ${error}`);\n }\n }\n };\n const middleware = async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!this.shouldHandleRequest(req)) {\n return next();\n }\n return internalMiddleware(req, res, next);\n };\n\n middleware.internal = internalMiddleware;\n\n return middleware;\n }\n}\n\nexport function disableResponseCache(res: ServerResponse): ServerResponse {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, must-revalidate');\n res.setHeader('Expires', '-1');\n res.setHeader('Pragma', 'no-cache');\n return res;\n}\n"],"names":["disableResponseCache","Log","ExpoMiddleware","constructor","projectRoot","supportedPaths","shouldHandleRequest","req","url","parsed","parse","pathname","includes","getHandler","internalMiddleware","res","next","handleRequestAsync","error","exception","statusCode","end","JSON","stringify","toString","middleware","internal","setHeader"],"mappings":"AAAA;;;;QAwEgBA,oBAAoB,GAApBA,oBAAoB;SAxEd,IAAK;yBAAL,KAAK;IAAL,IAAK;;;;;AAGfC,IAAAA,GAAG,mCAAM,cAAc,EAApB;;;;;;;;;;;;;;;;;;;;;;AAGR,MAAeC,cAAc;IAClCC,YACYC,WAAmB,EACnBC,cAAwB,CAClC;aAFUD,WAAmB,GAAnBA,WAAmB;aACnBC,cAAwB,GAAxBA,cAAwB;KAChC;IAEJ;;;KAGG,CACH,AAAOC,mBAAmB,CAACC,GAAkB,EAAW;QACtD,IAAI,CAACA,GAAG,CAACC,GAAG,EAAE;YACZ,OAAO,KAAK,CAAC;SACd;QACD,MAAMC,MAAM,GAAGC,IAAK,QAAA,CAACH,GAAG,CAACC,GAAG,CAAC,AAAC;QAC9B,yBAAyB;QACzB,IAAI,CAACC,MAAM,CAACE,QAAQ,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAACN,cAAc,CAACO,QAAQ,CAACH,MAAM,CAACE,QAAQ,CAAC,CAAC;KACtD;IAQD,0CAA0C,CAC1C,AAAOE,UAAU,GAAG;QAClB,MAAMC,kBAAkB,GAAG,OACzBP,GAAkB,EAClBQ,GAAmB,EACnBC,IAAgB,GACb;YACH,IAAI;gBACF,OAAO,MAAM,IAAI,CAACC,kBAAkB,CAACV,GAAG,EAAEQ,GAAG,EAAEC,IAAI,CAAC,CAAC;aACtD,CAAC,OAAOE,KAAK,EAAO;gBACnBjB,GAAG,CAACkB,SAAS,CAACD,KAAK,CAAC,CAAC;gBACrB,+BAA+B;gBAC/BH,GAAG,CAACK,UAAU,GAAG,GAAG,CAAC;gBACrB,IAAI,OAAOF,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;oBAC/CH,GAAG,CAACM,GAAG,CACLC,IAAI,CAACC,SAAS,CAAC;wBACbL,KAAK,EAAEA,KAAK,CAACM,QAAQ,EAAE;qBACxB,CAAC,CACH,CAAC;iBACH,MAAM;oBACLT,GAAG,CAACM,GAAG,CAAC,CAAC,kBAAkB,EAAEH,KAAK,CAAC,CAAC,CAAC,CAAC;iBACvC;aACF;SACF,AAAC;QACF,MAAMO,UAAU,GAAG,OAAOlB,GAAkB,EAAEQ,GAAmB,EAAEC,IAAgB,GAAK;YACtF,IAAI,CAAC,IAAI,CAACV,mBAAmB,CAACC,GAAG,CAAC,EAAE;gBAClC,OAAOS,IAAI,EAAE,CAAC;aACf;YACD,OAAOF,kBAAkB,CAACP,GAAG,EAAEQ,GAAG,EAAEC,IAAI,CAAC,CAAC;SAC3C,AAAC;QAEFS,UAAU,CAACC,QAAQ,GAAGZ,kBAAkB,CAAC;QAEzC,OAAOW,UAAU,CAAC;KACnB;CACF;QAhEqBvB,cAAc,GAAdA,cAAc;AAkE7B,SAASF,oBAAoB,CAACe,GAAmB,EAAkB;IACxEA,GAAG,CAACY,SAAS,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAAC;IAC/EZ,GAAG,CAACY,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/BZ,GAAG,CAACY,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpC,OAAOZ,GAAG,CAAC;CACZ"}
|
|
@@ -3,11 +3,41 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
exports.LoadingEndpoint = void 0;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
function _config() {
|
|
7
|
+
const data = require("@expo/config");
|
|
8
|
+
_config = function() {
|
|
9
|
+
return data;
|
|
10
|
+
};
|
|
11
|
+
return data;
|
|
12
|
+
}
|
|
13
|
+
function _updates() {
|
|
14
|
+
const data = require("@expo/config-plugins/build/utils/Updates");
|
|
15
|
+
_updates = function() {
|
|
16
|
+
return data;
|
|
17
|
+
};
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
function _promises() {
|
|
21
|
+
const data = require("fs/promises");
|
|
22
|
+
_promises = function() {
|
|
23
|
+
return data;
|
|
24
|
+
};
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
function _path() {
|
|
28
|
+
const data = _interopRequireDefault(require("path"));
|
|
29
|
+
_path = function() {
|
|
30
|
+
return data;
|
|
31
|
+
};
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
function _resolveFrom() {
|
|
35
|
+
const data = _interopRequireDefault(require("resolve-from"));
|
|
36
|
+
_resolveFrom = function() {
|
|
37
|
+
return data;
|
|
38
|
+
};
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
11
41
|
var _expoMiddleware = require("./ExpoMiddleware");
|
|
12
42
|
var _resolvePlatform = require("./resolvePlatform");
|
|
13
43
|
function _interopRequireDefault(obj) {
|
|
@@ -30,9 +60,9 @@ class InterstitialPageMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
30
60
|
/** Get the template HTML page and inject values. */ async _getPageAsync({ appName , projectVersion }) {
|
|
31
61
|
var // Production: This will resolve when installed in the project.
|
|
32
62
|
ref;
|
|
33
|
-
const templatePath = (ref = _resolveFrom.default.silent(this.projectRoot, "expo/static/loading-page/index.html")) != null ? ref : // Development: This will resolve when testing locally.
|
|
34
|
-
_path.default.resolve(__dirname, "../../../../../static/loading-page/index.html");
|
|
35
|
-
let content = (await (
|
|
63
|
+
const templatePath = (ref = _resolveFrom().default.silent(this.projectRoot, "expo/static/loading-page/index.html")) != null ? ref : // Development: This will resolve when testing locally.
|
|
64
|
+
_path().default.resolve(__dirname, "../../../../../static/loading-page/index.html");
|
|
65
|
+
let content = (await _promises().readFile(templatePath)).toString("utf-8");
|
|
36
66
|
content = content.replace(/{{\s*AppName\s*}}/, appName);
|
|
37
67
|
content = content.replace(/{{\s*Path\s*}}/, this.projectRoot);
|
|
38
68
|
var _scheme;
|
|
@@ -44,9 +74,9 @@ class InterstitialPageMiddleware extends _expoMiddleware.ExpoMiddleware {
|
|
|
44
74
|
}
|
|
45
75
|
/** Get settings for the page from the project config. */ async _getProjectOptionsAsync(platform) {
|
|
46
76
|
(0, _resolvePlatform).assertRuntimePlatform(platform);
|
|
47
|
-
const { exp } = (
|
|
48
|
-
const { appName } = (
|
|
49
|
-
const runtimeVersion = await (
|
|
77
|
+
const { exp } = _config().getConfig(this.projectRoot);
|
|
78
|
+
const { appName } = _config().getNameFromConfig(exp);
|
|
79
|
+
const runtimeVersion = await _updates().getRuntimeVersionNullableAsync(this.projectRoot, exp, platform);
|
|
50
80
|
var _sdkVersion;
|
|
51
81
|
const sdkVersion = (_sdkVersion = exp.sdkVersion) != null ? _sdkVersion : null;
|
|
52
82
|
return {
|