@expo/cli 0.11.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +2 -2
- package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +1 -1
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +1 -1
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +5 -5
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +1 -1
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/actions.js +2 -2
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/otp.js +1 -1
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +2 -2
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +17 -1
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/customize/customizeAsync.js +1 -1
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +29 -2
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/templates.js +8 -0
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +54 -0
- package/build/src/customize/typescript.js.map +1 -0
- package/build/src/export/createBundles.js +1 -31
- package/build/src/export/createBundles.js.map +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +52 -4
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/index.js +1 -3
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +6 -10
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +73 -46
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +4 -4
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportHermes.js +204 -0
- package/build/src/export/exportHermes.js.map +1 -0
- package/build/src/export/exportStaticAsync.js +48 -14
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +7 -7
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +35 -12
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +1 -1
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +118 -0
- package/build/src/export/persistMetroAssets.js.map +1 -0
- package/build/src/export/printBundleSizes.js.map +1 -1
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +5 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +1 -1
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/index.js +1 -0
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +2 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/resolveOptions.js +7 -4
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +5 -9
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/index.js +2 -0
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +7 -6
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +4 -2
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +8 -5
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/register/registerAsync.js +0 -1
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +1 -1
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +7 -2
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +2 -2
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +2 -2
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +1 -1
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +2 -2
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +8 -3
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/index.js +0 -2
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +4 -4
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +3 -3
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +1 -1
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +1 -1
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +2 -2
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +1 -1
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +1 -1
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +1 -1
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/resolveOptions.js +0 -5
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +4 -3
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +4 -11
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +3 -2
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +2 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +3 -12
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +57 -36
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +15 -4
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +74 -13
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/resolveFromProject.js +13 -4
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +1 -1
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +43 -5
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -3
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +3 -3
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +8 -5
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +69 -0
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +57 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +13 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +79 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +78 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +121 -0
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -0
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +64 -0
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +19 -0
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -0
- package/build/src/start/server/middleware/mutations.js +19 -0
- package/build/src/start/server/middleware/mutations.js.map +1 -0
- package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js +31 -0
- package/build/src/start/server/middleware/remoteDevtoolsCorsMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js +17 -0
- package/build/src/start/server/middleware/remoteDevtoolsSecurityHeadersMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/server.types.js.map +1 -1
- package/build/src/start/server/middleware/suppressErrorMiddleware.js +16 -0
- package/build/src/start/server/middleware/suppressErrorMiddleware.js.map +1 -0
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +6 -6
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +19 -87
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +1 -1
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/startAsync.js +10 -32
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +1 -1
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +2 -2
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +2 -2
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +1 -1
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +2 -2
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +1 -1
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +1 -1
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +2 -2
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/git.js +1 -1
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +1 -1
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +1 -1
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/npm.js +1 -1
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/plist.js +1 -1
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +46 -18
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +1 -1
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/scheme.js +1 -1
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +85 -5
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/package.json +19 -13
- package/build/src/api/signManifest.js +0 -26
- package/build/src/api/signManifest.js.map +0 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
- package/build/src/start/server/middleware/createDevServerMiddleware.js +0 -24
- package/build/src/start/server/middleware/createDevServerMiddleware.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/openPlatforms.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/server/openPlatforms.ts"],"sourcesContent":["import { DevServerManager } from './DevServerManager';\nimport { AbortCommandError } from '../../utils/errors';\nimport { Options } from '../resolveOptions';\n\n/** Launch the app on various platforms in parallel. */\nexport async function openPlatformsAsync(\n devServerManager: DevServerManager,\n options: Pick<Options, 'ios' | 'android' | 'web'>\n) {\n const results = await Promise.allSettled([\n options.android ? devServerManager.getDefaultDevServer().openPlatformAsync('emulator') : null,\n options.ios ? devServerManager.getDefaultDevServer().openPlatformAsync('simulator') : null,\n options.web\n ? devServerManager\n .ensureWebDevServerRunningAsync()\n .then(() => devServerManager.getWebDevServer()?.openPlatformAsync('desktop'))\n : null,\n ]);\n\n const errors = results\n .map((result) => (result.status === 'rejected' ? result.reason : null))\n .filter(Boolean);\n\n if (errors.length) {\n // ctrl+c\n const isEscapedError = errors.some((error: any) => error.code === 'ABORTED');\n if (isEscapedError) {\n throw new AbortCommandError();\n }\n throw errors[0];\n }\n\n return !!options.android || !!options.ios;\n}\n"],"names":["openPlatformsAsync","devServerManager","options","results","Promise","allSettled","android","getDefaultDevServer","openPlatformAsync","ios","web","ensureWebDevServerRunningAsync","then","getWebDevServer","errors","map","result","status","reason","filter","Boolean","length","isEscapedError","some","error","code","AbortCommandError"],"mappings":"AAAA;;;;QAKsBA,kBAAkB,GAAlBA,kBAAkB;AAJN,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AAI/C,eAAeA,kBAAkB,CACtCC,gBAAkC,EAClCC,OAAiD,EACjD;IACA,MAAMC,OAAO,GAAG,MAAMC,OAAO,CAACC,UAAU,CAAC;QACvCH,OAAO,CAACI,OAAO,GAAGL,gBAAgB,CAACM,mBAAmB,EAAE,CAACC,iBAAiB,CAAC,UAAU,CAAC,GAAG,IAAI;QAC7FN,OAAO,CAACO,GAAG,GAAGR,gBAAgB,CAACM,mBAAmB,EAAE,CAACC,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI;QAC1FN,OAAO,CAACQ,GAAG,GACPT,gBAAgB,CACbU,8BAA8B,EAAE,CAChCC,IAAI,CAAC;gBAAMX,GAAkC;YAAlCA,OAAAA,CAAAA,GAAkC,GAAlCA,gBAAgB,CAACY,eAAe,EAAE,SAAmB,GAArDZ,KAAAA,CAAqD,GAArDA,GAAkC,CAAEO,iBAAiB,CAAC,SAAS,CAAC,CAAA;SAAA,CAAC,GAC/E,IAAI;KACT,CAAC,AAAC;IAEH,MAAMM,MAAM,GAAGX,OAAO,CACnBY,GAAG,CAAC,CAACC,MAAM,GAAMA,MAAM,CAACC,MAAM,KAAK,UAAU,GAAGD,MAAM,CAACE,MAAM,GAAG,IAAI;IAAC,CAAC,CACtEC,MAAM,CAACC,OAAO,CAAC,AAAC;IAEnB,IAAIN,MAAM,CAACO,MAAM,EAAE;QACjB,SAAS;QACT,MAAMC,cAAc,GAAGR,MAAM,CAACS,IAAI,CAAC,CAACC,KAAU,GAAKA,KAAK,CAACC,IAAI,KAAK,SAAS;QAAA,CAAC,AAAC;QAC7E,IAAIH,cAAc,EAAE;YAClB,MAAM,IAAII,OAAiB,kBAAA,EAAE,CAAC;SAC/B;QACD,MAAMZ,MAAM,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,OAAO,CAAC,CAACZ,OAAO,CAACI,OAAO,IAAI,CAAC,CAACJ,OAAO,CAACO,GAAG,CAAC;CAC3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/start/server/type-generation/__typetests__/fixtures/basic.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\n\nimport type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\nimport type { Router as OriginalRouter } from 'expo-router/src/types';\nexport * from 'expo-router/build';\n\n// prettier-ignore\ntype StaticRoutes = `/apple` | `/banana`;\n// prettier-ignore\ntype DynamicRoutes<T extends string> = `/colors/${SingleRoutePart<T>}` | `/animals/${CatchAllRoutePart<T>}` | `/mix/${SingleRoutePart<T>}/${SingleRoutePart<T>}/${CatchAllRoutePart<T>}`;\n// prettier-ignore\ntype DynamicRouteTemplate = `/colors/[color]` | `/animals/[...animal]` | `/mix/[fruit]/[color]/[...animals]`;\n\ntype RelativePathString = `./${string}` | `../${string}` | '..';\ntype AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\ntype ExternalPathString = `http${string}`;\ntype ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\ntype AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n/****************\n * Route Utils *\n ****************/\n\ntype SearchOrHash = `?${string}` | `#${string}`;\ntype UnknownInputParams = Record<string, string | number | (string | number)[]>;\ntype UnknownOutputParams = Record<string, string | string[]>;\n\n/**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\ntype SingleRoutePart<S extends string> = S extends `${string}/${string}`\n ? never\n : S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `(${string})`\n ? never\n : S extends `[${string}]`\n ? never\n : S;\n\n/**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\ntype CatchAllRoutePart<S extends string> = S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `${string}(${string})${string}`\n ? never\n : S extends `${string}[${string}]${string}`\n ? never\n : S;\n\n// type OptionalCatchAllRoutePart<S extends string> = S extends `${string}${SearchOrHash}` ? never : S\n\n/**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\ntype IsParameter<Part> = Part extends `[${infer ParamName}]` ? ParamName : never;\n\n/**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\ntype ParameterNames<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n/**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\ntype RouteSegments<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n/**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\ntype InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? (string | number)[] : string | number;\n} & UnknownInputParams;\n\ntype OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? string[] : string;\n} & UnknownOutputParams;\n\n/**\n * Returns the search parameters for a route.\n */\nexport type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n/**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\nexport type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends `${infer P}${SearchOrHash}`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n/*********\n * Href *\n *********/\n\nexport type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\nexport type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname']
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/start/server/type-generation/__typetests__/fixtures/basic.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\n\nimport type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\nimport type { Router as OriginalRouter } from 'expo-router/src/types';\nexport * from 'expo-router/build';\n\n// prettier-ignore\ntype StaticRoutes = `/apple` | `/banana`;\n// prettier-ignore\ntype DynamicRoutes<T extends string> = `/colors/${SingleRoutePart<T>}` | `/animals/${CatchAllRoutePart<T>}` | `/mix/${SingleRoutePart<T>}/${SingleRoutePart<T>}/${CatchAllRoutePart<T>}`;\n// prettier-ignore\ntype DynamicRouteTemplate = `/colors/[color]` | `/animals/[...animal]` | `/mix/[fruit]/[color]/[...animals]`;\n\ntype RelativePathString = `./${string}` | `../${string}` | '..';\ntype AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\ntype ExternalPathString = `http${string}`;\ntype ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\ntype AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n/****************\n * Route Utils *\n ****************/\n\ntype SearchOrHash = `?${string}` | `#${string}`;\ntype UnknownInputParams = Record<string, string | number | (string | number)[]>;\ntype UnknownOutputParams = Record<string, string | string[]>;\n\n/**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\ntype SingleRoutePart<S extends string> = S extends `${string}/${string}`\n ? never\n : S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `(${string})`\n ? never\n : S extends `[${string}]`\n ? never\n : S;\n\n/**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\ntype CatchAllRoutePart<S extends string> = S extends `${string}${SearchOrHash}`\n ? never\n : S extends ''\n ? never\n : S extends `${string}(${string})${string}`\n ? never\n : S extends `${string}[${string}]${string}`\n ? never\n : S;\n\n// type OptionalCatchAllRoutePart<S extends string> = S extends `${string}${SearchOrHash}` ? never : S\n\n/**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\ntype IsParameter<Part> = Part extends `[${infer ParamName}]` ? ParamName : never;\n\n/**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\ntype ParameterNames<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n/**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\ntype RouteSegments<Path> = Path extends `${infer PartA}/${infer PartB}`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n/**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\ntype InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? (string | number)[] : string | number;\n} & UnknownInputParams;\n\ntype OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends `...${infer Name}`\n ? Name\n : Key]: Key extends `...${string}` ? string[] : string;\n} & UnknownOutputParams;\n\n/**\n * Returns the search parameters for a route.\n */\nexport type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n/**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\nexport type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends `${infer P}${SearchOrHash}`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n/*********\n * Href *\n *********/\n\nexport type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\nexport type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname'],\n> = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n/***********************\n * Expo Router Exports *\n ***********************/\n\nexport type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n};\n\n/** The imperative router. */\nexport declare const router: Router;\n\n/************\n * <Link /> *\n ************/\nexport interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n}\n\nexport interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n}\n\n/**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. `/feeds/hot`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n */\nexport declare const Link: LinkComponent;\n\n/** Redirects to the href as soon as the component is mounted. */\nexport declare const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n) => JSX.Element;\n\n/************\n * Hooks *\n ************/\nexport declare function useRouter(): Router;\n\nexport declare function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n>(): T extends AllRoutes ? SearchParams<T> : T;\n\n/** @deprecated renamed to `useGlobalSearchParams` */\nexport declare function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n>(): T extends AllRoutes ? SearchParams<T> : T;\n\nexport declare function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n>(): T extends AllRoutes ? SearchParams<T> : T;\n\nexport declare function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString,\n>(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n"],"names":[],"mappings":"AAIA;;;;6CAEc,mBAAmB;AAAjC,YAAA,MAAkC;;2CAAlC,MAAkC;;;;mBAAlC,MAAkC;;;EAAA"}
|
|
@@ -31,7 +31,7 @@ exports.CAPTURE_GROUP_REGEX = CAPTURE_GROUP_REGEX;
|
|
|
31
31
|
async function setupTypedRoutes({ server , metro , typesDirectory , projectRoot , routerDirectory }) {
|
|
32
32
|
const absoluteRouterDirectory = _path.default.join(projectRoot, routerDirectory);
|
|
33
33
|
const { filePathToRoute , staticRoutes , dynamicRoutes , addFilePath , isRouteFile } = getTypedRoutesUtils(absoluteRouterDirectory);
|
|
34
|
-
if (metro) {
|
|
34
|
+
if (metro && server) {
|
|
35
35
|
// Setup out watcher first
|
|
36
36
|
(0, _metroWatchTypeScriptFiles).metroWatchTypeScriptFiles({
|
|
37
37
|
projectRoot,
|
|
@@ -395,7 +395,7 @@ declare module "expo-router" {
|
|
|
395
395
|
|
|
396
396
|
export type HrefObject<
|
|
397
397
|
R extends Record<'pathname', string>,
|
|
398
|
-
P = R['pathname']
|
|
398
|
+
P = R['pathname'],
|
|
399
399
|
> = P extends DynamicRouteTemplate
|
|
400
400
|
? { pathname: P; params: InputRouteParams<P> }
|
|
401
401
|
: P extends Route<P>
|
|
@@ -453,20 +453,20 @@ declare module "expo-router" {
|
|
|
453
453
|
export function useRouter(): Router;
|
|
454
454
|
|
|
455
455
|
export function useLocalSearchParams<
|
|
456
|
-
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams
|
|
456
|
+
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,
|
|
457
457
|
>(): T extends AllRoutes ? SearchParams<T> : T;
|
|
458
458
|
|
|
459
459
|
/** @deprecated renamed to \`useGlobalSearchParams\` */
|
|
460
460
|
export function useSearchParams<
|
|
461
|
-
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams
|
|
461
|
+
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,
|
|
462
462
|
>(): T extends AllRoutes ? SearchParams<T> : T;
|
|
463
463
|
|
|
464
464
|
export function useGlobalSearchParams<
|
|
465
|
-
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams
|
|
465
|
+
T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,
|
|
466
466
|
>(): T extends AllRoutes ? SearchParams<T> : T;
|
|
467
467
|
|
|
468
468
|
export function useSegments<
|
|
469
|
-
T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString
|
|
469
|
+
T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString,
|
|
470
470
|
>(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;
|
|
471
471
|
}
|
|
472
472
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { debounce } from 'lodash';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { directoryExistsAsync } from '../../../utils/dir';\nimport { unsafeTemplate } from '../../../utils/template';\nimport { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n\nexport interface SetupTypedRoutesOptions {\n server: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n routerDirectory: string;\n}\n\nexport async function setupTypedRoutes({\n server,\n metro,\n typesDirectory,\n projectRoot,\n routerDirectory,\n}: SetupTypedRoutesOptions) {\n const absoluteRouterDirectory = path.join(projectRoot, routerDirectory);\n\n const { filePathToRoute, staticRoutes, dynamicRoutes, addFilePath, isRouteFile } =\n getTypedRoutesUtils(absoluteRouterDirectory);\n\n if (metro) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n async callback({ filePath, type }) {\n if (!isRouteFile(filePath)) {\n return;\n }\n\n let shouldRegenerate = false;\n\n if (type === 'delete') {\n const route = filePathToRoute(filePath);\n staticRoutes.delete(route);\n dynamicRoutes.delete(route);\n shouldRegenerate = true;\n } else {\n shouldRegenerate = addFilePath(filePath);\n }\n\n if (shouldRegenerate) {\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n }\n },\n });\n }\n\n if (await directoryExistsAsync(absoluteRouterDirectory)) {\n // Do we need to walk the entire tree on startup?\n // Idea: Store the list of files in the last write, then simply check Git for what files have changed\n await walk(absoluteRouterDirectory, addFilePath);\n }\n\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n}\n\n/**\n * Generate a router.d.ts file that contains all of the routes in the project.\n * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)\n */\nconst regenerateRouterDotTS = debounce(\n async (\n typesDir: string,\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n ) => {\n await fs.mkdir(typesDir, { recursive: true });\n await fs.writeFile(\n path.resolve(typesDir, './router.d.ts'),\n getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates)\n );\n },\n 100\n);\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n // Layout and filenames starting with `+` are not routes\n if (filePath.match(/_layout\\.[tj]sx?$/) || filePath.match(/\\/\\+/)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n if (!isRouteFile(filePath)) {\n return false;\n }\n\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Recursively walk a directory and call the callback with the file path.\n */\nasync function walk(directory: string, callback: (filePath: string) => void) {\n const files = await fs.readdir(directory);\n for (const file of files) {\n const p = path.join(directory, file);\n if ((await fs.stat(p)).isDirectory()) {\n await walk(p, callback);\n } else {\n // Normalise the paths so they are easier to convert to URLs\n const normalizedPath = p.replaceAll(path.sep, '/');\n callback(normalizedPath);\n }\n }\n}\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1].trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/src/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`http\\${string}\\`;\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname']\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n */\n export const Link: LinkComponent;\n \n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["setupTypedRoutes","getTemplateString","getTypedRoutesUtils","extrapolateGroupRoutes","CAPTURE_DYNAMIC_PARAMS","CATCH_ALL","SLUG","ARRAY_GROUP_REGEX","CAPTURE_GROUP_REGEX","server","metro","typesDirectory","projectRoot","routerDirectory","absoluteRouterDirectory","path","join","filePathToRoute","staticRoutes","dynamicRoutes","addFilePath","isRouteFile","metroWatchTypeScriptFiles","eventTypes","callback","filePath","type","shouldRegenerate","route","delete","regenerateRouterDotTS","Set","values","flatMap","v","Array","from","keys","directoryExistsAsync","walk","debounce","typesDir","dynamicRouteTemplates","fs","mkdir","recursive","writeFile","resolve","routerDotTSTemplate","setToUnionType","dynamicRouteParams","appRoot","filePathSeperator","sep","Map","normalizedFilePath","replaceAll","normalizedAppRoot","replace","match","relative","startsWith","isAbsolute","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","directory","files","readdir","file","p","stat","isDirectory","normalizedPath","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { debounce } from 'lodash';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { directoryExistsAsync } from '../../../utils/dir';\nimport { unsafeTemplate } from '../../../utils/template';\nimport { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n\nexport interface SetupTypedRoutesOptions {\n server?: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n routerDirectory: string;\n}\n\nexport async function setupTypedRoutes({\n server,\n metro,\n typesDirectory,\n projectRoot,\n routerDirectory,\n}: SetupTypedRoutesOptions) {\n const absoluteRouterDirectory = path.join(projectRoot, routerDirectory);\n\n const { filePathToRoute, staticRoutes, dynamicRoutes, addFilePath, isRouteFile } =\n getTypedRoutesUtils(absoluteRouterDirectory);\n\n if (metro && server) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n async callback({ filePath, type }) {\n if (!isRouteFile(filePath)) {\n return;\n }\n\n let shouldRegenerate = false;\n\n if (type === 'delete') {\n const route = filePathToRoute(filePath);\n staticRoutes.delete(route);\n dynamicRoutes.delete(route);\n shouldRegenerate = true;\n } else {\n shouldRegenerate = addFilePath(filePath);\n }\n\n if (shouldRegenerate) {\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n }\n },\n });\n }\n\n if (await directoryExistsAsync(absoluteRouterDirectory)) {\n // Do we need to walk the entire tree on startup?\n // Idea: Store the list of files in the last write, then simply check Git for what files have changed\n await walk(absoluteRouterDirectory, addFilePath);\n }\n\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n}\n\n/**\n * Generate a router.d.ts file that contains all of the routes in the project.\n * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)\n */\nconst regenerateRouterDotTS = debounce(\n async (\n typesDir: string,\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n ) => {\n await fs.mkdir(typesDir, { recursive: true });\n await fs.writeFile(\n path.resolve(typesDir, './router.d.ts'),\n getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates)\n );\n },\n 100\n);\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n // Layout and filenames starting with `+` are not routes\n if (filePath.match(/_layout\\.[tj]sx?$/) || filePath.match(/\\/\\+/)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n if (!isRouteFile(filePath)) {\n return false;\n }\n\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Recursively walk a directory and call the callback with the file path.\n */\nasync function walk(directory: string, callback: (filePath: string) => void) {\n const files = await fs.readdir(directory);\n for (const file of files) {\n const p = path.join(directory, file);\n if ((await fs.stat(p)).isDirectory()) {\n await walk(p, callback);\n } else {\n // Normalise the paths so they are easier to convert to URLs\n const normalizedPath = p.replaceAll(path.sep, '/');\n callback(normalizedPath);\n }\n }\n}\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1].trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/src/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`http\\${string}\\`;\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname'],\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n */\n export const Link: LinkComponent;\n \n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString,\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["setupTypedRoutes","getTemplateString","getTypedRoutesUtils","extrapolateGroupRoutes","CAPTURE_DYNAMIC_PARAMS","CATCH_ALL","SLUG","ARRAY_GROUP_REGEX","CAPTURE_GROUP_REGEX","server","metro","typesDirectory","projectRoot","routerDirectory","absoluteRouterDirectory","path","join","filePathToRoute","staticRoutes","dynamicRoutes","addFilePath","isRouteFile","metroWatchTypeScriptFiles","eventTypes","callback","filePath","type","shouldRegenerate","route","delete","regenerateRouterDotTS","Set","values","flatMap","v","Array","from","keys","directoryExistsAsync","walk","debounce","typesDir","dynamicRouteTemplates","fs","mkdir","recursive","writeFile","resolve","routerDotTSTemplate","setToUnionType","dynamicRouteParams","appRoot","filePathSeperator","sep","Map","normalizedFilePath","replaceAll","normalizedAppRoot","replace","match","relative","startsWith","isAbsolute","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","directory","files","readdir","file","p","stat","isDirectory","normalizedPath","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
|
|
@@ -6,12 +6,12 @@ exports.startTypescriptTypeGenerationAsync = startTypescriptTypeGenerationAsync;
|
|
|
6
6
|
var _config = require("@expo/config");
|
|
7
7
|
var _promises = _interopRequireDefault(require("fs/promises"));
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var _mergeGitIgnorePaths = require("../../../utils/mergeGitIgnorePaths");
|
|
10
|
-
var _dotExpo = require("../../project/dotExpo");
|
|
11
|
-
var _router = require("../metro/router");
|
|
12
9
|
var _expoEnv = require("./expo-env");
|
|
13
10
|
var _routes = require("./routes");
|
|
14
11
|
var _tsconfig = require("./tsconfig");
|
|
12
|
+
var _mergeGitIgnorePaths = require("../../../utils/mergeGitIgnorePaths");
|
|
13
|
+
var _dotExpo = require("../../project/dotExpo");
|
|
14
|
+
var _router = require("../metro/router");
|
|
15
15
|
function _interopRequireDefault(obj) {
|
|
16
16
|
return obj && obj.__esModule ? obj : {
|
|
17
17
|
default: obj
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { removeExpoEnvDTS, writeExpoEnvDTS } from './expo-env';\nimport { setupTypedRoutes } from './routes';\nimport { forceRemovalTSConfig, forceUpdateTSConfig } from './tsconfig';\nimport { upsertGitIgnoreContents, removeFromGitIgnore } from '../../../utils/mergeGitIgnorePaths';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { ServerLike } from '../BundlerDevServer';\nimport { getRouterDirectory } from '../metro/router';\n\nexport interface TypeScriptTypeGenerationOptions {\n server?: ServerLike;\n metro?: Server | null;\n projectRoot: string;\n}\n\nconst debug = require('debug')('expo:typed-routes') as typeof console.log;\n\n/** Setup all requisite features for statically typed routes in Expo Router v2 / SDK +49. */\nexport async function startTypescriptTypeGenerationAsync({\n metro,\n projectRoot,\n server,\n}: TypeScriptTypeGenerationOptions) {\n const { exp } = getConfig(projectRoot);\n\n // If typed routes are disabled, remove any files that were added.\n if (!exp.experiments?.typedRoutes) {\n debug('Removing typed routes side-effects (experiments.typedRoutes: false)');\n const gitIgnorePath = path.join(projectRoot, '.gitignore');\n await Promise.all([\n forceRemovalTSConfig(projectRoot),\n removeExpoEnvDTS(projectRoot),\n removeFromGitIgnore(gitIgnorePath, 'expo-env.d.ts'),\n ]);\n } else {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const typesDirectory = path.resolve(dotExpoDir, './types');\n debug(\n 'Ensuring typed routes side-effects are setup (experiments.typedRoutes: true, typesDirectory: %s)',\n typesDirectory\n );\n\n // Ensure the types directory exists.\n await fs.mkdir(typesDirectory, { recursive: true });\n\n await Promise.all([\n upsertGitIgnoreContents(path.join(projectRoot, '.gitignore'), 'expo-env.d.ts'),\n writeExpoEnvDTS(projectRoot),\n forceUpdateTSConfig(projectRoot),\n setupTypedRoutes({\n metro,\n server,\n typesDirectory,\n projectRoot,\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n }),\n ]);\n }\n}\n"],"names":["startTypescriptTypeGenerationAsync","debug","require","metro","projectRoot","server","exp","getConfig","experiments","typedRoutes","gitIgnorePath","path","join","Promise","all","forceRemovalTSConfig","removeExpoEnvDTS","removeFromGitIgnore","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","typesDirectory","resolve","fs","mkdir","recursive","upsertGitIgnoreContents","writeExpoEnvDTS","forceUpdateTSConfig","setupTypedRoutes","routerDirectory","extra","router","unstable_src","getRouterDirectory"],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ var _chalk = _interopRequireDefault(require("chalk"));
|
|
|
7
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
8
8
|
var path = _interopRequireWildcard(require("path"));
|
|
9
9
|
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
10
|
+
var _compile = require("./compile");
|
|
11
|
+
var _resolveFromProject = require("./resolveFromProject");
|
|
12
|
+
var _tls = require("./tls");
|
|
10
13
|
var Log = _interopRequireWildcard(require("../../../log"));
|
|
11
14
|
var _env = require("../../../utils/env");
|
|
12
15
|
var _errors = require("../../../utils/errors");
|
|
@@ -16,9 +19,6 @@ var _port = require("../../../utils/port");
|
|
|
16
19
|
var _progress = require("../../../utils/progress");
|
|
17
20
|
var _dotExpo = require("../../project/dotExpo");
|
|
18
21
|
var _bundlerDevServer = require("../BundlerDevServer");
|
|
19
|
-
var _compile = require("./compile");
|
|
20
|
-
var _resolveFromProject = require("./resolveFromProject");
|
|
21
|
-
var _tls = require("./tls");
|
|
22
22
|
function _interopRequireDefault(obj) {
|
|
23
23
|
return obj && obj.__esModule ? obj : {
|
|
24
24
|
default: obj
|
|
@@ -47,7 +47,7 @@ function _interopRequireWildcard(obj) {
|
|
|
47
47
|
}
|
|
48
48
|
const debug = require("debug")("expo:start:server:webpack:devServer");
|
|
49
49
|
function assertIsWebpackDevServer(value) {
|
|
50
|
-
if (!(value == null ? void 0 : value.sockWrite)) {
|
|
50
|
+
if (!(value == null ? void 0 : value.sockWrite) && !(value == null ? void 0 : value.sendMessage)) {
|
|
51
51
|
var ref;
|
|
52
52
|
var ref1;
|
|
53
53
|
throw new _errors.CommandError("WEBPACK", value ? "Expected Webpack dev server, found: " + ((ref1 = (ref = value.constructor) == null ? void 0 : ref.name) != null ? ref1 : value) : "Webpack dev server not started yet.");
|
|
@@ -66,63 +66,19 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
assertIsWebpackDevServer((ref = this.instance) == null ? void 0 : ref.server);
|
|
69
|
-
// Allow any message on native
|
|
70
|
-
if (this.customMessageSocketBroadcaster) {
|
|
71
|
-
this.customMessageSocketBroadcaster(method, params);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
69
|
// TODO(EvanBacon): Custom Webpack overlay.
|
|
75
70
|
// Default webpack-dev-server sockets use "content-changed" instead of "reload" (what we use on native).
|
|
76
71
|
// For now, just manually convert the value so our CLI interface can be unified.
|
|
77
72
|
const hackyConvertedMessage = method === "reload" ? "content-changed" : method;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
// Hook up the React Native WebSockets to the Webpack dev server.
|
|
85
|
-
const { messageSocket , debuggerProxy , eventsSocket } = attachToServer(server);
|
|
86
|
-
this.customMessageSocketBroadcaster = messageSocket.broadcast;
|
|
87
|
-
const logReporter = new LogReporter(logger);
|
|
88
|
-
logReporter.reportEvent = eventsSocket.reportEvent;
|
|
89
|
-
const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {
|
|
90
|
-
middleware,
|
|
91
|
-
server
|
|
92
|
-
});
|
|
93
|
-
return {
|
|
94
|
-
messageSocket,
|
|
95
|
-
eventsSocket,
|
|
96
|
-
debuggerProxy,
|
|
97
|
-
logReporter,
|
|
98
|
-
inspectorProxy
|
|
99
|
-
};
|
|
73
|
+
if ("sendMessage" in this.instance.server) {
|
|
74
|
+
// @ts-expect-error: https://github.com/expo/expo/issues/21994#issuecomment-1517122501
|
|
75
|
+
this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);
|
|
76
|
+
} else {
|
|
77
|
+
this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);
|
|
78
|
+
}
|
|
100
79
|
}
|
|
101
80
|
isTargetingNative() {
|
|
102
|
-
|
|
103
|
-
return [
|
|
104
|
-
"ios",
|
|
105
|
-
"android"
|
|
106
|
-
].includes(process.env.EXPO_WEBPACK_PLATFORM || "");
|
|
107
|
-
}
|
|
108
|
-
async createNativeDevServerMiddleware({ port , options }) {
|
|
109
|
-
if (!this.isTargetingNative()) {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
const { createDevServerMiddleware } = await Promise.resolve().then(function() {
|
|
113
|
-
return _interopRequireWildcard(require("../middleware/createDevServerMiddleware"));
|
|
114
|
-
});
|
|
115
|
-
const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {
|
|
116
|
-
port,
|
|
117
|
-
watchFolders: [
|
|
118
|
-
this.projectRoot
|
|
119
|
-
]
|
|
120
|
-
});
|
|
121
|
-
// Add manifest middleware to the other middleware.
|
|
122
|
-
// TODO: Move this in to expo/dev-server.
|
|
123
|
-
const middleware = await this.getManifestMiddlewareAsync(options);
|
|
124
|
-
nativeMiddleware.middleware.use(middleware.getHandler());
|
|
125
|
-
return nativeMiddleware;
|
|
81
|
+
return false;
|
|
126
82
|
}
|
|
127
83
|
async getAvailablePortAsync(options) {
|
|
128
84
|
try {
|
|
@@ -181,7 +137,6 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
181
137
|
}
|
|
182
138
|
}
|
|
183
139
|
async startImplementationAsync(options) {
|
|
184
|
-
var ref;
|
|
185
140
|
// Do this first to fail faster.
|
|
186
141
|
const webpack = (0, _resolveFromProject).importWebpackFromProject(this.projectRoot);
|
|
187
142
|
const WebpackDevServer = (0, _resolveFromProject).importWebpackDevServerFromProject(this.projectRoot);
|
|
@@ -209,41 +164,18 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
209
164
|
const config = await this.loadConfigAsync(options);
|
|
210
165
|
Log.log(_chalk.default`Starting Webpack on port ${port} in {underline ${mode}} mode.`);
|
|
211
166
|
// Create a webpack compiler that is configured with custom messages.
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
// Create the middleware required for interacting with a native runtime (Expo Go, or a development build).
|
|
216
|
-
nativeMiddleware = await this.createNativeDevServerMiddleware({
|
|
217
|
-
port,
|
|
218
|
-
options
|
|
219
|
-
});
|
|
220
|
-
// Inject the native manifest middleware.
|
|
221
|
-
const originalBefore = config.devServer.before.bind(config.devServer.before);
|
|
222
|
-
config.devServer.before = (app, server, compiler)=>{
|
|
223
|
-
originalBefore(app, server, compiler);
|
|
224
|
-
if (nativeMiddleware == null ? void 0 : nativeMiddleware.middleware) {
|
|
225
|
-
app.use(nativeMiddleware.middleware);
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
const { attachNativeDevServerMiddlewareToDevServer } = this;
|
|
230
|
-
const server1 = new WebpackDevServer(// @ts-expect-error: type mismatch -- Webpack types aren't great.
|
|
231
|
-
compiler1, config.devServer);
|
|
167
|
+
const compiler = webpack(config);
|
|
168
|
+
const server = new WebpackDevServer(// @ts-expect-error: type mismatch -- Webpack types aren't great.
|
|
169
|
+
compiler, config.devServer);
|
|
232
170
|
// Launch WebpackDevServer.
|
|
233
|
-
|
|
234
|
-
if (nativeMiddleware) {
|
|
235
|
-
attachNativeDevServerMiddlewareToDevServer({
|
|
236
|
-
server: this,
|
|
237
|
-
...nativeMiddleware
|
|
238
|
-
});
|
|
239
|
-
}
|
|
171
|
+
server.listen(port, _env.env.WEB_HOST, function(error) {
|
|
240
172
|
if (error) {
|
|
241
173
|
Log.error(error.message);
|
|
242
174
|
}
|
|
243
175
|
});
|
|
244
176
|
// Extend the close method to ensure that we clean up the local info.
|
|
245
|
-
const originalClose =
|
|
246
|
-
|
|
177
|
+
const originalClose = server.close.bind(server);
|
|
178
|
+
server.close = (callback)=>{
|
|
247
179
|
return originalClose((err)=>{
|
|
248
180
|
this.instance = null;
|
|
249
181
|
callback == null ? void 0 : callback(err);
|
|
@@ -253,7 +185,7 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
253
185
|
const protocol = https ? "https" : "http";
|
|
254
186
|
return {
|
|
255
187
|
// Server instance
|
|
256
|
-
server
|
|
188
|
+
server,
|
|
257
189
|
// URL Info
|
|
258
190
|
location: {
|
|
259
191
|
url: `${protocol}://${_host}:${port}`,
|
|
@@ -261,7 +193,7 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
261
193
|
protocol,
|
|
262
194
|
host: _host
|
|
263
195
|
},
|
|
264
|
-
middleware:
|
|
196
|
+
middleware: null,
|
|
265
197
|
// Match the native protocol.
|
|
266
198
|
messageSocket: {
|
|
267
199
|
broadcast: this.broadcastMessage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { setNodeEnv } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n // A custom message websocket broadcaster used to send messages to a React Native runtime.\n private customMessageSocketBroadcaster:\n | undefined\n | ((message: string, data?: Record<string, any>) => void);\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // Allow any message on native\n if (this.customMessageSocketBroadcaster) {\n this.customMessageSocketBroadcaster(method, params);\n return;\n }\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n\n private async attachNativeDevServerMiddlewareToDevServer({\n server,\n middleware,\n attachToServer,\n logger,\n }: { server: http.Server } & Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>>) {\n const { attachInspectorProxy, LogReporter } = await import('@expo/dev-server');\n\n // Hook up the React Native WebSockets to the Webpack dev server.\n const { messageSocket, debuggerProxy, eventsSocket } = attachToServer(server);\n\n this.customMessageSocketBroadcaster = messageSocket.broadcast;\n\n const logReporter = new LogReporter(logger);\n logReporter.reportEvent = eventsSocket.reportEvent;\n\n const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {\n middleware,\n server,\n });\n\n return {\n messageSocket,\n eventsSocket,\n debuggerProxy,\n logReporter,\n inspectorProxy,\n };\n }\n\n isTargetingNative(): boolean {\n // Temporary hack while we implement multi-bundler dev server proxy.\n return ['ios', 'android'].includes(process.env.EXPO_WEBPACK_PLATFORM || '');\n }\n\n private async createNativeDevServerMiddleware({\n port,\n options,\n }: {\n port: number;\n options: BundlerStartOptions;\n }) {\n if (!this.isTargetingNative()) {\n return null;\n }\n\n const { createDevServerMiddleware } = await import('../middleware/createDevServerMiddleware');\n\n const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {\n port,\n watchFolders: [this.projectRoot],\n });\n // Add manifest middleware to the other middleware.\n // TODO: Move this in to expo/dev-server.\n\n const middleware = await this.getManifestMiddlewareAsync(options);\n\n nativeMiddleware.middleware.use(middleware.getHandler());\n\n return nativeMiddleware;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n const { resetDevServer, https, port, mode } = options;\n\n this.urlCreator = this.getUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n let nativeMiddleware: Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>> | null =\n null;\n if (config.devServer?.before) {\n // Create the middleware required for interacting with a native runtime (Expo Go, or a development build).\n nativeMiddleware = await this.createNativeDevServerMiddleware({\n port,\n options,\n });\n // Inject the native manifest middleware.\n const originalBefore = config.devServer.before.bind(config.devServer.before);\n config.devServer.before = (\n app: Application,\n server: WebpackDevServer,\n compiler: webpack.Compiler\n ) => {\n originalBefore(app, server, compiler);\n\n if (nativeMiddleware?.middleware) {\n app.use(nativeMiddleware.middleware);\n }\n };\n }\n const { attachNativeDevServerMiddlewareToDevServer } = this;\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (nativeMiddleware) {\n attachNativeDevServerMiddlewareToDevServer({\n server: this,\n ...nativeMiddleware,\n });\n }\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: nativeMiddleware?.middleware,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setNodeEnv(env.mode ?? 'development');\n require('@expo/env').load(env.projectRoot);\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","debug","require","assertIsWebpackDevServer","value","sockWrite","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","customMessageSocketBroadcaster","hackyConvertedMessage","sockets","attachNativeDevServerMiddlewareToDevServer","middleware","attachToServer","logger","attachInspectorProxy","LogReporter","messageSocket","debuggerProxy","eventsSocket","broadcast","logReporter","reportEvent","inspectorProxy","projectRoot","isTargetingNative","includes","process","env","EXPO_WEBPACK_PLATFORM","createNativeDevServerMiddleware","port","options","createDevServerMiddleware","nativeMiddleware","watchFolders","getManifestMiddlewareAsync","use","getHandler","getAvailablePortAsync","defaultPort","choosePortAsync","host","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","getUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","before","originalBefore","bind","app","listen","originalClose","close","callback","err","_host","getIpAddress","protocol","url","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","info","setNodeEnv","load","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { setNodeEnv } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite && !value?.sendMessage) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n if ('sendMessage' in this.instance.server) {\n // @ts-expect-error: https://github.com/expo/expo/issues/21994#issuecomment-1517122501\n this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);\n } else {\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n }\n\n isTargetingNative(): boolean {\n return false;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n const { resetDevServer, https, port, mode } = options;\n\n this.urlCreator = this.getUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: null,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setNodeEnv(env.mode ?? 'development');\n require('@expo/env').load(env.projectRoot);\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","debug","require","assertIsWebpackDevServer","value","sockWrite","sendMessage","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","hackyConvertedMessage","sockets","isTargetingNative","getAvailablePortAsync","options","defaultPort","port","choosePortAsync","projectRoot","host","env","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","getUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","listen","originalClose","close","bind","callback","err","_host","getIpAddress","protocol","url","middleware","messageSocket","broadcast","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","logger","info","setNodeEnv","load","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force"],"mappings":"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"}
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.compileAsync = compileAsync;
|
|
6
6
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
7
|
var _util = require("util");
|
|
8
|
+
var _formatWebpackMessages = require("./formatWebpackMessages");
|
|
8
9
|
var Log = _interopRequireWildcard(require("../../../log"));
|
|
9
10
|
var _errors = require("../../../utils/errors");
|
|
10
|
-
var _formatWebpackMessages = require("./formatWebpackMessages");
|
|
11
11
|
function _interopRequireDefault(obj) {
|
|
12
12
|
return obj && obj.__esModule ? obj : {
|
|
13
13
|
default: obj
|