@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d
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 +13 -0
- package/README.md +304 -708
- 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 +822 -182
- 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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
- 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/{src/handles/index.ts → dist/handles/index.js} +1 -1
- 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/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
- 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/testing/vitest.js +82 -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 +4644 -1433
- 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 +87 -16
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +329 -0
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +251 -24
- package/skills/caching/SKILL.md +379 -21
- package/skills/catalog.json +271 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +837 -0
- package/skills/composability/SKILL.md +110 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -3
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/document-cache/SKILL.md +87 -56
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +76 -692
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +41 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +320 -0
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +94 -18
- package/skills/layout/SKILL.md +62 -19
- package/skills/links/SKILL.md +249 -17
- package/skills/loader/SKILL.md +320 -32
- package/skills/middleware/SKILL.md +59 -16
- package/skills/migrate-nextjs/SKILL.md +745 -0
- package/skills/migrate-react-router/SKILL.md +153 -0
- package/skills/migrate-react-router/cloudflare-workers.md +129 -0
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +29 -2
- package/skills/observability/SKILL.md +202 -0
- package/skills/parallel/SKILL.md +225 -10
- package/skills/ppr/SKILL.md +618 -0
- package/skills/prerender/SKILL.md +180 -126
- package/skills/rango/SKILL.md +318 -25
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +138 -49
- package/skills/route/SKILL.md +175 -13
- package/skills/router-setup/SKILL.md +139 -14
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +185 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +126 -222
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +131 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -614
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +335 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +209 -0
- package/skills/use-cache/SKILL.md +74 -15
- package/skills/vercel/SKILL.md +128 -0
- package/skills/view-transitions/SKILL.md +337 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +67 -40
- package/src/bin/rango.ts +18 -0
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +257 -158
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +4 -0
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +222 -38
- package/src/browser/navigation-client.ts +233 -58
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +203 -80
- package/src/browser/navigation-transaction.ts +18 -66
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/partial-update.ts +242 -126
- package/src/browser/prefetch/cache.ts +344 -30
- package/src/browser/prefetch/fetch.ts +373 -48
- package/src/browser/prefetch/policy.ts +6 -0
- package/src/browser/prefetch/queue.ts +144 -23
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +135 -18
- package/src/browser/react/NavigationProvider.tsx +240 -122
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +23 -69
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +46 -11
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +276 -75
- package/src/browser/scroll-restoration.ts +61 -47
- package/src/browser/segment-reconciler.ts +44 -7
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +631 -442
- package/src/browser/types.ts +160 -12
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +207 -158
- package/src/build/generate-route-types.ts +8 -1
- package/src/build/index.ts +11 -3
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +215 -42
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +464 -63
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +442 -106
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +13 -21
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +58 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +454 -97
- package/src/cache/cache-scope.ts +235 -103
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +2446 -170
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +11 -17
- package/src/cache/document-cache.ts +144 -49
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +24 -20
- package/src/cache/memory-segment-store.ts +243 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +56 -12
- package/src/cache/segment-codec.ts +13 -21
- package/src/cache/shell-snapshot.ts +417 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +55 -0
- package/src/cache/types.ts +194 -99
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1132 -0
- package/src/client.rsc.tsx +42 -21
- package/src/client.tsx +117 -336
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +108 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +84 -2
- package/src/debug.ts +2 -2
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +104 -34
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +93 -0
- package/src/handles/deferred-resolution.ts +127 -0
- package/src/handles/is-thenable.ts +18 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -5
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +86 -30
- package/src/index.ts +158 -68
- package/src/internal-debug.ts +11 -10
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +63 -26
- package/src/prerender.ts +215 -86
- package/src/redirect-origin.ts +114 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +19 -77
- package/src/route-definition/dsl-helpers.ts +485 -303
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +153 -77
- package/src/route-definition/index.ts +4 -5
- package/src/route-definition/redirect.ts +53 -12
- package/src/route-definition/resolve-handler-use.ts +160 -0
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +48 -21
- package/src/route-types.ts +37 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +164 -17
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +130 -29
- package/src/router/handler-context.ts +110 -39
- package/src/router/instrument.ts +355 -0
- package/src/router/intercept-resolution.ts +50 -24
- package/src/router/lazy-includes.ts +89 -63
- package/src/router/loader-resolution.ts +286 -56
- package/src/router/logging.ts +5 -8
- package/src/router/manifest.ts +105 -56
- package/src/router/match-api.ts +179 -219
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +211 -165
- package/src/router/match-middleware/background-revalidation.ts +66 -22
- package/src/router/match-middleware/cache-lookup.ts +214 -263
- package/src/router/match-middleware/cache-store.ts +105 -50
- package/src/router/match-middleware/intercept-resolution.ts +8 -28
- package/src/router/match-middleware/segment-resolution.ts +52 -18
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +127 -52
- package/src/router/metrics.ts +217 -26
- package/src/router/middleware-types.ts +24 -110
- package/src/router/middleware.ts +412 -199
- package/src/router/navigation-snapshot.ts +133 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +183 -137
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +207 -58
- package/src/router/preview-match.ts +35 -103
- package/src/router/request-classification.ts +291 -0
- package/src/router/revalidation.ts +144 -74
- package/src/router/route-snapshot.ts +256 -0
- package/src/router/router-context.ts +11 -29
- package/src/router/router-interfaces.ts +160 -36
- package/src/router/router-options.ts +215 -23
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +318 -77
- package/src/router/segment-resolution/helpers.ts +116 -31
- package/src/router/segment-resolution/loader-cache.ts +156 -39
- package/src/router/segment-resolution/loader-mask.ts +67 -0
- package/src/router/segment-resolution/loader-snapshot.ts +308 -0
- package/src/router/segment-resolution/revalidation.ts +496 -391
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +56 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +8 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +160 -200
- package/src/router/telemetry.ts +105 -20
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +215 -0
- package/src/router/trie-matching.ts +188 -58
- package/src/router/types.ts +10 -63
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +224 -65
- package/src/rsc/full-payload.ts +70 -0
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +726 -457
- package/src/rsc/helpers.ts +168 -46
- package/src/rsc/index.ts +2 -25
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +127 -31
- package/src/rsc/manifest-init.ts +33 -42
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +159 -23
- package/src/rsc/redirect-guard.ts +100 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +99 -189
- package/src/rsc/rsc-rendering.ts +516 -104
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +293 -115
- package/src/rsc/shell-capture.ts +1166 -0
- package/src/rsc/shell-serve.ts +181 -0
- package/src/rsc/ssr-setup.ts +144 -0
- package/src/rsc/transition-gate.ts +89 -0
- package/src/rsc/types.ts +64 -6
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +49 -41
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +167 -0
- package/src/segment-system.tsx +418 -131
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +375 -63
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +152 -5
- package/src/server/handle-store.ts +40 -38
- package/src/server/loader-registry.ts +38 -46
- package/src/server/request-context.ts +585 -178
- package/src/server.ts +6 -0
- package/src/ssr/index.tsx +467 -174
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/ssr-root.tsx +228 -0
- package/src/static-handler.ts +27 -18
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +813 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +105 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +357 -0
- package/src/testing/render-route.tsx +584 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/run-transition-when.ts +164 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +3 -19
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +237 -89
- package/src/types/index.ts +3 -10
- package/src/types/loader-types.ts +44 -15
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +23 -46
- package/src/types/route-entry.ts +19 -7
- package/src/types/segments.ts +137 -19
- package/src/urls/include-helper.ts +40 -75
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +102 -23
- package/src/urls/path-helper.ts +62 -111
- package/src/urls/pattern-types.ts +84 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +346 -89
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +88 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +64 -91
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +147 -88
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +247 -145
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +61 -13
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +19 -3
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +234 -62
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +120 -0
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- 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 +194 -0
- package/src/vite/plugins/expose-action-id.ts +49 -98
- package/src/vite/plugins/expose-id-utils.ts +96 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +553 -317
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +40 -29
- package/src/vite/plugins/version-plugin.ts +46 -37
- package/src/vite/plugins/virtual-entries.ts +138 -27
- package/src/vite/rango.ts +356 -295
- package/src/vite/router-discovery.ts +1106 -166
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +4 -4
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +158 -38
- package/src/vite/utils/shared-utils.ts +144 -44
- package/CLAUDE.md +0 -5
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/shallow.ts +0 -40
- package/src/route-definition/route-function.ts +0 -119
- package/src/router/middleware-cookies.ts +0 -55
package/dist/bin/rango.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __esm = (fn, res) => function __init() {
|
|
5
|
-
|
|
4
|
+
var __esm = (fn, res, err) => function __init() {
|
|
5
|
+
if (err) throw err[0];
|
|
6
|
+
try {
|
|
7
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
8
|
+
} catch (e) {
|
|
9
|
+
throw err = [e], e;
|
|
10
|
+
}
|
|
6
11
|
};
|
|
7
12
|
var __export = (target, all) => {
|
|
8
13
|
for (var name in all)
|
|
@@ -22,10 +27,10 @@ function extractParamsFromPattern(pattern) {
|
|
|
22
27
|
function formatRouteEntry(key, pattern, _params, search) {
|
|
23
28
|
const hasSearch = search && Object.keys(search).length > 0;
|
|
24
29
|
if (!hasSearch) {
|
|
25
|
-
return ` ${key}:
|
|
30
|
+
return ` ${key}: ${JSON.stringify(pattern)},`;
|
|
26
31
|
}
|
|
27
|
-
const searchBody = Object.entries(search).map(([k, v]) => `${k}:
|
|
28
|
-
return ` ${key}: { path:
|
|
32
|
+
const searchBody = Object.entries(search).map(([k, v]) => `${k}: ${JSON.stringify(v)}`).join(", ");
|
|
33
|
+
return ` ${key}: { path: ${JSON.stringify(pattern)}, search: { ${searchBody} } },`;
|
|
29
34
|
}
|
|
30
35
|
var init_param_extraction = __esm({
|
|
31
36
|
"src/build/route-types/param-extraction.ts"() {
|
|
@@ -59,8 +64,8 @@ var init_ast_helpers = __esm({
|
|
|
59
64
|
|
|
60
65
|
// src/build/route-types/ast-route-extraction.ts
|
|
61
66
|
import ts2 from "typescript";
|
|
62
|
-
function extractRoutesFromSource(code) {
|
|
63
|
-
const sourceFile = ts2.createSourceFile(
|
|
67
|
+
function extractRoutesFromSource(code, sourceFileArg) {
|
|
68
|
+
const sourceFile = sourceFileArg ?? ts2.createSourceFile(
|
|
64
69
|
"input.tsx",
|
|
65
70
|
code,
|
|
66
71
|
ts2.ScriptTarget.Latest,
|
|
@@ -139,7 +144,7 @@ function generatePerModuleTypesSource(routes) {
|
|
|
139
144
|
const valid = routes.filter(({ name }) => {
|
|
140
145
|
if (!name || /["'\\`\n\r]/.test(name)) {
|
|
141
146
|
console.warn(
|
|
142
|
-
`[
|
|
147
|
+
`[rango] Skipping route with invalid name: ${JSON.stringify(name)}`
|
|
143
148
|
);
|
|
144
149
|
return false;
|
|
145
150
|
}
|
|
@@ -149,7 +154,7 @@ function generatePerModuleTypesSource(routes) {
|
|
|
149
154
|
for (const { name, pattern, params, search } of valid) {
|
|
150
155
|
if (deduped.has(name)) {
|
|
151
156
|
console.warn(
|
|
152
|
-
`[
|
|
157
|
+
`[rango] Duplicate route name "${name}" \u2014 keeping first definition`
|
|
153
158
|
);
|
|
154
159
|
continue;
|
|
155
160
|
}
|
|
@@ -185,9 +190,13 @@ export const NamedRoutes = {
|
|
|
185
190
|
${objectBody}
|
|
186
191
|
} as const;
|
|
187
192
|
|
|
193
|
+
// Aliased so the augmentation below does not pay a homomorphic mapped-type
|
|
194
|
+
// instantiation per route; \`as const\` already makes the members readonly.
|
|
195
|
+
type NamedRoutesShape = typeof NamedRoutes;
|
|
196
|
+
|
|
188
197
|
declare global {
|
|
189
|
-
namespace
|
|
190
|
-
interface GeneratedRouteMap extends
|
|
198
|
+
namespace Rango {
|
|
199
|
+
interface GeneratedRouteMap extends NamedRoutesShape {}
|
|
191
200
|
}
|
|
192
201
|
}
|
|
193
202
|
`;
|
|
@@ -211,14 +220,15 @@ function findTsFiles(dir, filter) {
|
|
|
211
220
|
entries = readdirSync(dir, { withFileTypes: true });
|
|
212
221
|
} catch (err) {
|
|
213
222
|
console.warn(
|
|
214
|
-
`[
|
|
223
|
+
`[rango] Failed to scan directory ${dir}: ${err.message}`
|
|
215
224
|
);
|
|
216
225
|
return results;
|
|
217
226
|
}
|
|
218
227
|
for (const entry of entries) {
|
|
219
228
|
const fullPath = join(dir, entry.name);
|
|
220
229
|
if (entry.isDirectory()) {
|
|
221
|
-
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
230
|
+
if (entry.name === "node_modules" || entry.name.startsWith(".") || entry.name === "dist" || entry.name === "build" || entry.name === "coverage")
|
|
231
|
+
continue;
|
|
222
232
|
results.push(...findTsFiles(fullPath, filter));
|
|
223
233
|
} else if ((entry.name.endsWith(".ts") || entry.name.endsWith(".tsx") || entry.name.endsWith(".js") || entry.name.endsWith(".jsx")) && !entry.name.includes(".gen.")) {
|
|
224
234
|
if (filter && !filter(fullPath)) continue;
|
|
@@ -237,6 +247,33 @@ var init_scan_filter = __esm({
|
|
|
237
247
|
import { readFileSync, existsSync } from "node:fs";
|
|
238
248
|
import { dirname, resolve } from "node:path";
|
|
239
249
|
import ts3 from "typescript";
|
|
250
|
+
function createScanMemo() {
|
|
251
|
+
return { files: /* @__PURE__ */ new Map(), blockSourceFiles: /* @__PURE__ */ new Map() };
|
|
252
|
+
}
|
|
253
|
+
function parseBlock(memo, block) {
|
|
254
|
+
if (memo) {
|
|
255
|
+
const cached = memo.blockSourceFiles.get(block);
|
|
256
|
+
if (cached) return cached;
|
|
257
|
+
}
|
|
258
|
+
const sf = ts3.createSourceFile(
|
|
259
|
+
"input.tsx",
|
|
260
|
+
block,
|
|
261
|
+
ts3.ScriptTarget.Latest,
|
|
262
|
+
true,
|
|
263
|
+
ts3.ScriptKind.TSX
|
|
264
|
+
);
|
|
265
|
+
if (memo) memo.blockSourceFiles.set(block, sf);
|
|
266
|
+
return sf;
|
|
267
|
+
}
|
|
268
|
+
function readSourceMemoized(memo, realPath) {
|
|
269
|
+
if (memo) {
|
|
270
|
+
const cached = memo.files.get(realPath);
|
|
271
|
+
if (cached !== void 0) return cached;
|
|
272
|
+
}
|
|
273
|
+
const source = readFileSync(realPath, "utf-8");
|
|
274
|
+
if (memo) memo.files.set(realPath, source);
|
|
275
|
+
return source;
|
|
276
|
+
}
|
|
240
277
|
function extractNamePrefixFromInclude(node) {
|
|
241
278
|
if (node.arguments.length >= 3) {
|
|
242
279
|
const thirdArg = node.arguments[2];
|
|
@@ -252,8 +289,98 @@ function extractNamePrefixFromInclude(node) {
|
|
|
252
289
|
}
|
|
253
290
|
return null;
|
|
254
291
|
}
|
|
255
|
-
function
|
|
256
|
-
const
|
|
292
|
+
function thenSelectsNonDefaultMember(expr) {
|
|
293
|
+
const findThenCall = (e) => {
|
|
294
|
+
if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression) && e.expression.name.text === "then") {
|
|
295
|
+
return e;
|
|
296
|
+
}
|
|
297
|
+
if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
|
|
298
|
+
return findThenCall(e.expression.expression);
|
|
299
|
+
}
|
|
300
|
+
if (ts3.isPropertyAccessExpression(e)) return findThenCall(e.expression);
|
|
301
|
+
if (ts3.isParenthesizedExpression(e)) return findThenCall(e.expression);
|
|
302
|
+
if (ts3.isAwaitExpression(e)) return findThenCall(e.expression);
|
|
303
|
+
return null;
|
|
304
|
+
};
|
|
305
|
+
const thenCall = findThenCall(expr);
|
|
306
|
+
if (!thenCall || thenCall.arguments.length === 0) return false;
|
|
307
|
+
const cb = thenCall.arguments[0];
|
|
308
|
+
if (!ts3.isArrowFunction(cb) && !ts3.isFunctionExpression(cb)) return false;
|
|
309
|
+
let ret;
|
|
310
|
+
if (ts3.isBlock(cb.body)) {
|
|
311
|
+
for (const stmt of cb.body.statements) {
|
|
312
|
+
if (ts3.isReturnStatement(stmt) && stmt.expression) {
|
|
313
|
+
ret = stmt.expression;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
ret = cb.body;
|
|
319
|
+
}
|
|
320
|
+
if (!ret) return false;
|
|
321
|
+
if (ts3.isPropertyAccessExpression(ret)) {
|
|
322
|
+
return ret.name.text !== "default";
|
|
323
|
+
}
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
function extractDynamicImportSpecifier(node) {
|
|
327
|
+
let body;
|
|
328
|
+
if (ts3.isArrowFunction(node) || ts3.isFunctionExpression(node)) {
|
|
329
|
+
body = node.body;
|
|
330
|
+
}
|
|
331
|
+
if (!body) return null;
|
|
332
|
+
let expr;
|
|
333
|
+
if (ts3.isBlock(body)) {
|
|
334
|
+
for (const stmt of body.statements) {
|
|
335
|
+
if (ts3.isReturnStatement(stmt) && stmt.expression) {
|
|
336
|
+
expr = stmt.expression;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
} else {
|
|
341
|
+
expr = body;
|
|
342
|
+
}
|
|
343
|
+
if (!expr) return null;
|
|
344
|
+
const findImportCall = (e) => {
|
|
345
|
+
if (ts3.isCallExpression(e) && e.expression.kind === ts3.SyntaxKind.ImportKeyword) {
|
|
346
|
+
return e;
|
|
347
|
+
}
|
|
348
|
+
if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
|
|
349
|
+
return findImportCall(e.expression.expression);
|
|
350
|
+
}
|
|
351
|
+
if (ts3.isPropertyAccessExpression(e)) return findImportCall(e.expression);
|
|
352
|
+
if (ts3.isParenthesizedExpression(e)) return findImportCall(e.expression);
|
|
353
|
+
if (ts3.isAwaitExpression(e)) return findImportCall(e.expression);
|
|
354
|
+
return null;
|
|
355
|
+
};
|
|
356
|
+
const importCall = findImportCall(expr);
|
|
357
|
+
if (!importCall || importCall.arguments.length === 0) return null;
|
|
358
|
+
if (thenSelectsNonDefaultMember(expr)) return null;
|
|
359
|
+
return getStringValue(importCall.arguments[0]);
|
|
360
|
+
}
|
|
361
|
+
function resolveDefaultExportTarget(code, sourceFile) {
|
|
362
|
+
let result = null;
|
|
363
|
+
function visit(node) {
|
|
364
|
+
if (result) return;
|
|
365
|
+
if (ts3.isExportAssignment(node) && !node.isExportEquals) {
|
|
366
|
+
const expr = node.expression;
|
|
367
|
+
if (ts3.isIdentifier(expr)) {
|
|
368
|
+
result = { variableName: expr.text };
|
|
369
|
+
} else if (ts3.isCallExpression(expr)) {
|
|
370
|
+
const callee = expr.expression;
|
|
371
|
+
if (ts3.isIdentifier(callee) && callee.text === "urls") {
|
|
372
|
+
result = { inlineBlock: expr.getText(sourceFile) };
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
ts3.forEachChild(node, visit);
|
|
378
|
+
}
|
|
379
|
+
visit(sourceFile);
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
function extractIncludesWithDiagnostics(code, sourceFileArg) {
|
|
383
|
+
const sourceFile = sourceFileArg ?? ts3.createSourceFile(
|
|
257
384
|
"input.tsx",
|
|
258
385
|
code,
|
|
259
386
|
ts3.ScriptTarget.Latest,
|
|
@@ -277,12 +404,19 @@ function extractIncludesWithDiagnostics(code) {
|
|
|
277
404
|
}
|
|
278
405
|
const secondArg = node.arguments[1];
|
|
279
406
|
const namePrefix = extractNamePrefixFromInclude(node);
|
|
407
|
+
const dynamicImportSpec = extractDynamicImportSpecifier(secondArg);
|
|
280
408
|
if (ts3.isIdentifier(secondArg)) {
|
|
281
409
|
resolved.push({
|
|
282
410
|
pathPrefix,
|
|
283
411
|
variableName: secondArg.text,
|
|
284
412
|
namePrefix
|
|
285
413
|
});
|
|
414
|
+
} else if (dynamicImportSpec !== null) {
|
|
415
|
+
resolved.push({
|
|
416
|
+
pathPrefix,
|
|
417
|
+
moduleSpecifier: dynamicImportSpec,
|
|
418
|
+
namePrefix
|
|
419
|
+
});
|
|
286
420
|
} else if (ts3.isCallExpression(secondArg)) {
|
|
287
421
|
const callText = secondArg.expression.getText(sourceFile);
|
|
288
422
|
unresolvable.push({
|
|
@@ -307,7 +441,7 @@ function extractIncludesWithDiagnostics(code) {
|
|
|
307
441
|
return { resolved, unresolvable };
|
|
308
442
|
}
|
|
309
443
|
function resolveImportedVariable(code, localName) {
|
|
310
|
-
const importRegex = /import\s
|
|
444
|
+
const importRegex = /import\s*(?:[\w$]+\s*,\s*)?\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
|
|
311
445
|
let match;
|
|
312
446
|
while ((match = importRegex.exec(code)) !== null) {
|
|
313
447
|
const imports = match[1];
|
|
@@ -344,8 +478,8 @@ function resolveImportPath(importSpec, fromFile) {
|
|
|
344
478
|
}
|
|
345
479
|
return null;
|
|
346
480
|
}
|
|
347
|
-
function extractUrlsBlockForVariable(code, varName) {
|
|
348
|
-
const sourceFile = ts3.createSourceFile(
|
|
481
|
+
function extractUrlsBlockForVariable(code, varName, sourceFileArg) {
|
|
482
|
+
const sourceFile = sourceFileArg ?? ts3.createSourceFile(
|
|
349
483
|
"input.tsx",
|
|
350
484
|
code,
|
|
351
485
|
ts3.ScriptTarget.Latest,
|
|
@@ -367,67 +501,113 @@ function extractUrlsBlockForVariable(code, varName) {
|
|
|
367
501
|
visit(sourceFile);
|
|
368
502
|
return result;
|
|
369
503
|
}
|
|
370
|
-
function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut) {
|
|
504
|
+
function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut, memo) {
|
|
371
505
|
const routeMap = {};
|
|
372
|
-
const
|
|
506
|
+
const blockSourceFile = parseBlock(memo, block);
|
|
507
|
+
const localRoutes = extractRoutesFromSource(block, blockSourceFile);
|
|
373
508
|
for (const { name, pattern, search } of localRoutes) {
|
|
374
509
|
routeMap[name] = pattern;
|
|
375
510
|
if (search && searchSchemasOut) {
|
|
376
511
|
searchSchemasOut[name] = search;
|
|
377
512
|
}
|
|
378
513
|
}
|
|
379
|
-
const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(
|
|
514
|
+
const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(
|
|
515
|
+
block,
|
|
516
|
+
blockSourceFile
|
|
517
|
+
);
|
|
380
518
|
if (diagnosticsOut) {
|
|
381
519
|
for (const entry of unresolvable) {
|
|
382
520
|
diagnosticsOut.push({ ...entry, sourceFile: filePath });
|
|
383
521
|
}
|
|
384
522
|
}
|
|
385
|
-
for (const
|
|
523
|
+
for (const inc of includes) {
|
|
524
|
+
const { pathPrefix, namePrefix } = inc;
|
|
386
525
|
let childResult;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
const targetFile = resolveImportPath(imported.specifier, filePath);
|
|
526
|
+
if (inc.moduleSpecifier) {
|
|
527
|
+
const targetFile = resolveImportPath(inc.moduleSpecifier, filePath);
|
|
390
528
|
if (!targetFile) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
});
|
|
399
|
-
}
|
|
529
|
+
diagnosticsOut?.push({
|
|
530
|
+
pathPrefix,
|
|
531
|
+
namePrefix,
|
|
532
|
+
reason: "file-not-found",
|
|
533
|
+
sourceFile: filePath,
|
|
534
|
+
detail: `import("${inc.moduleSpecifier}") resolved to no file`
|
|
535
|
+
});
|
|
400
536
|
continue;
|
|
401
537
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
diagnosticsOut
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
538
|
+
let targetSource;
|
|
539
|
+
try {
|
|
540
|
+
targetSource = readSourceMemoized(memo, resolve(targetFile));
|
|
541
|
+
} catch (err) {
|
|
542
|
+
diagnosticsOut?.push({
|
|
543
|
+
pathPrefix,
|
|
544
|
+
namePrefix,
|
|
545
|
+
reason: "file-not-found",
|
|
546
|
+
sourceFile: filePath,
|
|
547
|
+
detail: `import("${inc.moduleSpecifier}") resolved to "${targetFile}" but reading it failed: ${err?.message ?? String(err)}`
|
|
548
|
+
});
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
const def = resolveDefaultExportTarget(
|
|
552
|
+
targetSource,
|
|
553
|
+
parseBlock(memo, targetSource)
|
|
412
554
|
);
|
|
413
|
-
if (!
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
});
|
|
422
|
-
}
|
|
555
|
+
if (!def) {
|
|
556
|
+
diagnosticsOut?.push({
|
|
557
|
+
pathPrefix,
|
|
558
|
+
namePrefix,
|
|
559
|
+
reason: "unresolvable-import",
|
|
560
|
+
sourceFile: filePath,
|
|
561
|
+
detail: `import("${inc.moduleSpecifier}") has no resolvable \`export default urls(...)\``
|
|
562
|
+
});
|
|
423
563
|
continue;
|
|
424
564
|
}
|
|
425
|
-
|
|
426
|
-
|
|
565
|
+
if (def.inlineBlock) {
|
|
566
|
+
childResult = buildCombinedRouteMapWithSearch(
|
|
567
|
+
targetFile,
|
|
568
|
+
void 0,
|
|
569
|
+
visited,
|
|
570
|
+
diagnosticsOut,
|
|
571
|
+
def.inlineBlock,
|
|
572
|
+
memo
|
|
573
|
+
);
|
|
574
|
+
} else {
|
|
575
|
+
const variableName = def.variableName;
|
|
576
|
+
const resolved = resolveIncludedVariable({
|
|
577
|
+
variableName,
|
|
578
|
+
resolutionFile: targetFile,
|
|
579
|
+
resolutionSource: targetSource,
|
|
580
|
+
reportFile: filePath,
|
|
581
|
+
memo,
|
|
582
|
+
visited,
|
|
583
|
+
diagnosticsOut,
|
|
584
|
+
pathPrefix,
|
|
585
|
+
namePrefix,
|
|
586
|
+
fileNotFoundDetail: (specifier) => `import("${inc.moduleSpecifier}") default re-exports "${variableName}" from "${specifier}", which resolved to no file`,
|
|
587
|
+
notFoundDetail: () => `import("${inc.moduleSpecifier}") default "${variableName}" not found in its imports or same-file scope`
|
|
588
|
+
});
|
|
589
|
+
if (!resolved) continue;
|
|
590
|
+
childResult = resolved;
|
|
591
|
+
}
|
|
592
|
+
} else if (inc.variableName) {
|
|
593
|
+
const variableName = inc.variableName;
|
|
594
|
+
const resolved = resolveIncludedVariable({
|
|
427
595
|
variableName,
|
|
596
|
+
resolutionFile: filePath,
|
|
597
|
+
resolutionSource: fullSource,
|
|
598
|
+
reportFile: filePath,
|
|
599
|
+
memo,
|
|
428
600
|
visited,
|
|
429
|
-
diagnosticsOut
|
|
430
|
-
|
|
601
|
+
diagnosticsOut,
|
|
602
|
+
pathPrefix,
|
|
603
|
+
namePrefix,
|
|
604
|
+
fileNotFoundDetail: (specifier) => `import "${specifier}" resolved to no file`,
|
|
605
|
+
notFoundDetail: () => `variable "${variableName}" not found in imports or same-file scope`
|
|
606
|
+
});
|
|
607
|
+
if (!resolved) continue;
|
|
608
|
+
childResult = resolved;
|
|
609
|
+
} else {
|
|
610
|
+
continue;
|
|
431
611
|
}
|
|
432
612
|
if (namePrefix === null) {
|
|
433
613
|
continue;
|
|
@@ -450,24 +630,89 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
450
630
|
}
|
|
451
631
|
return routeMap;
|
|
452
632
|
}
|
|
453
|
-
function
|
|
633
|
+
function resolveIncludedVariable(opts) {
|
|
634
|
+
const {
|
|
635
|
+
variableName,
|
|
636
|
+
resolutionFile,
|
|
637
|
+
resolutionSource,
|
|
638
|
+
reportFile,
|
|
639
|
+
memo,
|
|
640
|
+
visited,
|
|
641
|
+
diagnosticsOut,
|
|
642
|
+
pathPrefix,
|
|
643
|
+
namePrefix
|
|
644
|
+
} = opts;
|
|
645
|
+
const imported = resolveImportedVariable(resolutionSource, variableName);
|
|
646
|
+
if (imported) {
|
|
647
|
+
const targetFile = resolveImportPath(imported.specifier, resolutionFile);
|
|
648
|
+
if (!targetFile) {
|
|
649
|
+
diagnosticsOut?.push({
|
|
650
|
+
pathPrefix,
|
|
651
|
+
namePrefix,
|
|
652
|
+
reason: "file-not-found",
|
|
653
|
+
sourceFile: reportFile,
|
|
654
|
+
detail: opts.fileNotFoundDetail(imported.specifier)
|
|
655
|
+
});
|
|
656
|
+
return null;
|
|
657
|
+
}
|
|
658
|
+
return buildCombinedRouteMapWithSearch(
|
|
659
|
+
targetFile,
|
|
660
|
+
imported.exportedName,
|
|
661
|
+
visited,
|
|
662
|
+
diagnosticsOut,
|
|
663
|
+
void 0,
|
|
664
|
+
memo
|
|
665
|
+
);
|
|
666
|
+
}
|
|
667
|
+
const sameFileBlock = extractUrlsBlockForVariable(
|
|
668
|
+
resolutionSource,
|
|
669
|
+
variableName,
|
|
670
|
+
parseBlock(memo, resolutionSource)
|
|
671
|
+
);
|
|
672
|
+
if (!sameFileBlock) {
|
|
673
|
+
diagnosticsOut?.push({
|
|
674
|
+
pathPrefix,
|
|
675
|
+
namePrefix,
|
|
676
|
+
reason: "unresolvable-import",
|
|
677
|
+
sourceFile: reportFile,
|
|
678
|
+
detail: opts.notFoundDetail()
|
|
679
|
+
});
|
|
680
|
+
return null;
|
|
681
|
+
}
|
|
682
|
+
return buildCombinedRouteMapWithSearch(
|
|
683
|
+
resolutionFile,
|
|
684
|
+
variableName,
|
|
685
|
+
visited,
|
|
686
|
+
diagnosticsOut,
|
|
687
|
+
void 0,
|
|
688
|
+
memo
|
|
689
|
+
);
|
|
690
|
+
}
|
|
691
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock, memo) {
|
|
454
692
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
693
|
+
memo = memo ?? createScanMemo();
|
|
455
694
|
const realPath = resolve(filePath);
|
|
456
695
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
457
696
|
if (visited.has(key)) {
|
|
458
|
-
console.warn(`[
|
|
697
|
+
console.warn(`[rango] Circular include detected, skipping: ${key}`);
|
|
459
698
|
return { routes: {}, searchSchemas: {} };
|
|
460
699
|
}
|
|
461
700
|
visited.add(key);
|
|
462
701
|
let source;
|
|
463
702
|
try {
|
|
464
|
-
source =
|
|
703
|
+
source = readSourceMemoized(memo, realPath);
|
|
465
704
|
} catch {
|
|
466
705
|
return { routes: {}, searchSchemas: {} };
|
|
467
706
|
}
|
|
468
707
|
let block;
|
|
469
|
-
if (
|
|
470
|
-
|
|
708
|
+
if (inlineBlock) {
|
|
709
|
+
block = inlineBlock;
|
|
710
|
+
} else if (variableName) {
|
|
711
|
+
const extracted = extractUrlsBlockForVariable(
|
|
712
|
+
source,
|
|
713
|
+
variableName,
|
|
714
|
+
parseBlock(memo, source)
|
|
715
|
+
);
|
|
471
716
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
472
717
|
block = extracted;
|
|
473
718
|
} else {
|
|
@@ -480,7 +725,8 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
480
725
|
realPath,
|
|
481
726
|
visited,
|
|
482
727
|
searchSchemas,
|
|
483
|
-
diagnosticsOut
|
|
728
|
+
diagnosticsOut,
|
|
729
|
+
memo
|
|
484
730
|
);
|
|
485
731
|
visited.delete(key);
|
|
486
732
|
return { routes, searchSchemas };
|
|
@@ -525,8 +771,16 @@ function writePerModuleRouteTypesForFile(filePath) {
|
|
|
525
771
|
let routes;
|
|
526
772
|
if (varNames.length > 0) {
|
|
527
773
|
routes = [];
|
|
774
|
+
const memo = createScanMemo();
|
|
528
775
|
for (const varName of varNames) {
|
|
529
|
-
const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(
|
|
776
|
+
const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(
|
|
777
|
+
filePath,
|
|
778
|
+
varName,
|
|
779
|
+
void 0,
|
|
780
|
+
void 0,
|
|
781
|
+
void 0,
|
|
782
|
+
memo
|
|
783
|
+
);
|
|
530
784
|
for (const [name, pattern] of Object.entries(routeMap)) {
|
|
531
785
|
const params = extractParamsFromPattern(pattern);
|
|
532
786
|
routes.push({
|
|
@@ -540,12 +794,12 @@ function writePerModuleRouteTypesForFile(filePath) {
|
|
|
540
794
|
} else {
|
|
541
795
|
routes = extractRoutesFromSource(source);
|
|
542
796
|
}
|
|
543
|
-
const genPath = filePath.replace(/\.(tsx?)$/, ".gen.ts");
|
|
797
|
+
const genPath = filePath.replace(/\.(tsx?|jsx?)$/, ".gen.ts");
|
|
544
798
|
if (routes.length === 0) {
|
|
545
799
|
if (varNames.length > 0 && !existsSync2(genPath)) {
|
|
546
800
|
writeFileSync(genPath, generatePerModuleTypesSource([]));
|
|
547
801
|
console.log(
|
|
548
|
-
`[
|
|
802
|
+
`[rango] Generated route types (placeholder) -> ${genPath}`
|
|
549
803
|
);
|
|
550
804
|
}
|
|
551
805
|
return;
|
|
@@ -554,11 +808,11 @@ function writePerModuleRouteTypesForFile(filePath) {
|
|
|
554
808
|
const existing = existsSync2(genPath) ? readFileSync2(genPath, "utf-8") : null;
|
|
555
809
|
if (existing !== genSource) {
|
|
556
810
|
writeFileSync(genPath, genSource);
|
|
557
|
-
console.log(`[
|
|
811
|
+
console.log(`[rango] Generated route types -> ${genPath}`);
|
|
558
812
|
}
|
|
559
813
|
} catch (err) {
|
|
560
814
|
console.warn(
|
|
561
|
-
`[
|
|
815
|
+
`[rango] Failed to generate route types for ${filePath}: ${err.message}`
|
|
562
816
|
);
|
|
563
817
|
}
|
|
564
818
|
}
|
|
@@ -573,9 +827,146 @@ var init_per_module_writer = __esm({
|
|
|
573
827
|
}
|
|
574
828
|
});
|
|
575
829
|
|
|
830
|
+
// src/build/route-types/source-scan.ts
|
|
831
|
+
function isLineTerminator(ch) {
|
|
832
|
+
const c = ch.charCodeAt(0);
|
|
833
|
+
return c === 10 || c === 13 || c === 8232 || c === 8233;
|
|
834
|
+
}
|
|
835
|
+
function isRegexPositionAt(code, slashPos, prevChar) {
|
|
836
|
+
if (prevChar === void 0) return true;
|
|
837
|
+
if (prevChar === ")" || prevChar === "]" || prevChar === "}") return false;
|
|
838
|
+
if (!/[\w$]/.test(prevChar)) return true;
|
|
839
|
+
let k = slashPos - 1;
|
|
840
|
+
while (k >= 0 && /\s/.test(code[k])) k--;
|
|
841
|
+
const wordEnd = k + 1;
|
|
842
|
+
while (k >= 0 && /[\w$]/.test(code[k])) k--;
|
|
843
|
+
return REGEX_PRECEDING_KEYWORDS.has(code.slice(k + 1, wordEnd));
|
|
844
|
+
}
|
|
845
|
+
function makeCodeClassifier(code) {
|
|
846
|
+
const n = code.length;
|
|
847
|
+
let i = 0;
|
|
848
|
+
let skipStart = -1;
|
|
849
|
+
let skipEnd = -1;
|
|
850
|
+
let lastSig;
|
|
851
|
+
return (q) => {
|
|
852
|
+
if (q >= skipStart && q < skipEnd) return false;
|
|
853
|
+
while (i < n && i <= q) {
|
|
854
|
+
const c = code[i];
|
|
855
|
+
const d = i + 1 < n ? code[i + 1] : "";
|
|
856
|
+
let end = -1;
|
|
857
|
+
let transparent = false;
|
|
858
|
+
if (c === "/" && d === "/") {
|
|
859
|
+
let j = i + 2;
|
|
860
|
+
while (j < n && !isLineTerminator(code[j])) j++;
|
|
861
|
+
end = j;
|
|
862
|
+
transparent = true;
|
|
863
|
+
} else if (c === "/" && d === "*") {
|
|
864
|
+
let j = i + 2;
|
|
865
|
+
while (j < n && !(code[j] === "*" && code[j + 1] === "/")) j++;
|
|
866
|
+
end = Math.min(n, j + 2);
|
|
867
|
+
transparent = true;
|
|
868
|
+
} else if (c === '"' || c === "'" || c === "`") {
|
|
869
|
+
let j = i + 1;
|
|
870
|
+
while (j < n) {
|
|
871
|
+
if (code[j] === "\\") {
|
|
872
|
+
j += 2;
|
|
873
|
+
continue;
|
|
874
|
+
}
|
|
875
|
+
if (code[j] === c) {
|
|
876
|
+
j++;
|
|
877
|
+
break;
|
|
878
|
+
}
|
|
879
|
+
j++;
|
|
880
|
+
}
|
|
881
|
+
end = j;
|
|
882
|
+
} else if (c === "/" && d !== "/" && d !== "*" && isRegexPositionAt(code, i, lastSig)) {
|
|
883
|
+
let j = i + 1;
|
|
884
|
+
let inClass = false;
|
|
885
|
+
let closed = false;
|
|
886
|
+
while (j < n && !isLineTerminator(code[j])) {
|
|
887
|
+
const r = code[j];
|
|
888
|
+
if (r === "\\") {
|
|
889
|
+
j += 2;
|
|
890
|
+
continue;
|
|
891
|
+
}
|
|
892
|
+
if (r === "[") inClass = true;
|
|
893
|
+
else if (r === "]") inClass = false;
|
|
894
|
+
else if (r === "/" && !inClass) {
|
|
895
|
+
j++;
|
|
896
|
+
closed = true;
|
|
897
|
+
break;
|
|
898
|
+
}
|
|
899
|
+
j++;
|
|
900
|
+
}
|
|
901
|
+
if (closed) {
|
|
902
|
+
while (j < n && /[a-z]/.test(code[j])) j++;
|
|
903
|
+
end = j;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
if (end >= 0) {
|
|
907
|
+
if (q < end) {
|
|
908
|
+
skipStart = i;
|
|
909
|
+
skipEnd = end;
|
|
910
|
+
return false;
|
|
911
|
+
}
|
|
912
|
+
i = end;
|
|
913
|
+
if (!transparent) lastSig = "x";
|
|
914
|
+
} else {
|
|
915
|
+
if (!/\s/.test(c)) lastSig = c;
|
|
916
|
+
i++;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
return true;
|
|
920
|
+
};
|
|
921
|
+
}
|
|
922
|
+
function firstCodeMatchIndex(code, pattern) {
|
|
923
|
+
const inCode = makeCodeClassifier(code);
|
|
924
|
+
pattern.lastIndex = 0;
|
|
925
|
+
let m;
|
|
926
|
+
while ((m = pattern.exec(code)) !== null) {
|
|
927
|
+
if (inCode(m.index)) return m.index;
|
|
928
|
+
if (pattern.lastIndex <= m.index) pattern.lastIndex = m.index + 1;
|
|
929
|
+
}
|
|
930
|
+
return -1;
|
|
931
|
+
}
|
|
932
|
+
var REGEX_PRECEDING_KEYWORDS;
|
|
933
|
+
var init_source_scan = __esm({
|
|
934
|
+
"src/build/route-types/source-scan.ts"() {
|
|
935
|
+
"use strict";
|
|
936
|
+
REGEX_PRECEDING_KEYWORDS = /* @__PURE__ */ new Set([
|
|
937
|
+
"return",
|
|
938
|
+
"typeof",
|
|
939
|
+
"instanceof",
|
|
940
|
+
"in",
|
|
941
|
+
"of",
|
|
942
|
+
"new",
|
|
943
|
+
"delete",
|
|
944
|
+
"void",
|
|
945
|
+
"do",
|
|
946
|
+
"else",
|
|
947
|
+
"yield",
|
|
948
|
+
"await",
|
|
949
|
+
"case",
|
|
950
|
+
"throw"
|
|
951
|
+
]);
|
|
952
|
+
}
|
|
953
|
+
});
|
|
954
|
+
|
|
576
955
|
// src/build/route-types/router-processing.ts
|
|
577
|
-
import {
|
|
578
|
-
|
|
956
|
+
import {
|
|
957
|
+
readFileSync as readFileSync3,
|
|
958
|
+
writeFileSync as writeFileSync2,
|
|
959
|
+
existsSync as existsSync3,
|
|
960
|
+
unlinkSync,
|
|
961
|
+
readdirSync as readdirSync2
|
|
962
|
+
} from "node:fs";
|
|
963
|
+
import {
|
|
964
|
+
join as join2,
|
|
965
|
+
dirname as dirname2,
|
|
966
|
+
resolve as resolve2,
|
|
967
|
+
sep,
|
|
968
|
+
basename as pathBasename
|
|
969
|
+
} from "node:path";
|
|
579
970
|
import ts5 from "typescript";
|
|
580
971
|
function countPublicRouteEntries(source) {
|
|
581
972
|
const matches = source.matchAll(/^\s+(?:"([^"]+)"|([a-zA-Z_$][^:]*)):\s*["{]/gm) ?? [];
|
|
@@ -588,7 +979,85 @@ function countPublicRouteEntries(source) {
|
|
|
588
979
|
}
|
|
589
980
|
return count;
|
|
590
981
|
}
|
|
591
|
-
function
|
|
982
|
+
function isRoutableSourceFile(name) {
|
|
983
|
+
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
|
|
984
|
+
}
|
|
985
|
+
function isExcludedScanDir(name) {
|
|
986
|
+
return name === "node_modules" || name === "dist" || name === "coverage" || name === "__tests__" || name === "__mocks__" || name.startsWith(".");
|
|
987
|
+
}
|
|
988
|
+
function findCallSiteFilesRecursive(dir, pattern, patternG, stopAtMatchDir, filter, results) {
|
|
989
|
+
let entries;
|
|
990
|
+
try {
|
|
991
|
+
entries = readdirSync2(dir, { withFileTypes: true });
|
|
992
|
+
} catch (err) {
|
|
993
|
+
console.warn(
|
|
994
|
+
`[rango] Failed to scan directory ${dir}: ${err.message}`
|
|
995
|
+
);
|
|
996
|
+
return;
|
|
997
|
+
}
|
|
998
|
+
const childDirs = [];
|
|
999
|
+
const matchesInDir = [];
|
|
1000
|
+
for (const entry of entries) {
|
|
1001
|
+
const fullPath = join2(dir, entry.name);
|
|
1002
|
+
if (entry.isDirectory()) {
|
|
1003
|
+
if (!isExcludedScanDir(entry.name)) childDirs.push(fullPath);
|
|
1004
|
+
continue;
|
|
1005
|
+
}
|
|
1006
|
+
if (!isRoutableSourceFile(entry.name)) continue;
|
|
1007
|
+
if (filter && !filter(fullPath)) continue;
|
|
1008
|
+
try {
|
|
1009
|
+
const source = readFileSync3(fullPath, "utf-8");
|
|
1010
|
+
if (pattern.test(source) && firstCodeMatchIndex(source, patternG) >= 0) {
|
|
1011
|
+
matchesInDir.push(fullPath);
|
|
1012
|
+
}
|
|
1013
|
+
} catch {
|
|
1014
|
+
continue;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
results.push(...matchesInDir);
|
|
1018
|
+
if (!stopAtMatchDir || matchesInDir.length === 0) {
|
|
1019
|
+
for (const childDir of childDirs) {
|
|
1020
|
+
findCallSiteFilesRecursive(
|
|
1021
|
+
childDir,
|
|
1022
|
+
pattern,
|
|
1023
|
+
patternG,
|
|
1024
|
+
stopAtMatchDir,
|
|
1025
|
+
filter,
|
|
1026
|
+
results
|
|
1027
|
+
);
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
function findNestedRouterConflict(routerFiles) {
|
|
1032
|
+
const routerDirs = [
|
|
1033
|
+
...new Set(routerFiles.map((filePath) => dirname2(resolve2(filePath))))
|
|
1034
|
+
].sort((a, b) => a.length - b.length);
|
|
1035
|
+
for (let i = 0; i < routerDirs.length; i++) {
|
|
1036
|
+
const ancestorDir = routerDirs[i];
|
|
1037
|
+
const prefix = ancestorDir.endsWith(sep) ? ancestorDir : `${ancestorDir}${sep}`;
|
|
1038
|
+
for (let j = i + 1; j < routerDirs.length; j++) {
|
|
1039
|
+
const nestedDir = routerDirs[j];
|
|
1040
|
+
if (!nestedDir.startsWith(prefix)) continue;
|
|
1041
|
+
const ancestorFile = routerFiles.find(
|
|
1042
|
+
(filePath) => dirname2(resolve2(filePath)) === ancestorDir
|
|
1043
|
+
);
|
|
1044
|
+
const nestedFile = routerFiles.find(
|
|
1045
|
+
(filePath) => dirname2(resolve2(filePath)) === nestedDir
|
|
1046
|
+
);
|
|
1047
|
+
if (ancestorFile && nestedFile) {
|
|
1048
|
+
return { ancestor: ancestorFile, nested: nestedFile };
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
return null;
|
|
1053
|
+
}
|
|
1054
|
+
function formatNestedRouterConflictError(conflict, prefix = "[rango]") {
|
|
1055
|
+
return `${prefix} Nested router roots are not supported.
|
|
1056
|
+
Router root: ${conflict.ancestor}
|
|
1057
|
+
Nested router: ${conflict.nested}
|
|
1058
|
+
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
1059
|
+
}
|
|
1060
|
+
function extractUrlsFromRouter(code) {
|
|
592
1061
|
const sourceFile = ts5.createSourceFile(
|
|
593
1062
|
"router.tsx",
|
|
594
1063
|
code,
|
|
@@ -602,24 +1071,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
602
1071
|
const callee = node.expression;
|
|
603
1072
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
604
1073
|
}
|
|
1074
|
+
function isInlineBuilder(node) {
|
|
1075
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
1076
|
+
}
|
|
1077
|
+
function isRoutesOnCreateRouter(node) {
|
|
1078
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
1079
|
+
return false;
|
|
1080
|
+
let inner = node.expression.expression;
|
|
1081
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
1082
|
+
inner = inner.expression.expression;
|
|
1083
|
+
}
|
|
1084
|
+
return isCreateRouterCall(inner);
|
|
1085
|
+
}
|
|
605
1086
|
function visit(node) {
|
|
606
1087
|
if (result) return;
|
|
607
|
-
if (ts5.isCallExpression(node) &&
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
result = node.arguments[0].text;
|
|
614
|
-
return;
|
|
1088
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
1089
|
+
const arg = node.arguments[0];
|
|
1090
|
+
if (ts5.isIdentifier(arg)) {
|
|
1091
|
+
result = { kind: "variable", name: arg.text };
|
|
1092
|
+
} else if (isInlineBuilder(arg)) {
|
|
1093
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
615
1094
|
}
|
|
1095
|
+
return;
|
|
616
1096
|
}
|
|
617
1097
|
if (isCreateRouterCall(node)) {
|
|
618
1098
|
const callExpr = node;
|
|
619
|
-
for (const
|
|
1099
|
+
for (const callArg of callExpr.arguments) {
|
|
1100
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
1101
|
+
for (const prop of callArg.properties) {
|
|
1102
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
1103
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
1104
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
1105
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
1106
|
+
result = {
|
|
1107
|
+
kind: "inline",
|
|
1108
|
+
block: prop.initializer.getText(sourceFile)
|
|
1109
|
+
};
|
|
1110
|
+
}
|
|
1111
|
+
return;
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
ts5.forEachChild(node, visit);
|
|
1118
|
+
}
|
|
1119
|
+
visit(sourceFile);
|
|
1120
|
+
return result;
|
|
1121
|
+
}
|
|
1122
|
+
function extractBasenameFromRouter(code) {
|
|
1123
|
+
const sourceFile = ts5.createSourceFile(
|
|
1124
|
+
"router.tsx",
|
|
1125
|
+
code,
|
|
1126
|
+
ts5.ScriptTarget.Latest,
|
|
1127
|
+
true,
|
|
1128
|
+
ts5.ScriptKind.TSX
|
|
1129
|
+
);
|
|
1130
|
+
let result;
|
|
1131
|
+
function visit(node) {
|
|
1132
|
+
if (result !== void 0) return;
|
|
1133
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
1134
|
+
for (const arg of node.arguments) {
|
|
620
1135
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
621
1136
|
for (const prop of arg.properties) {
|
|
622
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
1137
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
623
1138
|
result = prop.initializer.text;
|
|
624
1139
|
return;
|
|
625
1140
|
}
|
|
@@ -632,6 +1147,38 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
632
1147
|
visit(sourceFile);
|
|
633
1148
|
return result;
|
|
634
1149
|
}
|
|
1150
|
+
function applyBasenameToRoutes(result, basename) {
|
|
1151
|
+
const prefixed = {};
|
|
1152
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
1153
|
+
if (pattern === "/") {
|
|
1154
|
+
prefixed[name] = basename;
|
|
1155
|
+
} else if (basename.endsWith("/") && pattern.startsWith("/")) {
|
|
1156
|
+
prefixed[name] = basename + pattern.slice(1);
|
|
1157
|
+
} else {
|
|
1158
|
+
prefixed[name] = basename + pattern;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
1162
|
+
}
|
|
1163
|
+
function genFileTsPath(sourceFile) {
|
|
1164
|
+
const base = pathBasename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
1165
|
+
return join2(dirname2(sourceFile), `${base}.named-routes.gen.ts`);
|
|
1166
|
+
}
|
|
1167
|
+
function resolveSearchSchemas(publicRouteNames, runtimeSchemas, sourceFile) {
|
|
1168
|
+
if (runtimeSchemas && Object.keys(runtimeSchemas).length > 0) {
|
|
1169
|
+
return runtimeSchemas;
|
|
1170
|
+
}
|
|
1171
|
+
const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
|
|
1172
|
+
if (Object.keys(staticParsed.searchSchemas).length === 0) {
|
|
1173
|
+
return runtimeSchemas;
|
|
1174
|
+
}
|
|
1175
|
+
const filtered = {};
|
|
1176
|
+
for (const name of publicRouteNames) {
|
|
1177
|
+
const schema = staticParsed.searchSchemas[name];
|
|
1178
|
+
if (schema) filtered[name] = schema;
|
|
1179
|
+
}
|
|
1180
|
+
return Object.keys(filtered).length > 0 ? filtered : runtimeSchemas;
|
|
1181
|
+
}
|
|
635
1182
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
636
1183
|
let routerSource;
|
|
637
1184
|
try {
|
|
@@ -639,19 +1186,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
639
1186
|
} catch {
|
|
640
1187
|
return { routes: {}, searchSchemas: {} };
|
|
641
1188
|
}
|
|
642
|
-
const
|
|
643
|
-
if (!
|
|
1189
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
1190
|
+
if (!extraction) {
|
|
644
1191
|
return { routes: {}, searchSchemas: {} };
|
|
645
1192
|
}
|
|
646
|
-
const
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
1193
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
1194
|
+
const basename = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
1195
|
+
let result;
|
|
1196
|
+
if (extraction.kind === "inline") {
|
|
1197
|
+
result = buildCombinedRouteMapWithSearch(
|
|
1198
|
+
routerFilePath,
|
|
1199
|
+
void 0,
|
|
1200
|
+
void 0,
|
|
1201
|
+
void 0,
|
|
1202
|
+
extraction.block
|
|
1203
|
+
);
|
|
1204
|
+
} else {
|
|
1205
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
1206
|
+
if (imported) {
|
|
1207
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
1208
|
+
if (!targetFile) {
|
|
1209
|
+
return { routes: {}, searchSchemas: {} };
|
|
1210
|
+
}
|
|
1211
|
+
result = buildCombinedRouteMapWithSearch(
|
|
1212
|
+
targetFile,
|
|
1213
|
+
imported.exportedName
|
|
1214
|
+
);
|
|
1215
|
+
} else {
|
|
1216
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
651
1217
|
}
|
|
652
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
653
1218
|
}
|
|
654
|
-
|
|
1219
|
+
if (basename) {
|
|
1220
|
+
result = applyBasenameToRoutes(result, basename);
|
|
1221
|
+
}
|
|
1222
|
+
return result;
|
|
655
1223
|
}
|
|
656
1224
|
function detectUnresolvableIncludes(routerFilePath) {
|
|
657
1225
|
const realPath = resolve2(routerFilePath);
|
|
@@ -661,9 +1229,20 @@ function detectUnresolvableIncludes(routerFilePath) {
|
|
|
661
1229
|
} catch {
|
|
662
1230
|
return [];
|
|
663
1231
|
}
|
|
664
|
-
const
|
|
665
|
-
if (!
|
|
666
|
-
const
|
|
1232
|
+
const extraction = extractUrlsFromRouter(source);
|
|
1233
|
+
if (!extraction) return [];
|
|
1234
|
+
const diagnostics = [];
|
|
1235
|
+
if (extraction.kind === "inline") {
|
|
1236
|
+
buildCombinedRouteMapWithSearch(
|
|
1237
|
+
realPath,
|
|
1238
|
+
void 0,
|
|
1239
|
+
/* @__PURE__ */ new Set(),
|
|
1240
|
+
diagnostics,
|
|
1241
|
+
extraction.block
|
|
1242
|
+
);
|
|
1243
|
+
return diagnostics;
|
|
1244
|
+
}
|
|
1245
|
+
const imported = resolveImportedVariable(source, extraction.name);
|
|
667
1246
|
let targetFile;
|
|
668
1247
|
let exportedName;
|
|
669
1248
|
if (imported) {
|
|
@@ -683,9 +1262,8 @@ function detectUnresolvableIncludes(routerFilePath) {
|
|
|
683
1262
|
exportedName = imported.exportedName;
|
|
684
1263
|
} else {
|
|
685
1264
|
targetFile = realPath;
|
|
686
|
-
exportedName =
|
|
1265
|
+
exportedName = extraction.name;
|
|
687
1266
|
}
|
|
688
|
-
const diagnostics = [];
|
|
689
1267
|
buildCombinedRouteMapWithSearch(
|
|
690
1268
|
targetFile,
|
|
691
1269
|
exportedName,
|
|
@@ -711,19 +1289,15 @@ function detectUnresolvableIncludesForUrlsFile(filePath) {
|
|
|
711
1289
|
return diagnostics;
|
|
712
1290
|
}
|
|
713
1291
|
function findRouterFiles(root, filter) {
|
|
714
|
-
const files = findTsFiles(root, filter);
|
|
715
1292
|
const result = [];
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
continue;
|
|
725
|
-
}
|
|
726
|
-
}
|
|
1293
|
+
findCallSiteFilesRecursive(
|
|
1294
|
+
root,
|
|
1295
|
+
ROUTER_CALL_PATTERN,
|
|
1296
|
+
ROUTER_CALL_PATTERN_G,
|
|
1297
|
+
true,
|
|
1298
|
+
filter,
|
|
1299
|
+
result
|
|
1300
|
+
);
|
|
727
1301
|
return result;
|
|
728
1302
|
}
|
|
729
1303
|
function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
@@ -732,46 +1306,34 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
732
1306
|
if (existsSync3(oldCombinedPath)) {
|
|
733
1307
|
unlinkSync(oldCombinedPath);
|
|
734
1308
|
console.log(
|
|
735
|
-
`[
|
|
1309
|
+
`[rango] Removed stale combined route types: ${oldCombinedPath}`
|
|
736
1310
|
);
|
|
737
1311
|
}
|
|
738
1312
|
} catch {
|
|
739
1313
|
}
|
|
740
1314
|
const routerFilePaths = knownRouterFiles ?? findRouterFiles(root);
|
|
741
1315
|
if (routerFilePaths.length === 0) return;
|
|
1316
|
+
const nestedRouterConflict = findNestedRouterConflict(routerFilePaths);
|
|
1317
|
+
if (nestedRouterConflict) {
|
|
1318
|
+
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
1319
|
+
}
|
|
742
1320
|
for (const routerFilePath of routerFilePaths) {
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
routerSource
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
const imported = resolveImportedVariable(routerSource, urlsVarName);
|
|
753
|
-
if (imported) {
|
|
754
|
-
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
755
|
-
if (!targetFile) continue;
|
|
756
|
-
result = buildCombinedRouteMapWithSearch(
|
|
757
|
-
targetFile,
|
|
758
|
-
imported.exportedName
|
|
759
|
-
);
|
|
760
|
-
} else {
|
|
761
|
-
result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
|
|
1321
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
1322
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
1323
|
+
let routerSource;
|
|
1324
|
+
try {
|
|
1325
|
+
routerSource = readFileSync3(routerFilePath, "utf-8");
|
|
1326
|
+
} catch {
|
|
1327
|
+
continue;
|
|
1328
|
+
}
|
|
1329
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
762
1330
|
}
|
|
763
|
-
const
|
|
764
|
-
/\.(tsx?|jsx?)$/,
|
|
765
|
-
""
|
|
766
|
-
);
|
|
767
|
-
const outPath = join2(
|
|
768
|
-
dirname2(routerFilePath),
|
|
769
|
-
`${routerBasename}.named-routes.gen.ts`
|
|
770
|
-
);
|
|
1331
|
+
const outPath = genFileTsPath(routerFilePath);
|
|
771
1332
|
const existing = existsSync3(outPath) ? readFileSync3(outPath, "utf-8") : null;
|
|
772
1333
|
if (Object.keys(result.routes).length === 0) {
|
|
773
1334
|
if (!existing) {
|
|
774
1335
|
const emptySource = generateRouteTypesSource({});
|
|
1336
|
+
opts?.onWrite?.(outPath, emptySource);
|
|
775
1337
|
writeFileSync2(outPath, emptySource);
|
|
776
1338
|
}
|
|
777
1339
|
continue;
|
|
@@ -791,21 +1353,25 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
791
1353
|
continue;
|
|
792
1354
|
}
|
|
793
1355
|
}
|
|
1356
|
+
opts?.onWrite?.(outPath, source);
|
|
794
1357
|
writeFileSync2(outPath, source);
|
|
795
1358
|
console.log(
|
|
796
|
-
`[
|
|
1359
|
+
`[rango] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
|
|
797
1360
|
);
|
|
798
1361
|
}
|
|
799
1362
|
}
|
|
800
1363
|
}
|
|
1364
|
+
var ROUTER_CALL_PATTERN, ROUTER_CALL_PATTERN_G;
|
|
801
1365
|
var init_router_processing = __esm({
|
|
802
1366
|
"src/build/route-types/router-processing.ts"() {
|
|
803
1367
|
"use strict";
|
|
804
1368
|
init_codegen();
|
|
805
|
-
|
|
1369
|
+
init_source_scan();
|
|
806
1370
|
init_include_resolution();
|
|
807
1371
|
init_per_module_writer();
|
|
808
1372
|
init_route_name();
|
|
1373
|
+
ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
|
|
1374
|
+
ROUTER_CALL_PATTERN_G = /\bcreateRouter\s*[<(]/g;
|
|
809
1375
|
}
|
|
810
1376
|
});
|
|
811
1377
|
|
|
@@ -843,7 +1409,7 @@ import {
|
|
|
843
1409
|
import { createElement, StrictMode } from "react";
|
|
844
1410
|
import { hydrateRoot } from "react-dom/client";
|
|
845
1411
|
import { rscStream } from "@rangojs/router/internal/deps/html-stream-client";
|
|
846
|
-
import { initBrowserApp,
|
|
1412
|
+
import { initBrowserApp, Rango } from "@rangojs/router/browser";
|
|
847
1413
|
|
|
848
1414
|
async function initializeApp() {
|
|
849
1415
|
const deps = {
|
|
@@ -854,11 +1420,16 @@ async function initializeApp() {
|
|
|
854
1420
|
createTemporaryReferenceSet,
|
|
855
1421
|
};
|
|
856
1422
|
|
|
857
|
-
|
|
1423
|
+
// initBrowserApp resolves the initial payload and returns the browser app
|
|
1424
|
+
// context, including strictMode (default true) from createRouter. StrictMode
|
|
1425
|
+
// is the default; createRouter({ strictMode: false }) ships the opt-out in the
|
|
1426
|
+
// payload metadata. StrictMode emits no DOM, so toggling never changes markup.
|
|
1427
|
+
const { strictMode } = await initBrowserApp({ rscStream, deps });
|
|
858
1428
|
|
|
1429
|
+
const app = createElement(Rango);
|
|
859
1430
|
hydrateRoot(
|
|
860
1431
|
document,
|
|
861
|
-
createElement(StrictMode, null,
|
|
1432
|
+
strictMode === false ? app : createElement(StrictMode, null, app)
|
|
862
1433
|
);
|
|
863
1434
|
}
|
|
864
1435
|
|
|
@@ -866,9 +1437,14 @@ initializeApp().catch(console.error);
|
|
|
866
1437
|
`.trim();
|
|
867
1438
|
VIRTUAL_ENTRY_SSR = `
|
|
868
1439
|
import { createFromReadableStream } from "@rangojs/router/internal/deps/ssr";
|
|
869
|
-
import { renderToReadableStream } from "react-dom/server.edge";
|
|
1440
|
+
import { renderToReadableStream, resume } from "react-dom/server.edge";
|
|
1441
|
+
import { prerender } from "react-dom/static.edge";
|
|
870
1442
|
import { injectRSCPayload } from "@rangojs/router/internal/deps/html-stream-server";
|
|
871
|
-
import {
|
|
1443
|
+
import {
|
|
1444
|
+
createSSRHandler,
|
|
1445
|
+
createShellCaptureHandler,
|
|
1446
|
+
createShellResumeHandler,
|
|
1447
|
+
} from "@rangojs/router/ssr";
|
|
872
1448
|
|
|
873
1449
|
export const renderHTML = createSSRHandler({
|
|
874
1450
|
createFromReadableStream,
|
|
@@ -877,6 +1453,26 @@ export const renderHTML = createSSRHandler({
|
|
|
877
1453
|
loadBootstrapScriptContent: () =>
|
|
878
1454
|
import.meta.viteRsc.loadBootstrapScriptContent("index"),
|
|
879
1455
|
});
|
|
1456
|
+
|
|
1457
|
+
export const captureShellHTML = createShellCaptureHandler({
|
|
1458
|
+
createFromReadableStream,
|
|
1459
|
+
renderToReadableStream,
|
|
1460
|
+
injectRSCPayload,
|
|
1461
|
+
prerender,
|
|
1462
|
+
resume,
|
|
1463
|
+
loadBootstrapScriptContent: () =>
|
|
1464
|
+
import.meta.viteRsc.loadBootstrapScriptContent("index"),
|
|
1465
|
+
});
|
|
1466
|
+
|
|
1467
|
+
export const resumeShellHTML = createShellResumeHandler({
|
|
1468
|
+
createFromReadableStream,
|
|
1469
|
+
renderToReadableStream,
|
|
1470
|
+
injectRSCPayload,
|
|
1471
|
+
prerender,
|
|
1472
|
+
resume,
|
|
1473
|
+
loadBootstrapScriptContent: () =>
|
|
1474
|
+
import.meta.viteRsc.loadBootstrapScriptContent("index"),
|
|
1475
|
+
});
|
|
880
1476
|
`.trim();
|
|
881
1477
|
VIRTUAL_IDS = {
|
|
882
1478
|
browser: "virtual:rsc-router/entry.browser.js",
|
|
@@ -887,12 +1483,37 @@ export const renderHTML = createSSRHandler({
|
|
|
887
1483
|
}
|
|
888
1484
|
});
|
|
889
1485
|
|
|
1486
|
+
// src/vite/utils/directive-prologue.ts
|
|
1487
|
+
import { parseAst } from "vite";
|
|
1488
|
+
function hasUseClientDirective(source) {
|
|
1489
|
+
let program;
|
|
1490
|
+
try {
|
|
1491
|
+
program = parseAst(source, { lang: "tsx" });
|
|
1492
|
+
} catch {
|
|
1493
|
+
return false;
|
|
1494
|
+
}
|
|
1495
|
+
for (const node of program.body ?? []) {
|
|
1496
|
+
if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
|
|
1497
|
+
if (node.expression.value === "use client") return true;
|
|
1498
|
+
continue;
|
|
1499
|
+
}
|
|
1500
|
+
break;
|
|
1501
|
+
}
|
|
1502
|
+
return false;
|
|
1503
|
+
}
|
|
1504
|
+
var init_directive_prologue = __esm({
|
|
1505
|
+
"src/vite/utils/directive-prologue.ts"() {
|
|
1506
|
+
"use strict";
|
|
1507
|
+
}
|
|
1508
|
+
});
|
|
1509
|
+
|
|
890
1510
|
// src/vite/plugins/version-plugin.ts
|
|
891
1511
|
var version_plugin_exports = {};
|
|
892
1512
|
__export(version_plugin_exports, {
|
|
893
|
-
createVersionPlugin: () => createVersionPlugin
|
|
1513
|
+
createVersionPlugin: () => createVersionPlugin,
|
|
1514
|
+
isViteDepCachePath: () => isViteDepCachePath
|
|
894
1515
|
});
|
|
895
|
-
import { parseAst } from "vite";
|
|
1516
|
+
import { parseAst as parseAst2 } from "vite";
|
|
896
1517
|
function isCodeModule(id) {
|
|
897
1518
|
return /\.(tsx?|jsx?)($|\?)/.test(id);
|
|
898
1519
|
}
|
|
@@ -900,23 +1521,13 @@ function normalizeModuleId(id) {
|
|
|
900
1521
|
return id.split("?", 1)[0];
|
|
901
1522
|
}
|
|
902
1523
|
function getClientModuleSignature(source) {
|
|
1524
|
+
if (!hasUseClientDirective(source)) return void 0;
|
|
903
1525
|
let program;
|
|
904
1526
|
try {
|
|
905
|
-
program =
|
|
1527
|
+
program = parseAst2(source, { lang: "tsx" });
|
|
906
1528
|
} catch {
|
|
907
1529
|
return void 0;
|
|
908
1530
|
}
|
|
909
|
-
let isUseClient = false;
|
|
910
|
-
for (const node of program.body ?? []) {
|
|
911
|
-
if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
|
|
912
|
-
if (node.expression.value === "use client") {
|
|
913
|
-
isUseClient = true;
|
|
914
|
-
}
|
|
915
|
-
continue;
|
|
916
|
-
}
|
|
917
|
-
break;
|
|
918
|
-
}
|
|
919
|
-
if (!isUseClient) return void 0;
|
|
920
1531
|
const exports = /* @__PURE__ */ new Set();
|
|
921
1532
|
let hasDefault = false;
|
|
922
1533
|
let hasExportAll = false;
|
|
@@ -985,10 +1596,12 @@ function createVersionPlugin() {
|
|
|
985
1596
|
let currentVersion = buildVersion;
|
|
986
1597
|
let isDev = false;
|
|
987
1598
|
let server = null;
|
|
1599
|
+
let resolvedCacheDir;
|
|
988
1600
|
const clientModuleSignatures = /* @__PURE__ */ new Map();
|
|
1601
|
+
let versionCounter = 0;
|
|
989
1602
|
const bumpVersion = (reason) => {
|
|
990
|
-
currentVersion = Date.now().toString(16);
|
|
991
|
-
console.log(`[
|
|
1603
|
+
currentVersion = Date.now().toString(16) + String(++versionCounter);
|
|
1604
|
+
console.log(`[rango] ${reason}, version updated: ${currentVersion}`);
|
|
992
1605
|
const rscEnv = server?.environments?.rsc;
|
|
993
1606
|
const versionMod = rscEnv?.moduleGraph?.getModuleById(
|
|
994
1607
|
"\0" + VIRTUAL_IDS.version
|
|
@@ -1002,6 +1615,7 @@ function createVersionPlugin() {
|
|
|
1002
1615
|
enforce: "pre",
|
|
1003
1616
|
configResolved(config) {
|
|
1004
1617
|
isDev = config.command === "serve";
|
|
1618
|
+
resolvedCacheDir = config.cacheDir ? String(config.cacheDir).replace(/\\/g, "/") : void 0;
|
|
1005
1619
|
},
|
|
1006
1620
|
configureServer(devServer) {
|
|
1007
1621
|
server = devServer;
|
|
@@ -1038,11 +1652,14 @@ function createVersionPlugin() {
|
|
|
1038
1652
|
}
|
|
1039
1653
|
return null;
|
|
1040
1654
|
},
|
|
1041
|
-
// Track RSC module changes and update version
|
|
1042
1655
|
async hotUpdate(ctx) {
|
|
1043
1656
|
if (!isDev) return;
|
|
1044
1657
|
const isRscModule = this.environment?.name === "rsc";
|
|
1045
1658
|
if (!isRscModule) return;
|
|
1659
|
+
if (isViteDepCachePath(ctx.file, resolvedCacheDir)) return;
|
|
1660
|
+
if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
|
|
1661
|
+
return;
|
|
1662
|
+
}
|
|
1046
1663
|
if (isCodeModule(ctx.file)) {
|
|
1047
1664
|
const filePath = normalizeModuleId(ctx.file);
|
|
1048
1665
|
const previousSignature = clientModuleSignatures.get(filePath);
|
|
@@ -1069,10 +1686,22 @@ function createVersionPlugin() {
|
|
|
1069
1686
|
}
|
|
1070
1687
|
};
|
|
1071
1688
|
}
|
|
1689
|
+
function isViteDepCachePath(filePath, cacheDir) {
|
|
1690
|
+
if (!filePath) return false;
|
|
1691
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
1692
|
+
if (cacheDir) {
|
|
1693
|
+
const normalizedCacheDir = cacheDir.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
1694
|
+
if (normalized === normalizedCacheDir || normalized.startsWith(normalizedCacheDir + "/")) {
|
|
1695
|
+
return true;
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
return /\/node_modules\/\.vite[^/]*\//.test(normalized) || normalized.includes("/.vite-isolated/");
|
|
1699
|
+
}
|
|
1072
1700
|
var init_version_plugin = __esm({
|
|
1073
1701
|
"src/vite/plugins/version-plugin.ts"() {
|
|
1074
1702
|
"use strict";
|
|
1075
1703
|
init_virtual_entries();
|
|
1704
|
+
init_directive_prologue();
|
|
1076
1705
|
}
|
|
1077
1706
|
});
|
|
1078
1707
|
|
|
@@ -1114,7 +1743,7 @@ var runtime_discovery_exports = {};
|
|
|
1114
1743
|
__export(runtime_discovery_exports, {
|
|
1115
1744
|
discoverAndWriteRouteTypes: () => discoverAndWriteRouteTypes
|
|
1116
1745
|
});
|
|
1117
|
-
import {
|
|
1746
|
+
import { resolve as resolve3 } from "node:path";
|
|
1118
1747
|
import { existsSync as existsSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "node:fs";
|
|
1119
1748
|
async function discoverAndWriteRouteTypes(opts) {
|
|
1120
1749
|
let createViteServer;
|
|
@@ -1200,7 +1829,10 @@ async function discoverAndWriteRouteTypes(opts) {
|
|
|
1200
1829
|
let routerMountIndex = 0;
|
|
1201
1830
|
for (const [id, router] of registry) {
|
|
1202
1831
|
if (!router.urlpatterns) continue;
|
|
1203
|
-
const manifest = generateManifest(
|
|
1832
|
+
const manifest = await generateManifest(
|
|
1833
|
+
router.urlpatterns,
|
|
1834
|
+
routerMountIndex
|
|
1835
|
+
);
|
|
1204
1836
|
routerMountIndex++;
|
|
1205
1837
|
const rawManifest = manifest.routeManifest;
|
|
1206
1838
|
const routeManifest = {};
|
|
@@ -1224,22 +1856,12 @@ This means createRouter() stack trace parsing matched an internal frame.
|
|
|
1224
1856
|
Set an explicit \`id\` on createRouter() or check the call site.`
|
|
1225
1857
|
);
|
|
1226
1858
|
}
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
if (schema) filtered[name] = schema;
|
|
1234
|
-
}
|
|
1235
|
-
if (Object.keys(filtered).length > 0) {
|
|
1236
|
-
routeSearchSchemas = filtered;
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
}
|
|
1240
|
-
const routerDir = dirname3(sourceFile);
|
|
1241
|
-
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
1242
|
-
const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
1859
|
+
routeSearchSchemas = resolveSearchSchemas(
|
|
1860
|
+
Object.keys(routeManifest),
|
|
1861
|
+
routeSearchSchemas,
|
|
1862
|
+
sourceFile
|
|
1863
|
+
);
|
|
1864
|
+
const outPath = genFileTsPath(sourceFile);
|
|
1243
1865
|
const source = generateRouteTypesSource(
|
|
1244
1866
|
routeManifest,
|
|
1245
1867
|
routeSearchSchemas && Object.keys(routeSearchSchemas).length > 0 ? routeSearchSchemas : void 0
|
|
@@ -1276,7 +1898,7 @@ var init_runtime_discovery = __esm({
|
|
|
1276
1898
|
|
|
1277
1899
|
// src/bin/rango.ts
|
|
1278
1900
|
init_generate_route_types();
|
|
1279
|
-
import { resolve as resolve4, dirname as
|
|
1901
|
+
import { resolve as resolve4, dirname as dirname3 } from "node:path";
|
|
1280
1902
|
import { readFileSync as readFileSync5, statSync, existsSync as existsSync5 } from "node:fs";
|
|
1281
1903
|
var [command, ...rawArgs] = process.argv.slice(2);
|
|
1282
1904
|
if (command === "generate") {
|
|
@@ -1347,12 +1969,12 @@ Examples:
|
|
|
1347
1969
|
);
|
|
1348
1970
|
}
|
|
1349
1971
|
function findProjectRoot(fromPath) {
|
|
1350
|
-
let dir =
|
|
1351
|
-
while (dir !==
|
|
1972
|
+
let dir = dirname3(resolve4(fromPath));
|
|
1973
|
+
while (dir !== dirname3(dir)) {
|
|
1352
1974
|
if (existsSync5(resolve4(dir, "package.json")) || existsSync5(resolve4(dir, "vite.config.ts")) || existsSync5(resolve4(dir, "vite.config.js"))) {
|
|
1353
1975
|
return dir;
|
|
1354
1976
|
}
|
|
1355
|
-
dir =
|
|
1977
|
+
dir = dirname3(dir);
|
|
1356
1978
|
}
|
|
1357
1979
|
return process.cwd();
|
|
1358
1980
|
}
|
|
@@ -1428,6 +2050,15 @@ function runStaticGeneration(args, mode) {
|
|
|
1428
2050
|
formatDiagnostics(uniqueDiagnostics);
|
|
1429
2051
|
console.warn("");
|
|
1430
2052
|
}
|
|
2053
|
+
const nestedRouterConflict = findNestedRouterConflict(routerFiles);
|
|
2054
|
+
if (nestedRouterConflict) {
|
|
2055
|
+
console.error(
|
|
2056
|
+
`
|
|
2057
|
+
${formatNestedRouterConflictError(nestedRouterConflict, "[rango]")}
|
|
2058
|
+
`
|
|
2059
|
+
);
|
|
2060
|
+
process.exit(1);
|
|
2061
|
+
}
|
|
1431
2062
|
for (const urlsFile of urlsFiles) {
|
|
1432
2063
|
writePerModuleRouteTypesForFile(urlsFile);
|
|
1433
2064
|
}
|
|
@@ -1471,6 +2102,15 @@ async function runRuntimeDiscovery(args, configFile) {
|
|
|
1471
2102
|
console.error("[rango] No router files found in the provided paths");
|
|
1472
2103
|
process.exit(1);
|
|
1473
2104
|
}
|
|
2105
|
+
const nestedRouterConflict = findNestedRouterConflict(routerEntries);
|
|
2106
|
+
if (nestedRouterConflict) {
|
|
2107
|
+
console.error(
|
|
2108
|
+
`
|
|
2109
|
+
${formatNestedRouterConflictError(nestedRouterConflict, "[rango]")}
|
|
2110
|
+
`
|
|
2111
|
+
);
|
|
2112
|
+
process.exit(1);
|
|
2113
|
+
}
|
|
1474
2114
|
let discoverAndWriteRouteTypes2;
|
|
1475
2115
|
try {
|
|
1476
2116
|
const mod = await Promise.resolve().then(() => (init_runtime_discovery(), runtime_discovery_exports));
|