one 1.12.5 → 1.12.6
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/devtools/source-inspector.mjs +7 -27
- package/dist/cjs/Frozen.native.js +1 -1
- package/dist/cjs/Root.native.js +5 -5
- package/dist/cjs/Root.native.js.map +1 -1
- package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js.map +1 -1
- package/dist/cjs/__mocks__/expo-linking.native.js.map +1 -1
- package/dist/cjs/__mocks__/expo-modules-core.native.js.map +1 -1
- package/dist/cjs/__mocks__/react-native-screens.native.js.map +1 -1
- package/dist/cjs/babel-plugins/environment-guard.native.js.map +1 -1
- package/dist/cjs/babel-plugins/inline-one-server-url.native.js.map +1 -1
- package/dist/cjs/babel-plugins/one-router-metro.native.js.map +1 -1
- package/dist/cjs/babel-plugins/remove-server-code.native.js.map +1 -1
- package/dist/cjs/cli/build.cjs +8 -11
- package/dist/cjs/cli/build.native.js +25 -28
- package/dist/cjs/cli/build.native.js.map +1 -1
- package/dist/cjs/cli/buildPage.native.js +6 -6
- package/dist/cjs/cli/buildPage.native.js.map +1 -1
- package/dist/cjs/cli/buildPageWorker.native.js +1 -1
- package/dist/cjs/cli/buildPageWorker.native.js.map +1 -1
- package/dist/cjs/cli/checkNodeVersion.native.js.map +1 -1
- package/dist/cjs/cli/daemon.native.js +1 -1
- package/dist/cjs/cli/daemon.native.js.map +1 -1
- package/dist/cjs/cli/dev.native.js +4 -4
- package/dist/cjs/cli/dev.native.js.map +1 -1
- package/dist/cjs/cli/generateRoutes.native.js +3 -3
- package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
- package/dist/cjs/cli/generateSitemap.native.js.map +1 -1
- package/dist/cjs/cli/generateSitemap.test.native.js +1 -1
- package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -1
- package/dist/cjs/cli/label-process.native.js.map +1 -1
- package/dist/cjs/cli/main.native.js +1 -1
- package/dist/cjs/cli/main.native.js.map +1 -1
- package/dist/cjs/cli/patch.native.js +1 -1
- package/dist/cjs/cli/patch.native.js.map +1 -1
- package/dist/cjs/cli/prebuild.native.js.map +1 -1
- package/dist/cjs/cli/runAndroid.native.js.map +1 -1
- package/dist/cjs/cli/runIos.native.js.map +1 -1
- package/dist/cjs/cli/securityScan.native.js.map +1 -1
- package/dist/cjs/cli/workerPool.native.js.map +1 -1
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
- package/dist/cjs/config.native.js +1 -1
- package/dist/cjs/config.native.js.map +1 -1
- package/dist/cjs/constants.native.js +1 -1
- package/dist/cjs/constants.native.js.map +1 -1
- package/dist/cjs/createAPIRoute.native.js.map +1 -1
- package/dist/cjs/createApp.native.js +3 -3
- package/dist/cjs/createHandleRequest.native.js +5 -5
- package/dist/cjs/createHandleRequest.native.js.map +1 -1
- package/dist/cjs/createHandleRequest.test.native.js +1 -1
- package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
- package/dist/cjs/createMiddleware.native.js.map +1 -1
- package/dist/cjs/daemon/index.native.js +7 -7
- package/dist/cjs/daemon/index.native.js.map +1 -1
- package/dist/cjs/daemon/ipc.native.js +1 -1
- package/dist/cjs/daemon/ipc.native.js.map +1 -1
- package/dist/cjs/daemon/picker.native.js.map +1 -1
- package/dist/cjs/daemon/proxy.native.js.map +1 -1
- package/dist/cjs/daemon/registry.native.js.map +1 -1
- package/dist/cjs/daemon/server.native.js +4 -4
- package/dist/cjs/daemon/server.native.js.map +1 -1
- package/dist/cjs/daemon/tui.native.js +3 -3
- package/dist/cjs/daemon/tui.native.js.map +1 -1
- package/dist/cjs/daemon/types.native.js.map +1 -1
- package/dist/cjs/daemon/utils.native.js.map +1 -1
- package/dist/cjs/devtools/registry.native.js.map +1 -1
- package/dist/cjs/drawer.native.js +1 -1
- package/dist/cjs/drawer.native.js.map +1 -1
- package/dist/cjs/fallbackViews/Sitemap.native.js.map +1 -1
- package/dist/cjs/fallbackViews/Unmatched.native.js.map +1 -1
- package/dist/cjs/fork/NavigationContainer.native.js +5 -5
- package/dist/cjs/fork/NavigationContainer.native.js.map +1 -1
- package/dist/cjs/fork/SSRNavigationContainer.native.js.map +1 -1
- package/dist/cjs/fork/__tests__/getPathFromState.test.native.js +2 -2
- package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +1 -1
- package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js +3 -3
- package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
- package/dist/cjs/fork/_shared.native.js.map +1 -1
- package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
- package/dist/cjs/fork/extractPathFromURL.native.js.map +1 -1
- package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState-mods.native.js +2 -2
- package/dist/cjs/fork/getPathFromState-mods.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState.native.js +3 -3
- package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState.test.native.js +1 -1
- package/dist/cjs/fork/getPathFromState.test.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath-mods.native.js +1 -1
- package/dist/cjs/fork/getStateFromPath-mods.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath.native.js +4 -4
- package/dist/cjs/fork/getStateFromPath.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath.test.native.js +4 -4
- package/dist/cjs/fork/getStateFromPath.test.native.js.map +1 -1
- package/dist/cjs/fork/useLinking.native.js +1 -1
- package/dist/cjs/fork/useThenable.native.js.map +1 -1
- package/dist/cjs/fork/validatePathConfig.native.js.map +1 -1
- package/dist/cjs/getReactNavigationConfig.native.js +1 -1
- package/dist/cjs/getReactNavigationConfig.native.js.map +1 -1
- package/dist/cjs/getURL.native.js +1 -1
- package/dist/cjs/head/Head.native.js +1 -1
- package/dist/cjs/head/Head.native.js.map +1 -1
- package/dist/cjs/head/HeadModule.native.js.map +1 -1
- package/dist/cjs/head/index.native.js +1 -1
- package/dist/cjs/head/index.native.js.map +1 -1
- package/dist/cjs/head/types.native.js.map +1 -1
- package/dist/cjs/head/url.native.js.map +1 -1
- package/dist/cjs/hooks.native.js +4 -4
- package/dist/cjs/hooks.native.js.map +1 -1
- package/dist/cjs/hooks.test.native.js.map +1 -1
- package/dist/cjs/href.native.js.map +1 -1
- package/dist/cjs/image/getImageData.native.js.map +1 -1
- package/dist/cjs/image.native.js +1 -1
- package/dist/cjs/image.native.js.map +1 -1
- package/dist/cjs/index.native.js +42 -42
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/interfaces/router.native.js.map +1 -1
- package/dist/cjs/layouts/Drawer.native.js +1 -1
- package/dist/cjs/layouts/Drawer.native.js.map +1 -1
- package/dist/cjs/layouts/Stack.native.js +5 -5
- package/dist/cjs/layouts/Stack.native.js.map +1 -1
- package/dist/cjs/layouts/Tabs.native.js +2 -2
- package/dist/cjs/layouts/Tabs.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js +6 -6
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackScreen.native.js +2 -2
- package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js +8 -8
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/index.native.js +7 -7
- package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -1
- package/dist/cjs/layouts/withLayoutContext.native.js +7 -7
- package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/cjs/link/Link.native.js +2 -2
- package/dist/cjs/link/Link.native.js.map +1 -1
- package/dist/cjs/link/Redirect.native.js +2 -2
- package/dist/cjs/link/Redirect.native.js.map +1 -1
- package/dist/cjs/link/href.native.js.map +1 -1
- package/dist/cjs/link/linking.native.js +3 -3
- package/dist/cjs/link/path.native.js.map +1 -1
- package/dist/cjs/link/prefetchIntent.native.js.map +1 -1
- package/dist/cjs/link/prefetchIntent.test.native.js +1 -1
- package/dist/cjs/link/prefetchIntent.test.native.js.map +1 -1
- package/dist/cjs/link/prefetchViewport.native.js.map +1 -1
- package/dist/cjs/link/prefetchViewport.test.native.js +1 -1
- package/dist/cjs/link/prefetchViewport.test.native.js.map +1 -1
- package/dist/cjs/link/useLinkTo.native.js +3 -3
- package/dist/cjs/link/useLinkTo.native.js.map +1 -1
- package/dist/cjs/link/useLoadedNavigation.native.js +1 -1
- package/dist/cjs/link/useLoadedNavigation.native.js.map +1 -1
- package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +1 -1
- package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
- package/dist/cjs/notFoundState.native.js.map +1 -1
- package/dist/cjs/polyfills-mobile.native.js +1 -1
- package/dist/cjs/polyfills-mobile.native.js.map +1 -1
- package/dist/cjs/polyfills-server.native.js.map +1 -1
- package/dist/cjs/router/FlagsContext.native.js.map +1 -1
- package/dist/cjs/router/Route.native.js +2 -2
- package/dist/cjs/router/Route.native.js.map +1 -1
- package/dist/cjs/router/RouteInfoContext.native.js +1 -1
- package/dist/cjs/router/RouteInfoContext.native.js.map +1 -1
- package/dist/cjs/router/RouterStore.native.js.map +1 -1
- package/dist/cjs/router/SpaShellContext.native.js.map +1 -1
- package/dist/cjs/router/createRoute.native.js +1 -1
- package/dist/cjs/router/createRoute.native.js.map +1 -1
- package/dist/cjs/router/filterRootHTML.native.js.map +1 -1
- package/dist/cjs/router/findRouteNode.native.js.map +1 -1
- package/dist/cjs/router/getLinkingConfig.native.js +2 -2
- package/dist/cjs/router/getLinkingConfig.native.js.map +1 -1
- package/dist/cjs/router/getNormalizedStatePath.native.js +1 -1
- package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
- package/dist/cjs/router/getRouteInfo.native.js +5 -5
- package/dist/cjs/router/getRouteInfo.native.js.map +1 -1
- package/dist/cjs/router/getRoutes.native.js +4 -4
- package/dist/cjs/router/getRoutes.native.js.map +1 -1
- package/dist/cjs/router/getRoutes.test.native.js +1 -1
- package/dist/cjs/router/getRoutes.test.native.js.map +1 -1
- package/dist/cjs/router/glob-patterns.native.js.map +1 -1
- package/dist/cjs/router/imperative-api.native.js +1 -1
- package/dist/cjs/router/imperative-api.native.js.map +1 -1
- package/dist/cjs/router/interceptRoutes.native.js +2 -2
- package/dist/cjs/router/interceptRoutes.native.js.map +1 -1
- package/dist/cjs/router/isIndexPath.native.js.map +1 -1
- package/dist/cjs/router/lastAction.native.js.map +1 -1
- package/dist/cjs/router/linkingConfig.native.js +3 -3
- package/dist/cjs/router/linkingConfig.native.js.map +1 -1
- package/dist/cjs/router/matchers.native.js.map +1 -1
- package/dist/cjs/router/matchers.test.native.js +1 -1
- package/dist/cjs/router/matchers.test.native.js.map +1 -1
- package/dist/cjs/router/router.native.js +24 -24
- package/dist/cjs/router/router.native.js.map +1 -1
- package/dist/cjs/router/serverLocationContext.native.js.map +1 -1
- package/dist/cjs/router/sortRoutes.native.js +1 -1
- package/dist/cjs/router/sortRoutes.native.js.map +1 -1
- package/dist/cjs/router/useInitializeOneRouter.native.js +4 -4
- package/dist/cjs/router/useInitializeOneRouter.native.js.map +1 -1
- package/dist/cjs/router/useNavigation.native.js +2 -2
- package/dist/cjs/router/useNavigation.native.js.map +1 -1
- package/dist/cjs/router/useScreens.native.js +11 -11
- package/dist/cjs/router/useScreens.native.js.map +1 -1
- package/dist/cjs/router/useViteRoutes.native.js +1 -1
- package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
- package/dist/cjs/router/utils/getNavigateAction.native.js +2 -2
- package/dist/cjs/router/utils/getNavigateAction.native.js.map +1 -1
- package/dist/cjs/router/utils/getNavigateAction.test.native.js +1 -1
- package/dist/cjs/router/utils/getNavigateAction.test.native.js.map +1 -1
- package/dist/cjs/screensFeatureFlags.native.js.map +1 -1
- package/dist/cjs/serve-worker.cjs +16 -23
- package/dist/cjs/serve-worker.native.js +19 -26
- package/dist/cjs/serve-worker.native.js.map +1 -1
- package/dist/cjs/serve.native.js +4 -4
- package/dist/cjs/serve.native.js.map +1 -1
- package/dist/cjs/server/ServerContextScript.native.js +4 -4
- package/dist/cjs/server/ServerContextScript.native.js.map +1 -1
- package/dist/cjs/server/createRoutesManifest.native.js +2 -2
- package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
- package/dist/cjs/server/getServerManifest.native.js +1 -1
- package/dist/cjs/server/getServerManifest.native.js.map +1 -1
- package/dist/cjs/server/getServerManifest.test.native.js +1 -1
- package/dist/cjs/server/getServerManifest.test.native.js.map +1 -1
- package/dist/cjs/server/oneServe.cjs +4 -1
- package/dist/cjs/server/oneServe.native.js +10 -7
- package/dist/cjs/server/oneServe.native.js.map +1 -1
- package/dist/cjs/server/setServerGlobals.native.js.map +1 -1
- package/dist/cjs/server/setupBuildOptions.native.js.map +1 -1
- package/dist/cjs/server/setupServerGlobals.native.js +1 -1
- package/dist/cjs/server/setupServerGlobals.native.js.map +1 -1
- package/dist/cjs/server/ssrLoaderData.native.js.map +1 -1
- package/dist/cjs/server/staticHtmlFetcher.native.js.map +1 -1
- package/dist/cjs/server/workerHandler.cjs +492 -0
- package/dist/cjs/server/workerHandler.native.js +673 -0
- package/dist/cjs/server/workerHandler.native.js.map +1 -0
- package/dist/cjs/server-render.native.js.map +1 -1
- package/dist/cjs/skewProtection.native.js +2 -2
- package/dist/cjs/skewProtection.native.js.map +1 -1
- package/dist/cjs/testing-utils.native.js +2 -2
- package/dist/cjs/testing-utils.native.js.map +1 -1
- package/dist/cjs/typed-routes/generateRouteTypes.native.js +5 -5
- package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
- package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js +2 -2
- package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
- package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/ui/Slot.native.js.map +1 -1
- package/dist/cjs/ui/TabContext.native.js.map +1 -1
- package/dist/cjs/ui/TabList.native.js +1 -1
- package/dist/cjs/ui/TabList.native.js.map +1 -1
- package/dist/cjs/ui/TabRouter.native.js.map +1 -1
- package/dist/cjs/ui/TabSlot.native.js +2 -2
- package/dist/cjs/ui/TabSlot.native.js.map +1 -1
- package/dist/cjs/ui/TabTrigger.native.js +5 -5
- package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
- package/dist/cjs/ui/Tabs.native.js +16 -16
- package/dist/cjs/ui/Tabs.native.js.map +1 -1
- package/dist/cjs/ui/common.native.js +4 -4
- package/dist/cjs/ui/common.native.js.map +1 -1
- package/dist/cjs/ui/index.native.js +1 -1
- package/dist/cjs/ui/index.native.js.map +1 -1
- package/dist/cjs/ui/useComponent.native.js.map +1 -1
- package/dist/cjs/useFocusEffect.native.js +1 -1
- package/dist/cjs/useFocusEffect.native.js.map +1 -1
- package/dist/cjs/useLoader.native.js +16 -16
- package/dist/cjs/useLoader.native.js.map +1 -1
- package/dist/cjs/useMatches.native.js +1 -1
- package/dist/cjs/useMatches.native.js.map +1 -1
- package/dist/cjs/useMatches.test.native.js +1 -1
- package/dist/cjs/useMatches.test.native.js.map +1 -1
- package/dist/cjs/useServerHeadInsertion.native.js.map +1 -1
- package/dist/cjs/utils/assertIsReady.native.js.map +1 -1
- package/dist/cjs/utils/children.native.js.map +1 -1
- package/dist/cjs/utils/cleanUrl.native.js +3 -3
- package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
- package/dist/cjs/utils/cleanUrl.test.native.js +1 -1
- package/dist/cjs/utils/cleanUrl.test.native.js.map +1 -1
- package/dist/cjs/utils/dynamicImport.native.js.map +1 -1
- package/dist/cjs/utils/ensureExists.native.js.map +1 -1
- package/dist/cjs/utils/evictOldest.native.js.map +1 -1
- package/dist/cjs/utils/existsAsync.native.js.map +1 -1
- package/dist/cjs/utils/getPageExport.native.js.map +1 -1
- package/dist/cjs/utils/getPathnameFromFilePath.native.js.map +1 -1
- package/dist/cjs/utils/getPathnameFromFilePath.test.native.js +1 -1
- package/dist/cjs/utils/getPathnameFromFilePath.test.native.js.map +1 -1
- package/dist/cjs/utils/getRouterRootFromOneOptions.native.js.map +1 -1
- package/dist/cjs/utils/globDir.native.js.map +1 -1
- package/dist/cjs/utils/hashString.native.js.map +1 -1
- package/dist/cjs/utils/htmlEscape.native.js.map +1 -1
- package/dist/cjs/utils/isResponse.native.js.map +1 -1
- package/dist/cjs/utils/isRolldown.native.js.map +1 -1
- package/dist/cjs/utils/isStatus.native.js.map +1 -1
- package/dist/cjs/utils/pLimit.native.js.map +1 -1
- package/dist/cjs/utils/platform.native.js.map +1 -1
- package/dist/cjs/utils/promiseWithResolvers.native.js.map +1 -1
- package/dist/cjs/utils/rand.native.js.map +1 -1
- package/dist/cjs/utils/redirect.native.js +2 -2
- package/dist/cjs/utils/redirect.native.js.map +1 -1
- package/dist/cjs/utils/removeParams.native.js.map +1 -1
- package/dist/cjs/utils/removeSearch.native.js.map +1 -1
- package/dist/cjs/utils/removeUndefined.native.js.map +1 -1
- package/dist/cjs/utils/style.native.js.map +1 -1
- package/dist/cjs/utils/toAbsolute.native.js.map +1 -1
- package/dist/cjs/utils/trackLoaderDependencies.native.js +1 -1
- package/dist/cjs/utils/trackLoaderDependencies.native.js.map +1 -1
- package/dist/cjs/utils/url.native.js.map +1 -1
- package/dist/cjs/utils/useConstant.native.js.map +1 -1
- package/dist/cjs/utils/watchFile.native.js.map +1 -1
- package/dist/cjs/utils/weakKey.native.js.map +1 -1
- package/dist/cjs/utils/weakMemo.native.js.map +1 -1
- package/dist/cjs/utils/withStaticProperties.native.js.map +1 -1
- package/dist/cjs/utils/workerImport.native.js.map +1 -1
- package/dist/cjs/validateParams.native.js.map +1 -1
- package/dist/cjs/validateSearch.native.js.map +1 -1
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js +5 -5
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-build-output-config-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-config-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-package-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js +3 -3
- package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js +3 -3
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.js +1 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
- package/dist/cjs/views/EmptyRoute.native.js +1 -1
- package/dist/cjs/views/EmptyRoute.native.js.map +1 -1
- package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/LoadProgressBar.native.js +1 -1
- package/dist/cjs/views/LoadProgressBar.native.js.map +1 -1
- package/dist/cjs/views/Navigator.native.js +8 -8
- package/dist/cjs/views/Navigator.native.js.map +1 -1
- package/dist/cjs/views/OneStackRouter.native.js.map +1 -1
- package/dist/cjs/views/Protected.native.js.map +1 -1
- package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/Screen.native.js +1 -1
- package/dist/cjs/views/Screen.native.js.map +1 -1
- package/dist/cjs/views/ScrollBehavior.native.js +2 -2
- package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
- package/dist/cjs/views/SourceInspector.native.js.map +1 -1
- package/dist/cjs/views/Try.native.js.map +1 -1
- package/dist/cjs/vite/DevHead.native.js +1 -1
- package/dist/cjs/vite/DevHead.native.js.map +1 -1
- package/dist/cjs/vite/constants.native.js.map +1 -1
- package/dist/cjs/vite/customNodeExternals.native.js.map +1 -1
- package/dist/cjs/vite/ensureTsConfig.native.js +2 -2
- package/dist/cjs/vite/ensureTsConfig.native.js.map +1 -1
- package/dist/cjs/vite/findDepsToOptimize.native.js.map +1 -1
- package/dist/cjs/vite/getManifest.native.js +2 -2
- package/dist/cjs/vite/getManifest.native.js.map +1 -1
- package/dist/cjs/vite/loadConfig.native.js +1 -1
- package/dist/cjs/vite/loadConfig.native.js.map +1 -1
- package/dist/cjs/vite/makePluginWebOnly.native.js.map +1 -1
- package/dist/cjs/vite/one.cjs +6 -2
- package/dist/cjs/vite/one.native.js +23 -20
- package/dist/cjs/vite/one.native.js.map +1 -1
- package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js +1 -1
- package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/criticalCSSPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/criticalCSSPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/devtoolsPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/environmentGuardPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js +1 -1
- package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +12 -12
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fixDependenciesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +2 -2
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/imageDataPlugin.native.js +1 -1
- package/dist/cjs/vite/plugins/imageDataPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/imageDataPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.cjs +12 -25
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js +11 -40
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/useDomPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryConstants.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +2 -2
- package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/replaceLoader.native.js.map +1 -1
- package/dist/cjs/vite/resolveResponse.native.js +2 -2
- package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
- package/dist/cjs/vite/types.native.js.map +1 -1
- package/dist/cjs/vite-auto-warm.native.js +1 -1
- package/dist/cjs/vite-auto-warm.native.js.map +1 -1
- package/dist/cjs/vite.native.js +9 -9
- package/dist/cjs/vite.native.js.map +1 -1
- package/dist/cjs/zero/getQueryKey.native.js +1 -1
- package/dist/cjs/zero/getQueryKey.native.js.map +1 -1
- package/dist/cjs/zero/isZeroQuery.native.js.map +1 -1
- package/dist/cjs/zero/resolveQuery.native.js.map +1 -1
- package/dist/cjs/zero/subscribeToQuery.native.js.map +1 -1
- package/dist/cjs/zero/types.native.js.map +1 -1
- package/dist/cjs/zero/useQuery.native.js +4 -4
- package/dist/cjs/zero/useQuery.native.js.map +1 -1
- package/dist/cjs/zero/useQueryZero.native.js.map +1 -1
- package/dist/cjs/zero.native.js +3 -3
- package/dist/cjs/zero.native.js.map +1 -1
- package/dist/esm/cli/build.mjs +8 -11
- package/dist/esm/cli/build.mjs.map +1 -1
- package/dist/esm/cli/build.native.js +8 -11
- package/dist/esm/cli/build.native.js.map +1 -1
- package/dist/esm/serve-worker.mjs +11 -7
- package/dist/esm/serve-worker.mjs.map +1 -1
- package/dist/esm/serve-worker.native.js +11 -7
- package/dist/esm/serve-worker.native.js.map +1 -1
- package/dist/esm/server/oneServe.mjs +4 -1
- package/dist/esm/server/oneServe.mjs.map +1 -1
- package/dist/esm/server/oneServe.native.js +4 -1
- package/dist/esm/server/oneServe.native.js.map +1 -1
- package/dist/esm/server/workerHandler.mjs +469 -0
- package/dist/esm/server/workerHandler.mjs.map +1 -0
- package/dist/esm/server/workerHandler.native.js +647 -0
- package/dist/esm/server/workerHandler.native.js.map +1 -0
- package/dist/esm/vite/one.mjs +6 -2
- package/dist/esm/vite/one.mjs.map +1 -1
- package/dist/esm/vite/one.native.js +5 -2
- package/dist/esm/vite/one.native.js.map +1 -1
- package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs +11 -24
- package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js +10 -39
- package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
- package/package.json +10 -10
- package/src/cli/build.ts +8 -11
- package/src/serve-worker.ts +20 -22
- package/src/server/oneServe.ts +1 -1
- package/src/server/workerHandler.ts +767 -0
- package/src/vite/one.ts +2 -1
- package/src/vite/plugins/sourceInspectorPlugin.ts +22 -56
- package/src/vite/types.ts +8 -0
- package/types/cli/build.d.ts.map +1 -1
- package/types/serve-worker.d.ts +10 -21
- package/types/serve-worker.d.ts.map +1 -1
- package/types/server/workerHandler.d.ts +23 -0
- package/types/server/workerHandler.d.ts.map +1 -0
- package/types/vite/one.d.ts.map +1 -1
- package/types/vite/plugins/sourceInspectorPlugin.d.ts +3 -1
- package/types/vite/plugins/sourceInspectorPlugin.d.ts.map +1 -1
- package/types/vite/types.d.ts +7 -0
- package/types/vite/types.d.ts.map +1 -1
|
@@ -0,0 +1,767 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CSS_PRELOAD_JS_POSTFIX,
|
|
3
|
+
LOADER_JS_POSTFIX_UNCACHED,
|
|
4
|
+
PRELOAD_JS_POSTFIX,
|
|
5
|
+
} from '../constants'
|
|
6
|
+
import {
|
|
7
|
+
compileManifest,
|
|
8
|
+
getURLfromRequestURL,
|
|
9
|
+
type RequestHandlers,
|
|
10
|
+
resolveAPIRoute,
|
|
11
|
+
resolveLoaderRoute,
|
|
12
|
+
resolvePageRoute,
|
|
13
|
+
} from '../createHandleRequest'
|
|
14
|
+
import type { RenderAppProps } from '../types'
|
|
15
|
+
import { getPathFromLoaderPath } from '../utils/cleanUrl'
|
|
16
|
+
import { isResponse } from '../utils/isResponse'
|
|
17
|
+
import { withRequestContext } from '../vite/resolveResponse'
|
|
18
|
+
import type { One } from '../vite/types'
|
|
19
|
+
import type { RouteInfoCompiled } from './createRoutesManifest'
|
|
20
|
+
import { setSSRLoaderData } from './ssrLoaderData'
|
|
21
|
+
import { getFetchStaticHtml } from './staticHtmlFetcher'
|
|
22
|
+
|
|
23
|
+
export type LazyRoutes = {
|
|
24
|
+
serverEntry: () => Promise<{
|
|
25
|
+
default: {
|
|
26
|
+
render: (props: any) => any
|
|
27
|
+
renderStream?: (props: any) => Promise<ReadableStream>
|
|
28
|
+
}
|
|
29
|
+
}>
|
|
30
|
+
pages: Record<string, () => Promise<any>>
|
|
31
|
+
api: Record<string, () => Promise<any>>
|
|
32
|
+
middlewares: Record<string, () => Promise<any>>
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type WorkerHandlerOptions = {
|
|
36
|
+
oneOptions: One.PluginOptions
|
|
37
|
+
buildInfo: One.BuildInfo
|
|
38
|
+
lazyRoutes: LazyRoutes
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createWorkerHandler(options: WorkerHandlerOptions) {
|
|
42
|
+
const { oneOptions } = options
|
|
43
|
+
|
|
44
|
+
// mutable state for route swapping
|
|
45
|
+
let currentLazyRoutes = options.lazyRoutes
|
|
46
|
+
let compiledManifest = compileManifest(options.buildInfo.manifest)
|
|
47
|
+
let routeToBuildInfo = options.buildInfo.routeToBuildInfo
|
|
48
|
+
let routeMap = options.buildInfo.routeMap
|
|
49
|
+
let currentPreloads = options.buildInfo.preloads
|
|
50
|
+
let currentCssPreloads = options.buildInfo.cssPreloads
|
|
51
|
+
|
|
52
|
+
const debugRouter = process.env.ONE_DEBUG_ROUTER
|
|
53
|
+
|
|
54
|
+
// compile redirects for fast matching
|
|
55
|
+
const redirects = oneOptions.web?.redirects
|
|
56
|
+
let compiledRedirects: Array<{
|
|
57
|
+
regex: RegExp
|
|
58
|
+
destination: string
|
|
59
|
+
permanent: boolean
|
|
60
|
+
}> | null = null
|
|
61
|
+
|
|
62
|
+
if (redirects?.length) {
|
|
63
|
+
compiledRedirects = redirects.map((r) => {
|
|
64
|
+
const regexSource = r.source.replace(/:(\w+)/g, (_, name) => `(?<${name}>[^/]+)`)
|
|
65
|
+
return {
|
|
66
|
+
regex: new RegExp(`^${regexSource}$`),
|
|
67
|
+
destination: r.destination,
|
|
68
|
+
permanent: r.permanent || false,
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// pre-computed constants
|
|
74
|
+
const useStreaming = !process.env.ONE_BUFFERED_SSR
|
|
75
|
+
const htmlHeaders = { 'content-type': 'text/html' }
|
|
76
|
+
const ssrHtmlHeaders = { 'content-type': 'text/html', 'cache-control': 'no-cache' }
|
|
77
|
+
|
|
78
|
+
// caches
|
|
79
|
+
const loaderCache = new Map<string, Function | null>()
|
|
80
|
+
const moduleImportCache = new Map<string, any>()
|
|
81
|
+
const loaderCacheFnMap = new Map<string, Function | null>()
|
|
82
|
+
const pendingLoaderResults = new Map<
|
|
83
|
+
string,
|
|
84
|
+
{ promise: Promise<any>; expires: number }
|
|
85
|
+
>()
|
|
86
|
+
|
|
87
|
+
// render entry (lazy loaded from serverEntry)
|
|
88
|
+
let render: ((props: RenderAppProps) => any) | null = null
|
|
89
|
+
let renderStream: ((props: RenderAppProps) => Promise<ReadableStream>) | null = null
|
|
90
|
+
let renderLoading: Promise<void> | null = null
|
|
91
|
+
let renderGeneration = 0
|
|
92
|
+
|
|
93
|
+
function ensureRenderLoaded(): void | Promise<void> {
|
|
94
|
+
if (render) return
|
|
95
|
+
if (renderLoading) return renderLoading
|
|
96
|
+
const gen = ++renderGeneration
|
|
97
|
+
renderLoading = (async () => {
|
|
98
|
+
const entry = await currentLazyRoutes.serverEntry()
|
|
99
|
+
// if updateRoutes was called while we were loading, discard stale entry
|
|
100
|
+
if (gen !== renderGeneration) return
|
|
101
|
+
render = entry.default.render as any
|
|
102
|
+
renderStream = (entry.default as any).renderStream || null
|
|
103
|
+
})()
|
|
104
|
+
return renderLoading
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function findNearestNotFoundPath(urlPath: string): string {
|
|
108
|
+
let cur = urlPath
|
|
109
|
+
while (cur) {
|
|
110
|
+
const parent = cur.lastIndexOf('/') > 0 ? cur.slice(0, cur.lastIndexOf('/')) : ''
|
|
111
|
+
if (routeMap[`${parent}/+not-found`]) return `${parent}/+not-found`
|
|
112
|
+
if (!parent) break
|
|
113
|
+
cur = parent
|
|
114
|
+
}
|
|
115
|
+
return '/+not-found'
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function make404LoaderJs(path: string, logReason?: string): string {
|
|
119
|
+
const nfPath = findNearestNotFoundPath(path)
|
|
120
|
+
if (logReason) console.error(`[one] 404 loader for ${path}: ${logReason}`)
|
|
121
|
+
return `export function loader(){return{__oneError:404,__oneErrorMessage:'Not Found',__oneNotFoundPath:${JSON.stringify(nfPath)}}}`
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function readStaticHtml(htmlPath: string): Promise<string | null> {
|
|
125
|
+
const fetchStaticHtml = getFetchStaticHtml()
|
|
126
|
+
if (fetchStaticHtml) return await fetchStaticHtml(htmlPath)
|
|
127
|
+
if (debugRouter) {
|
|
128
|
+
console.warn(`[one/worker] no fetchStaticHtml set, cannot read ${htmlPath}`)
|
|
129
|
+
}
|
|
130
|
+
return null
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// resolve a route module's loader - sync on cache hit, async on cold start
|
|
134
|
+
function resolveLoaderSync(
|
|
135
|
+
lazyKey: string | undefined
|
|
136
|
+
): Function | null | Promise<Function | null> {
|
|
137
|
+
const cacheKey = lazyKey || ''
|
|
138
|
+
const cached = loaderCache.get(cacheKey)
|
|
139
|
+
if (cached !== undefined) return cached
|
|
140
|
+
|
|
141
|
+
return (async () => {
|
|
142
|
+
let routeExported: any
|
|
143
|
+
if (moduleImportCache.has(cacheKey)) {
|
|
144
|
+
routeExported = moduleImportCache.get(cacheKey)
|
|
145
|
+
} else if (lazyKey && currentLazyRoutes.pages[lazyKey]) {
|
|
146
|
+
routeExported = await currentLazyRoutes.pages[lazyKey]()
|
|
147
|
+
moduleImportCache.set(cacheKey, routeExported)
|
|
148
|
+
} else {
|
|
149
|
+
console.warn(`[one/worker] no lazy route for ${cacheKey}`)
|
|
150
|
+
loaderCache.set(cacheKey, null)
|
|
151
|
+
return null
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const loader = routeExported?.loader || null
|
|
155
|
+
loaderCache.set(cacheKey, loader)
|
|
156
|
+
loaderCacheFnMap.set(cacheKey, routeExported?.loaderCache ?? null)
|
|
157
|
+
return loader
|
|
158
|
+
})()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// import and run a loader with coalescing support
|
|
162
|
+
async function importAndRunLoader(
|
|
163
|
+
routeId: string,
|
|
164
|
+
lazyKey: string | undefined,
|
|
165
|
+
loaderProps: any
|
|
166
|
+
): Promise<{ loaderData: unknown; routeId: string; isEnoent?: boolean }> {
|
|
167
|
+
if (!lazyKey) return { loaderData: undefined, routeId }
|
|
168
|
+
|
|
169
|
+
// check loaderCache coalescing before resolving
|
|
170
|
+
const cacheMapKey = lazyKey
|
|
171
|
+
const loaderCacheFn = loaderCacheFnMap.get(cacheMapKey)
|
|
172
|
+
let coalFullKey: string | undefined
|
|
173
|
+
let coalTtl = 0
|
|
174
|
+
|
|
175
|
+
if (loaderCacheFn) {
|
|
176
|
+
const cacheResult = loaderCacheFn(loaderProps?.params, loaderProps?.request)
|
|
177
|
+
const cacheKey = typeof cacheResult === 'string' ? cacheResult : cacheResult?.key
|
|
178
|
+
coalTtl = typeof cacheResult === 'string' ? 0 : (cacheResult?.ttl ?? 0)
|
|
179
|
+
|
|
180
|
+
if (cacheKey != null) {
|
|
181
|
+
coalFullKey = routeId + '\0' + cacheKey
|
|
182
|
+
const existing = pendingLoaderResults.get(coalFullKey)
|
|
183
|
+
if (existing && (!existing.expires || Date.now() < existing.expires)) {
|
|
184
|
+
const loaderData = await existing.promise
|
|
185
|
+
return { loaderData, routeId }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
const loaderOrPromise = resolveLoaderSync(lazyKey)
|
|
192
|
+
const loader =
|
|
193
|
+
loaderOrPromise instanceof Promise ? await loaderOrPromise : loaderOrPromise
|
|
194
|
+
if (!loader) return { loaderData: undefined, routeId }
|
|
195
|
+
|
|
196
|
+
if (coalFullKey) {
|
|
197
|
+
const promise = loader(loaderProps)
|
|
198
|
+
const entry = { promise, expires: 0 }
|
|
199
|
+
pendingLoaderResults.set(coalFullKey, entry)
|
|
200
|
+
promise.then(
|
|
201
|
+
() => {
|
|
202
|
+
entry.expires = coalTtl > 0 ? Date.now() + coalTtl : 0
|
|
203
|
+
if (coalTtl <= 0)
|
|
204
|
+
Promise.resolve().then(() => pendingLoaderResults.delete(coalFullKey!))
|
|
205
|
+
},
|
|
206
|
+
() => pendingLoaderResults.delete(coalFullKey!)
|
|
207
|
+
)
|
|
208
|
+
const loaderData = await promise
|
|
209
|
+
return { loaderData, routeId }
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const loaderData = await loader(loaderProps)
|
|
213
|
+
return { loaderData, routeId }
|
|
214
|
+
} catch (err) {
|
|
215
|
+
if (isResponse(err)) throw err
|
|
216
|
+
if ((err as any)?.code === 'ENOENT')
|
|
217
|
+
return { loaderData: undefined, routeId, isEnoent: true }
|
|
218
|
+
console.error(`[one] Error running loader for ${routeId}:`, err)
|
|
219
|
+
return { loaderData: undefined, routeId }
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// request handlers - worker-only, always uses lazyRoutes
|
|
224
|
+
const requestHandlers: RequestHandlers = {
|
|
225
|
+
async handleStaticFile() {
|
|
226
|
+
// workers serve static assets via platform (ASSETS binding)
|
|
227
|
+
return null
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
async handleAPI({ route }) {
|
|
231
|
+
if (currentLazyRoutes.api[route.page]) {
|
|
232
|
+
return await currentLazyRoutes.api[route.page]()
|
|
233
|
+
}
|
|
234
|
+
console.warn(`[one/worker] no lazy API route for ${route.page}`)
|
|
235
|
+
return null
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
async loadMiddleware(route) {
|
|
239
|
+
if (currentLazyRoutes.middlewares[route.contextKey]) {
|
|
240
|
+
return await currentLazyRoutes.middlewares[route.contextKey]()
|
|
241
|
+
}
|
|
242
|
+
console.warn(`[one/worker] no lazy middleware for ${route.contextKey}`)
|
|
243
|
+
return null
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
async handleLoader({ route, loaderProps }) {
|
|
247
|
+
const routeFile = (route as any).routeFile || route.file
|
|
248
|
+
|
|
249
|
+
let loader: Function | null
|
|
250
|
+
try {
|
|
251
|
+
const loaderResult = resolveLoaderSync(routeFile)
|
|
252
|
+
loader = loaderResult instanceof Promise ? await loaderResult : loaderResult
|
|
253
|
+
} catch (err) {
|
|
254
|
+
if ((err as any)?.code === 'ERR_MODULE_NOT_FOUND') return null
|
|
255
|
+
throw err
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (!loader) return null
|
|
259
|
+
|
|
260
|
+
let json
|
|
261
|
+
try {
|
|
262
|
+
json = await loader(loaderProps)
|
|
263
|
+
} catch (err) {
|
|
264
|
+
if ((err as any)?.code === 'ENOENT') {
|
|
265
|
+
return make404LoaderJs(
|
|
266
|
+
loaderProps?.path || '/',
|
|
267
|
+
`ENOENT ${(err as any)?.path || err}`
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
throw err
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (isResponse(json)) throw json
|
|
274
|
+
return `export function loader() { return ${JSON.stringify(json)} }`
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
async handlePage({ route, url, loaderProps }) {
|
|
278
|
+
const routeBuildInfo = routeToBuildInfo[route.file]
|
|
279
|
+
|
|
280
|
+
if (route.type === 'ssr') {
|
|
281
|
+
if (!routeBuildInfo) {
|
|
282
|
+
console.error(`Error in route`, route)
|
|
283
|
+
throw new Error(
|
|
284
|
+
`No buildinfo found for ${url}, route: ${route.file}, in keys:\n ${Object.keys(routeToBuildInfo).join('\n ')}`
|
|
285
|
+
)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
try {
|
|
289
|
+
const layoutRoutes = route.layouts || []
|
|
290
|
+
|
|
291
|
+
// fast path: skip layouts with no loader
|
|
292
|
+
const layoutLoaderPromises: Array<ReturnType<typeof importAndRunLoader>> = []
|
|
293
|
+
const noLoaderResults: Array<{
|
|
294
|
+
loaderData: unknown
|
|
295
|
+
routeId: string
|
|
296
|
+
}> = []
|
|
297
|
+
|
|
298
|
+
for (const layout of layoutRoutes) {
|
|
299
|
+
const cacheKey = layout.contextKey || ''
|
|
300
|
+
const cachedLoader = loaderCache.get(cacheKey)
|
|
301
|
+
|
|
302
|
+
if (cachedLoader === null) {
|
|
303
|
+
noLoaderResults.push({
|
|
304
|
+
loaderData: undefined,
|
|
305
|
+
routeId: layout.contextKey,
|
|
306
|
+
})
|
|
307
|
+
} else {
|
|
308
|
+
layoutLoaderPromises.push(
|
|
309
|
+
importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)
|
|
310
|
+
)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const pageLoaderPromise = importAndRunLoader(
|
|
315
|
+
route.file,
|
|
316
|
+
route.file,
|
|
317
|
+
loaderProps
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
let layoutResults: Array<{
|
|
321
|
+
loaderData: unknown
|
|
322
|
+
routeId: string
|
|
323
|
+
isEnoent?: boolean
|
|
324
|
+
}>
|
|
325
|
+
let pageResult: {
|
|
326
|
+
loaderData: unknown
|
|
327
|
+
routeId: string
|
|
328
|
+
isEnoent?: boolean
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
if (layoutLoaderPromises.length === 0) {
|
|
333
|
+
layoutResults = noLoaderResults
|
|
334
|
+
pageResult = await pageLoaderPromise
|
|
335
|
+
} else {
|
|
336
|
+
const [asyncLayoutResults, pr] = await Promise.all([
|
|
337
|
+
Promise.all(layoutLoaderPromises),
|
|
338
|
+
pageLoaderPromise,
|
|
339
|
+
])
|
|
340
|
+
layoutResults = [...noLoaderResults, ...asyncLayoutResults]
|
|
341
|
+
pageResult = pr
|
|
342
|
+
}
|
|
343
|
+
} catch (err) {
|
|
344
|
+
if (isResponse(err)) return err
|
|
345
|
+
throw err
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// loader ENOENT → serve nearest +not-found page
|
|
349
|
+
if (pageResult.isEnoent) {
|
|
350
|
+
const nfPath = findNearestNotFoundPath(loaderProps?.path || '/')
|
|
351
|
+
const nfHtml = routeMap[nfPath]
|
|
352
|
+
if (nfHtml) {
|
|
353
|
+
const html = await readStaticHtml(nfHtml)
|
|
354
|
+
if (html) {
|
|
355
|
+
return new Response(html, {
|
|
356
|
+
headers: { 'content-type': 'text/html' },
|
|
357
|
+
status: 404,
|
|
358
|
+
})
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return new Response('404 Not Found', { status: 404 })
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// build matches array (layouts + page)
|
|
365
|
+
const matchPathname = loaderProps?.path || '/'
|
|
366
|
+
const matchParams = loaderProps?.params || {}
|
|
367
|
+
const matches: One.RouteMatch[] = new Array(layoutResults.length + 1)
|
|
368
|
+
for (let i = 0; i < layoutResults.length; i++) {
|
|
369
|
+
const result = layoutResults[i]
|
|
370
|
+
matches[i] = {
|
|
371
|
+
routeId: result.routeId,
|
|
372
|
+
pathname: matchPathname,
|
|
373
|
+
params: matchParams,
|
|
374
|
+
loaderData: result.loaderData,
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
matches[layoutResults.length] = {
|
|
378
|
+
routeId: pageResult.routeId,
|
|
379
|
+
pathname: matchPathname,
|
|
380
|
+
params: matchParams,
|
|
381
|
+
loaderData: pageResult.loaderData,
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const loaderData = pageResult.loaderData
|
|
385
|
+
|
|
386
|
+
// populate per-loader WeakMap for layout useLoader
|
|
387
|
+
for (const layout of layoutRoutes) {
|
|
388
|
+
const key = layout.contextKey
|
|
389
|
+
const loaderFn = loaderCache.get(key)
|
|
390
|
+
if (loaderFn) {
|
|
391
|
+
const result = layoutResults.find((r) => r.routeId === key)
|
|
392
|
+
if (result) setSSRLoaderData(loaderFn, result.loaderData)
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const pageLoaderFn = loaderCache.get(route.file)
|
|
396
|
+
if (pageLoaderFn) setSSRLoaderData(pageLoaderFn, pageResult.loaderData)
|
|
397
|
+
|
|
398
|
+
globalThis['__vxrnresetState']?.()
|
|
399
|
+
|
|
400
|
+
const renderProps = {
|
|
401
|
+
mode: route.type,
|
|
402
|
+
loaderData,
|
|
403
|
+
loaderProps,
|
|
404
|
+
path: loaderProps?.path || '/',
|
|
405
|
+
preloads: routeBuildInfo.criticalPreloads || routeBuildInfo.preloads,
|
|
406
|
+
deferredPreloads: routeBuildInfo.deferredPreloads,
|
|
407
|
+
css: routeBuildInfo.css,
|
|
408
|
+
cssContents: routeBuildInfo.cssContents,
|
|
409
|
+
matches,
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
const _rl = ensureRenderLoaded()
|
|
413
|
+
if (_rl) await _rl
|
|
414
|
+
|
|
415
|
+
const status = route.isNotFound ? 404 : 200
|
|
416
|
+
const responseHeaders = route.isNotFound ? htmlHeaders : ssrHtmlHeaders
|
|
417
|
+
|
|
418
|
+
if (useStreaming) {
|
|
419
|
+
const stream = await renderStream!(renderProps)
|
|
420
|
+
return new Response(stream, { headers: responseHeaders, status })
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const rendered = await render!(renderProps)
|
|
424
|
+
return new Response(rendered, { headers: responseHeaders, status })
|
|
425
|
+
} catch (err) {
|
|
426
|
+
if (isResponse(err)) return err
|
|
427
|
+
console.error(
|
|
428
|
+
`[one] Error rendering SSR route ${route.file}\n${err?.['stack'] ?? err}\nurl: ${url}`
|
|
429
|
+
)
|
|
430
|
+
return null
|
|
431
|
+
}
|
|
432
|
+
} else {
|
|
433
|
+
// SPA/SSG handling
|
|
434
|
+
const layoutRoutes = route.layouts || []
|
|
435
|
+
const needsSpaShell =
|
|
436
|
+
route.type === 'spa' &&
|
|
437
|
+
layoutRoutes.some(
|
|
438
|
+
(layout: any) =>
|
|
439
|
+
layout.layoutRenderMode === 'ssg' || layout.layoutRenderMode === 'ssr'
|
|
440
|
+
)
|
|
441
|
+
|
|
442
|
+
if (needsSpaShell) {
|
|
443
|
+
try {
|
|
444
|
+
const layoutResults = await Promise.all(
|
|
445
|
+
layoutRoutes.map((layout: any) =>
|
|
446
|
+
importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)
|
|
447
|
+
)
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
const matches: One.RouteMatch[] = layoutResults.map((result) => ({
|
|
451
|
+
routeId: result.routeId,
|
|
452
|
+
pathname: loaderProps?.path || '/',
|
|
453
|
+
params: loaderProps?.params || {},
|
|
454
|
+
loaderData: result.loaderData,
|
|
455
|
+
}))
|
|
456
|
+
|
|
457
|
+
globalThis['__vxrnresetState']?.()
|
|
458
|
+
|
|
459
|
+
const _rl = ensureRenderLoaded()
|
|
460
|
+
if (_rl) await _rl
|
|
461
|
+
|
|
462
|
+
const spaRouteBuildInfo = routeToBuildInfo[route.file]
|
|
463
|
+
const rendered = await render!({
|
|
464
|
+
mode: 'spa-shell',
|
|
465
|
+
loaderData: undefined,
|
|
466
|
+
loaderProps,
|
|
467
|
+
path: loaderProps?.path || '/',
|
|
468
|
+
preloads:
|
|
469
|
+
spaRouteBuildInfo?.criticalPreloads || spaRouteBuildInfo?.preloads,
|
|
470
|
+
deferredPreloads: spaRouteBuildInfo?.deferredPreloads,
|
|
471
|
+
css: spaRouteBuildInfo?.css,
|
|
472
|
+
cssContents: spaRouteBuildInfo?.cssContents,
|
|
473
|
+
matches,
|
|
474
|
+
})
|
|
475
|
+
|
|
476
|
+
return new Response(rendered, {
|
|
477
|
+
headers: htmlHeaders,
|
|
478
|
+
status: route.isNotFound ? 404 : 200,
|
|
479
|
+
})
|
|
480
|
+
} catch (err) {
|
|
481
|
+
if (isResponse(err)) return err
|
|
482
|
+
console.error(
|
|
483
|
+
`[one] Error rendering spa-shell for ${route.file}\n${err?.['stack'] ?? err}\nurl: ${url}`
|
|
484
|
+
)
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// static HTML lookup for SPA/SSG
|
|
489
|
+
const isDynamicRoute = Object.keys(route.routeKeys).length > 0
|
|
490
|
+
const routeCleanPath = route.urlCleanPath.replace(/\?/g, '')
|
|
491
|
+
const notFoundKey = route.isNotFound
|
|
492
|
+
? route.page.replace(/\[([^\]]+)\]/g, ':$1')
|
|
493
|
+
: null
|
|
494
|
+
|
|
495
|
+
const htmlPath = notFoundKey
|
|
496
|
+
? routeMap[notFoundKey]
|
|
497
|
+
: isDynamicRoute
|
|
498
|
+
? routeMap[routeCleanPath] || routeMap[url.pathname]
|
|
499
|
+
: routeMap[url.pathname] || routeMap[routeBuildInfo?.cleanPath]
|
|
500
|
+
|
|
501
|
+
if (htmlPath) {
|
|
502
|
+
const html = await readStaticHtml(htmlPath)
|
|
503
|
+
if (html) {
|
|
504
|
+
return new Response(html, {
|
|
505
|
+
headers: htmlHeaders,
|
|
506
|
+
status: route.isNotFound ? 404 : 200,
|
|
507
|
+
})
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// dynamic route with no static HTML → 404
|
|
512
|
+
if (isDynamicRoute) {
|
|
513
|
+
const notFoundRoute = findNearestNotFoundPath(url.pathname)
|
|
514
|
+
const notFoundHtmlPath = routeMap[notFoundRoute]
|
|
515
|
+
|
|
516
|
+
if (notFoundHtmlPath) {
|
|
517
|
+
const notFoundHtml = await readStaticHtml(notFoundHtmlPath)
|
|
518
|
+
if (notFoundHtml) {
|
|
519
|
+
const notFoundMarker = `<script>window.__one404=${JSON.stringify({ originalPath: url.pathname, notFoundPath: notFoundRoute })}</script>`
|
|
520
|
+
const injectedHtml = notFoundHtml.includes('</head>')
|
|
521
|
+
? notFoundHtml.replace('</head>', `${notFoundMarker}</head>`)
|
|
522
|
+
: notFoundHtml.replace('<body', `${notFoundMarker}<body`)
|
|
523
|
+
|
|
524
|
+
return new Response(injectedHtml, {
|
|
525
|
+
headers: htmlHeaders,
|
|
526
|
+
status: 404,
|
|
527
|
+
})
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
return new Response('404 Not Found', { status: 404 })
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
return null
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// set cache headers based on route type
|
|
540
|
+
function setCacheHeaders(
|
|
541
|
+
response: Response,
|
|
542
|
+
route: RouteInfoCompiled,
|
|
543
|
+
isAPI: boolean
|
|
544
|
+
): Response {
|
|
545
|
+
if (
|
|
546
|
+
!response.headers.has('cache-control') &&
|
|
547
|
+
!response.headers.has('Cache-Control')
|
|
548
|
+
) {
|
|
549
|
+
try {
|
|
550
|
+
if (isAPI) {
|
|
551
|
+
response.headers.set('cache-control', 'no-store')
|
|
552
|
+
} else if (route.type === 'ssg' || route.type === 'spa') {
|
|
553
|
+
response.headers.set(
|
|
554
|
+
'cache-control',
|
|
555
|
+
'public, s-maxage=60, stale-while-revalidate=120'
|
|
556
|
+
)
|
|
557
|
+
} else {
|
|
558
|
+
response.headers.set('cache-control', 'no-cache')
|
|
559
|
+
}
|
|
560
|
+
} catch {
|
|
561
|
+
// headers might be immutable on some responses
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
return response
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// the main fetch handler - matches request to route and dispatches
|
|
568
|
+
async function handleRequest(request: Request): Promise<Response | null> {
|
|
569
|
+
const url = getURLfromRequestURL(request)
|
|
570
|
+
const pathname = url.pathname
|
|
571
|
+
const method = request.method
|
|
572
|
+
|
|
573
|
+
// 1. redirects
|
|
574
|
+
if (compiledRedirects) {
|
|
575
|
+
for (const redirect of compiledRedirects) {
|
|
576
|
+
const match = redirect.regex.exec(pathname)
|
|
577
|
+
if (match) {
|
|
578
|
+
let destination = redirect.destination
|
|
579
|
+
if (match.groups) {
|
|
580
|
+
for (const [name, value] of Object.entries(match.groups)) {
|
|
581
|
+
destination = destination.replace(`:${name}`, value)
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
if (debugRouter) console.info(`[one] ↪ redirect ${pathname} → ${destination}`)
|
|
585
|
+
return new Response(null, {
|
|
586
|
+
status: redirect.permanent ? 301 : 302,
|
|
587
|
+
headers: {
|
|
588
|
+
location: new URL(destination, url.origin).toString(),
|
|
589
|
+
},
|
|
590
|
+
})
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
// 2. preload endpoints (empty response if no preload exists)
|
|
596
|
+
if (pathname.endsWith(PRELOAD_JS_POSTFIX)) {
|
|
597
|
+
if (!currentPreloads[pathname]) {
|
|
598
|
+
return new Response('', {
|
|
599
|
+
headers: { 'Content-Type': 'text/javascript' },
|
|
600
|
+
})
|
|
601
|
+
}
|
|
602
|
+
// preload exists - let platform serve the static file
|
|
603
|
+
return null
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
if (pathname.endsWith(CSS_PRELOAD_JS_POSTFIX)) {
|
|
607
|
+
if (!currentCssPreloads?.[pathname]) {
|
|
608
|
+
return new Response('export default Promise.resolve()', {
|
|
609
|
+
headers: { 'Content-Type': 'text/javascript' },
|
|
610
|
+
})
|
|
611
|
+
}
|
|
612
|
+
return null
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
// 3. loader refetch requests
|
|
616
|
+
if (pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {
|
|
617
|
+
const originalUrl = getPathFromLoaderPath(pathname)
|
|
618
|
+
|
|
619
|
+
for (const route of compiledManifest.pageRoutes) {
|
|
620
|
+
if (route.file === '') continue
|
|
621
|
+
if (!route.compiledRegex.test(originalUrl)) continue
|
|
622
|
+
|
|
623
|
+
// ssg dynamic route not in routeMap → 404
|
|
624
|
+
if (
|
|
625
|
+
route.type === 'ssg' &&
|
|
626
|
+
Object.keys(route.routeKeys).length > 0 &&
|
|
627
|
+
!routeMap[originalUrl]
|
|
628
|
+
) {
|
|
629
|
+
return new Response(make404LoaderJs(originalUrl, 'ssg route not in routeMap'), {
|
|
630
|
+
headers: { 'Content-Type': 'text/javascript' },
|
|
631
|
+
})
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
const loaderRoute = {
|
|
635
|
+
...route,
|
|
636
|
+
routeFile: route.file,
|
|
637
|
+
file: (route as any).loaderServerPath || pathname,
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
const finalUrl = new URL(originalUrl, url.origin)
|
|
641
|
+
finalUrl.search = url.search
|
|
642
|
+
const cleanedRequest = new Request(finalUrl, request)
|
|
643
|
+
|
|
644
|
+
try {
|
|
645
|
+
return await resolveLoaderRoute(
|
|
646
|
+
requestHandlers,
|
|
647
|
+
cleanedRequest,
|
|
648
|
+
finalUrl,
|
|
649
|
+
loaderRoute as any
|
|
650
|
+
)
|
|
651
|
+
} catch (err) {
|
|
652
|
+
if ((err as any)?.code === 'ERR_MODULE_NOT_FOUND') {
|
|
653
|
+
return new Response('export function loader() { return undefined }', {
|
|
654
|
+
headers: { 'Content-Type': 'text/javascript' },
|
|
655
|
+
})
|
|
656
|
+
}
|
|
657
|
+
console.error(`Error running loader: ${err}`)
|
|
658
|
+
return null
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
return null
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// 4. skip plain .js/.css (let platform serve static assets)
|
|
666
|
+
if (pathname.endsWith('.js') || pathname.endsWith('.css')) {
|
|
667
|
+
return null
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// 5. API routes (any method)
|
|
671
|
+
for (const route of compiledManifest.apiRoutes) {
|
|
672
|
+
if (route.compiledRegex.test(pathname)) {
|
|
673
|
+
if (debugRouter)
|
|
674
|
+
console.info(`[one] ⚡ ${pathname} → matched API route: ${route.page}`)
|
|
675
|
+
const response = await resolveAPIRoute(requestHandlers, request, url, route)
|
|
676
|
+
if (response && isResponse(response)) {
|
|
677
|
+
return setCacheHeaders(response, route, true)
|
|
678
|
+
}
|
|
679
|
+
return null
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// 6. page routes (GET only)
|
|
684
|
+
if (method === 'GET') {
|
|
685
|
+
for (const route of compiledManifest.pageRoutes) {
|
|
686
|
+
if (!route.compiledRegex.test(pathname)) continue
|
|
687
|
+
|
|
688
|
+
if (debugRouter) {
|
|
689
|
+
console.info(
|
|
690
|
+
`[one] ⚡ ${pathname} → matched page route: ${route.page} (${route.type})`
|
|
691
|
+
)
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// fast path: SSR without middleware
|
|
695
|
+
if (route.type === 'ssr' && !route.middlewares?.length) {
|
|
696
|
+
const params: Record<string, string> = {}
|
|
697
|
+
const match = route.compiledRegex.exec(pathname)
|
|
698
|
+
if (match?.groups) {
|
|
699
|
+
for (const [key, value] of Object.entries(match.groups)) {
|
|
700
|
+
params[route.routeKeys[key]] = value as string
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
const loaderProps = {
|
|
705
|
+
path: pathname,
|
|
706
|
+
search: url.search,
|
|
707
|
+
request,
|
|
708
|
+
params,
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
const response = await withRequestContext(async () => {
|
|
712
|
+
try {
|
|
713
|
+
return await requestHandlers.handlePage!({
|
|
714
|
+
request,
|
|
715
|
+
route,
|
|
716
|
+
url,
|
|
717
|
+
loaderProps,
|
|
718
|
+
})
|
|
719
|
+
} catch (err) {
|
|
720
|
+
if (isResponse(err)) return err as Response
|
|
721
|
+
throw err
|
|
722
|
+
}
|
|
723
|
+
})
|
|
724
|
+
|
|
725
|
+
if (response && isResponse(response)) {
|
|
726
|
+
return setCacheHeaders(response, route, false)
|
|
727
|
+
}
|
|
728
|
+
return null
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// general path
|
|
732
|
+
try {
|
|
733
|
+
const response = await resolvePageRoute(requestHandlers, request, url, route)
|
|
734
|
+
if (response && isResponse(response)) {
|
|
735
|
+
return setCacheHeaders(response, route, false)
|
|
736
|
+
}
|
|
737
|
+
} catch (err) {
|
|
738
|
+
console.error(` [one] Error handling request: ${(err as any)['stack']}`)
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
return null
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
return null
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
function updateRoutes(newBuildInfo: One.BuildInfo, newLazyRoutes?: LazyRoutes) {
|
|
749
|
+
compiledManifest = compileManifest(newBuildInfo.manifest)
|
|
750
|
+
routeToBuildInfo = newBuildInfo.routeToBuildInfo
|
|
751
|
+
routeMap = newBuildInfo.routeMap
|
|
752
|
+
currentPreloads = newBuildInfo.preloads
|
|
753
|
+
currentCssPreloads = newBuildInfo.cssPreloads
|
|
754
|
+
if (newLazyRoutes) currentLazyRoutes = newLazyRoutes
|
|
755
|
+
|
|
756
|
+
// clear all caches
|
|
757
|
+
loaderCache.clear()
|
|
758
|
+
moduleImportCache.clear()
|
|
759
|
+
loaderCacheFnMap.clear()
|
|
760
|
+
pendingLoaderResults.clear()
|
|
761
|
+
render = null
|
|
762
|
+
renderStream = null
|
|
763
|
+
renderLoading = null
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
return { handleRequest, updateRoutes }
|
|
767
|
+
}
|