@rangojs/router 0.0.0-experimental.debug-cache-fix → 0.0.0-experimental.df7974ff
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/README.md +188 -35
- 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/dist/__mocks__/version.js +7 -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 +130 -47
- 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/dist/href-context.d.ts +29 -0
- 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 +1884 -537
- package/dist/vite/index.js.bak +5448 -0
- 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/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +7 -5
- package/skills/breadcrumbs/SKILL.md +3 -1
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +8 -0
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +54 -20
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +45 -0
- package/skills/layout/SKILL.md +24 -0
- package/skills/links/SKILL.md +237 -17
- package/skills/loader/SKILL.md +123 -46
- package/skills/middleware/SKILL.md +36 -3
- package/skills/migrate-nextjs/SKILL.md +562 -0
- package/skills/migrate-react-router/SKILL.md +769 -0
- package/skills/parallel/SKILL.md +68 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/rango/SKILL.md +26 -22
- package/skills/response-routes/SKILL.md +8 -0
- package/skills/route/SKILL.md +79 -0
- package/skills/router-setup/SKILL.md +87 -2
- package/skills/server-actions/SKILL.md +739 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +19 -1
- package/skills/view-transitions/SKILL.md +212 -0
- package/src/__internal.ts +1 -1
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +44 -4
- package/src/browser/navigation-bridge.ts +156 -10
- package/src/browser/navigation-client.ts +128 -53
- package/src/browser/navigation-store.ts +68 -9
- package/src/browser/partial-update.ts +84 -16
- package/src/browser/prefetch/cache.ts +129 -21
- package/src/browser/prefetch/fetch.ts +156 -18
- package/src/browser/prefetch/queue.ts +92 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +53 -13
- package/src/browser/react/Link.tsx +72 -8
- package/src/browser/react/NavigationProvider.tsx +82 -21
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/filter-segment-order.ts +51 -7
- package/src/browser/react/index.ts +3 -0
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +17 -4
- package/src/browser/react/use-reverse.ts +99 -0
- package/src/browser/react/use-router.ts +29 -9
- package/src/browser/react/use-segments.ts +11 -8
- package/src/browser/rsc-router.tsx +60 -9
- package/src/browser/scroll-restoration.ts +38 -33
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +46 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-trie.ts +52 -25
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +211 -72
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-scope.ts +12 -14
- package/src/cache/cf/cf-cache-store.ts +5 -7
- package/src/cache/taint.ts +55 -0
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +89 -231
- package/src/context-var.ts +72 -2
- package/src/handle.ts +40 -0
- package/src/href-client.ts +4 -1
- package/src/index.rsc.ts +6 -1
- package/src/index.ts +49 -6
- package/src/outlet-context.ts +1 -1
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +62 -15
- package/src/route-definition/dsl-helpers.ts +210 -35
- package/src/route-definition/helpers-types.ts +73 -20
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +9 -1
- package/src/route-definition/resolve-handler-use.ts +155 -0
- package/src/route-types.ts +18 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/handler-context.ts +77 -38
- package/src/router/intercept-resolution.ts +9 -4
- package/src/router/lazy-includes.ts +6 -6
- package/src/router/loader-resolution.ts +159 -21
- package/src/router/manifest.ts +22 -13
- package/src/router/match-api.ts +128 -192
- package/src/router/match-handlers.ts +1 -0
- package/src/router/match-middleware/cache-lookup.ts +28 -8
- package/src/router/match-middleware/segment-resolution.ts +53 -0
- package/src/router/match-result.ts +101 -4
- package/src/router/middleware-types.ts +20 -33
- package/src/router/middleware.ts +56 -12
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +101 -17
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/revalidation.ts +15 -1
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +88 -9
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/revalidation.ts +219 -108
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/trie-matching.ts +18 -13
- package/src/router/types.ts +1 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +55 -7
- package/src/rsc/handler.ts +478 -374
- package/src/rsc/helpers.ts +69 -41
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +18 -2
- package/src/rsc/response-route-handler.ts +14 -1
- package/src/rsc/rsc-rendering.ts +20 -1
- package/src/rsc/server-action.ts +12 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +15 -1
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +71 -70
- package/src/server/context.ts +76 -4
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +185 -57
- package/src/ssr/index.tsx +8 -1
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +47 -56
- package/src/types/loader-types.ts +41 -15
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-entry.ts +12 -1
- package/src/types/segments.ts +18 -1
- package/src/urls/include-helper.ts +24 -14
- package/src/urls/path-helper-types.ts +39 -6
- package/src/urls/path-helper.ts +47 -12
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +18 -16
- package/src/use-loader.tsx +77 -5
- package/src/vite/debug.ts +184 -0
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +36 -4
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +175 -74
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +13 -4
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +60 -5
- package/src/vite/plugins/cjs-to-esm.ts +5 -0
- package/src/vite/plugins/client-ref-dedup.ts +16 -0
- package/src/vite/plugins/client-ref-hashing.ts +16 -4
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-action-id.ts +52 -28
- package/src/vite/plugins/expose-id-utils.ts +12 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
- package/src/vite/plugins/expose-internal-ids.ts +563 -316
- package/src/vite/plugins/performance-tracks.ts +96 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/use-cache-transform.ts +56 -43
- package/src/vite/plugins/version-injector.ts +37 -11
- package/src/vite/rango.ts +63 -11
- package/src/vite/router-discovery.ts +732 -86
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/package-resolution.ts +41 -1
- package/src/vite/utils/prerender-utils.ts +38 -5
- package/src/vite/utils/shared-utils.ts +3 -2
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migrate-nextjs
|
|
3
|
+
description: Migrate a Next.js App Router project to @rangojs/router. Use when the user asks to "migrate from Next.js", "convert Next.js to Rango", "replace Next.js", or has a Next.js app they want to port.
|
|
4
|
+
argument-hint: [path-to-nextjs-app]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Migrate from Next.js App Router to @rangojs/router
|
|
8
|
+
|
|
9
|
+
## Why Rango
|
|
10
|
+
|
|
11
|
+
Common reasons to migrate:
|
|
12
|
+
|
|
13
|
+
- **Server components by default** — keep data fetching on the server without
|
|
14
|
+
framework-specific file conventions.
|
|
15
|
+
See: `/router-setup`, `/route`
|
|
16
|
+
- **Django-style route definition** — `urls()`, `path()`, and `layout()` make
|
|
17
|
+
the route tree explicit instead of spreading routing across many special files.
|
|
18
|
+
See: `/route`, `/layout`
|
|
19
|
+
- **Named routes** — reverse URLs by route name instead of hard-coding path
|
|
20
|
+
strings throughout the app.
|
|
21
|
+
See: `/links`, `/typesafety`
|
|
22
|
+
- **Clear execution model** — request scope, render scope, segment boundaries,
|
|
23
|
+
and shared `ctx` behavior are explicit in the routing model.
|
|
24
|
+
See: `/middleware`, `/loader`
|
|
25
|
+
- **Live data layer** — `createLoader()` and `loader()` keep data fresh
|
|
26
|
+
independently of cached UI. A route can serve cached segments while loaders
|
|
27
|
+
still resolve live on every request.
|
|
28
|
+
See: `/loader`, `/caching`, `/cache-guide`
|
|
29
|
+
- **Explicit caching model** — `cache()` DSL, `revalidate()`, `use cache`, and
|
|
30
|
+
custom cache stores make caching and revalidation behavior visible in code.
|
|
31
|
+
See: `/caching`, `/cache-guide`, `/use-cache`
|
|
32
|
+
- **Build-time rendering** — `Static()` and `Prerender()` provide explicit
|
|
33
|
+
build-time rendering instead of mixing rendering and caching behind conventions.
|
|
34
|
+
See: `/prerender`
|
|
35
|
+
- **Composable route tree** — layouts, includes, middleware, parallels, and
|
|
36
|
+
intercepts compose directly in the route definition.
|
|
37
|
+
See: `/composability`, `/parallel`, `/intercept`
|
|
38
|
+
- **Multi-router flexibility** — support multiple routers, domain routing, and
|
|
39
|
+
worker/edge-style deployment patterns.
|
|
40
|
+
See: `/host-router`
|
|
41
|
+
|
|
42
|
+
## Migration Strategy
|
|
43
|
+
|
|
44
|
+
Work route-by-route, bottom-up. Start with leaf pages, then layouts, then middleware. Verify each route works before moving to the next.
|
|
45
|
+
|
|
46
|
+
## 1. Project Setup
|
|
47
|
+
|
|
48
|
+
Replace Next.js tooling with Vite + Rango:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm remove next @next/env
|
|
52
|
+
npm install @rangojs/router @vitejs/plugin-react
|
|
53
|
+
npm install -D vite
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// vite.config.ts
|
|
58
|
+
import { defineConfig } from "vite";
|
|
59
|
+
import { rango } from "@rangojs/router/vite";
|
|
60
|
+
|
|
61
|
+
export default defineConfig({
|
|
62
|
+
plugins: [rango()],
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// src/router.tsx
|
|
68
|
+
import { createRouter } from "@rangojs/router";
|
|
69
|
+
import { Document } from "./document";
|
|
70
|
+
import { urlpatterns } from "./urls";
|
|
71
|
+
|
|
72
|
+
export default createRouter({
|
|
73
|
+
document: Document,
|
|
74
|
+
}).routes(urlpatterns);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The Document component replaces `app/layout.tsx`'s `<html>` wrapper. See `/router-setup` for full config options.
|
|
78
|
+
|
|
79
|
+
## 2. Route Mapping
|
|
80
|
+
|
|
81
|
+
### File-based → URL pattern DSL
|
|
82
|
+
|
|
83
|
+
| Next.js file path | Rango equivalent |
|
|
84
|
+
| ------------------------------- | ---------------------------------------------------------- |
|
|
85
|
+
| `app/page.tsx` | `path("/", HomePage, { name: "home" })` |
|
|
86
|
+
| `app/about/page.tsx` | `path("/about", AboutPage, { name: "about" })` |
|
|
87
|
+
| `app/blog/[slug]/page.tsx` | `path("/blog/:slug", BlogPost, { name: "blogPost" })` |
|
|
88
|
+
| `app/shop/[...path]/page.tsx` | `path("/shop/:path+", CatchAll, { name: "shopCatchAll" })` |
|
|
89
|
+
| `app/docs/[[...slug]]/page.tsx` | `path("/docs/:slug*", Docs, { name: "docs" })` |
|
|
90
|
+
|
|
91
|
+
### Layouts
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
// Next.js: app/dashboard/layout.tsx
|
|
95
|
+
export default function DashboardLayout({ children }) {
|
|
96
|
+
return <div className="dashboard">{children}</div>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Rango:
|
|
100
|
+
import { Outlet } from "@rangojs/router/client";
|
|
101
|
+
|
|
102
|
+
function DashboardLayout() {
|
|
103
|
+
return (
|
|
104
|
+
<div className="dashboard">
|
|
105
|
+
<Outlet />
|
|
106
|
+
</div>
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// In urls.tsx:
|
|
111
|
+
layout(<DashboardLayout />, () => [
|
|
112
|
+
path("/dashboard", DashboardIndex, { name: "dashboard" }),
|
|
113
|
+
path("/dashboard/settings", Settings, { name: "settings" }),
|
|
114
|
+
])
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Key difference: Rango layouts use `<Outlet />` instead of `{children}`. Layouts are server components by default.
|
|
118
|
+
|
|
119
|
+
### Dynamic layouts (with data)
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// Next.js: app/dashboard/layout.tsx
|
|
123
|
+
export default async function DashboardLayout({ children }) {
|
|
124
|
+
const user = await getUser();
|
|
125
|
+
return <Shell user={user}>{children}</Shell>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Rango: handler function layout
|
|
129
|
+
layout(async (ctx) => {
|
|
130
|
+
const user = ctx.get("user");
|
|
131
|
+
return (
|
|
132
|
+
<Shell user={user}>
|
|
133
|
+
<Outlet />
|
|
134
|
+
</Shell>
|
|
135
|
+
);
|
|
136
|
+
}, () => [
|
|
137
|
+
path("/dashboard", DashboardIndex, { name: "dashboard" }),
|
|
138
|
+
])
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Route groups
|
|
142
|
+
|
|
143
|
+
Next.js `app/(marketing)/page.tsx` route groups have no URL segment. In Rango, just organize with `include()`:
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// src/urls/marketing.tsx
|
|
147
|
+
export const marketingPatterns = urls(({ path }) => [
|
|
148
|
+
path("/", LandingPage, { name: "landing" }),
|
|
149
|
+
path("/pricing", PricingPage, { name: "pricing" }),
|
|
150
|
+
]);
|
|
151
|
+
|
|
152
|
+
// src/urls.tsx
|
|
153
|
+
include("/", marketingPatterns, { name: "marketing" }),
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Parallel routes
|
|
157
|
+
|
|
158
|
+
In Next.js, `@sidebar` and `@main` are both named slots. In Rango, the main content
|
|
159
|
+
renders through `<Outlet />` (the path handler), and only extra slots use `parallel()` +
|
|
160
|
+
`<ParallelOutlet />`:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
// Next.js: app/layout.tsx renders {sidebar} and {children}
|
|
164
|
+
// app/@sidebar/page.tsx provides the sidebar slot
|
|
165
|
+
// app/page.tsx provides the main content
|
|
166
|
+
|
|
167
|
+
// Rango: main content is the path handler, sidebar is a parallel slot
|
|
168
|
+
layout(
|
|
169
|
+
() => (
|
|
170
|
+
<div className="dashboard">
|
|
171
|
+
<ParallelOutlet name="@sidebar" />
|
|
172
|
+
<Outlet />
|
|
173
|
+
</div>
|
|
174
|
+
),
|
|
175
|
+
() => [
|
|
176
|
+
parallel({
|
|
177
|
+
"@sidebar": <Sidebar />,
|
|
178
|
+
}),
|
|
179
|
+
path("/dashboard", DashboardPage, { name: "dashboard" }),
|
|
180
|
+
],
|
|
181
|
+
)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Only add `parallel()` slots for content that renders alongside the main route.
|
|
185
|
+
The main content always goes through `<Outlet />` via the `path()` handler.
|
|
186
|
+
|
|
187
|
+
### Intercepting routes
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
// Next.js: app/(.)product/[id]/page.tsx
|
|
191
|
+
// (convention: (.) means same level, (..) parent level)
|
|
192
|
+
|
|
193
|
+
// Rango: explicit intercept in layout
|
|
194
|
+
layout(<ShopLayout />, () => [
|
|
195
|
+
path("/product/:id", ProductPage, { name: "product" }),
|
|
196
|
+
intercept("@modal", ".product", <ProductModal />, () => [
|
|
197
|
+
when(({ from }) => from.pathname.startsWith("/shop")),
|
|
198
|
+
]),
|
|
199
|
+
])
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 3. Data Fetching
|
|
203
|
+
|
|
204
|
+
### Server component data fetching
|
|
205
|
+
|
|
206
|
+
Inline `fetch()` or direct DB calls in server components work as-is — no migration needed:
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
// Next.js:
|
|
210
|
+
async function ProductPage({ params }) {
|
|
211
|
+
const product = await fetch(`/api/products/${params.slug}`).then(r => r.json());
|
|
212
|
+
return <div>{product.name}</div>;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Rango: same pattern, params come from ctx
|
|
216
|
+
const ProductPage: Handler<"product"> = async (ctx) => {
|
|
217
|
+
const product = await fetch(`/api/products/${ctx.params.slug}`).then(r => r.json());
|
|
218
|
+
return <div>{product.name}</div>;
|
|
219
|
+
};
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### When to use createLoader
|
|
223
|
+
|
|
224
|
+
Loaders are Rango's live data layer. Use them when you need:
|
|
225
|
+
|
|
226
|
+
- **Client-side data refresh** — `useLoader()` in client components for reactive data
|
|
227
|
+
- **Per-loader caching** — opt in with `loader(MyLoader, () => [cache({ ttl: 60 })])`; loaders stay live by default
|
|
228
|
+
- **Revalidation control** — `revalidate()` targets specific segments and loaders after actions
|
|
229
|
+
- **Loading skeletons** — `loading()` shows a Suspense fallback while loaders resolve
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
import { createLoader } from "@rangojs/router";
|
|
233
|
+
|
|
234
|
+
export const ProductLoader = createLoader(async (ctx) => {
|
|
235
|
+
return await db.getProduct(ctx.params.slug);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// In urls:
|
|
239
|
+
path("/product/:slug", ProductPage, { name: "product" }, () => [
|
|
240
|
+
loader(ProductLoader),
|
|
241
|
+
loading(<ProductSkeleton />),
|
|
242
|
+
])
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
If the existing fetch pattern works and you don't need these features, leave it as-is. See `/loader` for full API.
|
|
246
|
+
|
|
247
|
+
### generateStaticParams → Prerender + Passthrough
|
|
248
|
+
|
|
249
|
+
Plain `Prerender` only serves the listed params — unlisted params get no live
|
|
250
|
+
fallback in production (the handler is evicted). If the Next.js route serves
|
|
251
|
+
params outside the generated set at runtime, wrap with `Passthrough()`:
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
// Next.js:
|
|
255
|
+
export async function generateStaticParams() {
|
|
256
|
+
return [{ slug: "a" }, { slug: "b" }];
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Rango (build-only, no live fallback for unlisted params):
|
|
260
|
+
import { Prerender } from "@rangojs/router";
|
|
261
|
+
|
|
262
|
+
export const ProductDef = Prerender<{ slug: string }>(
|
|
263
|
+
async () => [{ slug: "a" }, { slug: "b" }],
|
|
264
|
+
async (ctx) => {
|
|
265
|
+
const product = await getProduct(ctx.params.slug);
|
|
266
|
+
return <ProductPage product={product} />;
|
|
267
|
+
},
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
// Rango (with live fallback — matches Next.js dynamicParams behavior):
|
|
271
|
+
import { Prerender, Passthrough } from "@rangojs/router";
|
|
272
|
+
|
|
273
|
+
const ProductDef = Prerender<{ slug: string }>(
|
|
274
|
+
async () => [{ slug: "a" }, { slug: "b" }],
|
|
275
|
+
async (ctx) => {
|
|
276
|
+
const product = await getProduct(ctx.params.slug);
|
|
277
|
+
if (!product) return ctx.passthrough();
|
|
278
|
+
return <ProductPage product={product} />;
|
|
279
|
+
},
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
export const Product = Passthrough(ProductDef, async (ctx) => {
|
|
283
|
+
const product = await getProduct(ctx.params.slug);
|
|
284
|
+
return <ProductPage product={product} />;
|
|
285
|
+
});
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Use `Passthrough()` whenever the Next.js route has `dynamicParams: true` (the
|
|
289
|
+
default) or serves an open-ended param space. See `/prerender` for full API.
|
|
290
|
+
|
|
291
|
+
### Revalidation: different model
|
|
292
|
+
|
|
293
|
+
Next.js uses path/tag-based cache invalidation (`revalidatePath`, `revalidateTag`)
|
|
294
|
+
to bust cached responses. Rango does not currently have a direct equivalent.
|
|
295
|
+
|
|
296
|
+
In Rango, separate these two concepts:
|
|
297
|
+
|
|
298
|
+
**Partial rendering revalidation** — `revalidate()` controls which segments
|
|
299
|
+
(layouts, paths, loaders, parallels) should re-run during partial action
|
|
300
|
+
re-rendering. This is about the segment tree, not cache invalidation:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// Re-run this layout when a blog action fires
|
|
304
|
+
layout(BlogLayout, () => [
|
|
305
|
+
revalidate(({ actionId }) => actionId?.includes("updateBlog") ?? false),
|
|
306
|
+
path("/blog/:slug", BlogPost, { name: "blogPost" }),
|
|
307
|
+
]);
|
|
308
|
+
|
|
309
|
+
// Re-run sidebar parallel when params change
|
|
310
|
+
parallel({ "@sidebar": BlogSidebar }, () => [
|
|
311
|
+
revalidate(
|
|
312
|
+
({ currentParams, nextParams }) => currentParams.slug !== nextParams.slug,
|
|
313
|
+
),
|
|
314
|
+
]);
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**Server-side caching** — `cache()` DSL, loader-level `cache()`, and `"use cache"`
|
|
318
|
+
control what gets cached and for how long. This is separate from `revalidate()`:
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
cache({ ttl: 60, swr: 300 }, () => [
|
|
322
|
+
path("/blog/:slug", BlogPost, { name: "blogPost" }),
|
|
323
|
+
]);
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
The key shift is:
|
|
327
|
+
|
|
328
|
+
- Next.js asks "which cached path or tag should I invalidate?"
|
|
329
|
+
- Rango asks "which segments should re-run after this action?"
|
|
330
|
+
|
|
331
|
+
When migrating `revalidatePath()` / `revalidateTag()` usage, the Rango version
|
|
332
|
+
usually is not a 1:1 API replacement. Instead, decide which layouts, routes,
|
|
333
|
+
loaders, or parallels should recompute after an action and declare
|
|
334
|
+
`revalidate()` at those segment boundaries.
|
|
335
|
+
|
|
336
|
+
## 4. Middleware
|
|
337
|
+
|
|
338
|
+
Next.js `middleware.ts` wraps the entire request — including server actions.
|
|
339
|
+
The direct equivalent is `router.use()`, not the DSL `middleware()`:
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// Next.js: middleware.ts (file-convention, wraps all requests)
|
|
343
|
+
import { NextResponse } from "next/server";
|
|
344
|
+
|
|
345
|
+
export function middleware(request) {
|
|
346
|
+
if (!request.cookies.get("session")) {
|
|
347
|
+
return NextResponse.redirect(new URL("/login", request.url));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
export const config = { matcher: ["/dashboard/:path*"] };
|
|
351
|
+
|
|
352
|
+
// Rango: split into initialisation (global) + guard (scoped)
|
|
353
|
+
import { redirect, cookies } from "@rangojs/router";
|
|
354
|
+
import type { Middleware } from "@rangojs/router";
|
|
355
|
+
|
|
356
|
+
// Runs on every request — resolves the session for all routes
|
|
357
|
+
const authInit: Middleware = async (ctx, next) => {
|
|
358
|
+
const session = cookies().get("session")?.value;
|
|
359
|
+
if (session) {
|
|
360
|
+
const user = await verifySession(session);
|
|
361
|
+
ctx.set("user", user);
|
|
362
|
+
}
|
|
363
|
+
await next();
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
// Scoped guard — redirects unauthenticated users
|
|
367
|
+
const requireAuth: Middleware = async (ctx, next) => {
|
|
368
|
+
if (!ctx.get("user")) {
|
|
369
|
+
return redirect("/login");
|
|
370
|
+
}
|
|
371
|
+
await next();
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
const router = createRouter({})
|
|
375
|
+
.use(authInit) // all routes — sets ctx user
|
|
376
|
+
.use("/dashboard/*", requireAuth) // dashboard only — redirects
|
|
377
|
+
.routes(urlpatterns);
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**Rango has two middleware levels with different scopes:**
|
|
381
|
+
|
|
382
|
+
| | `router.use()` | `middleware()` in DSL |
|
|
383
|
+
| ------------------ | ------------------------------------ | ------------------------------- |
|
|
384
|
+
| Wraps | Entire request (actions + rendering) | Rendering only |
|
|
385
|
+
| Use for | Auth guards, logging, CORS | Context shaping, render headers |
|
|
386
|
+
| Next.js equivalent | `middleware.ts` | No direct equivalent |
|
|
387
|
+
|
|
388
|
+
Use `router.use()` for auth guards — it wraps the full request including actions.
|
|
389
|
+
DSL `middleware()` can also guard rendering (e.g. redirect unauthenticated users
|
|
390
|
+
away from a page), but it does not protect actions on that route. For full auth
|
|
391
|
+
coverage, prefer `router.use()`. See `/middleware`.
|
|
392
|
+
|
|
393
|
+
## 5. Loading & Error States
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
// Next.js: app/dashboard/loading.tsx
|
|
397
|
+
export default function Loading() { return <Skeleton />; }
|
|
398
|
+
|
|
399
|
+
// Rango:
|
|
400
|
+
path("/dashboard", DashboardPage, { name: "dashboard" }, () => [
|
|
401
|
+
loading(<Skeleton />),
|
|
402
|
+
])
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
```typescript
|
|
406
|
+
// Next.js: app/dashboard/error.tsx wraps all routes under /dashboard
|
|
407
|
+
"use client";
|
|
408
|
+
export default function Error({ error, reset }) { ... }
|
|
409
|
+
|
|
410
|
+
// Rango: errorBoundary wrapping a group of routes
|
|
411
|
+
layout(<DashboardLayout />, () => [
|
|
412
|
+
errorBoundary(({ error, reset }) => (
|
|
413
|
+
<div>
|
|
414
|
+
<h2>Something went wrong</h2>
|
|
415
|
+
<button onClick={reset}>Try again</button>
|
|
416
|
+
</div>
|
|
417
|
+
)),
|
|
418
|
+
path("/dashboard", DashboardIndex, { name: "dashboard" }),
|
|
419
|
+
path("/dashboard/settings", Settings, { name: "settings" }),
|
|
420
|
+
])
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
// Next.js: app/not-found.tsx
|
|
425
|
+
export default function NotFound() { ... }
|
|
426
|
+
|
|
427
|
+
// Rango (app-level — no route match, or notFound() without a boundary):
|
|
428
|
+
createRouter({
|
|
429
|
+
notFound: ({ pathname }) => <NotFoundPage pathname={pathname} />,
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
// Rango (route-level — notFoundBoundary wrapping a group of routes):
|
|
433
|
+
layout(<ShopLayout />, () => [
|
|
434
|
+
notFoundBoundary(({ notFound: info }) => (
|
|
435
|
+
<div>
|
|
436
|
+
<h2>Not Found</h2>
|
|
437
|
+
<p>{info.message}</p>
|
|
438
|
+
</div>
|
|
439
|
+
)),
|
|
440
|
+
path("/product/:slug", ProductPage, { name: "product" }),
|
|
441
|
+
path("/product/:slug/reviews", ReviewsPage, { name: "reviews" }),
|
|
442
|
+
])
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
Both `errorBoundary()` and `notFoundBoundary()` catch errors from all
|
|
446
|
+
children in their scope — handlers, loaders, and nested segments.
|
|
447
|
+
|
|
448
|
+
## 6. Navigation
|
|
449
|
+
|
|
450
|
+
| Next.js | Rango |
|
|
451
|
+
| ------------------------------- | ------------------------------------------------- |
|
|
452
|
+
| `import Link from "next/link"` | `import { Link } from "@rangojs/router/client"` |
|
|
453
|
+
| `<Link href="/about">` | `<Link to="/about">` |
|
|
454
|
+
| `useRouter().push("/about")` | `useRouter().push("/about")` |
|
|
455
|
+
| `useRouter().replace("/about")` | `useRouter().replace("/about")` |
|
|
456
|
+
| `usePathname()` | `usePathname()` from `@rangojs/router/client` |
|
|
457
|
+
| `useSearchParams()` | `useSearchParams()` from `@rangojs/router/client` |
|
|
458
|
+
| `redirect("/login")` (server) | `redirect("/login")` from `@rangojs/router` |
|
|
459
|
+
|
|
460
|
+
## 7. Server Actions
|
|
461
|
+
|
|
462
|
+
Server actions work the same way — `"use server"` directive, `useActionState`, form actions. No migration needed for action logic.
|
|
463
|
+
|
|
464
|
+
Key difference: in Rango, route middleware does NOT wrap action execution. Actions only see global middleware context. Use `getRequestContext()` in actions to access `ctx.set()`/`ctx.get()`.
|
|
465
|
+
|
|
466
|
+
Next.js's `revalidatePath()` / `revalidateTag()` have no direct equivalent — Rango partially re-renders matched route segments (path/layout/parallel/intercept) and re-resolves their loaders, and you scope re-runs by attaching a `revalidate(({ actionId }) => ...)` rule to any segment or loader registration. See `/server-actions` for the full pattern (validation, error handling, file uploads) and `/loader` for revalidation rule semantics.
|
|
467
|
+
|
|
468
|
+
## 8. Metadata / Head
|
|
469
|
+
|
|
470
|
+
Rango uses the `Meta` handle + `<MetaTags />` client component:
|
|
471
|
+
|
|
472
|
+
```typescript
|
|
473
|
+
// Next.js: export const metadata = { title: "Home" }
|
|
474
|
+
// Next.js: export function generateMetadata({ params }) { ... }
|
|
475
|
+
|
|
476
|
+
// Rango: Meta handle in handlers (server), MetaTags in document <head> (client)
|
|
477
|
+
import { Meta } from "@rangojs/router";
|
|
478
|
+
|
|
479
|
+
const HomePage: Handler<"home"> = (ctx) => {
|
|
480
|
+
const meta = ctx.use(Meta);
|
|
481
|
+
meta({ title: "Home" });
|
|
482
|
+
meta({ name: "description", content: "Welcome to the site" });
|
|
483
|
+
return <div>Home page</div>;
|
|
484
|
+
};
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
Add `<MetaTags />` in the Document component's `<head>`:
|
|
488
|
+
|
|
489
|
+
```typescript
|
|
490
|
+
import { MetaTags } from "@rangojs/router/client";
|
|
491
|
+
|
|
492
|
+
function Document({ children }: { children: ReactNode }) {
|
|
493
|
+
return (
|
|
494
|
+
<html>
|
|
495
|
+
<head>
|
|
496
|
+
<MetaTags />
|
|
497
|
+
</head>
|
|
498
|
+
<body>{children}</body>
|
|
499
|
+
</html>
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
Later routes override earlier ones for the same meta key (deduplication).
|
|
505
|
+
|
|
506
|
+
## 9. API Routes
|
|
507
|
+
|
|
508
|
+
```typescript
|
|
509
|
+
// Next.js: app/api/users/route.ts
|
|
510
|
+
export async function GET(request) { ... }
|
|
511
|
+
|
|
512
|
+
// Rango: response routes
|
|
513
|
+
path.json("/api/users", async (ctx) => {
|
|
514
|
+
const users = await db.getUsers();
|
|
515
|
+
return users;
|
|
516
|
+
}, { name: "apiUsers" })
|
|
517
|
+
|
|
518
|
+
path.text("/api/health", () => "ok", { name: "apiHealth" })
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
See `/response-routes` for full API.
|
|
522
|
+
|
|
523
|
+
## 10. Theme / Dark Mode
|
|
524
|
+
|
|
525
|
+
If the Next.js app uses `next-themes` or a custom theme provider, replace it
|
|
526
|
+
with Rango's built-in theme system (FOUC prevention included):
|
|
527
|
+
|
|
528
|
+
```typescript
|
|
529
|
+
const router = createRouter({
|
|
530
|
+
theme: true, // or { defaultTheme: "system", attribute: "class" }
|
|
531
|
+
});
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
Client components use `useTheme()` to read and toggle:
|
|
535
|
+
|
|
536
|
+
```typescript
|
|
537
|
+
"use client";
|
|
538
|
+
import { useTheme } from "@rangojs/router/theme";
|
|
539
|
+
|
|
540
|
+
function ThemeToggle() {
|
|
541
|
+
const { theme, setTheme } = useTheme();
|
|
542
|
+
return <button onClick={() => setTheme(theme === "dark" ? "light" : "dark")}>{theme}</button>;
|
|
543
|
+
}
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
See `/theme` for full API including system detection and cookie persistence.
|
|
547
|
+
|
|
548
|
+
## Migration Checklist
|
|
549
|
+
|
|
550
|
+
1. [ ] Set up Vite config with `rango()` plugin
|
|
551
|
+
2. [ ] Create Document component (replaces root `<html>` layout)
|
|
552
|
+
3. [ ] Create `router.tsx` with `createRouter()`
|
|
553
|
+
4. [ ] Convert file-based routes to `urls()` DSL in `urls.tsx`
|
|
554
|
+
5. [ ] Migrate layouts to `layout()` with `<Outlet />`
|
|
555
|
+
6. [ ] Convert data fetching to `createLoader()` + `ctx.use()`
|
|
556
|
+
7. [ ] Migrate `middleware.ts` to `router.use()` (auth, guards, logging)
|
|
557
|
+
8. [ ] Replace `next/link` with `Link` from `@rangojs/router/client`
|
|
558
|
+
9. [ ] Convert loading/error files to `loading()` / `errorBoundary()`
|
|
559
|
+
10. [ ] Migrate API routes to `path.json()` / `path.text()`
|
|
560
|
+
11. [ ] Update metadata to use `Meta` handle + `<MetaTags />` in document head
|
|
561
|
+
12. [ ] Replace `next-themes` with `theme: true` in createRouter (see `/theme`)
|
|
562
|
+
13. [ ] Run `npx rango generate src/` to generate route types
|