@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.20
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/AGENTS.md +5 -0
- package/README.md +850 -4
- package/dist/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/{src/__mocks__/version.ts → dist/__mocks__/version.js} +1 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js +1601 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +4583 -749
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +18 -17
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +82 -46
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +139 -238
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +112 -0
- package/skills/document-cache/SKILL.md +87 -57
- package/skills/fonts/SKILL.md +167 -0
- package/skills/hooks/SKILL.md +403 -60
- package/skills/intercept/SKILL.md +224 -203
- package/skills/layout/SKILL.md +243 -149
- package/skills/links/SKILL.md +239 -0
- package/skills/loader/SKILL.md +444 -253
- package/skills/middleware/SKILL.md +222 -325
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +220 -170
- package/skills/prerender/SKILL.md +643 -0
- package/skills/rango/SKILL.md +119 -0
- package/skills/response-routes/SKILL.md +411 -0
- package/skills/route/SKILL.md +334 -89
- package/skills/router-setup/SKILL.md +305 -274
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/testing/SKILL.md +226 -0
- package/skills/theme/SKILL.md +36 -11
- package/skills/typesafety/SKILL.md +437 -168
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +181 -0
- package/src/bin/rango.ts +321 -0
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/event-controller.ts +87 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +20 -4
- package/src/browser/logging.ts +55 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +217 -549
- package/src/browser/navigation-client.ts +74 -46
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +295 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +288 -297
- package/src/browser/prefetch/cache.ts +67 -0
- package/src/browser/prefetch/fetch.ts +137 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +42 -0
- package/src/browser/prefetch/queue.ts +88 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +173 -73
- package/src/browser/react/NavigationProvider.tsx +138 -27
- package/src/browser/react/context.ts +6 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- package/src/browser/react/mount-context.ts +37 -0
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +49 -65
- package/src/browser/react/use-href.tsx +20 -188
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-mount.ts +31 -0
- package/src/browser/react/use-navigation.ts +27 -78
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +104 -34
- package/src/browser/scroll-restoration.ts +92 -16
- package/src/browser/segment-reconciler.ts +216 -0
- package/src/browser/segment-structure-assert.ts +83 -0
- package/src/browser/server-action-bridge.ts +504 -584
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +107 -57
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +438 -0
- package/src/build/generate-route-types.ts +36 -0
- package/src/build/index.ts +35 -0
- package/src/build/route-trie.ts +249 -0
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +469 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +338 -0
- package/src/cache/cache-scope.ts +120 -303
- package/src/cache/cf/cf-cache-store.ts +119 -7
- package/src/cache/cf/index.ts +8 -2
- package/src/cache/document-cache.ts +101 -72
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +0 -15
- package/src/cache/memory-segment-store.ts +191 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +98 -0
- package/src/cache/types.ts +76 -121
- package/src/client.rsc.tsx +10 -14
- package/src/client.tsx +114 -89
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +6 -2
- package/src/context-var.ts +86 -0
- package/src/debug.ts +243 -0
- package/src/errors.ts +108 -2
- package/src/handle.ts +34 -19
- package/src/handles/MetaTags.tsx +76 -23
- package/src/handles/meta.ts +32 -15
- package/src/host/cookie-handler.ts +165 -0
- package/src/host/errors.ts +97 -0
- package/src/host/index.ts +56 -0
- package/src/host/pattern-matcher.ts +214 -0
- package/src/host/router.ts +352 -0
- package/src/host/testing.ts +79 -0
- package/src/host/types.ts +146 -0
- package/src/host/utils.ts +25 -0
- package/src/href-client.ts +141 -47
- package/src/index.rsc.ts +209 -23
- package/src/index.ts +256 -32
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +27 -142
- package/src/loader.ts +27 -10
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/store.ts +144 -0
- package/src/prerender.ts +463 -0
- package/src/reverse.ts +330 -0
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +9 -11
- package/src/route-definition/dsl-helpers.ts +934 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +55 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition/route-function.ts +119 -0
- package/src/route-definition.ts +1 -1371
- package/src/route-map-builder.ts +241 -112
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +70 -9
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +158 -0
- package/src/router/handler-context.ts +348 -82
- package/src/router/intercept-resolution.ts +395 -0
- package/src/router/lazy-includes.ts +234 -0
- package/src/router/loader-resolution.ts +215 -121
- package/src/router/logging.ts +248 -0
- package/src/router/manifest.ts +172 -43
- package/src/router/match-api.ts +620 -0
- package/src/router/match-context.ts +6 -4
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +80 -93
- package/src/router/match-middleware/cache-lookup.ts +382 -9
- package/src/router/match-middleware/cache-store.ts +51 -22
- package/src/router/match-middleware/intercept-resolution.ts +55 -17
- package/src/router/match-middleware/segment-resolution.ts +24 -6
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +34 -20
- package/src/router/metrics.ts +3 -3
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +179 -0
- package/src/router/middleware.ts +239 -328
- package/src/router/pattern-matching.ts +302 -26
- package/src/router/prerender-match.ts +398 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +112 -33
- package/src/router/router-context.ts +40 -23
- package/src/router/router-interfaces.ts +439 -0
- package/src/router/router-options.ts +587 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +552 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +198 -0
- package/src/router/segment-resolution/revalidation.ts +1226 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -0
- package/src/router/segment-wrappers.ts +289 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +221 -0
- package/src/router/types.ts +78 -4
- package/src/router.ts +672 -3566
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +691 -757
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +5 -5
- package/src/rsc/loader-fetch.ts +209 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +366 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +250 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +344 -0
- package/src/rsc/types.ts +38 -14
- package/src/search-params.ts +227 -0
- package/src/segment-system.tsx +59 -61
- package/src/server/context.ts +217 -49
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +98 -20
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +406 -65
- package/src/server.ts +32 -133
- package/src/ssr/index.tsx +157 -26
- package/src/static-handler.ts +114 -0
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +11 -4
- package/src/theme/index.ts +6 -7
- package/src/theme/theme-context.ts +5 -31
- package/src/theme/theme-script.ts +21 -18
- package/src/theme/types.ts +1 -1
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +691 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +161 -0
- package/src/types/route-entry.ts +102 -0
- package/src/types/segments.ts +153 -0
- package/src/types.ts +1 -1561
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -726
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +209 -0
- package/src/vite/discovery/discover-routers.ts +345 -0
- package/src/vite/discovery/prerender-collection.ts +365 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +113 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +10 -782
- package/src/vite/plugin-types.ts +131 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
- package/src/vite/plugins/expose-id-utils.ts +287 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +254 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +510 -0
- package/src/vite/router-discovery.ts +781 -0
- package/src/vite/utils/ast-handler-extract.ts +517 -0
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +129 -0
- package/src/vite/utils/shared-utils.ts +169 -0
- package/CLAUDE.md +0 -7
- package/src/__tests__/component-utils.test.ts +0 -76
- package/src/__tests__/route-definition.test.ts +0 -63
- package/src/__tests__/urls.test.tsx +0 -436
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/__tests__/document-cache.test.ts +0 -522
- package/src/cache/__tests__/memory-segment-store.test.ts +0 -487
- package/src/cache/__tests__/memory-store.test.ts +0 -484
- package/src/cache/cf/__tests__/cf-cache-store.test.ts +0 -428
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -177
- package/src/route-utils.ts +0 -89
- package/src/router/__tests__/match-context.test.ts +0 -104
- package/src/router/__tests__/match-pipelines.test.ts +0 -537
- package/src/router/__tests__/match-result.test.ts +0 -566
- package/src/router/__tests__/on-error.test.ts +0 -935
- package/src/router/__tests__/pattern-matching.test.ts +0 -577
- package/src/router/middleware.test.ts +0 -1355
- package/src/rsc/__tests__/helpers.test.ts +0 -175
- package/src/server/__tests__/request-context.test.ts +0 -171
- package/src/ssr/__tests__/ssr-handler.test.tsx +0 -188
- package/src/theme/__tests__/theme.test.ts +0 -120
- package/src/vite/__tests__/expose-loader-id.test.ts +0 -117
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -357
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/skills/hooks/SKILL.md
CHANGED
|
@@ -1,54 +1,69 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hooks
|
|
3
|
-
description: Client-side React hooks for navigation, loaders, and state in
|
|
3
|
+
description: Client-side React hooks for navigation, loaders, and state in @rangojs/router
|
|
4
4
|
argument-hint: [hook-name]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Client-Side React Hooks
|
|
8
8
|
|
|
9
|
-
All hooks are imported from
|
|
9
|
+
All hooks are imported from `@rangojs/router` or `@rangojs/router/client`.
|
|
10
10
|
|
|
11
11
|
## Navigation Hooks
|
|
12
12
|
|
|
13
13
|
### useNavigation()
|
|
14
14
|
|
|
15
|
-
Track navigation state
|
|
15
|
+
Track reactive navigation state (state-only, no actions):
|
|
16
16
|
|
|
17
17
|
```tsx
|
|
18
18
|
"use client";
|
|
19
|
-
import { useNavigation } from "
|
|
19
|
+
import { useNavigation } from "@rangojs/router/client";
|
|
20
20
|
|
|
21
21
|
function NavIndicator() {
|
|
22
22
|
const nav = useNavigation();
|
|
23
23
|
|
|
24
|
-
//
|
|
25
|
-
nav.state;
|
|
26
|
-
nav.isStreaming;
|
|
27
|
-
nav.location;
|
|
28
|
-
nav.pendingUrl;
|
|
24
|
+
// State properties
|
|
25
|
+
nav.state; // 'idle' | 'loading'
|
|
26
|
+
nav.isStreaming; // boolean
|
|
27
|
+
nav.location; // Current URL
|
|
28
|
+
nav.pendingUrl; // Target URL during navigation (or null)
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
nav.navigate("/products"); // Navigate programmatically
|
|
32
|
-
nav.navigate("/products", { replace: true }); // Replace history
|
|
33
|
-
nav.refresh(); // Refresh current route
|
|
34
|
-
|
|
35
|
-
return nav.state === 'loading' ? <Spinner /> : null;
|
|
30
|
+
return nav.state === "loading" ? <Spinner /> : null;
|
|
36
31
|
}
|
|
37
32
|
|
|
38
|
-
// With selector for performance
|
|
33
|
+
// With selector for performance (re-renders only when selected value changes)
|
|
39
34
|
function IsLoading() {
|
|
40
|
-
const isLoading = useNavigation(nav => nav.state ===
|
|
35
|
+
const isLoading = useNavigation((nav) => nav.state === "loading");
|
|
41
36
|
return isLoading ? <Spinner /> : null;
|
|
42
37
|
}
|
|
43
38
|
```
|
|
44
39
|
|
|
40
|
+
### useRouter()
|
|
41
|
+
|
|
42
|
+
Access stable router actions (never causes re-renders):
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
"use client";
|
|
46
|
+
import { useRouter } from "@rangojs/router/client";
|
|
47
|
+
|
|
48
|
+
function NavigationControls() {
|
|
49
|
+
const router = useRouter();
|
|
50
|
+
|
|
51
|
+
router.push("/products"); // Navigate (adds history entry)
|
|
52
|
+
router.replace("/login"); // Navigate (replaces history entry)
|
|
53
|
+
router.refresh(); // Re-fetch current route data
|
|
54
|
+
router.prefetch("/dashboard"); // Prefetch for faster navigation
|
|
55
|
+
router.back(); // Go back in history
|
|
56
|
+
router.forward(); // Go forward in history
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
45
60
|
### useSegments()
|
|
46
61
|
|
|
47
62
|
Access current URL path and matched route segments:
|
|
48
63
|
|
|
49
64
|
```tsx
|
|
50
65
|
"use client";
|
|
51
|
-
import { useSegments } from "
|
|
66
|
+
import { useSegments } from "@rangojs/router";
|
|
52
67
|
|
|
53
68
|
function Breadcrumbs() {
|
|
54
69
|
const { path, segmentIds, location } = useSegments();
|
|
@@ -61,7 +76,7 @@ function Breadcrumbs() {
|
|
|
61
76
|
}
|
|
62
77
|
|
|
63
78
|
// With selector
|
|
64
|
-
const isShopRoute = useSegments(s => s.path[0] === "shop");
|
|
79
|
+
const isShopRoute = useSegments((s) => s.path[0] === "shop");
|
|
65
80
|
```
|
|
66
81
|
|
|
67
82
|
### useLinkStatus()
|
|
@@ -70,7 +85,7 @@ Track pending state inside a Link component:
|
|
|
70
85
|
|
|
71
86
|
```tsx
|
|
72
87
|
"use client";
|
|
73
|
-
import { Link, useLinkStatus } from "
|
|
88
|
+
import { Link, useLinkStatus } from "@rangojs/router/client";
|
|
74
89
|
|
|
75
90
|
function LoadingIndicator() {
|
|
76
91
|
const { pending } = useLinkStatus();
|
|
@@ -81,7 +96,7 @@ function LoadingIndicator() {
|
|
|
81
96
|
<Link to="/dashboard">
|
|
82
97
|
Dashboard
|
|
83
98
|
<LoadingIndicator />
|
|
84
|
-
</Link
|
|
99
|
+
</Link>;
|
|
85
100
|
```
|
|
86
101
|
|
|
87
102
|
## Data Hooks
|
|
@@ -92,7 +107,7 @@ Access loader data (strict - data guaranteed):
|
|
|
92
107
|
|
|
93
108
|
```tsx
|
|
94
109
|
"use client";
|
|
95
|
-
import { useLoader } from "
|
|
110
|
+
import { useLoader } from "@rangojs/router";
|
|
96
111
|
import { ProductLoader } from "../loaders/product";
|
|
97
112
|
|
|
98
113
|
function ProductPrice() {
|
|
@@ -108,13 +123,27 @@ function ProductPrice() {
|
|
|
108
123
|
|
|
109
124
|
**Precondition**: Loader must be registered on route via `loader()` helper.
|
|
110
125
|
|
|
126
|
+
Loaders can also be passed as props from server to client components:
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
"use client";
|
|
130
|
+
import { useLoader } from "@rangojs/router/client";
|
|
131
|
+
import type { ProductLoader } from "../loaders";
|
|
132
|
+
|
|
133
|
+
// typeof infers the full data type from the loader definition
|
|
134
|
+
function ProductCard({ loader }: { loader: typeof ProductLoader }) {
|
|
135
|
+
const { data } = useLoader(loader);
|
|
136
|
+
return <h2>{data.product.name}</h2>;
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
111
140
|
### useFetchLoader()
|
|
112
141
|
|
|
113
142
|
Access loader with on-demand fetching (flexible):
|
|
114
143
|
|
|
115
144
|
```tsx
|
|
116
145
|
"use client";
|
|
117
|
-
import { useFetchLoader } from "
|
|
146
|
+
import { useFetchLoader } from "@rangojs/router";
|
|
118
147
|
import { SearchLoader } from "../loaders/search";
|
|
119
148
|
|
|
120
149
|
function SearchResults() {
|
|
@@ -132,19 +161,81 @@ function SearchResults() {
|
|
|
132
161
|
<div>
|
|
133
162
|
<input onChange={(e) => handleSearch(e.target.value)} />
|
|
134
163
|
{isLoading && <Spinner />}
|
|
135
|
-
{data?.results.map(r =>
|
|
164
|
+
{data?.results.map((r) => (
|
|
165
|
+
<Result key={r.id} {...r} />
|
|
166
|
+
))}
|
|
136
167
|
</div>
|
|
137
168
|
);
|
|
138
169
|
}
|
|
139
170
|
```
|
|
140
171
|
|
|
141
172
|
**Load options**:
|
|
173
|
+
|
|
142
174
|
```tsx
|
|
175
|
+
// JSON body — sent as application/json, available as ctx.body on the server
|
|
143
176
|
await load({
|
|
144
|
-
method:
|
|
145
|
-
params: { query:
|
|
146
|
-
body: { data:
|
|
177
|
+
method: "POST",
|
|
178
|
+
params: { query: "test" },
|
|
179
|
+
body: { data: "value" },
|
|
147
180
|
});
|
|
181
|
+
|
|
182
|
+
// FormData body — sent as multipart/form-data, available as ctx.formData on the server.
|
|
183
|
+
// Automatically detected: when body is a FormData instance, the request switches
|
|
184
|
+
// to multipart/form-data to preserve File objects and binary data.
|
|
185
|
+
const formData = new FormData();
|
|
186
|
+
formData.append("file", fileInput.files[0]);
|
|
187
|
+
await load({ method: "POST", body: formData });
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Body type auto-switching**: The `load()` function inspects the `body` value to
|
|
191
|
+
choose the encoding. If `body instanceof FormData`, the request is sent as
|
|
192
|
+
`multipart/form-data` (browser sets the boundary header automatically). Otherwise
|
|
193
|
+
the body is JSON-serialized and sent with `Content-Type: application/json`. On the
|
|
194
|
+
server, JSON bodies are available via `ctx.body` and FormData bodies via `ctx.formData`.
|
|
195
|
+
|
|
196
|
+
**File upload example**:
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
"use client";
|
|
200
|
+
import { useFetchLoader } from "@rangojs/router";
|
|
201
|
+
import { FileUploadLoader } from "../loaders/upload";
|
|
202
|
+
|
|
203
|
+
function FileUploader() {
|
|
204
|
+
const { data, load, isLoading } = useFetchLoader(FileUploadLoader);
|
|
205
|
+
const formRef = useRef<HTMLFormElement>(null);
|
|
206
|
+
|
|
207
|
+
const handleSubmit = async (formData: FormData) => {
|
|
208
|
+
await load({ method: "POST", body: formData });
|
|
209
|
+
formRef.current?.reset();
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
return (
|
|
213
|
+
<form ref={formRef} action={handleSubmit}>
|
|
214
|
+
<input type="file" name="file" />
|
|
215
|
+
<button type="submit" disabled={isLoading}>
|
|
216
|
+
{isLoading ? "Uploading..." : "Upload"}
|
|
217
|
+
</button>
|
|
218
|
+
{data?.uploadedFile && <p>Uploaded: {data.uploadedFile.name}</p>}
|
|
219
|
+
</form>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Server-side loader for the upload:
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
import { createLoader } from "@rangojs/router";
|
|
228
|
+
|
|
229
|
+
export const FileUploadLoader = createLoader(async (ctx) => {
|
|
230
|
+
"use server";
|
|
231
|
+
|
|
232
|
+
const file = ctx.formData?.get("file") as File | null;
|
|
233
|
+
if (file && file.size > 0) {
|
|
234
|
+
// Process file (save to R2, D1, etc.)
|
|
235
|
+
return { uploadedFile: { name: file.name, size: file.size } };
|
|
236
|
+
}
|
|
237
|
+
return { uploadedFile: null };
|
|
238
|
+
}, true); // true = fetchable (can be called from the client via load())
|
|
148
239
|
```
|
|
149
240
|
|
|
150
241
|
### useLoaderData()
|
|
@@ -153,7 +244,7 @@ Get all loader data in current context:
|
|
|
153
244
|
|
|
154
245
|
```tsx
|
|
155
246
|
"use client";
|
|
156
|
-
import { useLoaderData } from "
|
|
247
|
+
import { useLoaderData } from "@rangojs/router";
|
|
157
248
|
|
|
158
249
|
function DebugPanel() {
|
|
159
250
|
const allData = useLoaderData();
|
|
@@ -171,7 +262,7 @@ Access accumulated handle data from route segments:
|
|
|
171
262
|
|
|
172
263
|
```tsx
|
|
173
264
|
"use client";
|
|
174
|
-
import { useHandle } from "
|
|
265
|
+
import { useHandle } from "@rangojs/router";
|
|
175
266
|
import { Breadcrumbs } from "../handles/breadcrumbs";
|
|
176
267
|
|
|
177
268
|
function BreadcrumbNav() {
|
|
@@ -191,9 +282,40 @@ function BreadcrumbNav() {
|
|
|
191
282
|
}
|
|
192
283
|
|
|
193
284
|
// With selector
|
|
194
|
-
const lastCrumb = useHandle(Breadcrumbs, data => data.at(-1));
|
|
285
|
+
const lastCrumb = useHandle(Breadcrumbs, (data) => data.at(-1));
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Handles can be passed as props from server to client components:
|
|
289
|
+
|
|
290
|
+
```tsx
|
|
291
|
+
// Server component
|
|
292
|
+
path("/dashboard", (ctx) => {
|
|
293
|
+
const push = ctx.use(Breadcrumbs);
|
|
294
|
+
push({ label: "Dashboard", href: "/dashboard" });
|
|
295
|
+
return <DashboardNav handle={Breadcrumbs} />;
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
// Client component — typeof infers the full Handle<T> type
|
|
299
|
+
("use client");
|
|
300
|
+
import { useHandle } from "@rangojs/router/client";
|
|
301
|
+
import type { Breadcrumbs } from "../handles";
|
|
302
|
+
|
|
303
|
+
function DashboardNav({ handle }: { handle: typeof Breadcrumbs }) {
|
|
304
|
+
const crumbs = useHandle(handle);
|
|
305
|
+
return (
|
|
306
|
+
<nav>
|
|
307
|
+
{crumbs.map((c) => (
|
|
308
|
+
<a href={c.href}>{c.label}</a>
|
|
309
|
+
))}
|
|
310
|
+
</nav>
|
|
311
|
+
);
|
|
312
|
+
}
|
|
195
313
|
```
|
|
196
314
|
|
|
315
|
+
RSC serialization strips the `collect` function via `toJSON()`. On the client,
|
|
316
|
+
`useHandle()` recovers it from the module-level registry (populated when
|
|
317
|
+
`createHandle()` runs during module initialization).
|
|
318
|
+
|
|
197
319
|
## Action Hooks
|
|
198
320
|
|
|
199
321
|
### useAction()
|
|
@@ -202,7 +324,7 @@ Track state of server action invocations:
|
|
|
202
324
|
|
|
203
325
|
```tsx
|
|
204
326
|
"use client";
|
|
205
|
-
import { useAction } from "
|
|
327
|
+
import { useAction } from "@rangojs/router";
|
|
206
328
|
import { addToCart } from "../actions/cart";
|
|
207
329
|
|
|
208
330
|
function AddToCartButton({ productId }: { productId: string }) {
|
|
@@ -217,8 +339,8 @@ function AddToCartButton({ productId }: { productId: string }) {
|
|
|
217
339
|
return (
|
|
218
340
|
<form action={addToCart}>
|
|
219
341
|
<input type="hidden" name="productId" value={productId} />
|
|
220
|
-
<button disabled={state ===
|
|
221
|
-
{state ===
|
|
342
|
+
<button disabled={state === "loading"}>
|
|
343
|
+
{state === "loading" ? "Adding..." : "Add to Cart"}
|
|
222
344
|
</button>
|
|
223
345
|
{error && <p className="error">{error.message}</p>}
|
|
224
346
|
</form>
|
|
@@ -226,7 +348,7 @@ function AddToCartButton({ productId }: { productId: string }) {
|
|
|
226
348
|
}
|
|
227
349
|
|
|
228
350
|
// Match by string suffix (convenient but may be ambiguous)
|
|
229
|
-
const isLoading = useAction(
|
|
351
|
+
const isLoading = useAction("addToCart", (s) => s.state === "loading");
|
|
230
352
|
```
|
|
231
353
|
|
|
232
354
|
## State Hooks
|
|
@@ -237,20 +359,29 @@ Read type-safe state from history:
|
|
|
237
359
|
|
|
238
360
|
```tsx
|
|
239
361
|
"use client";
|
|
240
|
-
import { useLocationState, createLocationState } from "
|
|
362
|
+
import { useLocationState, createLocationState } from "@rangojs/router";
|
|
241
363
|
|
|
242
|
-
// Define typed state
|
|
364
|
+
// Define typed state (all export patterns supported)
|
|
365
|
+
// Keys are auto-injected by the Vite plugin -- no manual key needed.
|
|
243
366
|
export const ProductState = createLocationState<{
|
|
244
367
|
name: string;
|
|
245
368
|
price: number;
|
|
246
369
|
}>();
|
|
247
370
|
|
|
371
|
+
// Also valid: const ProductState = createLocationState<...>();
|
|
372
|
+
// export { ProductState };
|
|
373
|
+
// Also valid: export { ProductState as MyState };
|
|
374
|
+
|
|
248
375
|
function ProductHeader() {
|
|
249
376
|
const state = useLocationState(ProductState);
|
|
250
377
|
// { name: string; price: number } | undefined
|
|
251
378
|
|
|
252
379
|
if (state) {
|
|
253
|
-
return
|
|
380
|
+
return (
|
|
381
|
+
<h1>
|
|
382
|
+
{state.name} - ${state.price}
|
|
383
|
+
</h1>
|
|
384
|
+
);
|
|
254
385
|
}
|
|
255
386
|
return <h1>Loading...</h1>;
|
|
256
387
|
}
|
|
@@ -259,17 +390,117 @@ function ProductHeader() {
|
|
|
259
390
|
Pass state through Link:
|
|
260
391
|
|
|
261
392
|
```tsx
|
|
262
|
-
import { Link } from "
|
|
393
|
+
import { Link } from "@rangojs/router/client";
|
|
394
|
+
import { ProductState } from "./state";
|
|
395
|
+
|
|
396
|
+
<Link to="/product/123" state={[ProductState({ name: "Widget", price: 99 })]}>
|
|
397
|
+
View Product
|
|
398
|
+
</Link>;
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Pass typed state just in time (getter evaluated at click time, not render time):
|
|
402
|
+
|
|
403
|
+
```tsx
|
|
404
|
+
"use client"; // JIT state requires a client component (getter can't cross RSC boundary)
|
|
405
|
+
|
|
406
|
+
import { Link } from "@rangojs/router/client";
|
|
263
407
|
import { ProductState } from "./state";
|
|
264
408
|
|
|
409
|
+
// The getter is stored lazily and only called when the user clicks the link.
|
|
410
|
+
// This is useful for capturing values that change after render (e.g., scroll
|
|
411
|
+
// position, form state, ref values).
|
|
265
412
|
<Link
|
|
266
413
|
to="/product/123"
|
|
267
|
-
state={[ProductState({ name:
|
|
414
|
+
state={[ProductState(() => ({ name: product.name, price: product.price }))]}
|
|
268
415
|
>
|
|
269
416
|
View Product
|
|
417
|
+
</Link>;
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Plain state can also be evaluated just in time (also requires a client component):
|
|
421
|
+
|
|
422
|
+
```tsx
|
|
423
|
+
<Link to="/product/123" state={() => ({ from: window.location.pathname })}>
|
|
424
|
+
View Product
|
|
270
425
|
</Link>
|
|
271
426
|
```
|
|
272
427
|
|
|
428
|
+
### Flash State (read-once)
|
|
429
|
+
|
|
430
|
+
Create a location state with `{ flash: true }` for read-once state that
|
|
431
|
+
auto-clears after first render. Ideal for flash messages (success/error
|
|
432
|
+
notifications after redirect):
|
|
433
|
+
|
|
434
|
+
```tsx
|
|
435
|
+
// location-states.ts
|
|
436
|
+
import { createLocationState } from "@rangojs/router";
|
|
437
|
+
|
|
438
|
+
export const FlashMessage = createLocationState<{ text: string }>({
|
|
439
|
+
flash: true,
|
|
440
|
+
});
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
Read flash state with `useLocationState` (same hook as persistent state):
|
|
444
|
+
|
|
445
|
+
```tsx
|
|
446
|
+
"use client";
|
|
447
|
+
import { useLocationState } from "@rangojs/router/client";
|
|
448
|
+
import { FlashMessage } from "../location-states";
|
|
449
|
+
|
|
450
|
+
function FlashBanner() {
|
|
451
|
+
const flash = useLocationState(FlashMessage);
|
|
452
|
+
// { text: string } | undefined
|
|
453
|
+
|
|
454
|
+
if (!flash) return null;
|
|
455
|
+
return <div className="flash">{flash.text}</div>;
|
|
456
|
+
}
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
Flash behavior is determined by the definition (`{ flash: true }`), not by which
|
|
460
|
+
hook reads it. `useLocationState` reads the value synchronously during render,
|
|
461
|
+
then clears it from `history.state` via `replaceState` in a `useEffect`.
|
|
462
|
+
Multiple components reading the same flash definition all see the value.
|
|
463
|
+
Pressing back/forward will not re-show the flash since it was cleared.
|
|
464
|
+
|
|
465
|
+
Set flash state from the server via `redirect()` with state:
|
|
466
|
+
|
|
467
|
+
```tsx
|
|
468
|
+
// In a route handler
|
|
469
|
+
import { redirect, createLocationState } from "@rangojs/router";
|
|
470
|
+
|
|
471
|
+
export const FlashMessage = createLocationState<{ text: string }>({
|
|
472
|
+
flash: true,
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// Handler
|
|
476
|
+
(ctx) => {
|
|
477
|
+
return redirect("/dashboard", {
|
|
478
|
+
state: [FlashMessage({ text: "Item saved!" })],
|
|
479
|
+
});
|
|
480
|
+
};
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Or via `ctx.setLocationState()` on any response:
|
|
484
|
+
|
|
485
|
+
```tsx
|
|
486
|
+
(ctx) => {
|
|
487
|
+
ctx.setLocationState(FlashMessage({ text: "Welcome back!" }));
|
|
488
|
+
return <Dashboard />;
|
|
489
|
+
};
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
### .read() (non-hook access)
|
|
493
|
+
|
|
494
|
+
Read current location state outside React components (client-side only):
|
|
495
|
+
|
|
496
|
+
```tsx
|
|
497
|
+
import { FlashMessage, ProductState } from "../location-states";
|
|
498
|
+
|
|
499
|
+
// Returns TState | undefined. Returns undefined during SSR.
|
|
500
|
+
const flash = FlashMessage.read();
|
|
501
|
+
const product = ProductState.read();
|
|
502
|
+
```
|
|
503
|
+
|
|
273
504
|
## Cache Hooks
|
|
274
505
|
|
|
275
506
|
### useClientCache()
|
|
@@ -278,15 +509,15 @@ Manually control client-side navigation cache:
|
|
|
278
509
|
|
|
279
510
|
```tsx
|
|
280
511
|
"use client";
|
|
281
|
-
import { useClientCache } from "
|
|
512
|
+
import { useClientCache } from "@rangojs/router";
|
|
282
513
|
|
|
283
514
|
function SaveButton() {
|
|
284
515
|
const { clear } = useClientCache();
|
|
285
516
|
|
|
286
517
|
const handleSave = async () => {
|
|
287
|
-
await fetch(
|
|
288
|
-
method:
|
|
289
|
-
body: JSON.stringify(data)
|
|
518
|
+
await fetch("/api/data", {
|
|
519
|
+
method: "POST",
|
|
520
|
+
body: JSON.stringify(data),
|
|
290
521
|
});
|
|
291
522
|
|
|
292
523
|
// Invalidate cache after mutation
|
|
@@ -306,7 +537,7 @@ function SaveButton() {
|
|
|
306
537
|
Render child content in layouts:
|
|
307
538
|
|
|
308
539
|
```tsx
|
|
309
|
-
import { Outlet, ParallelOutlet } from "
|
|
540
|
+
import { Outlet, ParallelOutlet } from "@rangojs/router";
|
|
310
541
|
|
|
311
542
|
function DashboardLayout({ children }: { children?: React.ReactNode }) {
|
|
312
543
|
return (
|
|
@@ -314,9 +545,7 @@ function DashboardLayout({ children }: { children?: React.ReactNode }) {
|
|
|
314
545
|
<aside>
|
|
315
546
|
<ParallelOutlet name="@sidebar" />
|
|
316
547
|
</aside>
|
|
317
|
-
<main>
|
|
318
|
-
{children ?? <Outlet />}
|
|
319
|
-
</main>
|
|
548
|
+
<main>{children ?? <Outlet />}</main>
|
|
320
549
|
<ParallelOutlet name="@notifications" />
|
|
321
550
|
</div>
|
|
322
551
|
);
|
|
@@ -329,7 +558,7 @@ Access outlet content programmatically:
|
|
|
329
558
|
|
|
330
559
|
```tsx
|
|
331
560
|
"use client";
|
|
332
|
-
import { useOutlet } from "
|
|
561
|
+
import { useOutlet } from "@rangojs/router";
|
|
333
562
|
|
|
334
563
|
function ConditionalLayout() {
|
|
335
564
|
const outlet = useOutlet();
|
|
@@ -343,17 +572,131 @@ function ConditionalLayout() {
|
|
|
343
572
|
}
|
|
344
573
|
```
|
|
345
574
|
|
|
575
|
+
## URL Hooks
|
|
576
|
+
|
|
577
|
+
### useParams()
|
|
578
|
+
|
|
579
|
+
Access route params from the current URL:
|
|
580
|
+
|
|
581
|
+
```tsx
|
|
582
|
+
"use client";
|
|
583
|
+
import { useParams } from "@rangojs/router/client";
|
|
584
|
+
|
|
585
|
+
// Route: /product/:productId
|
|
586
|
+
function ProductPage() {
|
|
587
|
+
const params = useParams();
|
|
588
|
+
// { productId: "123" }
|
|
589
|
+
|
|
590
|
+
return <h1>Product {params.productId}</h1>;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// With selector for performance (re-renders only when selected value changes)
|
|
594
|
+
function ProductId() {
|
|
595
|
+
const productId = useParams((p) => p.productId);
|
|
596
|
+
return <span>ID: {productId}</span>;
|
|
597
|
+
}
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
Returns merged params from all matched route segments. Updates on navigation commit (not during pending navigation).
|
|
601
|
+
|
|
602
|
+
### usePathname()
|
|
603
|
+
|
|
604
|
+
Access the current URL pathname:
|
|
605
|
+
|
|
606
|
+
```tsx
|
|
607
|
+
"use client";
|
|
608
|
+
import { usePathname } from "@rangojs/router/client";
|
|
609
|
+
|
|
610
|
+
function CurrentPage() {
|
|
611
|
+
const pathname = usePathname();
|
|
612
|
+
// "/product/123" (no search params)
|
|
613
|
+
|
|
614
|
+
return <span>Current path: {pathname}</span>;
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
Returns the pathname string without search params or hash. Updates on navigation commit.
|
|
619
|
+
|
|
620
|
+
### useSearchParams()
|
|
621
|
+
|
|
622
|
+
Access the current URL search params:
|
|
623
|
+
|
|
624
|
+
```tsx
|
|
625
|
+
"use client";
|
|
626
|
+
import { useSearchParams } from "@rangojs/router/client";
|
|
627
|
+
|
|
628
|
+
function SearchResults() {
|
|
629
|
+
const searchParams = useSearchParams();
|
|
630
|
+
const query = searchParams.get("q"); // "react"
|
|
631
|
+
const page = searchParams.get("page"); // "2"
|
|
632
|
+
|
|
633
|
+
return (
|
|
634
|
+
<div>
|
|
635
|
+
Searching for: {query}, page {page}
|
|
636
|
+
</div>
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
Returns a `ReadonlyURLSearchParams` (URLSearchParams without mutation methods). During SSR, returns empty params and syncs from the browser URL on mount.
|
|
642
|
+
|
|
643
|
+
### useHref()
|
|
644
|
+
|
|
645
|
+
Mount-aware href for client components inside `include()` scopes:
|
|
646
|
+
|
|
647
|
+
```tsx
|
|
648
|
+
"use client";
|
|
649
|
+
import { useHref, href, Link } from "@rangojs/router/client";
|
|
650
|
+
|
|
651
|
+
// Inside include("/shop", shopPatterns)
|
|
652
|
+
function ShopNav() {
|
|
653
|
+
const href = useHref();
|
|
654
|
+
|
|
655
|
+
return (
|
|
656
|
+
<>
|
|
657
|
+
{/* Local paths - auto-prefixed with /shop */}
|
|
658
|
+
<Link to={href("/cart")}>Cart</Link>
|
|
659
|
+
<Link to={href("/product/widget")}>Widget</Link>
|
|
660
|
+
</>
|
|
661
|
+
);
|
|
662
|
+
}
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
Use `useHref()` for local navigation. Use the bare `href()` function for absolute paths.
|
|
666
|
+
|
|
667
|
+
### useMount()
|
|
668
|
+
|
|
669
|
+
Returns the current `include()` mount path:
|
|
670
|
+
|
|
671
|
+
```tsx
|
|
672
|
+
"use client";
|
|
673
|
+
import { useMount } from "@rangojs/router/client";
|
|
674
|
+
|
|
675
|
+
function MountInfo() {
|
|
676
|
+
const mount = useMount(); // "/shop" inside include("/shop", ...)
|
|
677
|
+
return <span>Mounted at: {mount}</span>;
|
|
678
|
+
}
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
See `/links` for full URL generation guide including server-side `ctx.reverse`.
|
|
682
|
+
|
|
346
683
|
## Hook Summary
|
|
347
684
|
|
|
348
|
-
| Hook
|
|
349
|
-
|
|
350
|
-
| `
|
|
351
|
-
| `
|
|
352
|
-
| `
|
|
353
|
-
| `
|
|
354
|
-
| `
|
|
355
|
-
| `
|
|
356
|
-
| `
|
|
357
|
-
| `
|
|
358
|
-
| `
|
|
359
|
-
| `
|
|
685
|
+
| Hook | Purpose | Returns |
|
|
686
|
+
| -------------------- | --------------------------------- | ----------------------------------------------- |
|
|
687
|
+
| `useParams()` | Route params | `Record<string, string>` or selected value |
|
|
688
|
+
| `usePathname()` | Current pathname | `string` |
|
|
689
|
+
| `useSearchParams()` | URL search params | `ReadonlyURLSearchParams` |
|
|
690
|
+
| `useHref()` | Mount-aware href | `(path) => string` |
|
|
691
|
+
| `useMount()` | Current include() mount path | `string` |
|
|
692
|
+
| `useNavigation()` | Reactive navigation state | state, location, isStreaming |
|
|
693
|
+
| `useRouter()` | Stable router actions | push, replace, refresh, prefetch, back, forward |
|
|
694
|
+
| `useSegments()` | URL path & segment IDs | path, segmentIds, location |
|
|
695
|
+
| `useLinkStatus()` | Link pending state | { pending } |
|
|
696
|
+
| `useLoader()` | Loader data (strict) | data, isLoading, error |
|
|
697
|
+
| `useFetchLoader()` | Loader with on-demand fetch | data, load, isLoading |
|
|
698
|
+
| `useLoaderData()` | All loader data | Record<string, any> |
|
|
699
|
+
| `useHandle()` | Accumulated handle data | T (handle type) |
|
|
700
|
+
| `useAction()` | Server action state | state, error, result |
|
|
701
|
+
| `useLocationState()` | History state (persists or flash) | T \| undefined |
|
|
702
|
+
| `useClientCache()` | Cache control | { clear } |
|