one 1.2.57 → 1.2.58
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/dist/cjs/cli/buildPage.cjs +1 -1
- package/dist/cjs/cli/buildPage.js +1 -1
- package/dist/cjs/cli/buildPage.native.js +1 -1
- package/dist/cjs/cli/buildPage.native.js.map +1 -1
- package/dist/cjs/cli/dev.cjs +4 -4
- package/dist/cjs/cli/dev.js +4 -4
- package/dist/cjs/cli/dev.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/createApp.cjs +2 -1
- package/dist/cjs/createApp.js +2 -2
- package/dist/cjs/createApp.js.map +1 -1
- package/dist/cjs/createHandleRequest.test.js +3 -1
- package/dist/cjs/createHandleRequest.test.js.map +1 -1
- package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
- package/dist/cjs/devtools/registry.cjs +30 -0
- package/dist/cjs/devtools/registry.js +25 -0
- package/dist/cjs/devtools/registry.js.map +6 -0
- package/dist/cjs/devtools/registry.native.js +33 -0
- package/dist/cjs/devtools/registry.native.js.map +1 -0
- package/dist/cjs/fork/createMemoryHistory.cjs +20 -9
- package/dist/cjs/fork/createMemoryHistory.js +22 -4
- package/dist/cjs/fork/createMemoryHistory.js.map +1 -1
- package/dist/cjs/fork/createMemoryHistory.native.js +20 -9
- package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
- package/dist/cjs/fork/useLinking.cjs +11 -5
- package/dist/cjs/fork/useLinking.js +6 -6
- package/dist/cjs/fork/useLinking.js.map +1 -1
- package/dist/cjs/index.cjs +17 -1
- package/dist/cjs/index.js +12 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +17 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/layouts/withLayoutContext.cjs +34 -15
- package/dist/cjs/layouts/withLayoutContext.js +29 -13
- package/dist/cjs/layouts/withLayoutContext.js.map +1 -1
- package/dist/cjs/layouts/withLayoutContext.native.js +42 -19
- package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/cjs/link/Link.cjs +5 -2
- package/dist/cjs/link/Link.js +3 -2
- package/dist/cjs/link/Link.js.map +1 -1
- package/dist/cjs/link/Link.native.js +6 -1
- package/dist/cjs/link/Link.native.js.map +1 -1
- package/dist/cjs/link/useLinkTo.cjs +11 -3
- package/dist/cjs/link/useLinkTo.js +6 -3
- package/dist/cjs/link/useLinkTo.js.map +1 -1
- package/dist/cjs/link/useLinkTo.native.js +11 -3
- package/dist/cjs/link/useLinkTo.native.js.map +1 -1
- package/dist/cjs/router/Route.js.map +1 -1
- package/dist/cjs/router/Route.native.js.map +1 -1
- package/dist/cjs/router/findRouteNode.cjs +70 -0
- package/dist/cjs/router/findRouteNode.js +72 -0
- package/dist/cjs/router/findRouteNode.js.map +6 -0
- package/dist/cjs/router/findRouteNode.native.js +104 -0
- package/dist/cjs/router/findRouteNode.native.js.map +1 -0
- package/dist/cjs/router/router.cjs +160 -11
- package/dist/cjs/router/router.js +142 -7
- package/dist/cjs/router/router.js.map +2 -2
- package/dist/cjs/router/router.native.js +241 -57
- package/dist/cjs/router/router.native.js.map +1 -1
- package/dist/cjs/router/useScreens.cjs +1 -1
- package/dist/cjs/router/useScreens.js +1 -1
- package/dist/cjs/router/useScreens.js.map +1 -1
- package/dist/cjs/router/useScreens.native.js +5 -2
- package/dist/cjs/router/useScreens.native.js.map +1 -1
- package/dist/cjs/server/oneServe.js.map +1 -1
- package/dist/cjs/server/oneServe.native.js.map +1 -1
- package/dist/cjs/useBlocker.cjs +158 -0
- package/dist/cjs/useBlocker.js +145 -0
- package/dist/cjs/useBlocker.js.map +6 -0
- package/dist/cjs/useBlocker.native.js +89 -0
- package/dist/cjs/useBlocker.native.js.map +1 -0
- package/dist/cjs/useLoader.cjs +69 -3
- package/dist/cjs/useLoader.js +57 -4
- package/dist/cjs/useLoader.js.map +2 -2
- package/dist/cjs/useLoader.native.js +90 -6
- package/dist/cjs/useLoader.native.js.map +1 -1
- package/dist/cjs/useScrollGroup.cjs +37 -0
- package/dist/cjs/useScrollGroup.js +30 -0
- package/dist/cjs/useScrollGroup.js.map +6 -0
- package/dist/cjs/useScrollGroup.native.js +29 -0
- package/dist/cjs/useScrollGroup.native.js.map +1 -0
- package/dist/cjs/validateParams.cjs +80 -0
- package/dist/cjs/validateParams.js +84 -0
- package/dist/cjs/validateParams.js.map +6 -0
- package/dist/cjs/validateParams.native.js +180 -0
- package/dist/cjs/validateParams.native.js.map +1 -0
- package/dist/cjs/validateSearch.cjs +104 -0
- package/dist/cjs/validateSearch.js +99 -0
- package/dist/cjs/validateSearch.js.map +6 -0
- package/dist/cjs/validateSearch.native.js +202 -0
- package/dist/cjs/validateSearch.native.js.map +1 -0
- package/dist/cjs/views/ErrorBoundary.cjs +293 -10
- package/dist/cjs/views/ErrorBoundary.js +328 -8
- package/dist/cjs/views/ErrorBoundary.js.map +2 -2
- package/dist/cjs/views/ErrorBoundary.native.js +159 -4
- package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/Navigator.cjs +10 -3
- package/dist/cjs/views/Navigator.js +7 -3
- package/dist/cjs/views/Navigator.js.map +1 -1
- package/dist/cjs/views/Navigator.native.js +12 -3
- package/dist/cjs/views/Navigator.native.js.map +1 -1
- package/dist/cjs/views/Protected.cjs +36 -0
- package/dist/cjs/views/Protected.js +27 -0
- package/dist/cjs/views/Protected.js.map +6 -0
- package/dist/cjs/views/Protected.native.js +44 -0
- package/dist/cjs/views/Protected.native.js.map +1 -0
- package/dist/cjs/views/RootErrorBoundary.cjs +193 -8
- package/dist/cjs/views/RootErrorBoundary.js +213 -8
- package/dist/cjs/views/RootErrorBoundary.js.map +1 -1
- package/dist/cjs/views/RootErrorBoundary.native.js +192 -8
- package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/ScrollBehavior.cjs +49 -11
- package/dist/cjs/views/ScrollBehavior.js +47 -11
- package/dist/cjs/views/ScrollBehavior.js.map +1 -1
- package/dist/cjs/views/ScrollBehavior.native.js +68 -10
- package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
- package/dist/cjs/views/SourceInspector.cjs +28 -0
- package/dist/cjs/views/SourceInspector.js +23 -0
- package/dist/cjs/views/SourceInspector.js.map +6 -0
- package/dist/cjs/views/SourceInspector.native.js +32 -0
- package/dist/cjs/views/SourceInspector.native.js.map +1 -0
- package/dist/cjs/views/Try.cjs +40 -7
- package/dist/cjs/views/Try.js +38 -4
- package/dist/cjs/views/Try.js.map +1 -1
- package/dist/cjs/views/Try.native.js +42 -7
- package/dist/cjs/views/Try.native.js.map +1 -1
- package/dist/cjs/vite/DevHead.cjs +797 -43
- package/dist/cjs/vite/DevHead.js +802 -51
- package/dist/cjs/vite/DevHead.js.map +1 -1
- package/dist/cjs/vite/DevHead.native.js +783 -1
- package/dist/cjs/vite/DevHead.native.js.map +1 -1
- package/dist/cjs/vite/one.cjs +7 -1
- package/dist/cjs/vite/one.js +7 -2
- package/dist/cjs/vite/one.js.map +1 -1
- package/dist/cjs/vite/one.native.js +11 -1
- package/dist/cjs/vite/one.native.js.map +1 -1
- package/dist/cjs/vite/plugins/SSRCSSPlugin.cjs +44 -4
- package/dist/cjs/vite/plugins/SSRCSSPlugin.js +48 -4
- package/dist/cjs/vite/plugins/SSRCSSPlugin.js.map +1 -1
- package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js +62 -5
- package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +6 -3
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.cjs +5 -1
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js +11 -6
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +1 -0
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.cjs +155 -0
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.js +148 -0
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.js.map +6 -0
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js +231 -0
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -0
- package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +25 -6
- package/dist/cjs/vite/plugins/virtualEntryPlugin.js +16 -6
- package/dist/cjs/vite/plugins/virtualEntryPlugin.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +26 -7
- package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
- package/dist/esm/cli/buildPage.js +1 -1
- package/dist/esm/cli/buildPage.mjs +1 -1
- package/dist/esm/cli/buildPage.mjs.map +1 -1
- package/dist/esm/cli/buildPage.native.js +1 -1
- package/dist/esm/cli/buildPage.native.js.map +1 -1
- package/dist/esm/cli/dev.js +4 -4
- package/dist/esm/cli/dev.js.map +1 -1
- package/dist/esm/cli/dev.mjs +4 -4
- package/dist/esm/cli/dev.mjs.map +1 -1
- package/dist/esm/cli/dev.native.js +4 -4
- package/dist/esm/cli/dev.native.js.map +1 -1
- package/dist/esm/createApp.js +2 -2
- package/dist/esm/createApp.js.map +1 -1
- package/dist/esm/createApp.mjs +2 -1
- package/dist/esm/createApp.mjs.map +1 -1
- package/dist/esm/createHandleRequest.test.js +3 -1
- package/dist/esm/createHandleRequest.test.js.map +1 -1
- package/dist/esm/createHandleRequest.test.mjs.map +1 -1
- package/dist/esm/createHandleRequest.test.native.js.map +1 -1
- package/dist/esm/devtools/registry.js +9 -0
- package/dist/esm/devtools/registry.js.map +6 -0
- package/dist/esm/devtools/registry.mjs +6 -0
- package/dist/esm/devtools/registry.mjs.map +1 -0
- package/dist/esm/devtools/registry.native.js +6 -0
- package/dist/esm/devtools/registry.native.js.map +1 -0
- package/dist/esm/fork/createMemoryHistory.js +22 -4
- package/dist/esm/fork/createMemoryHistory.js.map +1 -1
- package/dist/esm/fork/createMemoryHistory.mjs +20 -9
- package/dist/esm/fork/createMemoryHistory.mjs.map +1 -1
- package/dist/esm/fork/createMemoryHistory.native.js +20 -9
- package/dist/esm/fork/createMemoryHistory.native.js.map +1 -1
- package/dist/esm/fork/useLinking.js +6 -5
- package/dist/esm/fork/useLinking.js.map +1 -1
- package/dist/esm/fork/useLinking.mjs +11 -5
- package/dist/esm/fork/useLinking.mjs.map +1 -1
- package/dist/esm/index.js +30 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +8 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +8 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/layouts/withLayoutContext.js +30 -12
- package/dist/esm/layouts/withLayoutContext.js.map +1 -1
- package/dist/esm/layouts/withLayoutContext.mjs +34 -15
- package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
- package/dist/esm/layouts/withLayoutContext.native.js +42 -19
- package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/esm/link/Link.js +3 -2
- package/dist/esm/link/Link.js.map +1 -1
- package/dist/esm/link/Link.mjs +5 -2
- package/dist/esm/link/Link.mjs.map +1 -1
- package/dist/esm/link/Link.native.js +6 -1
- package/dist/esm/link/Link.native.js.map +1 -1
- package/dist/esm/link/useLinkTo.js +6 -3
- package/dist/esm/link/useLinkTo.js.map +1 -1
- package/dist/esm/link/useLinkTo.mjs +11 -3
- package/dist/esm/link/useLinkTo.mjs.map +1 -1
- package/dist/esm/link/useLinkTo.native.js +11 -3
- package/dist/esm/link/useLinkTo.native.js.map +1 -1
- package/dist/esm/router/Route.js.map +1 -1
- package/dist/esm/router/Route.mjs.map +1 -1
- package/dist/esm/router/Route.native.js.map +1 -1
- package/dist/esm/router/findRouteNode.js +56 -0
- package/dist/esm/router/findRouteNode.js.map +6 -0
- package/dist/esm/router/findRouteNode.mjs +44 -0
- package/dist/esm/router/findRouteNode.mjs.map +1 -0
- package/dist/esm/router/findRouteNode.native.js +75 -0
- package/dist/esm/router/findRouteNode.native.js.map +1 -0
- package/dist/esm/router/router.js +154 -6
- package/dist/esm/router/router.js.map +1 -1
- package/dist/esm/router/router.mjs +151 -10
- package/dist/esm/router/router.mjs.map +1 -1
- package/dist/esm/router/router.native.js +232 -56
- package/dist/esm/router/router.native.js.map +1 -1
- package/dist/esm/router/useScreens.js +1 -1
- package/dist/esm/router/useScreens.js.map +1 -1
- package/dist/esm/router/useScreens.mjs +1 -1
- package/dist/esm/router/useScreens.mjs.map +1 -1
- package/dist/esm/router/useScreens.native.js +5 -2
- package/dist/esm/router/useScreens.native.js.map +1 -1
- package/dist/esm/server/oneServe.js.map +1 -1
- package/dist/esm/server/oneServe.mjs.map +1 -1
- package/dist/esm/server/oneServe.native.js.map +1 -1
- package/dist/esm/useBlocker.js +122 -0
- package/dist/esm/useBlocker.js.map +6 -0
- package/dist/esm/useBlocker.mjs +123 -0
- package/dist/esm/useBlocker.mjs.map +1 -0
- package/dist/esm/useBlocker.native.js +51 -0
- package/dist/esm/useBlocker.native.js.map +1 -0
- package/dist/esm/useLoader.js +57 -3
- package/dist/esm/useLoader.js.map +2 -2
- package/dist/esm/useLoader.mjs +69 -4
- package/dist/esm/useLoader.mjs.map +1 -1
- package/dist/esm/useLoader.native.js +90 -7
- package/dist/esm/useLoader.native.js.map +1 -1
- package/dist/esm/useScrollGroup.js +16 -0
- package/dist/esm/useScrollGroup.js.map +6 -0
- package/dist/esm/useScrollGroup.mjs +14 -0
- package/dist/esm/useScrollGroup.mjs.map +1 -0
- package/dist/esm/useScrollGroup.native.js +3 -0
- package/dist/esm/useScrollGroup.native.js.map +1 -0
- package/dist/esm/validateParams.js +68 -0
- package/dist/esm/validateParams.js.map +6 -0
- package/dist/esm/validateParams.mjs +54 -0
- package/dist/esm/validateParams.mjs.map +1 -0
- package/dist/esm/validateParams.native.js +151 -0
- package/dist/esm/validateParams.native.js.map +1 -0
- package/dist/esm/validateSearch.js +83 -0
- package/dist/esm/validateSearch.js.map +6 -0
- package/dist/esm/validateSearch.mjs +77 -0
- package/dist/esm/validateSearch.mjs.map +1 -0
- package/dist/esm/validateSearch.native.js +172 -0
- package/dist/esm/validateSearch.native.js.map +1 -0
- package/dist/esm/views/ErrorBoundary.js +325 -7
- package/dist/esm/views/ErrorBoundary.js.map +2 -2
- package/dist/esm/views/ErrorBoundary.mjs +289 -6
- package/dist/esm/views/ErrorBoundary.mjs.map +1 -1
- package/dist/esm/views/ErrorBoundary.native.js +159 -4
- package/dist/esm/views/ErrorBoundary.native.js.map +1 -1
- package/dist/esm/views/Navigator.js +7 -2
- package/dist/esm/views/Navigator.js.map +1 -1
- package/dist/esm/views/Navigator.mjs +10 -3
- package/dist/esm/views/Navigator.mjs.map +1 -1
- package/dist/esm/views/Navigator.native.js +12 -3
- package/dist/esm/views/Navigator.native.js.map +1 -1
- package/dist/esm/views/Protected.js +14 -0
- package/dist/esm/views/Protected.js.map +6 -0
- package/dist/esm/views/Protected.mjs +11 -0
- package/dist/esm/views/Protected.mjs.map +1 -0
- package/dist/esm/views/Protected.native.js +16 -0
- package/dist/esm/views/Protected.native.js.map +1 -0
- package/dist/esm/views/RootErrorBoundary.js +214 -7
- package/dist/esm/views/RootErrorBoundary.js.map +1 -1
- package/dist/esm/views/RootErrorBoundary.mjs +192 -7
- package/dist/esm/views/RootErrorBoundary.mjs.map +1 -1
- package/dist/esm/views/RootErrorBoundary.native.js +191 -7
- package/dist/esm/views/RootErrorBoundary.native.js.map +1 -1
- package/dist/esm/views/ScrollBehavior.js +47 -11
- package/dist/esm/views/ScrollBehavior.js.map +1 -1
- package/dist/esm/views/ScrollBehavior.mjs +48 -11
- package/dist/esm/views/ScrollBehavior.mjs.map +1 -1
- package/dist/esm/views/ScrollBehavior.native.js +67 -10
- package/dist/esm/views/ScrollBehavior.native.js.map +1 -1
- package/dist/esm/views/SourceInspector.js +7 -0
- package/dist/esm/views/SourceInspector.js.map +6 -0
- package/dist/esm/views/SourceInspector.mjs +5 -0
- package/dist/esm/views/SourceInspector.mjs.map +1 -0
- package/dist/esm/views/SourceInspector.native.js +6 -0
- package/dist/esm/views/SourceInspector.native.js.map +1 -0
- package/dist/esm/views/Try.js +38 -4
- package/dist/esm/views/Try.js.map +1 -1
- package/dist/esm/views/Try.mjs +40 -7
- package/dist/esm/views/Try.mjs.map +1 -1
- package/dist/esm/views/Try.native.js +42 -7
- package/dist/esm/views/Try.native.js.map +1 -1
- package/dist/esm/vite/DevHead.js +802 -51
- package/dist/esm/vite/DevHead.js.map +1 -1
- package/dist/esm/vite/DevHead.mjs +797 -43
- package/dist/esm/vite/DevHead.mjs.map +1 -1
- package/dist/esm/vite/DevHead.native.js +782 -0
- package/dist/esm/vite/DevHead.native.js.map +1 -1
- package/dist/esm/vite/one.js +7 -1
- package/dist/esm/vite/one.js.map +1 -1
- package/dist/esm/vite/one.mjs +7 -1
- package/dist/esm/vite/one.mjs.map +1 -1
- package/dist/esm/vite/one.native.js +11 -1
- package/dist/esm/vite/one.native.js.map +1 -1
- package/dist/esm/vite/plugins/SSRCSSPlugin.js +48 -4
- package/dist/esm/vite/plugins/SSRCSSPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/SSRCSSPlugin.mjs +44 -4
- package/dist/esm/vite/plugins/SSRCSSPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/SSRCSSPlugin.native.js +61 -4
- package/dist/esm/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +6 -3
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js +11 -6
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs +5 -1
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +1 -0
- package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
- package/dist/esm/vite/plugins/sourceInspectorPlugin.js +126 -0
- package/dist/esm/vite/plugins/sourceInspectorPlugin.js.map +6 -0
- package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs +121 -0
- package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs.map +1 -0
- package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js +194 -0
- package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js.map +1 -0
- package/dist/esm/vite/plugins/virtualEntryPlugin.js +16 -6
- package/dist/esm/vite/plugins/virtualEntryPlugin.js.map +1 -1
- package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +25 -6
- package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +26 -7
- package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
- package/package.json +11 -9
- package/src/cli/buildPage.ts +1 -1
- package/src/cli/dev.ts +4 -4
- package/src/createApp.tsx +11 -1
- package/src/createHandleRequest.test.ts +3 -1
- package/src/devtools/registry.ts +21 -0
- package/src/fork/createMemoryHistory.tsx +43 -11
- package/src/fork/useLinking.ts +14 -4
- package/src/index.ts +34 -1
- package/src/interfaces/router.ts +48 -0
- package/src/layouts/withLayoutContext.tsx +48 -8
- package/src/link/Link.tsx +7 -2
- package/src/link/useLinkTo.tsx +7 -3
- package/src/router/Route.tsx +32 -3
- package/src/router/findRouteNode.ts +127 -0
- package/src/router/router.ts +286 -2
- package/src/router/useScreens.tsx +9 -3
- package/src/useBlocker.native.ts +153 -0
- package/src/useBlocker.ts +340 -0
- package/src/useLoader.ts +139 -1
- package/src/useScrollGroup.native.ts +7 -0
- package/src/useScrollGroup.ts +44 -0
- package/src/validateParams.ts +196 -0
- package/src/validateSearch.ts +241 -0
- package/src/views/ErrorBoundary.tsx +154 -156
- package/src/views/ErrorBoundary.web.tsx +321 -0
- package/src/views/Navigator.tsx +14 -2
- package/src/views/Protected.tsx +62 -0
- package/src/views/RootErrorBoundary.tsx +214 -17
- package/src/views/ScrollBehavior.tsx +82 -3
- package/src/views/SourceInspector.tsx +39 -0
- package/src/views/Try.tsx +81 -12
- package/src/vite/DevHead.tsx +819 -54
- package/src/vite/one.ts +13 -0
- package/src/vite/plugins/SSRCSSPlugin.ts +104 -0
- package/src/vite/plugins/fileSystemRouterPlugin.tsx +11 -8
- package/src/vite/plugins/generateFileSystemRouteTypesPlugin.tsx +4 -0
- package/src/vite/plugins/sourceInspectorPlugin.ts +246 -0
- package/src/vite/plugins/virtualEntryPlugin.ts +35 -10
- package/src/vite/types.ts +28 -0
- package/types/Route.d.ts.map +1 -0
- package/types/cleanUrl.d.ts.map +1 -0
- package/types/cli/run.d.ts.map +1 -0
- package/types/createApp.d.ts +5 -0
- package/types/createApp.d.ts.map +1 -1
- package/types/createRoute.d.ts.map +1 -0
- package/types/devtools/registry.d.ts +15 -0
- package/types/devtools/registry.d.ts.map +1 -0
- package/types/fork/NavigationContainer.native.d.ts.map +1 -0
- package/types/fork/createMemoryHistory.d.ts +8 -3
- package/types/fork/createMemoryHistory.d.ts.map +1 -1
- package/types/fork/useLinking.d.ts.map +1 -1
- package/types/getLinkingConfig.d.ts.map +1 -0
- package/types/getRoutes.d.ts.map +1 -0
- package/types/imperative-api.d.ts.map +1 -0
- package/types/index.d.ts +8 -1
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/router.d.ts +47 -0
- package/types/interfaces/router.d.ts.map +1 -1
- package/types/layouts/withLayoutContext.d.ts +2 -1
- package/types/layouts/withLayoutContext.d.ts.map +1 -1
- package/types/link/Link.d.ts.map +1 -1
- package/types/link/useLinkTo.d.ts +1 -0
- package/types/link/useLinkTo.d.ts.map +1 -1
- package/types/matchers.d.ts.map +1 -0
- package/types/platform.d.ts.map +1 -0
- package/types/router/Route.d.ts +32 -3
- package/types/router/Route.d.ts.map +1 -1
- package/types/router/findRouteNode.d.ts +31 -0
- package/types/router/findRouteNode.d.ts.map +1 -0
- package/types/router/router.d.ts +35 -0
- package/types/router/router.d.ts.map +1 -1
- package/types/router/useScreens.d.ts +2 -0
- package/types/router/useScreens.d.ts.map +1 -1
- package/types/server/oneServe.d.ts.map +1 -1
- package/types/sortRoutes.d.ts.map +1 -0
- package/types/useBlocker.d.ts +72 -0
- package/types/useBlocker.d.ts.map +1 -0
- package/types/useBlocker.native.d.ts +60 -0
- package/types/useBlocker.native.d.ts.map +1 -0
- package/types/useLoader.d.ts +10 -0
- package/types/useLoader.d.ts.map +1 -1
- package/types/useNavigation.d.ts.map +1 -0
- package/types/useScreens.d.ts.map +1 -0
- package/types/useScrollGroup.d.ts +27 -0
- package/types/useScrollGroup.d.ts.map +1 -0
- package/types/useScrollGroup.native.d.ts +6 -0
- package/types/useScrollGroup.native.d.ts.map +1 -0
- package/types/useSearch.d.ts.map +1 -0
- package/types/useViteRoutes.d.ts.map +1 -0
- package/types/validateParams.d.ts +85 -0
- package/types/validateParams.d.ts.map +1 -0
- package/types/validateSearch.d.ts +107 -0
- package/types/validateSearch.d.ts.map +1 -0
- package/types/views/ErrorBoundary.d.ts +11 -1
- package/types/views/ErrorBoundary.d.ts.map +1 -1
- package/types/views/ErrorBoundary.web.d.ts +13 -0
- package/types/views/ErrorBoundary.web.d.ts.map +1 -0
- package/types/views/Navigator.d.ts.map +1 -1
- package/types/views/Protected.d.ts +39 -0
- package/types/views/Protected.d.ts.map +1 -0
- package/types/views/RootErrorBoundary.d.ts +14 -8
- package/types/views/RootErrorBoundary.d.ts.map +1 -1
- package/types/views/ScrollBehavior.d.ts +8 -0
- package/types/views/ScrollBehavior.d.ts.map +1 -1
- package/types/views/ScrollRestoration.d.ts.map +1 -0
- package/types/views/SourceInspector.d.ts +35 -0
- package/types/views/SourceInspector.d.ts.map +1 -0
- package/types/views/Try.d.ts +29 -6
- package/types/views/Try.d.ts.map +1 -1
- package/types/vite/DevHead.d.ts.map +1 -1
- package/types/vite/build.d.ts.map +1 -0
- package/types/vite/headers.d.ts.map +1 -0
- package/types/vite/headers.native.d.ts.map +1 -0
- package/types/vite/one.d.ts.map +1 -1
- package/types/vite/plugins/SSRCSSPlugin.d.ts.map +1 -1
- package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
- package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts.map +1 -1
- package/types/vite/plugins/seoPreviewPlugin.d.ts.map +1 -0
- package/types/vite/plugins/sourceInspectorPlugin.d.ts +3 -0
- package/types/vite/plugins/sourceInspectorPlugin.d.ts.map +1 -0
- package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
- package/types/vite/resolveAPIRequest.d.ts.map +1 -0
- package/types/vite/server.d.ts.map +1 -0
- package/types/vite/types.d.ts +24 -0
- package/types/vite/types.d.ts.map +1 -1
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route param validation for One routes.
|
|
3
|
+
*
|
|
4
|
+
* Provides type-safe route parameter validation with support for
|
|
5
|
+
* Zod, Valibot, and custom validation functions. Runs before navigation
|
|
6
|
+
* to catch invalid routes early.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { StandardSchema, ZodLikeSchema, SearchValidatorFn } from './validateSearch'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* All supported validator types for route params
|
|
13
|
+
*/
|
|
14
|
+
export type ParamValidator<TInput = Record<string, unknown>, TOutput = TInput> =
|
|
15
|
+
| StandardSchema<TInput, TOutput>
|
|
16
|
+
| ZodLikeSchema<TOutput>
|
|
17
|
+
| SearchValidatorFn<TInput, TOutput>
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Infer the output type from a param validator
|
|
21
|
+
*/
|
|
22
|
+
export type InferParamOutput<T> =
|
|
23
|
+
T extends StandardSchema<any, infer O>
|
|
24
|
+
? O
|
|
25
|
+
: T extends ZodLikeSchema<infer O>
|
|
26
|
+
? O
|
|
27
|
+
: T extends SearchValidatorFn<any, infer O>
|
|
28
|
+
? O
|
|
29
|
+
: never
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Infer the input type from a param validator
|
|
33
|
+
*/
|
|
34
|
+
export type InferParamInput<T> =
|
|
35
|
+
T extends StandardSchema<infer I, any>
|
|
36
|
+
? I
|
|
37
|
+
: T extends ZodLikeSchema<any>
|
|
38
|
+
? Record<string, unknown>
|
|
39
|
+
: T extends SearchValidatorFn<infer I, any>
|
|
40
|
+
? I
|
|
41
|
+
: never
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Error thrown when route param validation fails
|
|
45
|
+
*/
|
|
46
|
+
export class ParamValidationError extends Error {
|
|
47
|
+
readonly routerCode = 'VALIDATE_PARAMS'
|
|
48
|
+
readonly issues: unknown[]
|
|
49
|
+
readonly params: Record<string, unknown>
|
|
50
|
+
|
|
51
|
+
constructor(message: string, params: Record<string, unknown>, issues: unknown[] = []) {
|
|
52
|
+
super(message)
|
|
53
|
+
this.name = 'ParamValidationError'
|
|
54
|
+
this.params = params
|
|
55
|
+
this.issues = issues
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Error thrown when async route validation fails
|
|
61
|
+
*/
|
|
62
|
+
export class RouteValidationError extends Error {
|
|
63
|
+
readonly routerCode = 'VALIDATE_ROUTE'
|
|
64
|
+
readonly details?: Record<string, unknown>
|
|
65
|
+
|
|
66
|
+
constructor(message: string, details?: Record<string, unknown>) {
|
|
67
|
+
super(message)
|
|
68
|
+
this.name = 'RouteValidationError'
|
|
69
|
+
this.details = details
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Props passed to validateRoute function
|
|
75
|
+
*/
|
|
76
|
+
export type ValidateRouteProps = {
|
|
77
|
+
params: Record<string, string | string[]>
|
|
78
|
+
search: Record<string, string | string[]>
|
|
79
|
+
pathname: string
|
|
80
|
+
href: string
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Result from validateRoute function
|
|
85
|
+
*/
|
|
86
|
+
export type ValidationResult =
|
|
87
|
+
| { valid: true }
|
|
88
|
+
| { valid: false; error: string; details?: Record<string, unknown> }
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Async route validation function type
|
|
92
|
+
*/
|
|
93
|
+
export type RouteValidationFn = (
|
|
94
|
+
props: ValidateRouteProps
|
|
95
|
+
) => ValidationResult | Promise<ValidationResult> | void | Promise<void>
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check if a value is a Standard Schema
|
|
99
|
+
*/
|
|
100
|
+
function isStandardSchema(value: unknown): value is StandardSchema {
|
|
101
|
+
return (
|
|
102
|
+
typeof value === 'object' &&
|
|
103
|
+
value !== null &&
|
|
104
|
+
'~standard' in value &&
|
|
105
|
+
typeof (value as any)['~standard']?.validate === 'function'
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Check if a value is a Zod-like schema
|
|
111
|
+
*/
|
|
112
|
+
function isZodLikeSchema(value: unknown): value is ZodLikeSchema {
|
|
113
|
+
return (
|
|
114
|
+
typeof value === 'object' &&
|
|
115
|
+
value !== null &&
|
|
116
|
+
typeof (value as any).parse === 'function'
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Check if a value is a validator function
|
|
122
|
+
*/
|
|
123
|
+
function isValidatorFn(value: unknown): value is SearchValidatorFn<unknown, unknown> {
|
|
124
|
+
return typeof value === 'function'
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Validate route params using the provided validator
|
|
129
|
+
*
|
|
130
|
+
* @param validator - The validator to use (Standard Schema, Zod-like, or function)
|
|
131
|
+
* @param input - The raw route params to validate
|
|
132
|
+
* @returns The validated and transformed params
|
|
133
|
+
* @throws ParamValidationError if validation fails
|
|
134
|
+
*/
|
|
135
|
+
export function validateParams<T extends ParamValidator>(
|
|
136
|
+
validator: T,
|
|
137
|
+
input: Record<string, unknown>
|
|
138
|
+
): InferParamOutput<T> {
|
|
139
|
+
if (isStandardSchema(validator)) {
|
|
140
|
+
const result = validator['~standard'].validate(input)
|
|
141
|
+
if (result.issues) {
|
|
142
|
+
throw new ParamValidationError(
|
|
143
|
+
'Route param validation failed',
|
|
144
|
+
input,
|
|
145
|
+
result.issues as unknown[]
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
return result.value as InferParamOutput<T>
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (isZodLikeSchema(validator)) {
|
|
152
|
+
if (validator.safeParse) {
|
|
153
|
+
const result = validator.safeParse(input)
|
|
154
|
+
if (!result.success) {
|
|
155
|
+
throw new ParamValidationError('Route param validation failed', input, [
|
|
156
|
+
result.error,
|
|
157
|
+
])
|
|
158
|
+
}
|
|
159
|
+
return result.data as InferParamOutput<T>
|
|
160
|
+
}
|
|
161
|
+
// Fallback to parse which throws on error
|
|
162
|
+
try {
|
|
163
|
+
return validator.parse(input) as InferParamOutput<T>
|
|
164
|
+
} catch (error) {
|
|
165
|
+
throw new ParamValidationError('Route param validation failed', input, [error])
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (isValidatorFn(validator)) {
|
|
170
|
+
try {
|
|
171
|
+
return validator(input) as InferParamOutput<T>
|
|
172
|
+
} catch (error) {
|
|
173
|
+
throw new ParamValidationError('Route param validation failed', input, [error])
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
throw new Error('Invalid validator provided to validateParams')
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Create a route param validator from a Zod schema.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* import { z } from 'zod'
|
|
186
|
+
* import { zodParamValidator } from 'one'
|
|
187
|
+
*
|
|
188
|
+
* export const validateParams = zodParamValidator(z.object({
|
|
189
|
+
* id: z.string().uuid('Invalid ID format'),
|
|
190
|
+
* slug: z.string().min(1, 'Slug is required'),
|
|
191
|
+
* }))
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export function zodParamValidator<T extends ZodLikeSchema>(schema: T): T {
|
|
195
|
+
return schema
|
|
196
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search param validation for One routes.
|
|
3
|
+
*
|
|
4
|
+
* Provides type-safe search param parsing and validation with support for
|
|
5
|
+
* Zod, Valibot, and custom validation functions.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Standard Schema interface (from standard-schema.dev)
|
|
10
|
+
* Used by Valibot, ArkType, and others for interop.
|
|
11
|
+
*/
|
|
12
|
+
export interface StandardSchema<Input = unknown, Output = unknown> {
|
|
13
|
+
readonly '~standard': {
|
|
14
|
+
readonly version: 1
|
|
15
|
+
readonly vendor: string
|
|
16
|
+
readonly validate: (
|
|
17
|
+
value: unknown
|
|
18
|
+
) =>
|
|
19
|
+
| { readonly value: Output; readonly issues?: undefined }
|
|
20
|
+
| { readonly value?: undefined; readonly issues: readonly unknown[] }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Zod-like schema interface
|
|
26
|
+
*/
|
|
27
|
+
export interface ZodLikeSchema<Output = unknown> {
|
|
28
|
+
parse(value: unknown): Output
|
|
29
|
+
safeParse?(
|
|
30
|
+
value: unknown
|
|
31
|
+
): { success: true; data: Output } | { success: false; error: unknown }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Custom validator function type
|
|
36
|
+
*/
|
|
37
|
+
export type SearchValidatorFn<TInput, TOutput> = (input: TInput) => TOutput
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* All supported validator types
|
|
41
|
+
*/
|
|
42
|
+
export type SearchValidator<TInput = Record<string, unknown>, TOutput = TInput> =
|
|
43
|
+
| StandardSchema<TInput, TOutput>
|
|
44
|
+
| ZodLikeSchema<TOutput>
|
|
45
|
+
| SearchValidatorFn<TInput, TOutput>
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Infer the output type from a validator
|
|
49
|
+
*/
|
|
50
|
+
export type InferSearchOutput<T> =
|
|
51
|
+
T extends StandardSchema<any, infer O>
|
|
52
|
+
? O
|
|
53
|
+
: T extends ZodLikeSchema<infer O>
|
|
54
|
+
? O
|
|
55
|
+
: T extends SearchValidatorFn<any, infer O>
|
|
56
|
+
? O
|
|
57
|
+
: never
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Infer the input type from a validator
|
|
61
|
+
*/
|
|
62
|
+
export type InferSearchInput<T> =
|
|
63
|
+
T extends StandardSchema<infer I, any>
|
|
64
|
+
? I
|
|
65
|
+
: T extends ZodLikeSchema<any>
|
|
66
|
+
? Record<string, unknown>
|
|
67
|
+
: T extends SearchValidatorFn<infer I, any>
|
|
68
|
+
? I
|
|
69
|
+
: never
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Error thrown when search param validation fails
|
|
73
|
+
*/
|
|
74
|
+
export class SearchValidationError extends Error {
|
|
75
|
+
readonly routerCode = 'VALIDATE_SEARCH'
|
|
76
|
+
readonly issues: unknown[]
|
|
77
|
+
|
|
78
|
+
constructor(message: string, issues: unknown[] = []) {
|
|
79
|
+
super(message)
|
|
80
|
+
this.name = 'SearchValidationError'
|
|
81
|
+
this.issues = issues
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Check if a value is a Standard Schema
|
|
87
|
+
*/
|
|
88
|
+
function isStandardSchema(value: unknown): value is StandardSchema {
|
|
89
|
+
return (
|
|
90
|
+
typeof value === 'object' &&
|
|
91
|
+
value !== null &&
|
|
92
|
+
'~standard' in value &&
|
|
93
|
+
typeof (value as any)['~standard']?.validate === 'function'
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check if a value is a Zod-like schema
|
|
99
|
+
*/
|
|
100
|
+
function isZodLikeSchema(value: unknown): value is ZodLikeSchema {
|
|
101
|
+
return (
|
|
102
|
+
typeof value === 'object' &&
|
|
103
|
+
value !== null &&
|
|
104
|
+
typeof (value as any).parse === 'function'
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Check if a value is a validator function
|
|
110
|
+
*/
|
|
111
|
+
function isValidatorFn(value: unknown): value is SearchValidatorFn<unknown, unknown> {
|
|
112
|
+
return typeof value === 'function'
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Parse search params from URL search string
|
|
117
|
+
*/
|
|
118
|
+
export function parseSearchString(search: string): Record<string, string | string[]> {
|
|
119
|
+
const params: Record<string, string | string[]> = {}
|
|
120
|
+
const searchParams = new URLSearchParams(search)
|
|
121
|
+
|
|
122
|
+
searchParams.forEach((value, key) => {
|
|
123
|
+
const existing = params[key]
|
|
124
|
+
if (existing === undefined) {
|
|
125
|
+
params[key] = value
|
|
126
|
+
} else if (Array.isArray(existing)) {
|
|
127
|
+
existing.push(value)
|
|
128
|
+
} else {
|
|
129
|
+
params[key] = [existing, value]
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
return params
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Validate search params using the provided validator
|
|
138
|
+
*
|
|
139
|
+
* @param validator - The validator to use (Standard Schema, Zod-like, or function)
|
|
140
|
+
* @param input - The raw search params to validate
|
|
141
|
+
* @returns The validated and transformed search params
|
|
142
|
+
* @throws SearchValidationError if validation fails
|
|
143
|
+
*/
|
|
144
|
+
export function validateSearch<T extends SearchValidator>(
|
|
145
|
+
validator: T,
|
|
146
|
+
input: Record<string, unknown>
|
|
147
|
+
): InferSearchOutput<T> {
|
|
148
|
+
if (isStandardSchema(validator)) {
|
|
149
|
+
const result = validator['~standard'].validate(input)
|
|
150
|
+
if (result.issues) {
|
|
151
|
+
throw new SearchValidationError(
|
|
152
|
+
'Search param validation failed',
|
|
153
|
+
result.issues as unknown[]
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
return result.value as InferSearchOutput<T>
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (isZodLikeSchema(validator)) {
|
|
160
|
+
if (validator.safeParse) {
|
|
161
|
+
const result = validator.safeParse(input)
|
|
162
|
+
if (!result.success) {
|
|
163
|
+
throw new SearchValidationError('Search param validation failed', [result.error])
|
|
164
|
+
}
|
|
165
|
+
return result.data as InferSearchOutput<T>
|
|
166
|
+
}
|
|
167
|
+
// Fallback to parse which throws on error
|
|
168
|
+
try {
|
|
169
|
+
return validator.parse(input) as InferSearchOutput<T>
|
|
170
|
+
} catch (error) {
|
|
171
|
+
throw new SearchValidationError('Search param validation failed', [error])
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (isValidatorFn(validator)) {
|
|
176
|
+
try {
|
|
177
|
+
return validator(input) as InferSearchOutput<T>
|
|
178
|
+
} catch (error) {
|
|
179
|
+
throw new SearchValidationError('Search param validation failed', [error])
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
throw new Error('Invalid validator provided to validateSearch')
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Create a search param validator from a Zod schema.
|
|
188
|
+
* This adapter wraps Zod schemas for use with One's validateSearch.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* import { z } from 'zod'
|
|
193
|
+
* import { zodSearchValidator } from 'one'
|
|
194
|
+
*
|
|
195
|
+
* const searchSchema = z.object({
|
|
196
|
+
* page: z.number().default(1),
|
|
197
|
+
* filter: z.string().optional(),
|
|
198
|
+
* })
|
|
199
|
+
*
|
|
200
|
+
* export const validateSearch = zodSearchValidator(searchSchema)
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
export function zodSearchValidator<T extends ZodLikeSchema>(schema: T): T {
|
|
204
|
+
return schema
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Create a fallback wrapper for search param fields.
|
|
209
|
+
* Returns the fallback value if parsing fails instead of throwing.
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```ts
|
|
213
|
+
* import { z } from 'zod'
|
|
214
|
+
* import { withFallback } from 'one'
|
|
215
|
+
*
|
|
216
|
+
* const schema = z.object({
|
|
217
|
+
* page: withFallback(z.number(), 1),
|
|
218
|
+
* })
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export function withFallback<T>(
|
|
222
|
+
schema: ZodLikeSchema<T>,
|
|
223
|
+
fallbackValue: T
|
|
224
|
+
): ZodLikeSchema<T> {
|
|
225
|
+
return {
|
|
226
|
+
parse(value: unknown): T {
|
|
227
|
+
try {
|
|
228
|
+
return schema.parse(value)
|
|
229
|
+
} catch {
|
|
230
|
+
return fallbackValue
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
safeParse(value: unknown) {
|
|
234
|
+
try {
|
|
235
|
+
return { success: true as const, data: schema.parse(value) }
|
|
236
|
+
} catch {
|
|
237
|
+
return { success: true as const, data: fallbackValue }
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
}
|
|
241
|
+
}
|