@timber-js/app 0.2.0-alpha.11 → 0.2.0-alpha.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/actions-ILhDUzES.js +1094 -0
- package/dist/_chunks/actions-ILhDUzES.js.map +1 -0
- package/dist/_chunks/build-output-helper-DhxiT18k.js +61 -0
- package/dist/_chunks/build-output-helper-DhxiT18k.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-BvvuK8Rp.js +137 -0
- package/dist/_chunks/cli-schema-sync-BvvuK8Rp.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-i2OEL2-p.js +2 -0
- package/dist/_chunks/codec-registry-V7ARyeLN.js +21 -0
- package/dist/_chunks/codec-registry-V7ARyeLN.js.map +1 -0
- package/dist/_chunks/define-8zQ8Vm7x.js +195 -0
- package/dist/_chunks/define-8zQ8Vm7x.js.map +1 -0
- package/dist/_chunks/define-a0CCE6Nx.js +124 -0
- package/dist/_chunks/define-a0CCE6Nx.js.map +1 -0
- package/dist/_chunks/format-CR6v1pWE.js +14 -0
- package/dist/_chunks/format-CR6v1pWE.js.map +1 -0
- package/dist/_chunks/handler-store-iqnt2ghN.js +54 -0
- package/dist/_chunks/handler-store-iqnt2ghN.js.map +1 -0
- package/dist/_chunks/logger-DDmK5skc.js +291 -0
- package/dist/_chunks/logger-DDmK5skc.js.map +1 -0
- package/dist/_chunks/merge-search-params-CwxJzBLS.js +41 -0
- package/dist/_chunks/merge-search-params-CwxJzBLS.js.map +1 -0
- package/dist/_chunks/navigation-root-CY3pRMxF.js +96 -0
- package/dist/_chunks/navigation-root-CY3pRMxF.js.map +1 -0
- package/dist/_chunks/registry-Dp_hJL4s.js +20 -0
- package/dist/_chunks/registry-Dp_hJL4s.js.map +1 -0
- package/dist/_chunks/resolve-schema-DO8B0mO9.js +65 -0
- package/dist/_chunks/resolve-schema-DO8B0mO9.js.map +1 -0
- package/dist/_chunks/router-ref-sektkr-t.js +28 -0
- package/dist/_chunks/router-ref-sektkr-t.js.map +1 -0
- package/dist/_chunks/scanner-DmfoB7iK.js +336 -0
- package/dist/_chunks/scanner-DmfoB7iK.js.map +1 -0
- package/dist/_chunks/schema-bridge-eL5vQDSA.js +86 -0
- package/dist/_chunks/schema-bridge-eL5vQDSA.js.map +1 -0
- package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
- package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
- package/dist/_chunks/segment-context-EsfQpS--.js +34 -0
- package/dist/_chunks/segment-context-EsfQpS--.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BO5OvEvg.js} +1 -1
- package/dist/_chunks/ssr-data-BO5OvEvg.js.map +1 -0
- package/dist/_chunks/stale-reload-BCPRG0Cv.js +64 -0
- package/dist/_chunks/stale-reload-BCPRG0Cv.js.map +1 -0
- package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
- package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-D9SBlAfp.js} +7 -20
- package/dist/_chunks/use-query-states-D9SBlAfp.js.map +1 -0
- package/dist/_chunks/use-segment-params-BSt_O2cb.js +185 -0
- package/dist/_chunks/use-segment-params-BSt_O2cb.js.map +1 -0
- package/dist/_chunks/validation-Bm3Je-09.js +84 -0
- package/dist/_chunks/validation-Bm3Je-09.js.map +1 -0
- package/dist/_chunks/walkers-DGTmJT0f.js +606 -0
- package/dist/_chunks/walkers-DGTmJT0f.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
- package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +28 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +95 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +148 -12
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +142 -38
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +17 -1
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +143 -45
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +16 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +24 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +31 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +23 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +151 -81
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/singleflight.d.ts +18 -1
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli-schema-sync.d.ts +37 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +42 -6
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +34 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +23 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +29 -6
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +54 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +19 -4
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +9 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +172 -1100
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +19 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +964 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +63 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +62 -55
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +36 -0
- package/dist/client/nav-link-store.d.ts.map +1 -0
- package/dist/client/navigation-api-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +115 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +13 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +70 -4
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +38 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +1 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +63 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-reload.d.ts +15 -0
- package/dist/client/stale-reload.d.ts.map +1 -1
- package/dist/client/state.d.ts +1 -1
- package/dist/client/top-loader.d.ts +5 -5
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +7 -5
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +33 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/config-types.d.ts +294 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +251 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +46 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +46 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +84 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +58 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
- package/dist/dev-tools/warnings.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +98 -6
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +48 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/local.d.ts +1 -1
- package/dist/fonts/pipeline.d.ts +167 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +78 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +45 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +103 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +47 -190
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4796 -12595
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +52 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +33 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +107 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +9 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +32 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +17 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +6 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +5 -26
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +63 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +57 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +7 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts +41 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/index.d.ts +5 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +4 -2
- package/dist/routing/link-codegen.d.ts +90 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +75 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/types.d.ts +77 -25
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +51 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +76 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +157 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +4 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +34 -441
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/registry.d.ts +2 -2
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/search-params/wrappers.d.ts +53 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/segment-params/define.d.ts +95 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +3 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +2 -0
- package/dist/server/access-gate.d.ts +8 -3
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +41 -6
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +35 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +3 -6
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +40 -5
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +1 -15
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +2 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +51 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/debug.d.ts +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +90 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -5
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -1
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/flush.d.ts.map +1 -1
- package/dist/server/form-data.d.ts +29 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injector-core.d.ts +212 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +81 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +9 -46
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +155 -2905
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +48 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2946 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +36 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +110 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +36 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +95 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +1 -1
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +6 -0
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +52 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +111 -23
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +69 -18
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +54 -108
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +27 -1
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +21 -34
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +2 -2
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +49 -6
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +19 -8
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +50 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +14 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +23 -0
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +39 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +50 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/status-code-resolver.d.ts +16 -11
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +36 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +5 -5
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +62 -30
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +49 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +3 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +11 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/package.json +62 -21
- package/src/adapters/build-output-helper.ts +77 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +350 -76
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +142 -59
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +81 -18
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/timber-cache.ts +25 -20
- package/src/cli-schema-sync.ts +209 -0
- package/src/cli.ts +65 -8
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +126 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +149 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +193 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/error-boundary.tsx +99 -22
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +69 -44
- package/src/client/internal.ts +58 -0
- package/src/client/link-pending-store.ts +111 -0
- package/src/client/link.tsx +366 -113
- package/src/client/nav-link-store.ts +47 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +332 -0
- package/src/client/navigation-context.ts +31 -6
- package/src/client/navigation-root.tsx +342 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +300 -73
- package/src/client/rsc-fetch.ts +112 -8
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/state.ts +2 -2
- package/src/client/top-loader.tsx +18 -6
- package/src/client/use-cookie.ts +31 -2
- package/src/client/use-link-status.ts +7 -7
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
- package/src/client/use-query-states.ts +9 -3
- package/src/client/use-router.ts +1 -1
- package/src/client/{use-params.ts → use-segment-params.ts} +7 -5
- package/src/codec.ts +45 -0
- package/src/config-types.ts +292 -0
- package/src/config-validation.ts +303 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +233 -53
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +134 -0
- package/src/dev-tools/404-page.ts +387 -0
- package/src/dev-tools/browser-logs.ts +291 -0
- package/src/dev-tools/error-page.ts +506 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/index.ts +90 -0
- package/src/dev-tools/instrumentation.ts +176 -0
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +183 -0
- package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
- package/src/fonts/ast.ts +525 -16
- package/src/fonts/bundle.ts +142 -0
- package/src/fonts/css.ts +2 -1
- package/src/fonts/dev-middleware.ts +74 -0
- package/src/fonts/local.ts +1 -1
- package/src/fonts/pipeline.ts +314 -0
- package/src/fonts/transform.ts +317 -0
- package/src/fonts/types.ts +50 -1
- package/src/fonts/virtual-modules.ts +227 -0
- package/src/index.ts +413 -356
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +72 -0
- package/src/params/index.ts +11 -0
- package/src/params/resolve-schema.ts +88 -0
- package/src/plugin-context.ts +240 -0
- package/src/plugins/adapter-build.ts +12 -4
- package/src/plugins/build-manifest.ts +13 -2
- package/src/plugins/build-report.ts +16 -25
- package/src/plugins/client-chunks.ts +65 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +175 -35
- package/src/plugins/entries.ts +111 -9
- package/src/plugins/fonts.ts +155 -654
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/routing.ts +322 -44
- package/src/plugins/server-bundle.ts +32 -1
- package/src/plugins/shims.ts +136 -35
- package/src/plugins/static-build.ts +15 -89
- package/src/routing/codegen-shared.ts +109 -0
- package/src/routing/codegen-types.ts +58 -0
- package/src/routing/codegen.ts +253 -178
- package/src/routing/convention-lint.ts +357 -0
- package/src/routing/index.ts +5 -1
- package/src/routing/interception.ts +1 -1
- package/src/routing/link-codegen.ts +308 -0
- package/src/routing/scanner.ts +107 -110
- package/src/routing/segment-classify.ts +188 -0
- package/src/routing/types.ts +78 -25
- package/src/routing/walkers.ts +90 -0
- package/src/rsc-runtime/rsc.ts +2 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
- package/src/search-params/define.ts +538 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +92 -0
- package/src/segment-params/define.ts +336 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +76 -34
- package/src/server/action-client.ts +88 -15
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +112 -14
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +42 -7
- package/src/server/asset-headers.ts +8 -34
- package/src/server/build-manifest.ts +10 -4
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +25 -7
- package/src/server/cookie-context.ts +468 -0
- package/src/server/cookie-parsing.ts +135 -0
- package/src/server/debug.ts +1 -1
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +218 -0
- package/src/server/deny-renderer.ts +31 -50
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +36 -15
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +74 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/flush.ts +2 -1
- package/src/server/form-data.ts +76 -0
- package/src/server/html-injector-core.ts +403 -0
- package/src/server/html-injectors.ts +233 -223
- package/src/server/index.ts +31 -184
- package/src/server/internal.ts +176 -0
- package/src/server/logger.ts +67 -36
- package/src/server/middleware-runner.ts +75 -4
- package/src/server/node-stream-transforms.ts +359 -0
- package/src/server/param-coercion.ts +148 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +17 -16
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline-outcome.ts +176 -0
- package/src/server/pipeline-phases.ts +453 -0
- package/src/server/pipeline.ts +147 -394
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +111 -28
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +138 -334
- package/src/server/route-element-builder.ts +297 -193
- package/src/server/route-handler.ts +24 -4
- package/src/server/route-matcher.ts +44 -65
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +16 -17
- package/src/server/rsc-entry/error-renderer.ts +305 -89
- package/src/server/rsc-entry/helpers.ts +137 -12
- package/src/server/rsc-entry/index.ts +316 -352
- package/src/server/rsc-entry/render-route.ts +307 -0
- package/src/server/rsc-entry/rsc-payload.ts +65 -18
- package/src/server/rsc-entry/rsc-stream.ts +81 -13
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +171 -38
- package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +126 -0
- package/src/server/slot-resolver.ts +245 -230
- package/src/server/ssr-entry.ts +215 -32
- package/src/server/ssr-render.ts +289 -67
- package/src/server/ssr-wrappers.tsx +139 -0
- package/src/server/state-tree-diff.ts +4 -1
- package/src/server/status-code-resolver.ts +112 -128
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +21 -10
- package/src/server/tree-builder.ts +202 -90
- package/src/server/types.ts +55 -6
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation-client.ts +4 -3
- package/src/shims/navigation.ts +14 -7
- package/src/utils/state-machine.ts +111 -0
- package/LICENSE +0 -8
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-gwlJkDuf.js +0 -108
- package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
- package/dist/_chunks/format-DviM89f0.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
- package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/response-cache.d.ts +0 -54
- package/dist/server/response-cache.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/transition-root.tsx +0 -166
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/create.ts +0 -321
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/server/response-cache.ts +0 -410
- package/src/utils/directive-parser.ts +0 -529
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
package/src/routing/codegen.ts
CHANGED
|
@@ -8,39 +8,33 @@
|
|
|
8
8
|
* No runtime overhead — purely static type generation.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import { existsSync } from 'node:fs';
|
|
12
|
-
import { join
|
|
11
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
13
|
import type { RouteTree, SegmentNode } from './types.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
hasSearchParams: boolean;
|
|
23
|
-
/** Absolute path to search-params.ts (for computing relative import paths) */
|
|
24
|
-
searchParamsAbsPath?: string;
|
|
25
|
-
/** Whether this is an API route (route.ts) vs page route */
|
|
26
|
-
isApiRoute: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
interface ParamEntry {
|
|
30
|
-
name: string;
|
|
31
|
-
type: 'string' | 'string[]' | 'string[] | undefined';
|
|
32
|
-
}
|
|
14
|
+
import type { ParamEntry, RouteEntry } from './codegen-types.js';
|
|
15
|
+
import {
|
|
16
|
+
buildCodecChainType,
|
|
17
|
+
buildSchemaParamType,
|
|
18
|
+
emitResolveSegmentFieldHelper,
|
|
19
|
+
formatSearchParamsType,
|
|
20
|
+
} from './codegen-shared.js';
|
|
21
|
+
import { formatLinkCatchAllOverloads, formatTypedLinkOverloads } from './link-codegen.js';
|
|
33
22
|
|
|
34
23
|
/** Options for route map generation. */
|
|
35
24
|
export interface CodegenOptions {
|
|
36
|
-
/** Absolute path to the app/ directory. Required for
|
|
25
|
+
/** Absolute path to the app/ directory. Required for page searchParams detection. */
|
|
37
26
|
appDir?: string;
|
|
38
27
|
/**
|
|
39
28
|
* Absolute path to the directory where the .d.ts file will be written.
|
|
40
|
-
* Used to compute correct relative import paths for
|
|
29
|
+
* Used to compute correct relative import paths for page files.
|
|
41
30
|
* Defaults to appDir when not provided (preserves backward compat for tests).
|
|
42
31
|
*/
|
|
43
32
|
outputDir?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Whether a global schema (app/schema.ts) exists.
|
|
35
|
+
* Auto-detected from appDir when not explicitly set.
|
|
36
|
+
*/
|
|
37
|
+
hasSchema?: boolean;
|
|
44
38
|
}
|
|
45
39
|
|
|
46
40
|
/**
|
|
@@ -50,8 +44,11 @@ export interface CodegenOptions {
|
|
|
50
44
|
* interface that maps every route path to its params and searchParams shape.
|
|
51
45
|
*/
|
|
52
46
|
export function generateRouteMap(tree: RouteTree, options: CodegenOptions = {}): string {
|
|
47
|
+
// Auto-detect schema from appDir when not explicitly set
|
|
48
|
+
const hasSchema = options.hasSchema ?? detectSchema(options.appDir);
|
|
49
|
+
|
|
53
50
|
const routes: RouteEntry[] = [];
|
|
54
|
-
collectRoutes(tree.root, [],
|
|
51
|
+
collectRoutes(tree.root, [], [], routes, hasSchema);
|
|
55
52
|
|
|
56
53
|
// Sort routes alphabetically for deterministic output
|
|
57
54
|
routes.sort((a, b) => a.urlPath.localeCompare(b.urlPath));
|
|
@@ -59,7 +56,18 @@ export function generateRouteMap(tree: RouteTree, options: CodegenOptions = {}):
|
|
|
59
56
|
// When outputDir differs from appDir, import paths must be relative to outputDir
|
|
60
57
|
const importBase = options.outputDir ?? options.appDir;
|
|
61
58
|
|
|
62
|
-
return formatDeclarationFile(routes, importBase);
|
|
59
|
+
return formatDeclarationFile(routes, importBase, hasSchema);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Schema file extensions to check, in priority order. */
|
|
63
|
+
const SCHEMA_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Detect whether app/schema.{ts,tsx,js,jsx} exists.
|
|
67
|
+
*/
|
|
68
|
+
function detectSchema(appDir: string | undefined): boolean {
|
|
69
|
+
if (!appDir) return false;
|
|
70
|
+
return SCHEMA_EXTENSIONS.some((ext) => existsSync(join(appDir, `schema${ext}`)));
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
/**
|
|
@@ -71,37 +79,89 @@ export function generateRouteMap(tree: RouteTree, options: CodegenOptions = {}):
|
|
|
71
79
|
function collectRoutes(
|
|
72
80
|
node: SegmentNode,
|
|
73
81
|
ancestorParams: ParamEntry[],
|
|
74
|
-
|
|
75
|
-
routes: RouteEntry[]
|
|
82
|
+
ancestorParamsFiles: string[],
|
|
83
|
+
routes: RouteEntry[],
|
|
84
|
+
hasSchema: boolean
|
|
76
85
|
): void {
|
|
77
|
-
//
|
|
86
|
+
// TIM-834: Identify this segment's own params.ts (if it has a
|
|
87
|
+
// segmentParams export). The full chain of params.ts files in the
|
|
88
|
+
// route ancestry is threaded down via `ancestorParamsFiles`; codec
|
|
89
|
+
// resolution for each ParamEntry is deferred until leaf time so that
|
|
90
|
+
// descendant params.ts files can override ancestor codecs (closest-
|
|
91
|
+
// to-leaf wins, matching the runtime semantics of
|
|
92
|
+
// coerceSegmentParams which walks segments top-down and overwrites
|
|
93
|
+
// earlier coercions).
|
|
94
|
+
const ownParamsFile =
|
|
95
|
+
node.params && fileHasExport(node.params.filePath, 'segmentParams')
|
|
96
|
+
? node.params.filePath
|
|
97
|
+
: undefined;
|
|
98
|
+
|
|
99
|
+
// Accumulate params from this segment. We attach `codecFilePaths`
|
|
100
|
+
// later (at leaf time) using the FULL chain so descendant overrides
|
|
101
|
+
// are visible. The legacy layout/page fallback is recorded now
|
|
102
|
+
// because it is per-segment (and does not participate in inheritance).
|
|
78
103
|
const params = [...ancestorParams];
|
|
79
104
|
if (node.paramName) {
|
|
105
|
+
const legacyFallback = ownParamsFile ? undefined : findLegacyParamsExport(node);
|
|
80
106
|
params.push({
|
|
81
107
|
name: node.paramName,
|
|
108
|
+
bracketName: node.segmentName,
|
|
82
109
|
type: paramTypeForSegment(node.segmentType),
|
|
110
|
+
// Codec chain populated at leaf time. We carry the per-segment
|
|
111
|
+
// legacy fallback (if any) so leaf-time resolution can fall back
|
|
112
|
+
// to it when no params.ts in the chain declares this key.
|
|
113
|
+
legacyCodecFilePath: legacyFallback,
|
|
83
114
|
});
|
|
84
115
|
}
|
|
85
116
|
|
|
117
|
+
// Extend the chain for descendants of this segment.
|
|
118
|
+
const nextAncestorFiles = ownParamsFile
|
|
119
|
+
? [...ancestorParamsFiles, ownParamsFile]
|
|
120
|
+
: ancestorParamsFiles;
|
|
121
|
+
|
|
86
122
|
// Check if this segment is a leaf route (has page or route file)
|
|
87
123
|
const isPage = !!node.page;
|
|
88
124
|
const isApiRoute = !!node.route;
|
|
89
125
|
|
|
90
126
|
if (isPage || isApiRoute) {
|
|
127
|
+
// TIM-834 P1 fix: at LEAF time, the full chain of params.ts files
|
|
128
|
+
// (root-to-leaf) is known. Resolve every ParamEntry's
|
|
129
|
+
// `codecFilePaths` to the chain in LEAF-FIRST order so the
|
|
130
|
+
// closest-to-leaf entry is checked first — matching runtime
|
|
131
|
+
// closest-wins semantics. The chain is shared by all params in the
|
|
132
|
+
// route, so we compute it once.
|
|
133
|
+
const leafFirstChain = nextAncestorFiles.length > 0 ? [...nextAncestorFiles].reverse() : [];
|
|
134
|
+
const resolvedParams: ParamEntry[] = params.map((p) => {
|
|
135
|
+
const codecFilePaths =
|
|
136
|
+
leafFirstChain.length > 0
|
|
137
|
+
? leafFirstChain
|
|
138
|
+
: p.legacyCodecFilePath
|
|
139
|
+
? [p.legacyCodecFilePath]
|
|
140
|
+
: undefined;
|
|
141
|
+
return {
|
|
142
|
+
name: p.name,
|
|
143
|
+
bracketName: p.bracketName,
|
|
144
|
+
type: p.type,
|
|
145
|
+
codecFilePaths,
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
|
|
91
149
|
const entry: RouteEntry = {
|
|
92
150
|
urlPath: node.urlPath,
|
|
93
|
-
params:
|
|
151
|
+
params: resolvedParams,
|
|
94
152
|
hasSearchParams: false,
|
|
95
153
|
isApiRoute,
|
|
154
|
+
hasSchema,
|
|
96
155
|
};
|
|
97
156
|
|
|
98
|
-
// Detect
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
const searchParamsFile = findSearchParamsFile(segmentDir);
|
|
102
|
-
if (searchParamsFile) {
|
|
157
|
+
// Detect searchParams export from params.ts (primary) or page.tsx (fallback)
|
|
158
|
+
if (isPage) {
|
|
159
|
+
if (node.params && fileHasExport(node.params.filePath, 'searchParams')) {
|
|
103
160
|
entry.hasSearchParams = true;
|
|
104
|
-
entry.
|
|
161
|
+
entry.searchParamsPagePath = node.params.filePath;
|
|
162
|
+
} else if (node.page && fileHasExport(node.page.filePath, 'searchParams')) {
|
|
163
|
+
entry.hasSearchParams = true;
|
|
164
|
+
entry.searchParamsPagePath = node.page.filePath;
|
|
105
165
|
}
|
|
106
166
|
}
|
|
107
167
|
|
|
@@ -110,12 +170,12 @@ function collectRoutes(
|
|
|
110
170
|
|
|
111
171
|
// Recurse into children
|
|
112
172
|
for (const child of node.children) {
|
|
113
|
-
collectRoutes(child, params,
|
|
173
|
+
collectRoutes(child, params, nextAncestorFiles, routes, hasSchema);
|
|
114
174
|
}
|
|
115
175
|
|
|
116
176
|
// Recurse into slots (they share the parent's URL path, but may have their own pages)
|
|
117
|
-
for (const
|
|
118
|
-
collectRoutes(slot, params,
|
|
177
|
+
for (const slot of Object.values(node.slots)) {
|
|
178
|
+
collectRoutes(slot, params, nextAncestorFiles, routes, hasSchema);
|
|
119
179
|
}
|
|
120
180
|
}
|
|
121
181
|
|
|
@@ -134,41 +194,107 @@ function paramTypeForSegment(segmentType: string): ParamEntry['type'] {
|
|
|
134
194
|
}
|
|
135
195
|
|
|
136
196
|
/**
|
|
137
|
-
*
|
|
197
|
+
* Check if a file exports a specific named export.
|
|
138
198
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
199
|
+
* Uses a lightweight regex check — not full AST parsing. The actual type
|
|
200
|
+
* extraction happens via the TypeScript compiler in the generated .d.ts.
|
|
141
201
|
*/
|
|
142
|
-
function
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
202
|
+
function fileHasExport(filePath: string, exportName: string): boolean {
|
|
203
|
+
if (!existsSync(filePath)) return false;
|
|
204
|
+
try {
|
|
205
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
206
|
+
const e = exportName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
207
|
+
return (
|
|
208
|
+
new RegExp(`export\\s+(const|let|var)\\s+${e}\\b`).test(content) ||
|
|
209
|
+
new RegExp(`export\\s*\\{[^}]*\\b${e}\\b[^}]*\\}`).test(content)
|
|
210
|
+
);
|
|
211
|
+
} catch {
|
|
212
|
+
return false;
|
|
150
213
|
}
|
|
151
|
-
// Fallback: construct from urlPath (imprecise for groups, but acceptable)
|
|
152
|
-
return appDir;
|
|
153
214
|
}
|
|
154
215
|
|
|
155
216
|
/**
|
|
156
|
-
* Find a
|
|
217
|
+
* Find a legacy `segmentParams` export on layout.tsx or page.tsx.
|
|
218
|
+
*
|
|
219
|
+
* Backward-compat shim: TIM-508 made params.ts the canonical location
|
|
220
|
+
* for `segmentParams`. Layout/page exports are still accepted for the
|
|
221
|
+
* OWN segment only (not inherited by descendants — see TIM-834).
|
|
157
222
|
*/
|
|
158
|
-
function
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
223
|
+
function findLegacyParamsExport(node: SegmentNode): string | undefined {
|
|
224
|
+
if (node.layout && fileHasExport(node.layout.filePath, 'segmentParams')) {
|
|
225
|
+
return node.layout.filePath;
|
|
226
|
+
}
|
|
227
|
+
if (node.page && fileHasExport(node.page.filePath, 'segmentParams')) {
|
|
228
|
+
return node.page.filePath;
|
|
164
229
|
}
|
|
165
230
|
return undefined;
|
|
166
231
|
}
|
|
167
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Emit the schema-based type exports: TimberSegmentParams, TimberRoute,
|
|
235
|
+
* AllSegmentParams, RoutesWithParams.
|
|
236
|
+
*
|
|
237
|
+
* These types use InferCodecType references so they stay in sync with
|
|
238
|
+
* the schema without hardcoding resolved types.
|
|
239
|
+
*
|
|
240
|
+
* Design doc: design/41-global-params.md §Codegen Output
|
|
241
|
+
*/
|
|
242
|
+
function formatSchemaTypes(routes: RouteEntry[]): string[] {
|
|
243
|
+
const lines: string[] = [];
|
|
244
|
+
|
|
245
|
+
lines.push('/** Union of all valid route patterns. */');
|
|
246
|
+
lines.push('export type TimberRoute = keyof TimberSegmentParams;');
|
|
247
|
+
lines.push('');
|
|
248
|
+
lines.push('/** Maps each route pattern to its accumulated segment params. */');
|
|
249
|
+
lines.push('export interface TimberSegmentParams {');
|
|
250
|
+
|
|
251
|
+
for (const route of routes) {
|
|
252
|
+
if (route.params.length === 0) {
|
|
253
|
+
lines.push(` '${route.urlPath}': {};`);
|
|
254
|
+
} else {
|
|
255
|
+
lines.push(` '${route.urlPath}': {`);
|
|
256
|
+
for (const p of route.params) {
|
|
257
|
+
lines.push(` ${p.name}: ${buildSchemaParamType(p)};`);
|
|
258
|
+
}
|
|
259
|
+
lines.push(' };');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
lines.push('}');
|
|
264
|
+
lines.push('');
|
|
265
|
+
|
|
266
|
+
// AllSegmentParams — flat union of all param types across all routes
|
|
267
|
+
lines.push('/** All segment params (union of all route params). */');
|
|
268
|
+
lines.push('export type AllSegmentParams = {');
|
|
269
|
+
lines.push(
|
|
270
|
+
' [K in keyof TimberSegmentParams as TimberSegmentParams[K] extends Record<string, never>'
|
|
271
|
+
);
|
|
272
|
+
lines.push(' ? never');
|
|
273
|
+
lines.push(' : K]: TimberSegmentParams[K];');
|
|
274
|
+
lines.push('} extends infer U');
|
|
275
|
+
lines.push(' ? { [K in keyof U[keyof U]]: U[keyof U][K] }');
|
|
276
|
+
lines.push(' : never;');
|
|
277
|
+
lines.push('');
|
|
278
|
+
|
|
279
|
+
// RoutesWithParams — filter routes by required param keys
|
|
280
|
+
lines.push(
|
|
281
|
+
'/** Filters TimberRoute to routes whose accumulated params include all listed keys. */'
|
|
282
|
+
);
|
|
283
|
+
lines.push('export type RoutesWithParams<K extends keyof AllSegmentParams> = {');
|
|
284
|
+
lines.push(' [R in TimberRoute]: K extends keyof TimberSegmentParams[R] ? R : never;');
|
|
285
|
+
lines.push('}[TimberRoute];');
|
|
286
|
+
|
|
287
|
+
return lines;
|
|
288
|
+
}
|
|
289
|
+
|
|
168
290
|
/**
|
|
169
291
|
* Format the collected routes into a TypeScript declaration file.
|
|
170
292
|
*/
|
|
171
|
-
function formatDeclarationFile(
|
|
293
|
+
function formatDeclarationFile(
|
|
294
|
+
routes: RouteEntry[],
|
|
295
|
+
importBase?: string,
|
|
296
|
+
hasSchema?: boolean
|
|
297
|
+
): string {
|
|
172
298
|
const lines: string[] = [];
|
|
173
299
|
|
|
174
300
|
lines.push('// This file is auto-generated by timber.js route map codegen.');
|
|
@@ -180,15 +306,34 @@ function formatDeclarationFile(routes: RouteEntry[], importBase?: string): strin
|
|
|
180
306
|
// (removing exports like bindUseQueryStates that aren't listed here).
|
|
181
307
|
lines.push('export {};');
|
|
182
308
|
lines.push('');
|
|
309
|
+
|
|
310
|
+
if (hasSchema) {
|
|
311
|
+
// Schema-based codegen: import schema and InferCodecType
|
|
312
|
+
lines.push("import type schema from '../app/schema';");
|
|
313
|
+
lines.push("import type { InferCodecType } from '@timber-js/app/params';");
|
|
314
|
+
lines.push('');
|
|
315
|
+
// Emit TimberSegmentParams, TimberRoute, AllSegmentParams, RoutesWithParams
|
|
316
|
+
lines.push(...formatSchemaTypes(routes));
|
|
317
|
+
lines.push('');
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (!hasSchema) {
|
|
321
|
+
// TIM-834 P2: emit the shared codec-resolution helper type ONCE so the
|
|
322
|
+
// per-param chain conditionals reference it instead of inlining the
|
|
323
|
+
// fallback in both branches (which grows O(2^N) in chain depth).
|
|
324
|
+
lines.push(emitResolveSegmentFieldHelper());
|
|
325
|
+
lines.push('');
|
|
326
|
+
}
|
|
327
|
+
|
|
183
328
|
lines.push("declare module '@timber-js/app' {");
|
|
184
329
|
lines.push(' interface Routes {');
|
|
185
330
|
|
|
186
331
|
for (const route of routes) {
|
|
187
|
-
const paramsType = formatParamsType(route.params);
|
|
332
|
+
const paramsType = formatParamsType(route.params, importBase, hasSchema);
|
|
188
333
|
const searchParamsType = formatSearchParamsType(route, importBase);
|
|
189
334
|
|
|
190
335
|
lines.push(` '${route.urlPath}': {`);
|
|
191
|
-
lines.push(`
|
|
336
|
+
lines.push(` segmentParams: ${paramsType}`);
|
|
192
337
|
lines.push(` searchParams: ${searchParamsType}`);
|
|
193
338
|
lines.push(` }`);
|
|
194
339
|
}
|
|
@@ -197,21 +342,22 @@ function formatDeclarationFile(routes: RouteEntry[], importBase?: string): strin
|
|
|
197
342
|
lines.push('}');
|
|
198
343
|
lines.push('');
|
|
199
344
|
|
|
200
|
-
// Generate @timber-js/app/server augmentation — typed searchParams() generic
|
|
201
345
|
const pageRoutes = routes.filter((r) => !r.isApiRoute);
|
|
346
|
+
const dynamicRoutes = routes.filter((r) => r.params.length > 0);
|
|
202
347
|
|
|
203
|
-
|
|
348
|
+
// Generate @timber-js/app/server augmentation — typed getSegmentParams
|
|
349
|
+
if (dynamicRoutes.length > 0) {
|
|
204
350
|
lines.push("declare module '@timber-js/app/server' {");
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
351
|
+
for (const route of dynamicRoutes) {
|
|
352
|
+
const paramsType = formatParamsType(route.params, importBase, hasSchema);
|
|
353
|
+
lines.push(` export function getSegmentParams(route: '${route.urlPath}'): ${paramsType}`);
|
|
354
|
+
}
|
|
355
|
+
lines.push(' export function getSegmentParams(): Record<string, string | string[]>');
|
|
209
356
|
lines.push('}');
|
|
210
357
|
lines.push('');
|
|
211
358
|
}
|
|
212
359
|
|
|
213
360
|
// Generate overloads for @timber-js/app/client
|
|
214
|
-
const dynamicRoutes = routes.filter((r) => r.params.length > 0);
|
|
215
361
|
|
|
216
362
|
if (dynamicRoutes.length > 0 || pageRoutes.length > 0) {
|
|
217
363
|
lines.push("declare module '@timber-js/app/client' {");
|
|
@@ -223,10 +369,10 @@ function formatDeclarationFile(routes: RouteEntry[], importBase?: string): strin
|
|
|
223
369
|
// useParams overloads
|
|
224
370
|
if (dynamicRoutes.length > 0) {
|
|
225
371
|
for (const route of dynamicRoutes) {
|
|
226
|
-
const paramsType = formatParamsType(route.params);
|
|
227
|
-
lines.push(` export function
|
|
372
|
+
const paramsType = formatParamsType(route.params, importBase, hasSchema);
|
|
373
|
+
lines.push(` export function useSegmentParams(route: '${route.urlPath}'): ${paramsType}`);
|
|
228
374
|
}
|
|
229
|
-
lines.push(' export function
|
|
375
|
+
lines.push(' export function useSegmentParams(): Record<string, string | string[]>');
|
|
230
376
|
lines.push('');
|
|
231
377
|
}
|
|
232
378
|
|
|
@@ -236,78 +382,59 @@ function formatDeclarationFile(routes: RouteEntry[], importBase?: string): strin
|
|
|
236
382
|
lines.push('');
|
|
237
383
|
}
|
|
238
384
|
|
|
239
|
-
// Typed Link overloads
|
|
385
|
+
// Typed Link overloads — per-route with DIRECT types (no conditionals).
|
|
386
|
+
// Direct types preserve TypeScript's excess property checking.
|
|
387
|
+
//
|
|
388
|
+
// TIM-832: per-route and catch-all are emitted as TWO separate
|
|
389
|
+
// augmentation blocks. Per TS's merging rule "later overload sets
|
|
390
|
+
// ordered first", the catch-all block (declared SECOND in this file)
|
|
391
|
+
// ends up FIRST in the merged call-signature list at resolution time,
|
|
392
|
+
// which puts the per-route block LAST — so its error message is the
|
|
393
|
+
// one TypeScript reports when no overload matches. This gives users a
|
|
394
|
+
// clear prop-mismatch error (e.g. "'string | undefined' is not
|
|
395
|
+
// assignable to 'string | number' on id") instead of the old
|
|
396
|
+
// confusing "Type 'string' is not assignable to type 'never'" cascade.
|
|
240
397
|
if (pageRoutes.length > 0) {
|
|
241
|
-
lines.push(' // Typed Link
|
|
242
|
-
lines.push(...formatTypedLinkOverloads(pageRoutes, importBase));
|
|
398
|
+
lines.push(' // Typed Link overloads — per-route (block 1 / emitted first)');
|
|
399
|
+
lines.push(...formatTypedLinkOverloads(pageRoutes, importBase, hasSchema));
|
|
400
|
+
lines.push('');
|
|
243
401
|
}
|
|
244
402
|
|
|
245
403
|
lines.push('}');
|
|
246
404
|
lines.push('');
|
|
247
405
|
}
|
|
248
406
|
|
|
407
|
+
// TIM-832: catch-all block — emitted as a SEPARATE `declare module`
|
|
408
|
+
// augmentation so TS's "later overload set first" rule orders it ahead
|
|
409
|
+
// of the per-route block above at resolution time, leaving per-route as
|
|
410
|
+
// the "last overload" whose error TypeScript reports.
|
|
411
|
+
lines.push("declare module '@timber-js/app/client' {");
|
|
412
|
+
lines.push(" import type { SearchParamsDefinition } from '@timber-js/app/search-params'");
|
|
413
|
+
lines.push('');
|
|
414
|
+
lines.push(...formatLinkCatchAllOverloads());
|
|
415
|
+
lines.push('}');
|
|
416
|
+
lines.push('');
|
|
417
|
+
|
|
249
418
|
return lines.join('\n');
|
|
250
419
|
}
|
|
251
420
|
|
|
252
421
|
/**
|
|
253
422
|
* Format the params type for a route entry.
|
|
254
423
|
*/
|
|
255
|
-
function formatParamsType(params: ParamEntry[]): string {
|
|
256
|
-
if (params.length === 0) {
|
|
257
|
-
return '{}';
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
const fields = params.map((p) => `${p.name}: ${p.type}`);
|
|
261
|
-
return `{ ${fields.join('; ')} }`;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Format the params type for Link props.
|
|
266
|
-
*
|
|
267
|
-
* Link params accept `string | number` for single dynamic segments
|
|
268
|
-
* (convenience — values are stringified at runtime). Catch-all and
|
|
269
|
-
* optional catch-all remain `string[]` / `string[] | undefined`.
|
|
270
|
-
*
|
|
271
|
-
* See design/07-routing.md §"Typed params and searchParams on <Link>"
|
|
272
|
-
*/
|
|
273
|
-
function formatLinkParamsType(params: ParamEntry[]): string {
|
|
424
|
+
function formatParamsType(params: ParamEntry[], importBase?: string, hasSchema?: boolean): string {
|
|
274
425
|
if (params.length === 0) {
|
|
275
426
|
return '{}';
|
|
276
427
|
}
|
|
277
428
|
|
|
278
429
|
const fields = params.map((p) => {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
430
|
+
const codecType = hasSchema
|
|
431
|
+
? buildSchemaParamType(p)
|
|
432
|
+
: buildCodecChainType(p, importBase, p.type);
|
|
433
|
+
return `${p.name}: ${codecType}`;
|
|
282
434
|
});
|
|
283
435
|
return `{ ${fields.join('; ')} }`;
|
|
284
436
|
}
|
|
285
437
|
|
|
286
|
-
/**
|
|
287
|
-
* Format the searchParams type for a route entry.
|
|
288
|
-
*
|
|
289
|
-
* When a search-params.ts exists, we reference its inferred type via an import type.
|
|
290
|
-
* The import path is relative to `importBase` (the directory where the .d.ts will be
|
|
291
|
-
* written). When importBase is undefined, falls back to a bare relative path.
|
|
292
|
-
*/
|
|
293
|
-
function formatSearchParamsType(route: RouteEntry, importBase?: string): string {
|
|
294
|
-
if (route.hasSearchParams && route.searchParamsAbsPath) {
|
|
295
|
-
const absPath = route.searchParamsAbsPath.replace(/\.(ts|tsx)$/, '');
|
|
296
|
-
let importPath: string;
|
|
297
|
-
if (importBase) {
|
|
298
|
-
// Make the path relative to the output directory, converted to posix separators
|
|
299
|
-
importPath = './' + relative(importBase, absPath).replace(/\\/g, '/');
|
|
300
|
-
} else {
|
|
301
|
-
importPath = './' + posix.basename(absPath);
|
|
302
|
-
}
|
|
303
|
-
// Use (typeof import('...'))[' default'] instead of import('...').default
|
|
304
|
-
// because with moduleResolution:"bundler", import('...').default is treated as
|
|
305
|
-
// a namespace member access which doesn't work for default exports.
|
|
306
|
-
return `(typeof import('${importPath}'))['default'] extends import('@timber-js/app/search-params').SearchParamsDefinition<infer T> ? T : never`;
|
|
307
|
-
}
|
|
308
|
-
return '{}';
|
|
309
|
-
}
|
|
310
|
-
|
|
311
438
|
/**
|
|
312
439
|
* Generate useQueryStates overloads.
|
|
313
440
|
*
|
|
@@ -337,60 +464,8 @@ function formatUseQueryStatesOverloads(routes: RouteEntry[], importBase?: string
|
|
|
337
464
|
return lines;
|
|
338
465
|
}
|
|
339
466
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
* - Types the params prop based on dynamic segments
|
|
346
|
-
* - Types the searchParams prop based on search-params.ts (if present)
|
|
347
|
-
*
|
|
348
|
-
* Routes without dynamic segments accept href as a literal string with no params.
|
|
349
|
-
* Routes with dynamic segments require a params prop.
|
|
350
|
-
*/
|
|
351
|
-
function formatTypedLinkOverloads(routes: RouteEntry[], importBase?: string): string[] {
|
|
352
|
-
const lines: string[] = [];
|
|
353
|
-
|
|
354
|
-
for (const route of routes) {
|
|
355
|
-
const hasDynamicParams = route.params.length > 0;
|
|
356
|
-
const paramsType = formatLinkParamsType(route.params);
|
|
357
|
-
const searchParamsType = route.hasSearchParams
|
|
358
|
-
? formatSearchParamsType(route, importBase)
|
|
359
|
-
: null;
|
|
360
|
-
|
|
361
|
-
if (hasDynamicParams) {
|
|
362
|
-
// Route with dynamic segments — params prop required
|
|
363
|
-
const spProp = searchParamsType
|
|
364
|
-
? `searchParams?: { definition: SearchParamsDefinition<${searchParamsType}>; values: Partial<${searchParamsType}> }`
|
|
365
|
-
: `searchParams?: never`;
|
|
366
|
-
lines.push(
|
|
367
|
-
` export function Link(props: Omit<import('react').AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {`
|
|
368
|
-
);
|
|
369
|
-
lines.push(` href: '${route.urlPath}'`);
|
|
370
|
-
lines.push(` params: ${paramsType}`);
|
|
371
|
-
lines.push(` ${spProp}`);
|
|
372
|
-
lines.push(` prefetch?: boolean; scroll?: boolean; children?: import('react').ReactNode`);
|
|
373
|
-
lines.push(` }): import('react').JSX.Element`);
|
|
374
|
-
} else {
|
|
375
|
-
// Static route — no params needed
|
|
376
|
-
const spProp = searchParamsType
|
|
377
|
-
? `searchParams?: { definition: SearchParamsDefinition<${searchParamsType}>; values: Partial<${searchParamsType}> }`
|
|
378
|
-
: `searchParams?: never`;
|
|
379
|
-
lines.push(
|
|
380
|
-
` export function Link(props: Omit<import('react').AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {`
|
|
381
|
-
);
|
|
382
|
-
lines.push(` href: '${route.urlPath}'`);
|
|
383
|
-
lines.push(` params?: never`);
|
|
384
|
-
lines.push(` ${spProp}`);
|
|
385
|
-
lines.push(` prefetch?: boolean; scroll?: boolean; children?: import('react').ReactNode`);
|
|
386
|
-
lines.push(` }): import('react').JSX.Element`);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// Fallback overload for arbitrary string hrefs (escape hatch)
|
|
391
|
-
lines.push(
|
|
392
|
-
` export function Link(props: import('./client/link.js').LinkProps): import('react').JSX.Element`
|
|
393
|
-
);
|
|
394
|
-
|
|
395
|
-
return lines;
|
|
396
|
-
}
|
|
467
|
+
// Link overload formatters and helpers (`formatTypedLinkOverloads`,
|
|
468
|
+
// `formatLinkCatchAllOverloads`, `formatLinkParamsType`,
|
|
469
|
+
// `buildResolvedPattern`, `LINK_BASE_PROPS_TYPE`) were extracted to
|
|
470
|
+
// `./link-codegen.ts` (TIM-835) to keep this file under the 500-line
|
|
471
|
+
// cap. They are imported at the top of this file.
|