@depup/expo__cli 55.0.23-depup.0 → 57.0.10-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +13 -15
- package/build/bin/cli +4 -4
- package/build/bin/cli.map +1 -1
- package/build/src/api/endpoint.js +4 -4
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/getExpoSchema.js +3 -3
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/graphql/client.js +26 -14
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
- package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
- package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/ResponseCache.js +5 -5
- package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
- package/build/src/api/rest/client.js +35 -20
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +6 -5
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +28 -15
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +10 -3
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +76 -24
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +4 -4
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +19 -7
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +3 -3
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +7 -4
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/templates.js +4 -6
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/events/index.js +19 -15
- package/build/src/events/index.js.map +1 -1
- package/build/src/events/stream.js +94 -24
- package/build/src/events/stream.js.map +1 -1
- package/build/src/expoUpdatesExports.js +4 -4
- package/build/src/expoUpdatesExports.js.map +1 -1
- package/build/src/export/createMetadataJson.js +2 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +45 -20
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/exportServer.js +1 -1
- package/build/src/export/embed/exportServer.js.map +1 -1
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +7 -6
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +32 -28
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +5 -5
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportDomComponents.js +5 -5
- package/build/src/export/exportDomComponents.js.map +1 -1
- package/build/src/export/exportHermes.js +23 -13
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +30 -21
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +26 -34
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/html.js +3 -3
- package/build/src/export/html.js.map +1 -1
- package/build/src/export/index.js +2 -0
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +4 -4
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +6 -6
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +16 -4
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +12 -13
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +3 -3
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/static.js +6 -0
- package/build/src/export/static.js.map +1 -0
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +1 -28
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +3 -3
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
- package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
- package/build/src/lint/ESlintPrerequisite.js.map +1 -1
- package/build/src/log.js +32 -14
- package/build/src/log.js.map +1 -1
- package/build/src/login/index.js +25 -5
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +49 -14
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +3 -3
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +3 -2
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +31 -6
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +8 -5
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +7 -7
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +10 -5
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +3 -3
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +7 -7
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/register/index.js.map +1 -1
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +48 -1
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +4 -1
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +4 -4
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +163 -23
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +8 -8
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/settings.js +3 -3
- package/build/src/run/ios/codeSigning/settings.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +8 -1
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +3 -3
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/appleDestinations.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +3 -3
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +8 -3
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +9 -4
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +39 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/ios/validateExternalBinary.js.map +1 -1
- package/build/src/run/startBundler.js +4 -0
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/serve/index.js +4 -1
- package/build/src/serve/index.js.map +1 -1
- package/build/src/serve/serveAsync.js +23 -11
- package/build/src/serve/serveAsync.js.map +1 -1
- package/build/src/serve/static.js +69 -0
- package/build/src/serve/static.js.map +1 -0
- package/build/src/start/checkDependenciesOnStart.js +131 -0
- package/build/src/start/checkDependenciesOnStart.js.map +1 -0
- package/build/src/start/detectDevClient.js +3 -3
- package/build/src/start/detectDevClient.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +4 -4
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
- package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
- package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +3 -3
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +2 -0
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +6 -6
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +49 -6
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +13 -4
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +4 -0
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +36 -34
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +4 -4
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +5 -5
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +5 -5
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/devicectl.js +7 -7
- package/build/src/start/platforms/ios/devicectl.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +25 -19
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +3 -3
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +3 -3
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +6 -6
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/project/dotExpo.js +4 -3
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/resolveOptions.js +7 -7
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +1 -1
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/AsyncWsTunnel.js +120 -35
- package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
- package/build/src/start/server/Bonjour.js +8 -3
- package/build/src/start/server/Bonjour.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +23 -9
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPlugin.js +63 -3
- package/build/src/start/server/DevToolsPlugin.js.map +1 -1
- package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
- package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +20 -6
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
- package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
- package/build/src/start/server/DevelopmentSession.js +41 -24
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/MCP.js +10 -3
- package/build/src/start/server/MCP.js.map +1 -1
- package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
- package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +14 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
- package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +13 -24
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +241 -109
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +22 -4
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
- package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
- package/build/src/start/server/metro/createFileMap-fork.js +196 -0
- package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
- package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
- package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
- package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
- package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
- package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
- package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
- package/build/src/start/server/metro/externals.js +4 -4
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +141 -57
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +16 -13
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroErrors.js +3 -3
- package/build/src/start/server/metro/metroErrors.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/resolveLoader.js +3 -3
- package/build/src/start/server/metro/resolveLoader.js.map +1 -1
- package/build/src/start/server/metro/router.js +23 -14
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +13 -10
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +29 -13
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
- package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +4 -4
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DomComponentsMiddleware.js +16 -12
- package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +15 -6
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
- package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/domPolyfills.js +60 -0
- package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
- package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +15 -14
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/mutations.js +3 -3
- package/build/src/start/server/middleware/mutations.js.map +1 -1
- package/build/src/start/server/middleware/openHandlers.js +157 -0
- package/build/src/start/server/middleware/openHandlers.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js +4 -4
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +9 -7
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +3 -1
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +13 -36
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +3 -3
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +14 -55
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +5 -5
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +12 -10
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +4 -4
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +3 -3
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +21 -11
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/types.d.ts +2 -0
- package/build/src/utils/FileNotifier.js +1 -1
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/args.js +5 -5
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/array.js +8 -8
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/build-cache-providers/helpers.js +4 -4
- package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
- package/build/src/utils/build-cache-providers/index.js +5 -5
- package/build/src/utils/build-cache-providers/index.js.map +1 -1
- package/build/src/utils/cocoapods.js +5 -5
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +12 -6
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
- package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
- package/build/src/utils/createTempPath.js +3 -3
- package/build/src/utils/createTempPath.js.map +1 -1
- package/build/src/utils/delay.js +4 -4
- package/build/src/utils/delay.js.map +1 -1
- package/build/src/utils/dir.js +21 -11
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +4 -4
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +4 -4
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +39 -13
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +6 -6
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/exit.js +15 -19
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/expoUpdatesCli.js +5 -5
- package/build/src/utils/expoUpdatesCli.js.map +1 -1
- package/build/src/utils/fetch.js +4 -4
- package/build/src/utils/fetch.js.map +1 -1
- package/build/src/utils/findUp.js +3 -3
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/fn.js +3 -3
- package/build/src/utils/fn.js.map +1 -1
- package/build/src/utils/freeport.js +3 -3
- package/build/src/utils/freeport.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +3 -5
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +5 -5
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +3 -3
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +3 -3
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/ip.js +4 -4
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/link.js +3 -3
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +10 -10
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +3 -3
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/net.js +23 -4
- package/build/src/utils/net.js.map +1 -1
- package/build/src/utils/nodeEnv.js +6 -6
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/npm.js +10 -9
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js +4 -4
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/open.js +240 -11
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +4 -4
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +5 -4
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +12 -5
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/progress.js +4 -4
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +11 -11
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/qr.js +5 -4
- package/build/src/utils/qr.js.map +1 -1
- package/build/src/utils/resolveArgs.js +10 -9
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/scheme.js +4 -4
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/strings.js.map +1 -1
- package/build/src/utils/tar.js +8 -7
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/Telemetry.js +5 -0
- package/build/src/utils/telemetry/Telemetry.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
- package/build/src/utils/telemetry/index.js +4 -4
- package/build/src/utils/telemetry/index.js.map +1 -1
- package/build/src/utils/telemetry/utils/agent.js +42 -0
- package/build/src/utils/telemetry/utils/agent.js.map +1 -0
- package/build/src/utils/telemetry/utils/constants.js +3 -3
- package/build/src/utils/telemetry/utils/constants.js.map +1 -1
- package/build/src/utils/telemetry/utils/context.js +3 -2
- package/build/src/utils/telemetry/utils/context.js.map +1 -1
- package/build/src/utils/url.js +5 -17
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +12 -12
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +4 -4
- package/build/src/utils/variadic.js.map +1 -1
- package/build/src/whoami/index.js.map +1 -1
- package/changes.json +18 -26
- package/main.js +3 -0
- package/package.json +88 -80
- package/static/loading-page/index.html +45 -3
- package/static/template/+html.tsx +14 -5
- package/add-module.js +0 -8
- package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
- package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
- package/build/src/utils/resolveWatchFolders.js +0 -67
- package/build/src/utils/resolveWatchFolders.js.map +0 -1
- package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/createServerRouteMiddleware.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 */\n\nimport type { ProjectConfig } from '@expo/config';\nimport type { MiddlewareSettings } from 'expo-server';\nimport { createRequestHandler } from 'expo-server/adapter/http';\nimport { ImmutableRequest, type RouteInfo } from 'expo-server/private';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { fetchManifest } from './fetchRouterManifest';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport {\n warnInvalidWebOutput,\n warnInvalidMiddlewareOutput,\n warnInvalidMiddlewareMatcherSettings,\n} from './router';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\nexport function createRouteHandlerMiddleware(\n projectRoot: string,\n options: {\n appDir: string;\n routerRoot: string;\n getStaticPageAsync: (\n pathname: string,\n route: RouteInfo<RegExp>,\n request?: ImmutableRequest\n ) => Promise<{ content: string }>;\n bundleApiRoute: (\n functionFilePath: string\n ) => Promise<null | Record<string, Function> | Response>;\n executeLoaderAsync: (\n route: RouteInfo<RegExp>,\n request: ImmutableRequest\n ) => Promise<Response | undefined>;\n config: ProjectConfig;\n headers: Record<string, string | string[]>;\n rsc?: {\n path: string;\n handler: {\n GET: (req: Request) => Promise<Response>;\n POST: (req: Request) => Promise<Response>;\n };\n };\n } & import('@expo/router-server/build/routes-manifest').Options\n) {\n if (!resolveFrom.silent(projectRoot, 'expo-router')) {\n throw new CommandError(\n `static and server rendering requires the expo-router package to be installed in your project. Either install the expo-router package or change 'web.output' to 'single' in your app.json.`\n );\n }\n\n return createRequestHandler(\n { build: '', isDevelopment: true },\n {\n async getRoutesManifest() {\n const manifest = await fetchManifest(projectRoot, options);\n debug('manifest', manifest);\n\n // TODO(@hassankhan): Invert the conditionals for an early return if no manifest if found\n\n if (\n manifest &&\n options.rsc &&\n !manifest.apiRoutes.find((route) => route.page.startsWith(options.rsc!.path))\n ) {\n // Insert the route before any catch-all routes that might match the RSC path.\n manifest.apiRoutes.unshift({\n file: require.resolve('@expo/cli/static/template/[...rsc]+api.ts'),\n page: `${options.rsc.path}/[...rsc]`,\n namedRegex: new RegExp(`^${options.rsc.path}(?:/(?<rsc>.+?))?(?:/)?$`),\n routeKeys: { rsc: 'rsc' },\n });\n }\n\n const { exp } = options.config;\n\n if (manifest && exp.extra?.router?.unstable_useServerDataLoaders === true) {\n // In development, set `loader` property on all HTML routes. We can't know which routes\n // have loaders without bundling via Metro to detect exports. In production, this is\n // populated by `exportStaticAsync.ts` after bundling.\n // At runtime, `getLoaderData()` returns a 404 response if no loader exists.\n for (const route of manifest.htmlRoutes) {\n route.loader = `_expo/loaders${route.page}.js`;\n }\n }\n\n // NOTE: no app dir if null\n // TODO: Redirect to 404 page\n return (\n manifest ?? {\n // Support the onboarding screen if there's no manifest\n htmlRoutes: [\n {\n file: 'index.js',\n page: '/index',\n routeKeys: {},\n namedRegex: /^\\/(?:index)?\\/?$/i,\n },\n ],\n apiRoutes: [],\n notFoundRoutes: [],\n redirects: [],\n rewrites: [],\n }\n );\n },\n async getHtml(request, route) {\n try {\n const { exp } = options.config;\n const isSSREnabled =\n exp.web?.output === 'server' && exp.extra?.router?.unstable_useServerRendering === true;\n\n const { content } = await options.getStaticPageAsync(\n request.url,\n route,\n isSSREnabled ? new ImmutableRequest(request) : undefined\n );\n return content;\n } catch (error: any) {\n // Forward the Metro server response as-is. It won't be pretty, but at least it will be accurate.\n\n try {\n return new Response(\n await getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot: options.routerRoot,\n }),\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n } catch (staticError: any) {\n debug('Failed to render static error overlay:', staticError);\n // Fallback error for when Expo Router is misconfigured in the project.\n return new Response(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>',\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n }\n },\n async handleRouteError(error) {\n // NOTE(@kitten): ExpoError is currently not exposed by expo-server just yet\n if (error && typeof error === 'object' && error.name === 'ExpoError') {\n // TODO(@krystofwoldrich): Can we show code snippet of the handler?\n // NOTE(@krystofwoldrich): Removing stack since to avoid confusion. The error is not in the server code.\n delete error.stack;\n }\n\n const htmlServerError = await getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot: options.routerRoot!,\n });\n\n return new Response(htmlServerError, {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n });\n },\n async getApiRoute(route) {\n // We check if RSC is enabled before the warning check, as `web.output` could be set to\n // `single`\n if (options.rsc && route.page.startsWith(options.rsc.path)) {\n return options.rsc.handler;\n }\n\n const { exp } = options.config;\n if (exp.web?.output !== 'server') {\n warnInvalidWebOutput();\n }\n\n // TODO(@kitten): Unify with MetroBundlerDevServer#exportExpoRouterApiRoutesAsync\n const resolvedFunctionPath = path.isAbsolute(route.file)\n ? route.file\n : path.join(options.appDir, route.file);\n try {\n debug(`Bundling API route at: ${resolvedFunctionPath}`);\n return await options.bundleApiRoute(resolvedFunctionPath!);\n } catch (error: any) {\n return new Response(\n 'Failed to load API Route: ' + resolvedFunctionPath + '\\n\\n' + error.message,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n },\n async getMiddleware(route) {\n const { exp } = options.config;\n\n if (!options.unstable_useServerMiddleware) {\n return {\n default: () => {\n throw new CommandError(\n 'Server middleware is not enabled. Add unstable_useServerMiddleware: true to your `expo-router` plugin config.'\n );\n },\n };\n }\n\n if (exp.web?.output !== 'server') {\n warnInvalidMiddlewareOutput();\n return {\n default: () => {\n console.warn(\n 'Server middleware is only supported when web.output is set to \"server\" in your app config'\n );\n },\n };\n }\n\n // TODO(@kitten): Unify with MetroBundlerDevServer#exportMiddlewareAsync\n const resolvedFunctionPath = path.isAbsolute(route.file)\n ? route.file\n : path.join(options.appDir, route.file);\n try {\n debug(`Bundling middleware at: ${resolvedFunctionPath}`);\n const middlewareModule = (await options.bundleApiRoute(resolvedFunctionPath!)) as any;\n\n if ((middlewareModule.unstable_settings as MiddlewareSettings)?.matcher) {\n warnInvalidMiddlewareMatcherSettings(middlewareModule.unstable_settings?.matcher);\n }\n\n return middlewareModule;\n } catch (error: any) {\n return new Response(\n 'Failed to load middleware: ' + resolvedFunctionPath + '\\n\\n' + error.message,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n },\n async getLoaderData(request, route) {\n const response = await options.executeLoaderAsync(route, new ImmutableRequest(request));\n return response ?? new Response(null, { status: 404 });\n },\n }\n );\n}\n"],"names":["createRouteHandlerMiddleware","debug","require","projectRoot","options","resolveFrom","silent","CommandError","createRequestHandler","build","isDevelopment","getRoutesManifest","exp","manifest","fetchManifest","rsc","apiRoutes","find","route","page","startsWith","path","unshift","file","resolve","namedRegex","RegExp","routeKeys","config","extra","router","unstable_useServerDataLoaders","htmlRoutes","loader","notFoundRoutes","redirects","rewrites","getHtml","request","isSSREnabled","web","output","unstable_useServerRendering","content","getStaticPageAsync","url","ImmutableRequest","undefined","error","Response","getErrorOverlayHtmlAsync","routerRoot","status","headers","staticError","message","handleRouteError","name","stack","htmlServerError","getApiRoute","handler","warnInvalidWebOutput","resolvedFunctionPath","isAbsolute","join","appDir","bundleApiRoute","getMiddleware","unstable_useServerMiddleware","default","warnInvalidMiddlewareOutput","console","warn","middlewareModule","unstable_settings","matcher","warnInvalidMiddlewareMatcherSettings","getLoaderData","response","executeLoaderAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/createServerRouteMiddleware.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 */\n\nimport type { ProjectConfig } from '@expo/config';\nimport type { MiddlewareSettings } from 'expo-server';\nimport { createRequestHandler } from 'expo-server/adapter/http';\nimport { ImmutableRequest, type RouteInfo } from 'expo-server/private';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { fetchManifest } from './fetchRouterManifest';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport {\n warnInvalidWebOutput,\n warnInvalidMiddlewareOutput,\n warnInvalidMiddlewareMatcherSettings,\n} from './router';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\nexport function createRouteHandlerMiddleware(\n projectRoot: string,\n options: {\n appDir: string;\n routerRoot: string;\n getStaticPageAsync: (\n pathname: string,\n route: RouteInfo<RegExp>,\n request?: ImmutableRequest\n ) => Promise<{ content: string | ReadableStream<Uint8Array>; resources?: unknown }>;\n bundleApiRoute: (\n functionFilePath: string\n ) => Promise<null | Record<string, Function> | Response>;\n executeLoaderAsync: (\n route: RouteInfo<RegExp>,\n request: ImmutableRequest\n ) => Promise<Response | undefined>;\n config: ProjectConfig;\n headers: Record<string, string | string[]>;\n rsc?: {\n path: string;\n handler: {\n GET: (req: Request) => Promise<Response>;\n POST: (req: Request) => Promise<Response>;\n };\n };\n } & import('@expo/router-server/build/routes-manifest').Options\n) {\n if (!resolveFrom.silent(projectRoot, 'expo-router')) {\n throw new CommandError(\n `static and server rendering requires the expo-router package to be installed in your project. Either install the expo-router package or change 'web.output' to 'single' in your app.json.`\n );\n }\n\n return createRequestHandler(\n { build: '', isDevelopment: true },\n {\n async getRoutesManifest() {\n const manifest = await fetchManifest(projectRoot, options);\n debug('manifest', manifest);\n\n // TODO(@hassankhan): Invert the conditionals for an early return if no manifest if found\n\n if (\n manifest &&\n options.rsc &&\n !manifest.apiRoutes.find((route) => route.page.startsWith(options.rsc!.path))\n ) {\n // Insert the route before any catch-all routes that might match the RSC path.\n manifest.apiRoutes.unshift({\n file: require.resolve('@expo/cli/static/template/[...rsc]+api.ts'),\n page: `${options.rsc.path}/[...rsc]`,\n namedRegex: new RegExp(`^${options.rsc.path}(?:/(?<rsc>.+?))?(?:/)?$`),\n routeKeys: { rsc: 'rsc' },\n });\n }\n\n const { exp } = options.config;\n\n if (manifest && exp.extra?.router?.unstable_useServerDataLoaders === true) {\n // In development, set `loader` property on all HTML routes. We can't know which routes\n // have loaders without bundling via Metro to detect exports. In production, this is\n // populated by `exportStaticAsync.ts` after bundling.\n // At runtime, `getLoaderData()` returns a 404 response if no loader exists.\n for (const route of manifest.htmlRoutes) {\n route.loader = `_expo/loaders${route.page}.js`;\n }\n }\n\n // NOTE: no app dir if null\n // TODO: Redirect to 404 page\n return (\n manifest ?? {\n // Support the onboarding screen if there's no manifest\n htmlRoutes: [\n {\n file: 'index.js',\n page: '/index',\n routeKeys: {},\n namedRegex: /^\\/(?:index)?\\/?$/i,\n },\n ],\n apiRoutes: [],\n notFoundRoutes: [],\n redirects: [],\n rewrites: [],\n }\n );\n },\n async getHtml(request, route) {\n try {\n const { exp } = options.config;\n const isSSREnabled =\n exp.web?.output === 'server' && exp.extra?.router?.unstable_useServerRendering === true;\n\n const { content } = await options.getStaticPageAsync(\n request.url,\n route,\n isSSREnabled ? new ImmutableRequest(request) : undefined\n );\n return content;\n } catch (error: any) {\n // Forward the Metro server response as-is. It won't be pretty, but at least it will be accurate.\n\n try {\n return new Response(\n await getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot: options.routerRoot,\n }),\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n } catch (staticError: any) {\n debug('Failed to render static error overlay:', staticError);\n // Fallback error for when Expo Router is misconfigured in the project.\n return new Response(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>',\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n }\n },\n async handleRouteError(error) {\n // NOTE(@kitten): ExpoError is currently not exposed by expo-server just yet\n if (error && typeof error === 'object' && error.name === 'ExpoError') {\n // TODO(@krystofwoldrich): Can we show code snippet of the handler?\n // NOTE(@krystofwoldrich): Removing stack since to avoid confusion. The error is not in the server code.\n delete error.stack;\n }\n\n const htmlServerError = await getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot: options.routerRoot!,\n });\n\n return new Response(htmlServerError, {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n });\n },\n async getApiRoute(route) {\n // We check if RSC is enabled before the warning check, as `web.output` could be set to\n // `single`\n if (options.rsc && route.page.startsWith(options.rsc.path)) {\n return options.rsc.handler;\n }\n\n const { exp } = options.config;\n if (exp.web?.output !== 'server') {\n warnInvalidWebOutput();\n }\n\n // TODO(@kitten): Unify with MetroBundlerDevServer#exportExpoRouterApiRoutesAsync\n const resolvedFunctionPath = path.isAbsolute(route.file)\n ? route.file\n : path.join(options.appDir, route.file);\n try {\n debug(`Bundling API route at: ${resolvedFunctionPath}`);\n return await options.bundleApiRoute(resolvedFunctionPath!);\n } catch (error: any) {\n return new Response(\n 'Failed to load API Route: ' + resolvedFunctionPath + '\\n\\n' + error.message,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n },\n async getMiddleware(route) {\n const { exp } = options.config;\n\n if (!options.unstable_useServerMiddleware) {\n return {\n default: () => {\n throw new CommandError(\n 'Server middleware is not enabled. Add unstable_useServerMiddleware: true to your `expo-router` plugin config.'\n );\n },\n };\n }\n\n if (exp.web?.output !== 'server') {\n warnInvalidMiddlewareOutput();\n return {\n default: () => {\n console.warn(\n 'Server middleware is only supported when web.output is set to \"server\" in your app config'\n );\n },\n };\n }\n\n // TODO(@kitten): Unify with MetroBundlerDevServer#exportMiddlewareAsync\n const resolvedFunctionPath = path.isAbsolute(route.file)\n ? route.file\n : path.join(options.appDir, route.file);\n try {\n debug(`Bundling middleware at: ${resolvedFunctionPath}`);\n const middlewareModule = (await options.bundleApiRoute(resolvedFunctionPath!)) as any;\n\n if ((middlewareModule.unstable_settings as MiddlewareSettings)?.matcher) {\n warnInvalidMiddlewareMatcherSettings(middlewareModule.unstable_settings?.matcher);\n }\n\n return middlewareModule;\n } catch (error: any) {\n return new Response(\n 'Failed to load middleware: ' + resolvedFunctionPath + '\\n\\n' + error.message,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n }\n );\n }\n },\n async getLoaderData(request, route) {\n const response = await options.executeLoaderAsync(route, new ImmutableRequest(request));\n return response ?? new Response(null, { status: 404 });\n },\n }\n );\n}\n"],"names":["createRouteHandlerMiddleware","debug","require","projectRoot","options","resolveFrom","silent","CommandError","createRequestHandler","build","isDevelopment","getRoutesManifest","exp","manifest","fetchManifest","rsc","apiRoutes","find","route","page","startsWith","path","unshift","file","resolve","namedRegex","RegExp","routeKeys","config","extra","router","unstable_useServerDataLoaders","htmlRoutes","loader","notFoundRoutes","redirects","rewrites","getHtml","request","isSSREnabled","web","output","unstable_useServerRendering","content","getStaticPageAsync","url","ImmutableRequest","undefined","error","Response","getErrorOverlayHtmlAsync","routerRoot","status","headers","staticError","message","handleRouteError","name","stack","htmlServerError","getApiRoute","handler","warnInvalidWebOutput","resolvedFunctionPath","isAbsolute","join","appDir","bundleApiRoute","getMiddleware","unstable_useServerMiddleware","default","warnInvalidMiddlewareOutput","console","warn","middlewareModule","unstable_settings","matcher","warnInvalidMiddlewareMatcherSettings","getLoaderData","response","executeLoaderAsync"],"mappings":"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"}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
// Resolves bare module specifiers using `compilerOptions.paths` and `compilerOptions.baseUrl`
|
|
2
|
+
// from the project's tsconfig.json or jsconfig.json.
|
|
3
|
+
// Includes a standalone tsconfig parser that walks the `extends` chain using @expo/json-file
|
|
4
|
+
// without depending on the `typescript` package. Uses Metro's DependencyGraph for file
|
|
5
|
+
// existence, realpath, and node_modules resolution.
|
|
6
|
+
"use strict";
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
function _export(target, all) {
|
|
11
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
_export(exports, {
|
|
17
|
+
get _loadTsConfigWithExtends () {
|
|
18
|
+
return _loadTsConfigWithExtends;
|
|
19
|
+
},
|
|
20
|
+
get _resolveWithTsConfigPaths () {
|
|
21
|
+
return _resolveWithTsConfigPaths;
|
|
22
|
+
},
|
|
23
|
+
get _toResolveConfig () {
|
|
24
|
+
return _toResolveConfig;
|
|
25
|
+
},
|
|
26
|
+
get createTypescriptResolver () {
|
|
27
|
+
return createTypescriptResolver;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
function _jsonfile() {
|
|
31
|
+
const data = /*#__PURE__*/ _interop_require_default(require("@expo/json-file"));
|
|
32
|
+
_jsonfile = function() {
|
|
33
|
+
return data;
|
|
34
|
+
};
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
function _RootPathUtils() {
|
|
38
|
+
const data = require("@expo/metro/metro-file-map/lib/RootPathUtils");
|
|
39
|
+
_RootPathUtils = function() {
|
|
40
|
+
return data;
|
|
41
|
+
};
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
44
|
+
function _path() {
|
|
45
|
+
const data = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
46
|
+
_path = function() {
|
|
47
|
+
return data;
|
|
48
|
+
};
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
const _metroErrors = require("./metroErrors");
|
|
52
|
+
function _interop_require_default(obj) {
|
|
53
|
+
return obj && obj.__esModule ? obj : {
|
|
54
|
+
default: obj
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const debug = require('debug')('expo:start:server:metro:typescript-resolver');
|
|
58
|
+
function createTypescriptResolver({ projectRoot, getMetroBundler, getStrictResolver, watch }) {
|
|
59
|
+
const input = {
|
|
60
|
+
current: null
|
|
61
|
+
};
|
|
62
|
+
let initialized = false;
|
|
63
|
+
function init() {
|
|
64
|
+
initialized = true;
|
|
65
|
+
const bundler = getMetroBundler();
|
|
66
|
+
const tsconfig = loadTsConfigPaths(projectRoot, bundler._depGraph);
|
|
67
|
+
input.current = _toResolveConfig(tsconfig, projectRoot);
|
|
68
|
+
if (watch) {
|
|
69
|
+
setupTsConfigWatcher(input, bundler, projectRoot);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const fileSpecifierRe = /^[\\/]|^\.\.?(?:$|[\\/])/i;
|
|
73
|
+
const nodeModulesPart = `${_path().default.sep}node_modules${_path().default.sep}`;
|
|
74
|
+
return function requestTsconfigPaths(immutableContext, moduleName, platform) {
|
|
75
|
+
if (!initialized) {
|
|
76
|
+
init();
|
|
77
|
+
}
|
|
78
|
+
if (!input.current) {
|
|
79
|
+
return null;
|
|
80
|
+
} else if (fileSpecifierRe.test(moduleName)) {
|
|
81
|
+
return null;
|
|
82
|
+
} else if (immutableContext.originModulePath.includes(nodeModulesPart)) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
// TypeScript paths resolution is heavily pre-computed, which is processed
|
|
86
|
+
// in the `_toResolveConfig` helper. This allows the actual resolver to do
|
|
87
|
+
// very little work
|
|
88
|
+
return _resolveWithTsConfigPaths(input.current, moduleName, getOptionalResolve(immutableContext, platform, getStrictResolver));
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function setupTsConfigWatcher(input, bundler, projectRoot) {
|
|
92
|
+
function reload() {
|
|
93
|
+
const tsconfig = loadTsConfigPaths(projectRoot, bundler._depGraph);
|
|
94
|
+
input.current = _toResolveConfig(tsconfig, projectRoot);
|
|
95
|
+
}
|
|
96
|
+
const watcher = bundler.getWatcher();
|
|
97
|
+
watcher.addListener('change', ({ changes })=>{
|
|
98
|
+
var _input_current;
|
|
99
|
+
for (const change of changes.addedFiles){
|
|
100
|
+
// Additions are only relevant if we haven't watched tsconfigs before
|
|
101
|
+
if (change[0] === TSCONFIG_NAME || change[0] === JSCONFIG_NAME) {
|
|
102
|
+
return reload();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if ((_input_current = input.current) == null ? void 0 : _input_current.configNormalPaths) {
|
|
106
|
+
for (const change of changes.modifiedFiles){
|
|
107
|
+
if (input.current.configNormalPaths.has(change[0])) {
|
|
108
|
+
return reload();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const change of changes.removedFiles){
|
|
112
|
+
if (input.current.configNormalPaths.has(change[0])) {
|
|
113
|
+
return reload();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const escapePrefix = (str)=>str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
120
|
+
function joinBaseUrl(baseUrl, lookup) {
|
|
121
|
+
return _path().default.join(baseUrl, lookup);
|
|
122
|
+
}
|
|
123
|
+
function _resolveWithTsConfigPaths(config, moduleName, resolve) {
|
|
124
|
+
// Exact matches contain no '*' wildcards, and can be 1:1 replacements
|
|
125
|
+
const exactPaths = config.exactMatches[moduleName];
|
|
126
|
+
if (exactPaths != null) {
|
|
127
|
+
for (const alias of exactPaths){
|
|
128
|
+
const result = resolve(alias);
|
|
129
|
+
if (result != null) {
|
|
130
|
+
debug(`${moduleName} -> ${alias}`);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
// Widlcard matches contain '*' and we first match the preceding string before it with a regex
|
|
137
|
+
if (config.prefixRe != null) {
|
|
138
|
+
const match = config.prefixRe.exec(moduleName);
|
|
139
|
+
if (match != null) {
|
|
140
|
+
const prefix = match[1];
|
|
141
|
+
const rest = moduleName.slice(prefix.length);
|
|
142
|
+
for (const entry of config.prefixMap[prefix]){
|
|
143
|
+
let star = rest;
|
|
144
|
+
if (entry.suffix) {
|
|
145
|
+
// If we have a suffix (string after '*') it's checked separately
|
|
146
|
+
// This is cheap, since most matches are complex path prefixes
|
|
147
|
+
if (!rest.endsWith(entry.suffix)) continue;
|
|
148
|
+
star = rest.slice(0, -entry.suffix.length);
|
|
149
|
+
}
|
|
150
|
+
for (const alias of entry.mapping){
|
|
151
|
+
const possibleResult = alias.replace('*', star);
|
|
152
|
+
const result = resolve(possibleResult);
|
|
153
|
+
if (result != null) {
|
|
154
|
+
debug(`${moduleName} -> ${possibleResult}`);
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
break; // First matching suffix wins
|
|
159
|
+
}
|
|
160
|
+
// NOTE: Special case for `"*"` paths pattern (replacement for `baseUrl`)
|
|
161
|
+
// If a non-catch-all prefix matched but failed, try the "*" catch-all
|
|
162
|
+
// This could also apply to `*.[ext]` paths commonly though
|
|
163
|
+
if (prefix !== '' && config.prefixMap[''] != null) {
|
|
164
|
+
for (const entry of config.prefixMap['']){
|
|
165
|
+
let star = moduleName;
|
|
166
|
+
if (entry.suffix) {
|
|
167
|
+
if (!moduleName.endsWith(entry.suffix)) continue;
|
|
168
|
+
star = moduleName.slice(0, -entry.suffix.length);
|
|
169
|
+
}
|
|
170
|
+
for (const alias of entry.mapping){
|
|
171
|
+
const possibleResult = alias.replace('*', star);
|
|
172
|
+
const result = resolve(possibleResult);
|
|
173
|
+
if (result != null) {
|
|
174
|
+
debug(`${moduleName} -> ${possibleResult}`);
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Only resolve against baseUrl if no `paths` groups were matched.
|
|
184
|
+
// Base URL is resolved after paths, and before node_modules.
|
|
185
|
+
// NOTE: In TypeScript 6 this is disabled unless `"ignoreDeprecations": "6.0"` is added
|
|
186
|
+
// In TypeScript 7, this will be removed, and `paths['*']` is the replacement
|
|
187
|
+
if (config.baseUrl != null) {
|
|
188
|
+
const possibleResult = joinBaseUrl(config.baseUrl, moduleName);
|
|
189
|
+
const result = resolve(possibleResult);
|
|
190
|
+
if (result) {
|
|
191
|
+
debug(`baseUrl: ${moduleName} -> ${possibleResult}`);
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
function getOptionalResolve(context, platform, getStrictResolver) {
|
|
198
|
+
const doResolve = getStrictResolver(context, platform);
|
|
199
|
+
return function optionalResolve(moduleName) {
|
|
200
|
+
try {
|
|
201
|
+
return doResolve(moduleName);
|
|
202
|
+
} catch (error) {
|
|
203
|
+
// If the error is directly related to a resolver not being able to resolve a module, then
|
|
204
|
+
// we can ignore the error and try the next resolver. Otherwise, we should throw the error.
|
|
205
|
+
const isResolutionError = (0, _metroErrors.isFailedToResolveNameError)(error) || (0, _metroErrors.isFailedToResolvePathError)(error);
|
|
206
|
+
if (!isResolutionError) {
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function _toResolveConfig(tsconfig, projectRoot) {
|
|
214
|
+
if (!tsconfig || !tsconfig.paths && tsconfig.baseUrl == null) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
// NOTE(@kitten): We previously had a bug that assumed that paths are relative to the `baseUrl` only
|
|
218
|
+
// However, the `baseUrl` is optional and paths can be relative to the config path instead.
|
|
219
|
+
const pathsBasePath = tsconfig.baseUrl ?? tsconfig.pathsBasePath ?? projectRoot;
|
|
220
|
+
const paths = tsconfig.paths ?? {};
|
|
221
|
+
const exactMatches = Object.create(null);
|
|
222
|
+
const prefixMap = Object.create(null);
|
|
223
|
+
const seenPrefixes = [];
|
|
224
|
+
for(const key in paths){
|
|
225
|
+
if (!Array.isArray(paths[key])) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
// Pre-join with baseUrl so the hot path avoids path.join entirely
|
|
229
|
+
const mapping = paths[key].filter((p)=>typeof p === 'string' && !p.endsWith('.d.ts')).map((p)=>joinBaseUrl(pathsBasePath, p));
|
|
230
|
+
if (mapping.length > 0) {
|
|
231
|
+
const starIndex = key.indexOf('*');
|
|
232
|
+
if (starIndex === -1) {
|
|
233
|
+
exactMatches[key] = mapping;
|
|
234
|
+
} else {
|
|
235
|
+
const prefix = key.slice(0, starIndex);
|
|
236
|
+
const suffix = key.slice(starIndex + 1);
|
|
237
|
+
if (!prefixMap[prefix]) {
|
|
238
|
+
prefixMap[prefix] = [];
|
|
239
|
+
seenPrefixes.push(prefix);
|
|
240
|
+
}
|
|
241
|
+
prefixMap[prefix].push({
|
|
242
|
+
suffix,
|
|
243
|
+
mapping
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Match longest prefix first
|
|
249
|
+
seenPrefixes.sort((a, b)=>b.length - a.length);
|
|
250
|
+
const prefixRe = seenPrefixes.length ? new RegExp(`^(${seenPrefixes.map(escapePrefix).join('|')})`) : null;
|
|
251
|
+
return {
|
|
252
|
+
exactMatches,
|
|
253
|
+
prefixRe,
|
|
254
|
+
prefixMap,
|
|
255
|
+
baseUrl: tsconfig.baseUrl ?? null,
|
|
256
|
+
configNormalPaths: tsconfig.configNormalPaths
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const TSCONFIG_NAME = 'tsconfig.json';
|
|
260
|
+
const JSCONFIG_NAME = 'jsconfig.json';
|
|
261
|
+
function loadTsConfigPaths(projectRoot, depGraph) {
|
|
262
|
+
let configPath = null;
|
|
263
|
+
if (depGraph.doesFileExist(TSCONFIG_NAME)) {
|
|
264
|
+
configPath = _path().default.join(projectRoot, TSCONFIG_NAME);
|
|
265
|
+
} else if (depGraph.doesFileExist(JSCONFIG_NAME)) {
|
|
266
|
+
configPath = _path().default.join(projectRoot, JSCONFIG_NAME);
|
|
267
|
+
}
|
|
268
|
+
if (!configPath) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
return _loadTsConfigWithExtends(projectRoot, configPath, depGraph);
|
|
273
|
+
} catch (error) {
|
|
274
|
+
if ((error == null ? void 0 : error.isJsonFileError) || (error == null ? void 0 : error.name) === 'SyntaxError') {
|
|
275
|
+
debug(`Failed to parse ${configPath}: ${error.message}`);
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
throw error;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function _loadTsConfigWithExtends(projectRoot, configPath, depGraph) {
|
|
282
|
+
const visited = new Set();
|
|
283
|
+
const rootConfigDir = _path().default.dirname(configPath);
|
|
284
|
+
function load(configPath) {
|
|
285
|
+
// NOTE: We avoid cycles here, which are theoretically possible
|
|
286
|
+
// We avoid warning or throwing an error though, since TypeScript will complain about this anyway
|
|
287
|
+
if (typeof configPath !== 'string' || visited.has(configPath)) {
|
|
288
|
+
return null;
|
|
289
|
+
} else {
|
|
290
|
+
visited.add(configPath);
|
|
291
|
+
}
|
|
292
|
+
const configDir = _path().default.dirname(configPath);
|
|
293
|
+
const raw = _jsonfile().default.read(configPath, {
|
|
294
|
+
json5: true
|
|
295
|
+
});
|
|
296
|
+
const own = extractPathsFromCompilerOptions(raw);
|
|
297
|
+
let baseUrl;
|
|
298
|
+
let paths;
|
|
299
|
+
let pathsBasePath;
|
|
300
|
+
if (raw.extends) {
|
|
301
|
+
const exts = !Array.isArray(raw.extends) ? [
|
|
302
|
+
raw.extends
|
|
303
|
+
] : raw.extends;
|
|
304
|
+
for (const ext of exts){
|
|
305
|
+
if (typeof ext === 'string') {
|
|
306
|
+
// Resolve the `extends` path with Node-like resolution, similar to TypeScript
|
|
307
|
+
const extPath = resolveExtendsPath(ext, configDir, depGraph._fileSystem);
|
|
308
|
+
const parent = load(extPath);
|
|
309
|
+
if (parent) {
|
|
310
|
+
baseUrl = parent.baseUrl ?? baseUrl;
|
|
311
|
+
paths = parent.paths ?? paths;
|
|
312
|
+
pathsBasePath = parent.pathsBasePath ?? pathsBasePath;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Outermost config values win, but can be combined
|
|
318
|
+
// The `pathsBasePath` is the path of the config that `paths` are defined in
|
|
319
|
+
// `paths` are not merged
|
|
320
|
+
return {
|
|
321
|
+
baseUrl: own.baseUrl ?? baseUrl,
|
|
322
|
+
paths: own.paths ?? paths,
|
|
323
|
+
pathsBasePath: own.paths != null ? configDir : pathsBasePath
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
const result = load(configPath);
|
|
327
|
+
if (result != null) {
|
|
328
|
+
const pathUtils = new (_RootPathUtils()).RootPathUtils(projectRoot);
|
|
329
|
+
const configPaths = new Set();
|
|
330
|
+
// Keep track of the configuration paths here for the file watcher
|
|
331
|
+
for (const visitedConfigPath of visited){
|
|
332
|
+
configPaths.add(pathUtils.absoluteToNormal(visitedConfigPath));
|
|
333
|
+
}
|
|
334
|
+
result.configNormalPaths = configPaths;
|
|
335
|
+
if (result.baseUrl != null) {
|
|
336
|
+
result.baseUrl = _path().default.resolve(rootConfigDir, substituteConfigDir(result.baseUrl, rootConfigDir));
|
|
337
|
+
}
|
|
338
|
+
if (result.paths != null) {
|
|
339
|
+
for(const key in result.paths){
|
|
340
|
+
const mapping = result.paths[key];
|
|
341
|
+
for(let idx = 0; idx < mapping.length; idx++){
|
|
342
|
+
mapping[idx] = substituteConfigDir(mapping[idx], rootConfigDir);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return result;
|
|
348
|
+
}
|
|
349
|
+
/** Normalize JSON's tsconfig compilerOptions */ function extractPathsFromCompilerOptions(raw) {
|
|
350
|
+
if (raw.compilerOptions == null || typeof raw.compilerOptions !== 'object') {
|
|
351
|
+
return {};
|
|
352
|
+
}
|
|
353
|
+
const opts = raw.compilerOptions;
|
|
354
|
+
const baseUrl = typeof opts.baseUrl === 'string' ? opts.baseUrl : undefined;
|
|
355
|
+
let paths;
|
|
356
|
+
if (opts.paths != null && typeof opts.paths === 'object') {
|
|
357
|
+
paths = {};
|
|
358
|
+
for(const key in opts.paths){
|
|
359
|
+
const values = opts.paths[key];
|
|
360
|
+
if (Array.isArray(values)) {
|
|
361
|
+
paths[key] = values.filter((v)=>typeof v === 'string');
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return {
|
|
366
|
+
baseUrl,
|
|
367
|
+
paths
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/** Lookup/resolve an `extends` path */ function resolveExtendsPath(targetPath, configDir, fileSystem) {
|
|
371
|
+
let target = fileSystem.lookup(_path().default.join(configDir, targetPath));
|
|
372
|
+
if (target.exists && target.type === 'f') {
|
|
373
|
+
return target.realPath;
|
|
374
|
+
}
|
|
375
|
+
if (!targetPath.endsWith('.json')) {
|
|
376
|
+
target = fileSystem.lookup(_path().default.join(configDir, targetPath + '.json'));
|
|
377
|
+
if (target.exists && target.type === 'f') {
|
|
378
|
+
return target.realPath;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Last attempt is Node-like resolution
|
|
382
|
+
let lookup;
|
|
383
|
+
if (!targetPath.endsWith('.json')) {
|
|
384
|
+
lookup = fileSystem.hierarchicalLookup(configDir, `node_modules/${targetPath}.json`, {
|
|
385
|
+
subpathType: 'f'
|
|
386
|
+
});
|
|
387
|
+
if (lookup != null) {
|
|
388
|
+
return lookup.absolutePath;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (lookup == null) {
|
|
392
|
+
lookup = fileSystem.hierarchicalLookup(configDir, `node_modules/${targetPath}`, {
|
|
393
|
+
subpathType: 'f'
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
if (lookup == null && !targetPath.endsWith('.json')) {
|
|
397
|
+
lookup = fileSystem.hierarchicalLookup(configDir, `node_modules/${targetPath}/${TSCONFIG_NAME}`, {
|
|
398
|
+
subpathType: 'f'
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
// NOTE(@kitten): Some implementations opt to add `package.json:exports` and `package.json:tsconfig`
|
|
402
|
+
// field support here, but it's unclear if this is even supported in TypeScript itself. It's likely
|
|
403
|
+
// not used, as it's impossible to find an example of this anywhere
|
|
404
|
+
return lookup == null ? void 0 : lookup.absolutePath;
|
|
405
|
+
}
|
|
406
|
+
/** TypeScript's `${configDir}` template prefix for the user config's path */ function substituteConfigDir(value, configDir) {
|
|
407
|
+
return value.startsWith('${configDir}') ? value.replace('${configDir}', configDir.endsWith(_path().default.sep) ? '.' : './') : value;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
//# sourceMappingURL=createTypescriptResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/createTypescriptResolver.ts"],"sourcesContent":["// Resolves bare module specifiers using `compilerOptions.paths` and `compilerOptions.baseUrl`\n// from the project's tsconfig.json or jsconfig.json.\n// Includes a standalone tsconfig parser that walks the `extends` chain using @expo/json-file\n// without depending on the `typescript` package. Uses Metro's DependencyGraph for file\n// existence, realpath, and node_modules resolution.\n\nimport JsonFile from '@expo/json-file';\nimport type Bundler from '@expo/metro/metro/Bundler';\nimport type DependencyGraph from '@expo/metro/metro/node-haste/DependencyGraph';\nimport type FileMap from '@expo/metro/metro-file-map';\nimport type { FileSystem, ChangeEvent } from '@expo/metro/metro-file-map';\nimport { RootPathUtils } from '@expo/metro/metro-file-map/lib/RootPathUtils';\nimport type { ResolutionContext, Resolution } from '@expo/metro/metro-resolver';\nimport path from 'path';\n\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport type { StrictResolverFactory } from './withMetroMultiPlatform';\nimport type { ExpoCustomMetroResolver } from './withMetroResolvers';\n\nconst debug = require('debug')('expo:start:server:metro:typescript-resolver') as typeof console.log;\n\ninterface ParsedTsConfig {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n pathsBasePath?: string;\n configNormalPaths?: Set<string>;\n}\n\ninterface SuffixEntry {\n suffix: string;\n mapping: string[];\n}\n\nexport interface TsConfigResolveConfig {\n exactMatches: Record<string, string[] | undefined>;\n prefixRe: RegExp | null;\n prefixMap: Record<string, SuffixEntry[]>;\n baseUrl: string | null;\n configNormalPaths: Set<string> | undefined;\n}\n\ninterface TypescriptResolverInput {\n current: TsConfigResolveConfig | null;\n}\n\n/** Creates a TypeScript paths/baseUrl module resolver.\n * @remarks\n * The TypeScript resolver finds and loads tsconfig.json/jsconfig.json configuration files and sets up resolution\n * for `compilerOptions.paths` and `compilerOptions.baseUrl`. These are typically prefix-style replacements of\n * input module specifiers.\n * It lazily initializes the TypeScript configuration and resolves the files via the Metro filesystem for added\n * efficiency.\n * It skips loading TypeScript configurations via the `typescript` package itself and instead approximates\n * TypeScript's behaviour.\n */\nexport function createTypescriptResolver({\n projectRoot,\n getMetroBundler,\n getStrictResolver,\n watch,\n}: {\n projectRoot: string;\n getMetroBundler: () => Bundler;\n getStrictResolver: StrictResolverFactory;\n watch: boolean;\n}): ExpoCustomMetroResolver {\n const input: TypescriptResolverInput = { current: null };\n let initialized = false;\n\n function init() {\n initialized = true;\n const bundler = getMetroBundler();\n const tsconfig = loadTsConfigPaths(projectRoot, bundler._depGraph);\n input.current = _toResolveConfig(tsconfig, projectRoot);\n if (watch) {\n setupTsConfigWatcher(input, bundler, projectRoot);\n }\n }\n\n const fileSpecifierRe = /^[\\\\/]|^\\.\\.?(?:$|[\\\\/])/i;\n const nodeModulesPart = `${path.sep}node_modules${path.sep}`;\n\n return function requestTsconfigPaths(immutableContext, moduleName, platform) {\n if (!initialized) {\n init();\n }\n\n if (!input.current) {\n return null;\n } else if (fileSpecifierRe.test(moduleName)) {\n return null;\n } else if (immutableContext.originModulePath.includes(nodeModulesPart)) {\n return null;\n }\n\n // TypeScript paths resolution is heavily pre-computed, which is processed\n // in the `_toResolveConfig` helper. This allows the actual resolver to do\n // very little work\n return _resolveWithTsConfigPaths(\n input.current,\n moduleName,\n getOptionalResolve(immutableContext, platform, getStrictResolver)\n );\n };\n}\n\nfunction setupTsConfigWatcher(\n input: TypescriptResolverInput,\n bundler: Bundler,\n projectRoot: string\n): void {\n function reload() {\n const tsconfig = loadTsConfigPaths(projectRoot, bundler._depGraph);\n input.current = _toResolveConfig(tsconfig, projectRoot);\n }\n\n const watcher = bundler.getWatcher() as FileMap;\n watcher.addListener('change', ({ changes }: ChangeEvent) => {\n for (const change of changes.addedFiles) {\n // Additions are only relevant if we haven't watched tsconfigs before\n if (change[0] === TSCONFIG_NAME || change[0] === JSCONFIG_NAME) {\n return reload();\n }\n }\n if (input.current?.configNormalPaths) {\n for (const change of changes.modifiedFiles) {\n if (input.current.configNormalPaths.has(change[0])) {\n return reload();\n }\n }\n for (const change of changes.removedFiles) {\n if (input.current.configNormalPaths.has(change[0])) {\n return reload();\n }\n }\n }\n });\n}\n\nconst escapePrefix = (str: string) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction joinBaseUrl(baseUrl: string, lookup: string): string {\n return path.join(baseUrl, lookup);\n}\n\n/** Attempts to resolve a target module given a pre-processed TypeScript configuration */\nexport function _resolveWithTsConfigPaths(\n config: TsConfigResolveConfig,\n moduleName: string,\n resolve: (moduleName: string) => Resolution | null\n): Resolution | null {\n // Exact matches contain no '*' wildcards, and can be 1:1 replacements\n const exactPaths = config.exactMatches[moduleName];\n if (exactPaths != null) {\n for (const alias of exactPaths) {\n const result = resolve(alias);\n if (result != null) {\n debug(`${moduleName} -> ${alias}`);\n return result;\n }\n }\n return null;\n }\n\n // Widlcard matches contain '*' and we first match the preceding string before it with a regex\n if (config.prefixRe != null) {\n const match = config.prefixRe.exec(moduleName);\n if (match != null) {\n const prefix = match[1]!;\n const rest = moduleName.slice(prefix.length);\n for (const entry of config.prefixMap[prefix]!) {\n let star = rest;\n if (entry.suffix) {\n // If we have a suffix (string after '*') it's checked separately\n // This is cheap, since most matches are complex path prefixes\n if (!rest.endsWith(entry.suffix)) continue;\n star = rest.slice(0, -entry.suffix.length);\n }\n for (const alias of entry.mapping) {\n const possibleResult = alias.replace('*', star);\n const result = resolve(possibleResult);\n if (result != null) {\n debug(`${moduleName} -> ${possibleResult}`);\n return result;\n }\n }\n break; // First matching suffix wins\n }\n\n // NOTE: Special case for `\"*\"` paths pattern (replacement for `baseUrl`)\n // If a non-catch-all prefix matched but failed, try the \"*\" catch-all\n // This could also apply to `*.[ext]` paths commonly though\n if (prefix !== '' && config.prefixMap[''] != null) {\n for (const entry of config.prefixMap['']) {\n let star = moduleName;\n if (entry.suffix) {\n if (!moduleName.endsWith(entry.suffix)) continue;\n star = moduleName.slice(0, -entry.suffix.length);\n }\n for (const alias of entry.mapping) {\n const possibleResult = alias.replace('*', star);\n const result = resolve(possibleResult);\n if (result != null) {\n debug(`${moduleName} -> ${possibleResult}`);\n return result;\n }\n }\n }\n }\n\n return null;\n }\n }\n\n // Only resolve against baseUrl if no `paths` groups were matched.\n // Base URL is resolved after paths, and before node_modules.\n // NOTE: In TypeScript 6 this is disabled unless `\"ignoreDeprecations\": \"6.0\"` is added\n // In TypeScript 7, this will be removed, and `paths['*']` is the replacement\n if (config.baseUrl != null) {\n const possibleResult = joinBaseUrl(config.baseUrl, moduleName);\n const result = resolve(possibleResult);\n if (result) {\n debug(`baseUrl: ${moduleName} -> ${possibleResult}`);\n return result;\n }\n }\n\n return null;\n}\n\nfunction getOptionalResolve(\n context: ResolutionContext,\n platform: string | null,\n getStrictResolver: StrictResolverFactory\n): (moduleName: string) => Resolution | null {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\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 }\n return null;\n };\n}\n\n/** Pre-processes TypeScript configuration for _resolveWithTsConfigPaths */\nexport function _toResolveConfig(\n tsconfig: ParsedTsConfig | null,\n projectRoot: string\n): TsConfigResolveConfig | null {\n if (!tsconfig || (!tsconfig.paths && tsconfig.baseUrl == null)) {\n return null;\n }\n\n // NOTE(@kitten): We previously had a bug that assumed that paths are relative to the `baseUrl` only\n // However, the `baseUrl` is optional and paths can be relative to the config path instead.\n const pathsBasePath = tsconfig.baseUrl ?? tsconfig.pathsBasePath ?? projectRoot;\n\n const paths = tsconfig.paths ?? {};\n const exactMatches: Record<string, string[]> = Object.create(null);\n const prefixMap: Record<string, SuffixEntry[]> = Object.create(null);\n const seenPrefixes: string[] = [];\n\n for (const key in paths) {\n if (!Array.isArray(paths[key])) {\n continue;\n }\n // Pre-join with baseUrl so the hot path avoids path.join entirely\n const mapping = paths[key]\n .filter((p) => typeof p === 'string' && !p.endsWith('.d.ts'))\n .map((p) => joinBaseUrl(pathsBasePath, p));\n if (mapping.length > 0) {\n const starIndex = key.indexOf('*');\n if (starIndex === -1) {\n exactMatches[key] = mapping;\n } else {\n const prefix = key.slice(0, starIndex);\n const suffix = key.slice(starIndex + 1);\n if (!prefixMap[prefix]) {\n prefixMap[prefix] = [];\n seenPrefixes.push(prefix);\n }\n prefixMap[prefix].push({ suffix, mapping });\n }\n }\n }\n\n // Match longest prefix first\n seenPrefixes.sort((a, b) => b.length - a.length);\n const prefixRe = seenPrefixes.length\n ? new RegExp(`^(${seenPrefixes.map(escapePrefix).join('|')})`)\n : null;\n\n return {\n exactMatches,\n prefixRe,\n prefixMap,\n baseUrl: tsconfig.baseUrl ?? null,\n configNormalPaths: tsconfig.configNormalPaths,\n };\n}\n\nconst TSCONFIG_NAME = 'tsconfig.json';\nconst JSCONFIG_NAME = 'jsconfig.json';\n\nfunction loadTsConfigPaths(projectRoot: string, depGraph: DependencyGraph): ParsedTsConfig | null {\n let configPath: string | null = null;\n if (depGraph.doesFileExist(TSCONFIG_NAME)) {\n configPath = path.join(projectRoot, TSCONFIG_NAME);\n } else if (depGraph.doesFileExist(JSCONFIG_NAME)) {\n configPath = path.join(projectRoot, JSCONFIG_NAME);\n }\n\n if (!configPath) {\n return null;\n }\n\n try {\n return _loadTsConfigWithExtends(projectRoot, configPath, depGraph);\n } catch (error: any) {\n if (error?.isJsonFileError || error?.name === 'SyntaxError') {\n debug(`Failed to parse ${configPath}: ${error.message}`);\n return null;\n }\n throw error;\n }\n}\n\n/** Loads a given tsconfig.json and parses it */\nexport function _loadTsConfigWithExtends(\n projectRoot: string,\n configPath: string,\n depGraph: DependencyGraph\n): ParsedTsConfig | null {\n const visited = new Set<string>();\n const rootConfigDir = path.dirname(configPath);\n\n function load(configPath: string | undefined): ParsedTsConfig | null {\n // NOTE: We avoid cycles here, which are theoretically possible\n // We avoid warning or throwing an error though, since TypeScript will complain about this anyway\n if (typeof configPath !== 'string' || visited.has(configPath)) {\n return null;\n } else {\n visited.add(configPath);\n }\n\n const configDir = path.dirname(configPath);\n const raw = JsonFile.read(configPath, { json5: true });\n const own = extractPathsFromCompilerOptions(raw);\n\n let baseUrl: string | undefined;\n let paths: Record<string, string[]> | undefined;\n let pathsBasePath: string | undefined;\n if (raw.extends) {\n const exts = !Array.isArray(raw.extends) ? [raw.extends] : raw.extends;\n for (const ext of exts) {\n if (typeof ext === 'string') {\n // Resolve the `extends` path with Node-like resolution, similar to TypeScript\n const extPath = resolveExtendsPath(ext, configDir, depGraph._fileSystem);\n const parent = load(extPath);\n if (parent) {\n baseUrl = parent.baseUrl ?? baseUrl;\n paths = parent.paths ?? paths;\n pathsBasePath = parent.pathsBasePath ?? pathsBasePath;\n }\n }\n }\n }\n\n // Outermost config values win, but can be combined\n // The `pathsBasePath` is the path of the config that `paths` are defined in\n // `paths` are not merged\n return {\n baseUrl: own.baseUrl ?? baseUrl,\n paths: own.paths ?? paths,\n pathsBasePath: own.paths != null ? configDir : pathsBasePath,\n };\n }\n\n const result = load(configPath);\n if (result != null) {\n const pathUtils = new RootPathUtils(projectRoot);\n const configPaths = new Set<string>();\n // Keep track of the configuration paths here for the file watcher\n for (const visitedConfigPath of visited) {\n configPaths.add(pathUtils.absoluteToNormal(visitedConfigPath));\n }\n result.configNormalPaths = configPaths;\n if (result.baseUrl != null) {\n result.baseUrl = path.resolve(\n rootConfigDir,\n substituteConfigDir(result.baseUrl, rootConfigDir)\n );\n }\n if (result.paths != null) {\n for (const key in result.paths) {\n const mapping = result.paths[key]!;\n for (let idx = 0; idx < mapping.length; idx++) {\n mapping[idx] = substituteConfigDir(mapping[idx]!, rootConfigDir);\n }\n }\n }\n }\n return result;\n}\n\n/** Normalize JSON's tsconfig compilerOptions */\nfunction extractPathsFromCompilerOptions(raw: Record<string, unknown>): {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n} {\n if (raw.compilerOptions == null || typeof raw.compilerOptions !== 'object') {\n return {};\n }\n const opts = raw.compilerOptions as Record<string, unknown>;\n const baseUrl = typeof opts.baseUrl === 'string' ? opts.baseUrl : undefined;\n\n let paths: Record<string, string[]> | undefined;\n if (opts.paths != null && typeof opts.paths === 'object') {\n paths = {};\n for (const key in opts.paths as Record<string, unknown>) {\n const values = (opts.paths as Record<string, unknown>)[key];\n if (Array.isArray(values)) {\n paths[key] = values.filter((v): v is string => typeof v === 'string');\n }\n }\n }\n\n return { baseUrl, paths };\n}\n\n/** Lookup/resolve an `extends` path */\nfunction resolveExtendsPath(\n targetPath: string,\n configDir: string,\n fileSystem: FileSystem\n): string | undefined {\n let target = fileSystem.lookup(path.join(configDir, targetPath));\n if (target.exists && target.type === 'f') {\n return target.realPath;\n }\n\n if (!targetPath.endsWith('.json')) {\n target = fileSystem.lookup(path.join(configDir, targetPath + '.json'));\n if (target.exists && target.type === 'f') {\n return target.realPath;\n }\n }\n\n // Last attempt is Node-like resolution\n let lookup: null | undefined | { absolutePath: string; containerRelativePath: string };\n if (!targetPath.endsWith('.json')) {\n lookup = fileSystem.hierarchicalLookup(configDir, `node_modules/${targetPath}.json`, {\n subpathType: 'f',\n });\n if (lookup != null) {\n return lookup.absolutePath;\n }\n }\n if (lookup == null) {\n lookup = fileSystem.hierarchicalLookup(configDir, `node_modules/${targetPath}`, {\n subpathType: 'f',\n });\n }\n if (lookup == null && !targetPath.endsWith('.json')) {\n lookup = fileSystem.hierarchicalLookup(\n configDir,\n `node_modules/${targetPath}/${TSCONFIG_NAME}`,\n {\n subpathType: 'f',\n }\n );\n }\n\n // NOTE(@kitten): Some implementations opt to add `package.json:exports` and `package.json:tsconfig`\n // field support here, but it's unclear if this is even supported in TypeScript itself. It's likely\n // not used, as it's impossible to find an example of this anywhere\n\n return lookup?.absolutePath;\n}\n\n/** TypeScript's `${configDir}` template prefix for the user config's path */\nfunction substituteConfigDir(value: string, configDir: string): string {\n return value.startsWith('${configDir}')\n ? value.replace('${configDir}', configDir.endsWith(path.sep) ? '.' : './')\n : value;\n}\n"],"names":["_loadTsConfigWithExtends","_resolveWithTsConfigPaths","_toResolveConfig","createTypescriptResolver","debug","require","projectRoot","getMetroBundler","getStrictResolver","watch","input","current","initialized","init","bundler","tsconfig","loadTsConfigPaths","_depGraph","setupTsConfigWatcher","fileSpecifierRe","nodeModulesPart","path","sep","requestTsconfigPaths","immutableContext","moduleName","platform","test","originModulePath","includes","getOptionalResolve","reload","watcher","getWatcher","addListener","changes","change","addedFiles","TSCONFIG_NAME","JSCONFIG_NAME","configNormalPaths","modifiedFiles","has","removedFiles","escapePrefix","str","replace","joinBaseUrl","baseUrl","lookup","join","config","resolve","exactPaths","exactMatches","alias","result","prefixRe","match","exec","prefix","rest","slice","length","entry","prefixMap","star","suffix","endsWith","mapping","possibleResult","context","doResolve","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","paths","pathsBasePath","Object","create","seenPrefixes","key","Array","isArray","filter","p","map","starIndex","indexOf","push","sort","a","b","RegExp","depGraph","configPath","doesFileExist","isJsonFileError","name","message","visited","Set","rootConfigDir","dirname","load","add","configDir","raw","JsonFile","read","json5","own","extractPathsFromCompilerOptions","extends","exts","ext","extPath","resolveExtendsPath","_fileSystem","parent","pathUtils","RootPathUtils","configPaths","visitedConfigPath","absoluteToNormal","substituteConfigDir","idx","compilerOptions","opts","undefined","values","v","targetPath","fileSystem","target","exists","type","realPath","hierarchicalLookup","subpathType","absolutePath","value","startsWith"],"mappings":"AAAA,8FAA8F;AAC9F,qDAAqD;AACrD,6FAA6F;AAC7F,uFAAuF;AACvF,oDAAoD;;;;;;;;;;;;QA4UpCA;eAAAA;;QA9LAC;eAAAA;;QA2GAC;eAAAA;;QAtMAC;eAAAA;;;;gEAjDK;;;;;;;yBAKS;;;;;;;gEAEb;;;;;;6BAEsD;;;;;;AAIvE,MAAMC,QAAQC,QAAQ,SAAS;AAoCxB,SAASF,yBAAyB,EACvCG,WAAW,EACXC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EAMN;IACC,MAAMC,QAAiC;QAAEC,SAAS;IAAK;IACvD,IAAIC,cAAc;IAElB,SAASC;QACPD,cAAc;QACd,MAAME,UAAUP;QAChB,MAAMQ,WAAWC,kBAAkBV,aAAaQ,QAAQG,SAAS;QACjEP,MAAMC,OAAO,GAAGT,iBAAiBa,UAAUT;QAC3C,IAAIG,OAAO;YACTS,qBAAqBR,OAAOI,SAASR;QACvC;IACF;IAEA,MAAMa,kBAAkB;IACxB,MAAMC,kBAAkB,GAAGC,eAAI,CAACC,GAAG,CAAC,YAAY,EAAED,eAAI,CAACC,GAAG,EAAE;IAE5D,OAAO,SAASC,qBAAqBC,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ;QACzE,IAAI,CAACd,aAAa;YAChBC;QACF;QAEA,IAAI,CAACH,MAAMC,OAAO,EAAE;YAClB,OAAO;QACT,OAAO,IAAIQ,gBAAgBQ,IAAI,CAACF,aAAa;YAC3C,OAAO;QACT,OAAO,IAAID,iBAAiBI,gBAAgB,CAACC,QAAQ,CAACT,kBAAkB;YACtE,OAAO;QACT;QAEA,0EAA0E;QAC1E,0EAA0E;QAC1E,mBAAmB;QACnB,OAAOnB,0BACLS,MAAMC,OAAO,EACbc,YACAK,mBAAmBN,kBAAkBE,UAAUlB;IAEnD;AACF;AAEA,SAASU,qBACPR,KAA8B,EAC9BI,OAAgB,EAChBR,WAAmB;IAEnB,SAASyB;QACP,MAAMhB,WAAWC,kBAAkBV,aAAaQ,QAAQG,SAAS;QACjEP,MAAMC,OAAO,GAAGT,iBAAiBa,UAAUT;IAC7C;IAEA,MAAM0B,UAAUlB,QAAQmB,UAAU;IAClCD,QAAQE,WAAW,CAAC,UAAU,CAAC,EAAEC,OAAO,EAAe;YAOjDzB;QANJ,KAAK,MAAM0B,UAAUD,QAAQE,UAAU,CAAE;YACvC,qEAAqE;YACrE,IAAID,MAAM,CAAC,EAAE,KAAKE,iBAAiBF,MAAM,CAAC,EAAE,KAAKG,eAAe;gBAC9D,OAAOR;YACT;QACF;QACA,KAAIrB,iBAAAA,MAAMC,OAAO,qBAAbD,eAAe8B,iBAAiB,EAAE;YACpC,KAAK,MAAMJ,UAAUD,QAAQM,aAAa,CAAE;gBAC1C,IAAI/B,MAAMC,OAAO,CAAC6B,iBAAiB,CAACE,GAAG,CAACN,MAAM,CAAC,EAAE,GAAG;oBAClD,OAAOL;gBACT;YACF;YACA,KAAK,MAAMK,UAAUD,QAAQQ,YAAY,CAAE;gBACzC,IAAIjC,MAAMC,OAAO,CAAC6B,iBAAiB,CAACE,GAAG,CAACN,MAAM,CAAC,EAAE,GAAG;oBAClD,OAAOL;gBACT;YACF;QACF;IACF;AACF;AAEA,MAAMa,eAAe,CAACC,MAAgBA,IAAIC,OAAO,CAAC,uBAAuB;AAEzE,SAASC,YAAYC,OAAe,EAAEC,MAAc;IAClD,OAAO5B,eAAI,CAAC6B,IAAI,CAACF,SAASC;AAC5B;AAGO,SAAShD,0BACdkD,MAA6B,EAC7B1B,UAAkB,EAClB2B,OAAkD;IAElD,sEAAsE;IACtE,MAAMC,aAAaF,OAAOG,YAAY,CAAC7B,WAAW;IAClD,IAAI4B,cAAc,MAAM;QACtB,KAAK,MAAME,SAASF,WAAY;YAC9B,MAAMG,SAASJ,QAAQG;YACvB,IAAIC,UAAU,MAAM;gBAClBpD,MAAM,GAAGqB,WAAW,IAAI,EAAE8B,OAAO;gBACjC,OAAOC;YACT;QACF;QACA,OAAO;IACT;IAEA,8FAA8F;IAC9F,IAAIL,OAAOM,QAAQ,IAAI,MAAM;QAC3B,MAAMC,QAAQP,OAAOM,QAAQ,CAACE,IAAI,CAAClC;QACnC,IAAIiC,SAAS,MAAM;YACjB,MAAME,SAASF,KAAK,CAAC,EAAE;YACvB,MAAMG,OAAOpC,WAAWqC,KAAK,CAACF,OAAOG,MAAM;YAC3C,KAAK,MAAMC,SAASb,OAAOc,SAAS,CAACL,OAAO,CAAG;gBAC7C,IAAIM,OAAOL;gBACX,IAAIG,MAAMG,MAAM,EAAE;oBAChB,iEAAiE;oBACjE,8DAA8D;oBAC9D,IAAI,CAACN,KAAKO,QAAQ,CAACJ,MAAMG,MAAM,GAAG;oBAClCD,OAAOL,KAAKC,KAAK,CAAC,GAAG,CAACE,MAAMG,MAAM,CAACJ,MAAM;gBAC3C;gBACA,KAAK,MAAMR,SAASS,MAAMK,OAAO,CAAE;oBACjC,MAAMC,iBAAiBf,MAAMT,OAAO,CAAC,KAAKoB;oBAC1C,MAAMV,SAASJ,QAAQkB;oBACvB,IAAId,UAAU,MAAM;wBAClBpD,MAAM,GAAGqB,WAAW,IAAI,EAAE6C,gBAAgB;wBAC1C,OAAOd;oBACT;gBACF;gBACA,OAAO,6BAA6B;YACtC;YAEA,yEAAyE;YACzE,sEAAsE;YACtE,2DAA2D;YAC3D,IAAII,WAAW,MAAMT,OAAOc,SAAS,CAAC,GAAG,IAAI,MAAM;gBACjD,KAAK,MAAMD,SAASb,OAAOc,SAAS,CAAC,GAAG,CAAE;oBACxC,IAAIC,OAAOzC;oBACX,IAAIuC,MAAMG,MAAM,EAAE;wBAChB,IAAI,CAAC1C,WAAW2C,QAAQ,CAACJ,MAAMG,MAAM,GAAG;wBACxCD,OAAOzC,WAAWqC,KAAK,CAAC,GAAG,CAACE,MAAMG,MAAM,CAACJ,MAAM;oBACjD;oBACA,KAAK,MAAMR,SAASS,MAAMK,OAAO,CAAE;wBACjC,MAAMC,iBAAiBf,MAAMT,OAAO,CAAC,KAAKoB;wBAC1C,MAAMV,SAASJ,QAAQkB;wBACvB,IAAId,UAAU,MAAM;4BAClBpD,MAAM,GAAGqB,WAAW,IAAI,EAAE6C,gBAAgB;4BAC1C,OAAOd;wBACT;oBACF;gBACF;YACF;YAEA,OAAO;QACT;IACF;IAEA,kEAAkE;IAClE,6DAA6D;IAC7D,uFAAuF;IACvF,6EAA6E;IAC7E,IAAIL,OAAOH,OAAO,IAAI,MAAM;QAC1B,MAAMsB,iBAAiBvB,YAAYI,OAAOH,OAAO,EAAEvB;QACnD,MAAM+B,SAASJ,QAAQkB;QACvB,IAAId,QAAQ;YACVpD,MAAM,CAAC,SAAS,EAAEqB,WAAW,IAAI,EAAE6C,gBAAgB;YACnD,OAAOd;QACT;IACF;IAEA,OAAO;AACT;AAEA,SAAS1B,mBACPyC,OAA0B,EAC1B7C,QAAuB,EACvBlB,iBAAwC;IAExC,MAAMgE,YAAYhE,kBAAkB+D,SAAS7C;IAC7C,OAAO,SAAS+C,gBAAgBhD,UAAkB;QAChD,IAAI;YACF,OAAO+C,UAAU/C;QACnB,EAAE,OAAOiD,OAAO;YACd,0FAA0F;YAC1F,2FAA2F;YAC3F,MAAMC,oBACJC,IAAAA,uCAA0B,EAACF,UAAUG,IAAAA,uCAA0B,EAACH;YAClE,IAAI,CAACC,mBAAmB;gBACtB,MAAMD;YACR;QACF;QACA,OAAO;IACT;AACF;AAGO,SAASxE,iBACda,QAA+B,EAC/BT,WAAmB;IAEnB,IAAI,CAACS,YAAa,CAACA,SAAS+D,KAAK,IAAI/D,SAASiC,OAAO,IAAI,MAAO;QAC9D,OAAO;IACT;IAEA,oGAAoG;IACpG,2FAA2F;IAC3F,MAAM+B,gBAAgBhE,SAASiC,OAAO,IAAIjC,SAASgE,aAAa,IAAIzE;IAEpE,MAAMwE,QAAQ/D,SAAS+D,KAAK,IAAI,CAAC;IACjC,MAAMxB,eAAyC0B,OAAOC,MAAM,CAAC;IAC7D,MAAMhB,YAA2Ce,OAAOC,MAAM,CAAC;IAC/D,MAAMC,eAAyB,EAAE;IAEjC,IAAK,MAAMC,OAAOL,MAAO;QACvB,IAAI,CAACM,MAAMC,OAAO,CAACP,KAAK,CAACK,IAAI,GAAG;YAC9B;QACF;QACA,kEAAkE;QAClE,MAAMd,UAAUS,KAAK,CAACK,IAAI,CACvBG,MAAM,CAAC,CAACC,IAAM,OAAOA,MAAM,YAAY,CAACA,EAAEnB,QAAQ,CAAC,UACnDoB,GAAG,CAAC,CAACD,IAAMxC,YAAYgC,eAAeQ;QACzC,IAAIlB,QAAQN,MAAM,GAAG,GAAG;YACtB,MAAM0B,YAAYN,IAAIO,OAAO,CAAC;YAC9B,IAAID,cAAc,CAAC,GAAG;gBACpBnC,YAAY,CAAC6B,IAAI,GAAGd;YACtB,OAAO;gBACL,MAAMT,SAASuB,IAAIrB,KAAK,CAAC,GAAG2B;gBAC5B,MAAMtB,SAASgB,IAAIrB,KAAK,CAAC2B,YAAY;gBACrC,IAAI,CAACxB,SAAS,CAACL,OAAO,EAAE;oBACtBK,SAAS,CAACL,OAAO,GAAG,EAAE;oBACtBsB,aAAaS,IAAI,CAAC/B;gBACpB;gBACAK,SAAS,CAACL,OAAO,CAAC+B,IAAI,CAAC;oBAAExB;oBAAQE;gBAAQ;YAC3C;QACF;IACF;IAEA,6BAA6B;IAC7Ba,aAAaU,IAAI,CAAC,CAACC,GAAGC,IAAMA,EAAE/B,MAAM,GAAG8B,EAAE9B,MAAM;IAC/C,MAAMN,WAAWyB,aAAanB,MAAM,GAChC,IAAIgC,OAAO,CAAC,EAAE,EAAEb,aAAaM,GAAG,CAAC5C,cAAcM,IAAI,CAAC,KAAK,CAAC,CAAC,IAC3D;IAEJ,OAAO;QACLI;QACAG;QACAQ;QACAjB,SAASjC,SAASiC,OAAO,IAAI;QAC7BR,mBAAmBzB,SAASyB,iBAAiB;IAC/C;AACF;AAEA,MAAMF,gBAAgB;AACtB,MAAMC,gBAAgB;AAEtB,SAASvB,kBAAkBV,WAAmB,EAAE0F,QAAyB;IACvE,IAAIC,aAA4B;IAChC,IAAID,SAASE,aAAa,CAAC5D,gBAAgB;QACzC2D,aAAa5E,eAAI,CAAC6B,IAAI,CAAC5C,aAAagC;IACtC,OAAO,IAAI0D,SAASE,aAAa,CAAC3D,gBAAgB;QAChD0D,aAAa5E,eAAI,CAAC6B,IAAI,CAAC5C,aAAaiC;IACtC;IAEA,IAAI,CAAC0D,YAAY;QACf,OAAO;IACT;IAEA,IAAI;QACF,OAAOjG,yBAAyBM,aAAa2F,YAAYD;IAC3D,EAAE,OAAOtB,OAAY;QACnB,IAAIA,CAAAA,yBAAAA,MAAOyB,eAAe,KAAIzB,CAAAA,yBAAAA,MAAO0B,IAAI,MAAK,eAAe;YAC3DhG,MAAM,CAAC,gBAAgB,EAAE6F,WAAW,EAAE,EAAEvB,MAAM2B,OAAO,EAAE;YACvD,OAAO;QACT;QACA,MAAM3B;IACR;AACF;AAGO,SAAS1E,yBACdM,WAAmB,EACnB2F,UAAkB,EAClBD,QAAyB;IAEzB,MAAMM,UAAU,IAAIC;IACpB,MAAMC,gBAAgBnF,eAAI,CAACoF,OAAO,CAACR;IAEnC,SAASS,KAAKT,UAA8B;QAC1C,+DAA+D;QAC/D,iGAAiG;QACjG,IAAI,OAAOA,eAAe,YAAYK,QAAQ5D,GAAG,CAACuD,aAAa;YAC7D,OAAO;QACT,OAAO;YACLK,QAAQK,GAAG,CAACV;QACd;QAEA,MAAMW,YAAYvF,eAAI,CAACoF,OAAO,CAACR;QAC/B,MAAMY,MAAMC,mBAAQ,CAACC,IAAI,CAACd,YAAY;YAAEe,OAAO;QAAK;QACpD,MAAMC,MAAMC,gCAAgCL;QAE5C,IAAI7D;QACJ,IAAI8B;QACJ,IAAIC;QACJ,IAAI8B,IAAIM,OAAO,EAAE;YACf,MAAMC,OAAO,CAAChC,MAAMC,OAAO,CAACwB,IAAIM,OAAO,IAAI;gBAACN,IAAIM,OAAO;aAAC,GAAGN,IAAIM,OAAO;YACtE,KAAK,MAAME,OAAOD,KAAM;gBACtB,IAAI,OAAOC,QAAQ,UAAU;oBAC3B,8EAA8E;oBAC9E,MAAMC,UAAUC,mBAAmBF,KAAKT,WAAWZ,SAASwB,WAAW;oBACvE,MAAMC,SAASf,KAAKY;oBACpB,IAAIG,QAAQ;wBACVzE,UAAUyE,OAAOzE,OAAO,IAAIA;wBAC5B8B,QAAQ2C,OAAO3C,KAAK,IAAIA;wBACxBC,gBAAgB0C,OAAO1C,aAAa,IAAIA;oBAC1C;gBACF;YACF;QACF;QAEA,mDAAmD;QACnD,4EAA4E;QAC5E,yBAAyB;QACzB,OAAO;YACL/B,SAASiE,IAAIjE,OAAO,IAAIA;YACxB8B,OAAOmC,IAAInC,KAAK,IAAIA;YACpBC,eAAekC,IAAInC,KAAK,IAAI,OAAO8B,YAAY7B;QACjD;IACF;IAEA,MAAMvB,SAASkD,KAAKT;IACpB,IAAIzC,UAAU,MAAM;QAClB,MAAMkE,YAAY,IAAIC,CAAAA,gBAAY,eAAC,CAACrH;QACpC,MAAMsH,cAAc,IAAIrB;QACxB,kEAAkE;QAClE,KAAK,MAAMsB,qBAAqBvB,QAAS;YACvCsB,YAAYjB,GAAG,CAACe,UAAUI,gBAAgB,CAACD;QAC7C;QACArE,OAAOhB,iBAAiB,GAAGoF;QAC3B,IAAIpE,OAAOR,OAAO,IAAI,MAAM;YAC1BQ,OAAOR,OAAO,GAAG3B,eAAI,CAAC+B,OAAO,CAC3BoD,eACAuB,oBAAoBvE,OAAOR,OAAO,EAAEwD;QAExC;QACA,IAAIhD,OAAOsB,KAAK,IAAI,MAAM;YACxB,IAAK,MAAMK,OAAO3B,OAAOsB,KAAK,CAAE;gBAC9B,MAAMT,UAAUb,OAAOsB,KAAK,CAACK,IAAI;gBACjC,IAAK,IAAI6C,MAAM,GAAGA,MAAM3D,QAAQN,MAAM,EAAEiE,MAAO;oBAC7C3D,OAAO,CAAC2D,IAAI,GAAGD,oBAAoB1D,OAAO,CAAC2D,IAAI,EAAGxB;gBACpD;YACF;QACF;IACF;IACA,OAAOhD;AACT;AAEA,8CAA8C,GAC9C,SAAS0D,gCAAgCL,GAA4B;IAInE,IAAIA,IAAIoB,eAAe,IAAI,QAAQ,OAAOpB,IAAIoB,eAAe,KAAK,UAAU;QAC1E,OAAO,CAAC;IACV;IACA,MAAMC,OAAOrB,IAAIoB,eAAe;IAChC,MAAMjF,UAAU,OAAOkF,KAAKlF,OAAO,KAAK,WAAWkF,KAAKlF,OAAO,GAAGmF;IAElE,IAAIrD;IACJ,IAAIoD,KAAKpD,KAAK,IAAI,QAAQ,OAAOoD,KAAKpD,KAAK,KAAK,UAAU;QACxDA,QAAQ,CAAC;QACT,IAAK,MAAMK,OAAO+C,KAAKpD,KAAK,CAA6B;YACvD,MAAMsD,SAAS,AAACF,KAAKpD,KAAK,AAA4B,CAACK,IAAI;YAC3D,IAAIC,MAAMC,OAAO,CAAC+C,SAAS;gBACzBtD,KAAK,CAACK,IAAI,GAAGiD,OAAO9C,MAAM,CAAC,CAAC+C,IAAmB,OAAOA,MAAM;YAC9D;QACF;IACF;IAEA,OAAO;QAAErF;QAAS8B;IAAM;AAC1B;AAEA,qCAAqC,GACrC,SAASyC,mBACPe,UAAkB,EAClB1B,SAAiB,EACjB2B,UAAsB;IAEtB,IAAIC,SAASD,WAAWtF,MAAM,CAAC5B,eAAI,CAAC6B,IAAI,CAAC0D,WAAW0B;IACpD,IAAIE,OAAOC,MAAM,IAAID,OAAOE,IAAI,KAAK,KAAK;QACxC,OAAOF,OAAOG,QAAQ;IACxB;IAEA,IAAI,CAACL,WAAWlE,QAAQ,CAAC,UAAU;QACjCoE,SAASD,WAAWtF,MAAM,CAAC5B,eAAI,CAAC6B,IAAI,CAAC0D,WAAW0B,aAAa;QAC7D,IAAIE,OAAOC,MAAM,IAAID,OAAOE,IAAI,KAAK,KAAK;YACxC,OAAOF,OAAOG,QAAQ;QACxB;IACF;IAEA,uCAAuC;IACvC,IAAI1F;IACJ,IAAI,CAACqF,WAAWlE,QAAQ,CAAC,UAAU;QACjCnB,SAASsF,WAAWK,kBAAkB,CAAChC,WAAW,CAAC,aAAa,EAAE0B,WAAW,KAAK,CAAC,EAAE;YACnFO,aAAa;QACf;QACA,IAAI5F,UAAU,MAAM;YAClB,OAAOA,OAAO6F,YAAY;QAC5B;IACF;IACA,IAAI7F,UAAU,MAAM;QAClBA,SAASsF,WAAWK,kBAAkB,CAAChC,WAAW,CAAC,aAAa,EAAE0B,YAAY,EAAE;YAC9EO,aAAa;QACf;IACF;IACA,IAAI5F,UAAU,QAAQ,CAACqF,WAAWlE,QAAQ,CAAC,UAAU;QACnDnB,SAASsF,WAAWK,kBAAkB,CACpChC,WACA,CAAC,aAAa,EAAE0B,WAAW,CAAC,EAAEhG,eAAe,EAC7C;YACEuG,aAAa;QACf;IAEJ;IAEA,oGAAoG;IACpG,mGAAmG;IACnG,mEAAmE;IAEnE,OAAO5F,0BAAAA,OAAQ6F,YAAY;AAC7B;AAEA,2EAA2E,GAC3E,SAASf,oBAAoBgB,KAAa,EAAEnC,SAAiB;IAC3D,OAAOmC,MAAMC,UAAU,CAAC,kBACpBD,MAAMjG,OAAO,CAAC,gBAAgB8D,UAAUxC,QAAQ,CAAC/C,eAAI,CAACC,GAAG,IAAI,MAAM,QACnEyH;AACN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/MessageHandler.ts"],"sourcesContent":["import type {\n Connection,\n DebuggerMetadata,\n DebuggerRequest,\n DebuggerResponse,\n DeviceMetadata,\n DeviceRequest,\n DeviceResponse,\n Page,\n} from './types';\n\ntype BaseMessage = Parameters<DeviceMetadata['sendMessage']>[0];\n\nexport abstract class MessageHandler {\n protected page: Page;\n protected device: DeviceMetadata;\n protected debugger: DebuggerMetadata;\n\n constructor(connection: Connection) {\n this.page = connection.page;\n this.device = connection.device;\n this.debugger = connection.debugger;\n }\n\n /** Determine if this middleware should be enabled or disabled, based on the page capabilities */\n isEnabled(): boolean {\n return true;\n }\n\n /** Send a message directly to the device */\n sendToDevice<T = DeviceResponse | DebuggerResponse>(message: Readonly<T>): true {\n this.device.sendMessage(message as BaseMessage);\n return true;\n }\n\n /** Send a message directly to the debugger */\n sendToDebugger<T = DeviceResponse | DebuggerResponse>(message: Readonly<T>): true {\n this.debugger.sendMessage(message as BaseMessage);\n return true;\n }\n\n /**\n * Intercept a message coming from the device, modify or respond to it through `this._sendMessageToDevice`.\n * Return `true` if the message was handled, this will stop the message propagation.\n */\n handleDeviceMessage?(message: DeviceRequest | DeviceResponse): boolean;\n\n /**\n * Intercept a message coming from the debugger, modify or respond to it through `socket.send`.\n * Return `true` if the message was handled, this will stop the message propagation.\n */\n handleDebuggerMessage?(message: DebuggerRequest | DebuggerResponse): boolean;\n}\n"],"names":["MessageHandler","
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/MessageHandler.ts"],"sourcesContent":["import type {\n Connection,\n DebuggerMetadata,\n DebuggerRequest,\n DebuggerResponse,\n DeviceMetadata,\n DeviceRequest,\n DeviceResponse,\n Page,\n} from './types';\n\ntype BaseMessage = Parameters<DeviceMetadata['sendMessage']>[0];\n\nexport abstract class MessageHandler {\n protected page: Page;\n protected device: DeviceMetadata;\n protected debugger: DebuggerMetadata;\n\n constructor(connection: Connection) {\n this.page = connection.page;\n this.device = connection.device;\n this.debugger = connection.debugger;\n }\n\n /** Determine if this middleware should be enabled or disabled, based on the page capabilities */\n isEnabled(): boolean {\n return true;\n }\n\n /** Send a message directly to the device */\n sendToDevice<T = DeviceResponse | DebuggerResponse>(message: Readonly<T>): true {\n this.device.sendMessage(message as BaseMessage);\n return true;\n }\n\n /** Send a message directly to the debugger */\n sendToDebugger<T = DeviceResponse | DebuggerResponse>(message: Readonly<T>): true {\n this.debugger.sendMessage(message as BaseMessage);\n return true;\n }\n\n /**\n * Intercept a message coming from the device, modify or respond to it through `this._sendMessageToDevice`.\n * Return `true` if the message was handled, this will stop the message propagation.\n */\n handleDeviceMessage?(message: DeviceRequest | DeviceResponse): boolean;\n\n /**\n * Intercept a message coming from the debugger, modify or respond to it through `socket.send`.\n * Return `true` if the message was handled, this will stop the message propagation.\n */\n handleDebuggerMessage?(message: DebuggerRequest | DebuggerResponse): boolean;\n}\n"],"names":["MessageHandler","connection","page","device","debugger","isEnabled","sendToDevice","message","sendMessage","sendToDebugger"],"mappings":";;;;+BAasBA;;;eAAAA;;;AAAf,MAAeA;IAKpB,YAAYC,UAAsB,CAAE;QAClC,IAAI,CAACC,IAAI,GAAGD,WAAWC,IAAI;QAC3B,IAAI,CAACC,MAAM,GAAGF,WAAWE,MAAM;QAC/B,IAAI,CAACC,QAAQ,GAAGH,WAAWG,QAAQ;IACrC;IAEA,+FAA+F,GAC/FC,YAAqB;QACnB,OAAO;IACT;IAEA,0CAA0C,GAC1CC,aAAoDC,OAAoB,EAAQ;QAC9E,IAAI,CAACJ,MAAM,CAACK,WAAW,CAACD;QACxB,OAAO;IACT;IAEA,4CAA4C,GAC5CE,eAAsDF,OAAoB,EAAQ;QAChF,IAAI,CAACH,QAAQ,CAACI,WAAW,CAACD;QAC1B,OAAO;IACT;AAaF"}
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
function _export(target, all) {
|
|
6
6
|
for(var name in all)Object.defineProperty(target, name, {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: all
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
attachAtlasAsync
|
|
12
|
+
get attachAtlasAsync () {
|
|
13
13
|
return attachAtlasAsync;
|
|
14
14
|
},
|
|
15
|
-
waitUntilAtlasExportIsReadyAsync
|
|
15
|
+
get waitUntilAtlasExportIsReadyAsync () {
|
|
16
16
|
return waitUntilAtlasExportIsReadyAsync;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/attachAtlas.ts"],"sourcesContent":["import type { ConfigT as MetroConfig } from '@expo/metro/metro-config';\nimport type { Server as ConnectServer } from 'connect';\n\nimport { AtlasPrerequisite } from './AtlasPrerequisite';\nimport { env } from '../../../../utils/env';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/metro/debugging/attachAtlas.ts"],"sourcesContent":["import type { ConfigT as MetroConfig } from '@expo/metro/metro-config';\nimport type { Server as ConnectServer } from 'connect';\n\nimport { AtlasPrerequisite } from './AtlasPrerequisite';\nimport { env } from '../../../../utils/env';\nimport type { EnsureDependenciesOptions } from '../../../doctor/dependencies/ensureDependenciesAsync';\n\nconst debug = require('debug')('expo:metro:debugging:attachAtlas') as typeof console.log;\n\ntype AttachAtlasOptions = Pick<EnsureDependenciesOptions, 'exp'> & {\n isExporting: boolean;\n projectRoot: string;\n middleware?: ConnectServer;\n metroConfig: MetroConfig;\n resetAtlasFile?: boolean;\n};\n\nexport async function attachAtlasAsync(\n options: AttachAtlasOptions\n): Promise<void | ReturnType<typeof import('expo-atlas/cli').createExpoAtlasMiddleware>> {\n if (!env.EXPO_ATLAS) {\n return;\n }\n\n debug('Atlas is enabled, initializing for this project...');\n await new AtlasPrerequisite(options.projectRoot).bootstrapAsync({ exp: options.exp });\n\n return !options.isExporting\n ? attachAtlasToDevServer(options)\n : await attachAtlasToExport(options);\n}\n\n/**\n * Attach Atlas to the Metro bundler for development mode.\n * This includes attaching to Metro's middleware stack to host the Atlas UI.\n */\nfunction attachAtlasToDevServer(\n options: Pick<AttachAtlasOptions, 'projectRoot' | 'middleware' | 'metroConfig'>\n): void | ReturnType<typeof import('expo-atlas/cli').createExpoAtlasMiddleware> {\n if (!options.middleware) {\n throw new Error(\n 'Expected middleware to be provided for Atlas when running in development mode'\n );\n }\n\n const atlas = importAtlasForDev(options.projectRoot);\n if (!atlas) {\n return debug('Atlas is not installed in the project, skipping initialization');\n }\n\n // TODO(@kitten): Atlas' typings don't match @expo/metro yet\n const instance = atlas.createExpoAtlasMiddleware(options.metroConfig as any);\n options.middleware.use('/_expo/atlas', instance.middleware);\n debug('Attached Atlas middleware for development on: /_expo/atlas');\n return instance;\n}\n\nfunction importAtlasForDev(projectRoot: string): null | typeof import('expo-atlas/cli') {\n try {\n return require(require.resolve('expo-atlas/cli', { paths: [projectRoot] }));\n } catch (error: any) {\n debug('Failed to load Atlas from project:', error);\n return null;\n }\n}\n\n/**\n * Attach Atlas to the Metro bundler for exporting mode.\n * This only includes attaching the custom serializer to the Metro config.\n */\nasync function attachAtlasToExport(\n options: Pick<AttachAtlasOptions, 'projectRoot' | 'metroConfig' | 'resetAtlasFile'>\n): Promise<void> {\n const atlas = importAtlasForExport(options.projectRoot);\n if (!atlas) {\n return debug('Atlas is not installed in the project, skipping initialization');\n }\n\n if (options.resetAtlasFile) {\n const filePath = await atlas.resetExpoAtlasFile(options.projectRoot);\n debug('(Re)created Atlas file at:', filePath);\n }\n\n // TODO(@kitten): Atlas' typings don't match @expo/metro yet\n atlas.withExpoAtlas(options.metroConfig as any);\n debug('Attached Atlas to Metro config for exporting');\n}\n\nfunction importAtlasForExport(projectRoot: string): null | typeof import('expo-atlas/metro') {\n try {\n return require(require.resolve('expo-atlas/metro', { paths: [projectRoot] }));\n } catch (error: any) {\n debug('Failed to load Atlas from project:', error);\n return null;\n }\n}\n\n/**\n * Wait until the Atlas file has all data written.\n * Note, this is a workaround whenever `process.exit` is required, avoid if possible.\n * @internal\n */\nexport async function waitUntilAtlasExportIsReadyAsync(projectRoot: string) {\n if (!env.EXPO_ATLAS) return;\n\n const atlas = importAtlasForExport(projectRoot);\n\n if (!atlas) {\n return debug('Atlas is not loaded, cannot wait for export to finish');\n }\n if (typeof atlas.waitUntilAtlasFileReady !== 'function') {\n return debug('Atlas is outdated, cannot wait for export to finish');\n }\n\n debug('Waiting for Atlas to finish exporting...');\n await atlas.waitUntilAtlasFileReady();\n debug('Atlas export is ready');\n}\n"],"names":["attachAtlasAsync","waitUntilAtlasExportIsReadyAsync","debug","require","options","env","EXPO_ATLAS","AtlasPrerequisite","projectRoot","bootstrapAsync","exp","isExporting","attachAtlasToDevServer","attachAtlasToExport","middleware","Error","atlas","importAtlasForDev","instance","createExpoAtlasMiddleware","metroConfig","use","resolve","paths","error","importAtlasForExport","resetAtlasFile","filePath","resetExpoAtlasFile","withExpoAtlas","waitUntilAtlasFileReady"],"mappings":";;;;;;;;;;;QAiBsBA;eAAAA;;QAqFAC;eAAAA;;;mCAnGY;qBACd;AAGpB,MAAMC,QAAQC,QAAQ,SAAS;AAUxB,eAAeH,iBACpBI,OAA2B;IAE3B,IAAI,CAACC,QAAG,CAACC,UAAU,EAAE;QACnB;IACF;IAEAJ,MAAM;IACN,MAAM,IAAIK,oCAAiB,CAACH,QAAQI,WAAW,EAAEC,cAAc,CAAC;QAAEC,KAAKN,QAAQM,GAAG;IAAC;IAEnF,OAAO,CAACN,QAAQO,WAAW,GACvBC,uBAAuBR,WACvB,MAAMS,oBAAoBT;AAChC;AAEA;;;CAGC,GACD,SAASQ,uBACPR,OAA+E;IAE/E,IAAI,CAACA,QAAQU,UAAU,EAAE;QACvB,MAAM,IAAIC,MACR;IAEJ;IAEA,MAAMC,QAAQC,kBAAkBb,QAAQI,WAAW;IACnD,IAAI,CAACQ,OAAO;QACV,OAAOd,MAAM;IACf;IAEA,4DAA4D;IAC5D,MAAMgB,WAAWF,MAAMG,yBAAyB,CAACf,QAAQgB,WAAW;IACpEhB,QAAQU,UAAU,CAACO,GAAG,CAAC,gBAAgBH,SAASJ,UAAU;IAC1DZ,MAAM;IACN,OAAOgB;AACT;AAEA,SAASD,kBAAkBT,WAAmB;IAC5C,IAAI;QACF,OAAOL,QAAQA,QAAQmB,OAAO,CAAC,kBAAkB;YAAEC,OAAO;gBAACf;aAAY;QAAC;IAC1E,EAAE,OAAOgB,OAAY;QACnBtB,MAAM,sCAAsCsB;QAC5C,OAAO;IACT;AACF;AAEA;;;CAGC,GACD,eAAeX,oBACbT,OAAmF;IAEnF,MAAMY,QAAQS,qBAAqBrB,QAAQI,WAAW;IACtD,IAAI,CAACQ,OAAO;QACV,OAAOd,MAAM;IACf;IAEA,IAAIE,QAAQsB,cAAc,EAAE;QAC1B,MAAMC,WAAW,MAAMX,MAAMY,kBAAkB,CAACxB,QAAQI,WAAW;QACnEN,MAAM,8BAA8ByB;IACtC;IAEA,4DAA4D;IAC5DX,MAAMa,aAAa,CAACzB,QAAQgB,WAAW;IACvClB,MAAM;AACR;AAEA,SAASuB,qBAAqBjB,WAAmB;IAC/C,IAAI;QACF,OAAOL,QAAQA,QAAQmB,OAAO,CAAC,oBAAoB;YAAEC,OAAO;gBAACf;aAAY;QAAC;IAC5E,EAAE,OAAOgB,OAAY;QACnBtB,MAAM,sCAAsCsB;QAC5C,OAAO;IACT;AACF;AAOO,eAAevB,iCAAiCO,WAAmB;IACxE,IAAI,CAACH,QAAG,CAACC,UAAU,EAAE;IAErB,MAAMU,QAAQS,qBAAqBjB;IAEnC,IAAI,CAACQ,OAAO;QACV,OAAOd,MAAM;IACf;IACA,IAAI,OAAOc,MAAMc,uBAAuB,KAAK,YAAY;QACvD,OAAO5B,MAAM;IACf;IAEAA,MAAM;IACN,MAAMc,MAAMc,uBAAuB;IACnC5B,MAAM;AACR"}
|