@timber-js/app 0.2.0-alpha.14 → 0.2.0-alpha.141
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-DzFMnUAR.js +1147 -0
- package/dist/_chunks/actions-DzFMnUAR.js.map +1 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D2IpXicg.js +785 -0
- package/dist/_chunks/cli-schema-sync-D2IpXicg.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-DH-M8Poy.js +2 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/define-C3RvHQPK.js +195 -0
- package/dist/_chunks/define-C3RvHQPK.js.map +1 -0
- package/dist/_chunks/define-DMVhsipD.js +112 -0
- package/dist/_chunks/define-DMVhsipD.js.map +1 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
- package/dist/_chunks/format-CfwjgPz9.js +14 -0
- package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
- package/dist/_chunks/handler-store-DjISKYEB.js +54 -0
- package/dist/_chunks/handler-store-DjISKYEB.js.map +1 -0
- package/dist/_chunks/href-validation-EZktELp8.js +124 -0
- package/dist/_chunks/href-validation-EZktELp8.js.map +1 -0
- package/dist/_chunks/logger-Dt-jQaBO.js +291 -0
- package/dist/_chunks/logger-Dt-jQaBO.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-BjepjefT.js} +32 -19
- package/dist/_chunks/metadata-routes-BjepjefT.js.map +1 -0
- package/dist/_chunks/navigation-root-DLc4s4ZC.js +103 -0
- package/dist/_chunks/navigation-root-DLc4s4ZC.js.map +1 -0
- package/dist/_chunks/registry-DbJPKoBp.js +20 -0
- package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
- package/dist/_chunks/resolve-schema-Dj8tQloi.js +77 -0
- package/dist/_chunks/resolve-schema-Dj8tQloi.js.map +1 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
- package/dist/_chunks/schema-bridge-DK_89h8O.js +86 -0
- package/dist/_chunks/schema-bridge-DK_89h8O.js.map +1 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
- package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
- package/dist/_chunks/tracing-M_zKubhk.js +358 -0
- package/dist/_chunks/tracing-M_zKubhk.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
- package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
- package/dist/_chunks/validation-taUkvA4Q.js +113 -0
- package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
- package/dist/_chunks/walkers-7FBPM-hX.js +724 -0
- package/dist/_chunks/walkers-7FBPM-hX.js.map +1 -0
- package/dist/_chunks/{format-RyoGQL74.js → warnings-CNPXaypM.js} +6 -45
- package/dist/_chunks/warnings-CNPXaypM.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 +154 -48
- 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 +165 -117
- 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 +39 -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 +48 -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 +26 -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 +10 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +183 -1134
- 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 +925 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +65 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +69 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +27 -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 +14 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
- 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 +79 -10
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +46 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +3 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +49 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +21 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.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-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- 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-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +7 -5
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +75 -0
- package/dist/codec.js.map +1 -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 +34 -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/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 +172 -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 +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +94 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +46 -180
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5315 -12687
- 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 +81 -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 +34 -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 +114 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +20 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- 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/cache.d.ts +31 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/client-chunks.d.ts +39 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +18 -0
- package/dist/plugins/cloudflare-wasm.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 +67 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +60 -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 +7 -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/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +75 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.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 +89 -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 +6 -14
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +70 -11
- 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/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +8 -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/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +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 +1 -1
- 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 -11
- 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 +213 -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 +10 -46
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +170 -2911
- 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 +3126 -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/metadata-routes.d.ts +23 -7
- package/dist/server/metadata-routes.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 +112 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +54 -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 +56 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +111 -19
- 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 +74 -20
- 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 +62 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +28 -2
- 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 +25 -36
- 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 +12 -3
- 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 +50 -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/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.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 +17 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -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-bridge-types.d.ts +121 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +2 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +64 -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 +12 -5
- 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/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +71 -6
- 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/href-validation.d.ts +38 -0
- package/dist/shared/href-validation.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/image.d.ts +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 +63 -22
- package/src/adapters/build-output-helper.ts +139 -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 +147 -60
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +39 -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 +52 -24
- package/src/cli-schema-sync.ts +295 -0
- package/src/cli.ts +76 -8
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +125 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +153 -0
- package/src/client/browser-entry/index.ts +151 -0
- package/src/client/browser-entry/post-hydration.ts +113 -0
- package/src/client/browser-entry/router-init.ts +219 -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 +67 -45
- package/src/client/internal.ts +58 -0
- package/src/client/link-pending-store.ts +116 -0
- package/src/client/link.tsx +343 -150
- package/src/client/nav-link-store.ts +37 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +338 -0
- package/src/client/navigation-context.ts +35 -7
- package/src/client/navigation-root.tsx +347 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +418 -128
- package/src/client/rsc-fetch.ts +208 -10
- package/src/client/segment-cache.ts +6 -3
- package/src/client/segment-outlet.tsx +77 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -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 +11 -9
- package/src/client/use-cookie.ts +31 -2
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +1 -0
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +9 -3
- package/src/client/use-router.ts +4 -1
- package/src/client/use-search-params.ts +26 -44
- package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
- package/src/codec.ts +147 -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 +192 -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 +507 -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 +131 -0
- package/src/fonts/dev-middleware.ts +74 -0
- package/src/fonts/local.ts +3 -3
- package/src/fonts/pipeline.ts +337 -0
- package/src/fonts/transform.ts +317 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +235 -0
- package/src/index.ts +415 -345
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +116 -0
- package/src/plugin-context.ts +247 -0
- package/src/plugins/adapter-build.ts +98 -4
- package/src/plugins/build-manifest.ts +168 -23
- package/src/plugins/build-report.ts +16 -25
- package/src/plugins/cache.ts +180 -0
- package/src/plugins/client-chunks.ts +113 -0
- package/src/plugins/cloudflare-wasm.ts +103 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +179 -37
- package/src/plugins/entries.ts +110 -8
- package/src/plugins/fonts.ts +167 -655
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/routing.ts +386 -47
- package/src/plugins/server-bundle.ts +59 -3
- package/src/plugins/shims.ts +136 -35
- package/src/plugins/static-build.ts +15 -89
- package/src/routing/codegen-shared.ts +115 -0
- package/src/routing/codegen-types.ts +61 -0
- package/src/routing/codegen.ts +321 -177
- package/src/routing/convention-lint.ts +357 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +1 -1
- package/src/routing/link-codegen.ts +310 -0
- package/src/routing/scanner.ts +165 -110
- package/src/routing/schema-validation.ts +149 -0
- package/src/routing/segment-classify.ts +188 -0
- package/src/routing/segment-codegen.ts +98 -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} +60 -22
- 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 +309 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +76 -34
- package/src/server/action-client.ts +119 -28
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +112 -14
- package/src/server/actions.ts +34 -26
- package/src/server/als-registry.ts +108 -20
- package/src/server/asset-headers.ts +8 -34
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +17 -4
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +25 -7
- package/src/server/cookie-context.ts +473 -0
- package/src/server/cookie-parsing.ts +135 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +218 -0
- package/src/server/deny-renderer.ts +32 -52
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +35 -27
- 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 +101 -5
- package/src/server/html-injector-core.ts +418 -0
- package/src/server/html-injectors.ts +238 -223
- package/src/server/index.ts +29 -183
- package/src/server/internal.ts +182 -0
- package/src/server/logger.ts +67 -36
- package/src/server/metadata-routes.ts +44 -19
- package/src/server/middleware-runner.ts +75 -4
- package/src/server/node-stream-transforms.ts +361 -0
- package/src/server/param-coercion.ts +206 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +32 -18
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline-outcome.ts +197 -0
- package/src/server/pipeline-phases.ts +527 -0
- package/src/server/pipeline.ts +201 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +130 -46
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +168 -337
- package/src/server/route-element-builder.ts +437 -208
- package/src/server/route-handler.ts +31 -4
- package/src/server/route-matcher.ts +128 -277
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +69 -32
- package/src/server/rsc-entry/error-renderer.ts +316 -89
- package/src/server/rsc-entry/helpers.ts +155 -26
- package/src/server/rsc-entry/index.ts +283 -329
- package/src/server/rsc-entry/render-route.ts +313 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
- package/src/server/rsc-entry/rsc-payload.ts +65 -22
- package/src/server/rsc-entry/rsc-stream.ts +85 -13
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +271 -41
- 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 +148 -0
- package/src/server/slot-resolver.ts +234 -246
- package/src/server/ssr-bridge-types.ts +124 -0
- package/src/server/ssr-entry.ts +217 -78
- package/src/server/ssr-render.ts +344 -71
- package/src/server/ssr-wrappers.tsx +141 -0
- package/src/server/state-tree-diff.ts +30 -23
- 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 +204 -90
- package/src/server/tree-match.ts +210 -0
- package/src/server/types.ts +78 -9
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/shared/href-validation.ts +127 -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-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.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/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- 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/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/segment-merger.ts +0 -339
- package/src/client/transition-root.tsx +0 -166
- package/src/client/use-navigation-pending.ts +0 -38
- 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/utils/directive-parser.ts +0 -529
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
package/src/plugins/shims.ts
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* shim implementations. This enables Next.js-compatible libraries
|
|
6
6
|
* (nuqs, next-intl, etc.) to work unmodified.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* This plugin also remaps ALL @timber-js/app/* subpath imports to src/ in
|
|
9
|
+
* server environments (RSC + SSR). This is required because dist/ chunks
|
|
10
|
+
* are pre-built and miss Vite's RSC transforms (e.g. createContext from
|
|
11
|
+
* 'react' doesn't exist in RSC's React build). It also ensures a single
|
|
12
|
+
* module instance for shared mutable state. See SUBPATH_SRC_MAP and TIM-568.
|
|
12
13
|
*
|
|
13
14
|
* Design doc: 18-build-system.md §"Shim Map"
|
|
14
15
|
*/
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
import type { Plugin } from 'vite';
|
|
17
18
|
import { resolve, dirname } from 'node:path';
|
|
18
19
|
import { fileURLToPath } from 'node:url';
|
|
19
|
-
import type { PluginContext } from '
|
|
20
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
20
21
|
|
|
21
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
23
|
// Detect whether we're running from source (src/plugins/) or dist (dist/).
|
|
@@ -38,6 +39,24 @@ const SHIMS_DIR = resolve(PKG_ROOT, 'src', 'shims');
|
|
|
38
39
|
const SERVER_ONLY_VIRTUAL = '\0timber:server-only';
|
|
39
40
|
const CLIENT_ONLY_VIRTUAL = '\0timber:client-only';
|
|
40
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Map from @timber-js/app/<subpath> to relative src/ file paths.
|
|
44
|
+
*
|
|
45
|
+
* Used by the catch-all resolveId rule to remap subpath imports to src/
|
|
46
|
+
* in server environments. When adding a new subpath export to package.json,
|
|
47
|
+
* add it here too. See TIM-568.
|
|
48
|
+
*/
|
|
49
|
+
const SUBPATH_SRC_MAP: Record<string, string> = {
|
|
50
|
+
'cache': 'cache/index.ts',
|
|
51
|
+
'cookies': 'cookies/index.ts',
|
|
52
|
+
'search-params': 'search-params/index.ts',
|
|
53
|
+
'segment-params': 'segment-params/index.ts',
|
|
54
|
+
|
|
55
|
+
'adapters/cloudflare': 'adapters/cloudflare.ts',
|
|
56
|
+
'adapters/cloudflare/dev': 'adapters/cloudflare-dev.ts',
|
|
57
|
+
'adapters/nitro': 'adapters/nitro.ts',
|
|
58
|
+
};
|
|
59
|
+
|
|
41
60
|
/**
|
|
42
61
|
* Map from next/* import specifiers to shim file paths.
|
|
43
62
|
*
|
|
@@ -49,10 +68,14 @@ const SHIM_MAP: Record<string, string> = {
|
|
|
49
68
|
'next/image': resolve(SHIMS_DIR, 'image.ts'),
|
|
50
69
|
'next/navigation': resolve(SHIMS_DIR, 'navigation.ts'),
|
|
51
70
|
'next/headers': resolve(SHIMS_DIR, 'headers.ts'),
|
|
52
|
-
// next/font/*
|
|
53
|
-
// The fonts plugin's load hook serves the actual module
|
|
71
|
+
// next/font/* and @timber-js/app/fonts/* redirect to the timber-fonts
|
|
72
|
+
// virtual modules. The fonts plugin's load hook serves the actual module
|
|
73
|
+
// code. The package.json exports point to shim stubs for non-Vite contexts
|
|
74
|
+
// (tsc, tests), but in Vite the virtual module takes priority via this map.
|
|
54
75
|
'next/font/google': '\0@timber/fonts/google',
|
|
55
76
|
'next/font/local': '\0@timber/fonts/local',
|
|
77
|
+
'@timber-js/app/fonts/google': '\0@timber/fonts/google',
|
|
78
|
+
'@timber-js/app/fonts/local': '\0@timber/fonts/local',
|
|
56
79
|
};
|
|
57
80
|
|
|
58
81
|
/**
|
|
@@ -88,14 +111,14 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
88
111
|
* 3. Check next/* shim map
|
|
89
112
|
* 4. Return null (pass through) for everything else
|
|
90
113
|
*
|
|
91
|
-
* @timber-js/app
|
|
92
|
-
*
|
|
93
|
-
*
|
|
114
|
+
* All @timber-js/app/* subpath imports resolve to dist/ via package.json
|
|
115
|
+
* exports in all environments. This ensures a single module instance
|
|
116
|
+
* for each module — the dist/ chunks share code via rollup's code
|
|
117
|
+
* splitting. No src/ remapping is needed (see TIM-568).
|
|
94
118
|
*
|
|
95
|
-
* @timber-js/app/
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* is preserved on the entry for client boundary detection.
|
|
119
|
+
* The only exception is @timber-js/app/server in the client (browser)
|
|
120
|
+
* environment, which returns a virtual stub — server code must never
|
|
121
|
+
* be bundled into the browser.
|
|
99
122
|
*/
|
|
100
123
|
resolveId(id: string) {
|
|
101
124
|
// Poison pill packages — resolve to virtual modules handled by load()
|
|
@@ -117,38 +140,110 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
117
140
|
return SHIM_MAP[cleanId];
|
|
118
141
|
}
|
|
119
142
|
|
|
120
|
-
// @timber-js/app
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
143
|
+
// ── @timber-js/app/* → src/ resolution in server environments ──
|
|
144
|
+
//
|
|
145
|
+
// All @timber-js/app/* subpath imports are remapped to src/ in server
|
|
146
|
+
// environments (RSC + SSR). This is required for two reasons:
|
|
147
|
+
//
|
|
148
|
+
// 1. RSC correctness: dist/ chunks eagerly import from 'react' (e.g.
|
|
149
|
+
// createContext in segment-context) which doesn't exist in RSC's
|
|
150
|
+
// React build. Vite's RSC plugin only transforms src/ files —
|
|
151
|
+
// dist/ chunks are pre-built and served as-is.
|
|
152
|
+
//
|
|
153
|
+
// 2. Module singleton correctness: framework internals use relative
|
|
154
|
+
// imports that resolve within src/. If user code resolved to dist/
|
|
155
|
+
// while framework code resolved to src/, mutable module-level state
|
|
156
|
+
// (ALS refs, registered callbacks) would be duplicated. By remapping
|
|
157
|
+
// all @timber-js/app/* to src/, everything shares one module graph.
|
|
158
|
+
//
|
|
159
|
+
// Exception: @timber-js/app/client in RSC resolves to dist/ where
|
|
160
|
+
// 'use client' is preserved for client boundary detection.
|
|
161
|
+
//
|
|
162
|
+
// In the client (browser) environment, all imports resolve to dist/
|
|
163
|
+
// via package.json exports (no remapping needed).
|
|
164
|
+
|
|
165
|
+
// ── #imports resolution for package-internal modules ─────────────
|
|
166
|
+
//
|
|
167
|
+
// #server-internal and #client-internal are Node package imports
|
|
168
|
+
// (package.json "imports" field). They are only resolvable from
|
|
169
|
+
// within this package — external consumers get module-not-found.
|
|
170
|
+
//
|
|
171
|
+
// In Vite, we intercept them here to resolve to src/ for dev/build
|
|
172
|
+
// correctness (same rationale as the @timber-js/app/* remap above).
|
|
173
|
+
if (cleanId === '#server-internal') {
|
|
174
|
+
const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;
|
|
175
|
+
if (envName === 'client') {
|
|
176
|
+
return '\0timber:server-empty';
|
|
177
|
+
}
|
|
178
|
+
return resolve(PKG_ROOT, 'src', 'server', 'internal.ts');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (cleanId === '#client-internal') {
|
|
182
|
+
// Always resolve to src/ — all environments (RSC, SSR, client)
|
|
183
|
+
// use src/ for framework internals. In the client env, this
|
|
184
|
+
// ensures browser-entry and @timber-js/app/client share the
|
|
185
|
+
// same module graph (both resolve to src/).
|
|
186
|
+
return resolve(PKG_ROOT, 'src', 'client', 'internal.ts');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (cleanId === '#routing') {
|
|
190
|
+
return resolve(PKG_ROOT, 'src', 'routing', 'index.ts');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Legacy aliases — vitest and monorepo configs may still reference
|
|
194
|
+
// the old @timber-js/app/server/internal and @timber-js/app/client/internal
|
|
195
|
+
// specifiers via resolve.alias. When those aliases resolve to the
|
|
196
|
+
// absolute src/ path, they bypass this plugin entirely. But if the
|
|
197
|
+
// specifier reaches us unresolved (e.g., in a Vite build without
|
|
198
|
+
// aliases), handle it the same way as the #imports above.
|
|
199
|
+
if (cleanId === '@timber-js/app/server/internal') {
|
|
200
|
+
const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;
|
|
201
|
+
if (envName === 'client') {
|
|
202
|
+
return '\0timber:server-empty';
|
|
203
|
+
}
|
|
204
|
+
return resolve(PKG_ROOT, 'src', 'server', 'internal.ts');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (cleanId === '@timber-js/app/client/internal') {
|
|
208
|
+
// Same as #client-internal above — always resolve to src/.
|
|
209
|
+
return resolve(PKG_ROOT, 'src', 'client', 'internal.ts');
|
|
210
|
+
}
|
|
211
|
+
|
|
124
212
|
if (cleanId === '@timber-js/app/server') {
|
|
125
213
|
const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;
|
|
126
214
|
if (envName === 'client') {
|
|
127
215
|
return '\0timber:server-empty';
|
|
128
216
|
}
|
|
217
|
+
// RSC + SSR: remap to src/
|
|
129
218
|
return resolve(PKG_ROOT, 'src', 'server', 'index.ts');
|
|
130
219
|
}
|
|
131
220
|
|
|
132
|
-
// @timber-js/app/client → src/ in the SSR environment so client hooks
|
|
133
|
-
// (useParams, usePathname, etc.) share the same module instance as
|
|
134
|
-
// ssr-entry.ts's internal imports (via #/client/...).
|
|
135
|
-
//
|
|
136
|
-
// Without this remap, @timber-js/app/client resolves to dist/ (via
|
|
137
|
-
// package.json exports), creating a module instance split: ssr-entry.ts
|
|
138
|
-
// registers the ALS-backed SSR data provider on the src/ instance of
|
|
139
|
-
// ssr-data.ts, but client component hooks read getSsrData() from the
|
|
140
|
-
// dist/ instance — which has no provider. Result: hooks like useParams()
|
|
141
|
-
// return empty defaults during SSR.
|
|
142
|
-
//
|
|
143
|
-
// This remap is SSR-only. The RSC environment still resolves to dist/
|
|
144
|
-
// where 'use client' is preserved on the entry (needed for client
|
|
145
|
-
// boundary detection). The client (browser) environment uses dist/
|
|
146
|
-
// for bundling.
|
|
147
221
|
if (cleanId === '@timber-js/app/client') {
|
|
148
222
|
const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;
|
|
149
|
-
|
|
223
|
+
// RSC: return null — needs dist/ for 'use client' boundary detection.
|
|
224
|
+
// SSR + Client: resolve to src/ so that browser-entry (which uses
|
|
225
|
+
// relative imports from src/) and user code (which uses the bare
|
|
226
|
+
// specifier @timber-js/app/client) share the same module instances.
|
|
227
|
+
// Without this, state.ts is loaded twice (src/ and dist/) and
|
|
228
|
+
// setGlobalRouter() writes to one copy while getRouterOrNull()
|
|
229
|
+
// reads from the other (always null).
|
|
230
|
+
if (envName === 'ssr' || envName === 'client') {
|
|
150
231
|
return resolve(PKG_ROOT, 'src', 'client', 'index.ts');
|
|
151
232
|
}
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Catch-all: remap any other @timber-js/app/<subpath> to src/
|
|
237
|
+
// in non-client environments (RSC + SSR).
|
|
238
|
+
if (cleanId.startsWith('@timber-js/app/') && cleanId !== '@timber-js/app/package.json') {
|
|
239
|
+
const envName = (this as unknown as { environment?: { name?: string } }).environment?.name;
|
|
240
|
+
if (envName !== 'client') {
|
|
241
|
+
const subpath = cleanId.slice('@timber-js/app/'.length);
|
|
242
|
+
const srcPath = SUBPATH_SRC_MAP[subpath];
|
|
243
|
+
if (srcPath) {
|
|
244
|
+
return resolve(PKG_ROOT, 'src', srcPath);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
152
247
|
}
|
|
153
248
|
|
|
154
249
|
return null;
|
|
@@ -202,6 +297,12 @@ const msg = "[timber] @timber-js/app/server was imported from client code. " +
|
|
|
202
297
|
function stub() { throw new Error(msg); }
|
|
203
298
|
export const headers = stub;
|
|
204
299
|
export const cookies = stub;
|
|
300
|
+
export const getHeaders = stub;
|
|
301
|
+
export const getHeader = stub;
|
|
302
|
+
export const getCookieJar = stub;
|
|
303
|
+
export const getCookie = stub;
|
|
304
|
+
export const getSearchParams = stub;
|
|
305
|
+
export const getSegmentParams = stub;
|
|
205
306
|
export const searchParams = stub;
|
|
206
307
|
export const deny = stub;
|
|
207
308
|
export const notFound = stub;
|
|
@@ -209,7 +310,7 @@ export const redirect = stub;
|
|
|
209
310
|
export const permanentRedirect = stub;
|
|
210
311
|
export const redirectExternal = stub;
|
|
211
312
|
export const waitUntil = stub;
|
|
212
|
-
export const
|
|
313
|
+
export const DenyOptions = {};
|
|
213
314
|
export const RedirectType = {};
|
|
214
315
|
export const DenySignal = stub;
|
|
215
316
|
export const RedirectSignal = stub;
|
|
@@ -2,34 +2,28 @@
|
|
|
2
2
|
* timber-static-build — Vite sub-plugin for static output mode.
|
|
3
3
|
*
|
|
4
4
|
* When `output: 'static'` is set in timber.config.ts, this plugin:
|
|
5
|
-
* 1. Validates that no dynamic APIs (
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. Coordinates build-time rendering of all pages
|
|
5
|
+
* 1. Validates that no dynamic APIs (getCookies(), getHeaders()) are used
|
|
6
|
+
* 2. Coordinates build-time rendering of all pages
|
|
8
7
|
*
|
|
9
8
|
* Design doc: design/15-future-prerendering.md
|
|
10
9
|
*/
|
|
11
10
|
|
|
12
11
|
import type { Plugin } from 'vite';
|
|
13
|
-
import type { PluginContext } from '
|
|
14
|
-
import { detectFileDirective } from '#/utils/directive-parser.js';
|
|
12
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
15
13
|
|
|
16
14
|
// ---------------------------------------------------------------------------
|
|
17
15
|
// Types
|
|
18
16
|
// ---------------------------------------------------------------------------
|
|
19
17
|
|
|
20
18
|
export interface StaticValidationError {
|
|
21
|
-
type: 'dynamic-api'
|
|
19
|
+
type: 'dynamic-api';
|
|
22
20
|
file: string;
|
|
23
21
|
message: string;
|
|
24
22
|
line?: number;
|
|
25
23
|
}
|
|
26
24
|
|
|
27
|
-
export interface StaticOptions {
|
|
28
|
-
clientJavascriptDisabled: boolean;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
25
|
// ---------------------------------------------------------------------------
|
|
32
|
-
// Detection: dynamic APIs (
|
|
26
|
+
// Detection: dynamic APIs (getCookies, getHeaders, and legacy cookies/headers)
|
|
33
27
|
// ---------------------------------------------------------------------------
|
|
34
28
|
|
|
35
29
|
/**
|
|
@@ -39,12 +33,14 @@ export interface StaticOptions {
|
|
|
39
33
|
* We detect both import-level and call-level usage.
|
|
40
34
|
*/
|
|
41
35
|
const DYNAMIC_API_PATTERNS: Array<{ pattern: RegExp; name: string }> = [
|
|
36
|
+
{ pattern: /\bgetCookieJar\s*\(/, name: 'getCookieJar()' },
|
|
37
|
+
{ pattern: /\bgetHeaders\s*\(/, name: 'getHeaders()' },
|
|
42
38
|
{ pattern: /\bcookies\s*\(/, name: 'cookies()' },
|
|
43
39
|
{ pattern: /\bheaders\s*\(/, name: 'headers()' },
|
|
44
40
|
];
|
|
45
41
|
|
|
46
42
|
/**
|
|
47
|
-
* Detect usage of dynamic per-request APIs (
|
|
43
|
+
* Detect usage of dynamic per-request APIs (getCookies(), getHeaders())
|
|
48
44
|
* that cannot work at build time in static mode.
|
|
49
45
|
*
|
|
50
46
|
* Returns an array of validation errors.
|
|
@@ -78,78 +74,6 @@ export function detectDynamicApis(code: string, fileId: string): StaticValidatio
|
|
|
78
74
|
return errors;
|
|
79
75
|
}
|
|
80
76
|
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
// Detection: 'use client' / 'use server' directives (clientJavascript disabled)
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Detect 'use client' and 'use server' directives using AST-based parsing.
|
|
87
|
-
* When client JavaScript is disabled, both are hard build errors — no React
|
|
88
|
-
* runtime or server actions are allowed in the output.
|
|
89
|
-
*
|
|
90
|
-
* When client JavaScript is enabled, these are allowed (client components
|
|
91
|
-
* hydrate, server actions get extracted to API endpoints).
|
|
92
|
-
*/
|
|
93
|
-
export function detectDirectives(
|
|
94
|
-
code: string,
|
|
95
|
-
fileId: string,
|
|
96
|
-
options: StaticOptions
|
|
97
|
-
): StaticValidationError[] {
|
|
98
|
-
if (!options.clientJavascriptDisabled) return [];
|
|
99
|
-
|
|
100
|
-
const errors: StaticValidationError[] = [];
|
|
101
|
-
|
|
102
|
-
const clientDirective = detectFileDirective(code, ['use client']);
|
|
103
|
-
if (clientDirective) {
|
|
104
|
-
errors.push({
|
|
105
|
-
type: 'nojs-directive',
|
|
106
|
-
file: fileId,
|
|
107
|
-
message:
|
|
108
|
-
`'use client' is not allowed when client JavaScript is disabled (clientJavascript: false). ` +
|
|
109
|
-
`This mode produces zero JavaScript — client components cannot exist.`,
|
|
110
|
-
line: clientDirective.line,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const serverDirective = detectFileDirective(code, ['use server']);
|
|
115
|
-
if (serverDirective) {
|
|
116
|
-
errors.push({
|
|
117
|
-
type: 'nojs-directive',
|
|
118
|
-
file: fileId,
|
|
119
|
-
message:
|
|
120
|
-
`'use server' is not allowed when client JavaScript is disabled (clientJavascript: false). ` +
|
|
121
|
-
`This mode produces zero JavaScript — server actions cannot exist.`,
|
|
122
|
-
line: serverDirective.line,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return errors;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
// Combined validation
|
|
131
|
-
// ---------------------------------------------------------------------------
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Run all static mode validations on a source file.
|
|
135
|
-
*
|
|
136
|
-
* Combines:
|
|
137
|
-
* - Dynamic API detection (cookies, headers) — always in static mode
|
|
138
|
-
* - Directive detection ('use client', 'use server') — only when client JS is disabled
|
|
139
|
-
*/
|
|
140
|
-
export function validateStaticMode(
|
|
141
|
-
code: string,
|
|
142
|
-
fileId: string,
|
|
143
|
-
options: StaticOptions
|
|
144
|
-
): StaticValidationError[] {
|
|
145
|
-
const errors: StaticValidationError[] = [];
|
|
146
|
-
|
|
147
|
-
errors.push(...detectDynamicApis(code, fileId));
|
|
148
|
-
errors.push(...detectDirectives(code, fileId, options));
|
|
149
|
-
|
|
150
|
-
return errors;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
77
|
// ---------------------------------------------------------------------------
|
|
154
78
|
// Vite Plugin
|
|
155
79
|
// ---------------------------------------------------------------------------
|
|
@@ -163,9 +87,6 @@ export function validateStaticMode(
|
|
|
163
87
|
* - transform: Validates source files for static mode violations
|
|
164
88
|
*/
|
|
165
89
|
export function timberStaticBuild(ctx: PluginContext): Plugin {
|
|
166
|
-
const isStatic = ctx.config.output === 'static';
|
|
167
|
-
const clientJavascriptDisabled = ctx.clientJavascript.disabled;
|
|
168
|
-
|
|
169
90
|
return {
|
|
170
91
|
name: 'timber-static-build',
|
|
171
92
|
|
|
@@ -173,10 +94,15 @@ export function timberStaticBuild(ctx: PluginContext): Plugin {
|
|
|
173
94
|
* Validate source files during transform.
|
|
174
95
|
*
|
|
175
96
|
* In static mode, we check every app/ file for:
|
|
176
|
-
* - Dynamic API usage (
|
|
97
|
+
* - Dynamic API usage (getCookies(), getHeaders()) → build error
|
|
177
98
|
* - When client JS disabled: 'use client' / 'use server' directives → build error
|
|
178
99
|
*/
|
|
179
100
|
transform(code: string, id: string) {
|
|
101
|
+
// Read ctx.config lazily inside the hook — not at plugin construction
|
|
102
|
+
// time — so file-based config from timber.config.ts is respected.
|
|
103
|
+
// See TIM-451.
|
|
104
|
+
const isStatic = ctx.config.output === 'static';
|
|
105
|
+
|
|
180
106
|
// Only active in static mode
|
|
181
107
|
if (!isStatic) return null;
|
|
182
108
|
|
|
@@ -189,7 +115,7 @@ export function timberStaticBuild(ctx: PluginContext): Plugin {
|
|
|
189
115
|
// Only check JS/TS files
|
|
190
116
|
if (!/\.[jt]sx?$/.test(id)) return null;
|
|
191
117
|
|
|
192
|
-
const errors =
|
|
118
|
+
const errors = detectDynamicApis(code, id);
|
|
193
119
|
|
|
194
120
|
if (errors.length > 0) {
|
|
195
121
|
// Format all errors into a single build error message
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared codegen helpers — import-path computation, codec chain type
|
|
3
|
+
* builder, and searchParams type formatter.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `codegen.ts` so `link-codegen.ts` can use the same
|
|
6
|
+
* helpers without a cyclic import.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { relative, posix } from 'node:path';
|
|
10
|
+
import type { ParamEntry, RouteEntry } from './codegen-types.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Compute a relative import specifier for a codec/page file, stripping
|
|
14
|
+
* the .ts/.tsx extension and resolving against the codegen output dir.
|
|
15
|
+
*/
|
|
16
|
+
export function codecImportPath(codecFilePath: string, importBase: string | undefined): string {
|
|
17
|
+
const absPath = codecFilePath.replace(/\.(ts|tsx)$/, '');
|
|
18
|
+
if (importBase) {
|
|
19
|
+
return './' + relative(importBase, absPath).replace(/\\/g, '/');
|
|
20
|
+
}
|
|
21
|
+
return './' + posix.basename(absPath);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Name of the shared helper type emitted at the top of the .d.ts. */
|
|
25
|
+
export const RESOLVE_SEGMENT_FIELD_TYPE_NAME = '_TimberResolveSegmentField';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Helper type emitted once at the top of the generated `.d.ts` and
|
|
29
|
+
* referenced by every codec-chain conditional. Without this shared
|
|
30
|
+
* helper, the inline expansion would duplicate the fallback branch on
|
|
31
|
+
* every step and grow O(2^N) in chain depth (a single deep nested route
|
|
32
|
+
* could blow up the file size and TS performance). With the helper,
|
|
33
|
+
* each step reuses the named type and growth is O(N).
|
|
34
|
+
*
|
|
35
|
+
* The helper is a 2-arg conditional: given a typeof import expression
|
|
36
|
+
* (`Def`), a key (`K`), and a fallback (`F`), it returns `T[K]` if
|
|
37
|
+
* `Def extends ParamsDefinition<T>` and `K extends keyof T`, otherwise
|
|
38
|
+
* `F`. The codec chain composes calls to this helper.
|
|
39
|
+
*/
|
|
40
|
+
export function emitResolveSegmentFieldHelper(): string {
|
|
41
|
+
return [
|
|
42
|
+
`type ${RESOLVE_SEGMENT_FIELD_TYPE_NAME}<Def, K extends string, F> =`,
|
|
43
|
+
` Def extends import('@timber-js/app/segment-params').ParamsDefinition<infer T>`,
|
|
44
|
+
` ? K extends keyof T ? T[K] : F`,
|
|
45
|
+
` : F;`,
|
|
46
|
+
].join('\n');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Build a TypeScript type expression that resolves a single param's
|
|
51
|
+
* codec by walking a chain of params.ts files in priority order.
|
|
52
|
+
*
|
|
53
|
+
* Each entry in the chain emits one application of the shared
|
|
54
|
+
* `_TimberResolveSegmentField` helper type. Composing N applications
|
|
55
|
+
* grows linearly with chain depth (O(N) characters), unlike an inline
|
|
56
|
+
* conditional that would duplicate the fallback in each branch and
|
|
57
|
+
* grow O(2^N).
|
|
58
|
+
*
|
|
59
|
+
* The closest match (position 0 in the chain) is checked first; if its
|
|
60
|
+
* `segmentParams` definition declares the key, its inferred type wins.
|
|
61
|
+
* Otherwise we fall through to the next entry, and finally to the
|
|
62
|
+
* provided fallback. See TIM-834.
|
|
63
|
+
*/
|
|
64
|
+
export function buildCodecChainType(
|
|
65
|
+
p: ParamEntry,
|
|
66
|
+
importBase: string | undefined,
|
|
67
|
+
fallback: string
|
|
68
|
+
): string {
|
|
69
|
+
const files = p.codecFilePaths;
|
|
70
|
+
if (!files || files.length === 0) return fallback;
|
|
71
|
+
const key = JSON.stringify(p.name);
|
|
72
|
+
// Compose helper applications inside-out so the closest entry
|
|
73
|
+
// (files[0]) ends up as the OUTERMOST application. Each application
|
|
74
|
+
// adds a constant-size wrapper around the running fallback.
|
|
75
|
+
let inner = fallback;
|
|
76
|
+
for (let i = files.length - 1; i >= 0; i--) {
|
|
77
|
+
const importPath = codecImportPath(files[i], importBase);
|
|
78
|
+
inner = `${RESOLVE_SEGMENT_FIELD_TYPE_NAME}<(typeof import('${importPath}'))['segmentParams'], ${key}, ${inner}>`;
|
|
79
|
+
}
|
|
80
|
+
return inner;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Build a TypeScript type expression for a single param using the global
|
|
85
|
+
* schema's InferCodecType. Falls back to the param's base type when
|
|
86
|
+
* schema doesn't declare this param (schemas are opt-in per key).
|
|
87
|
+
*
|
|
88
|
+
* Uses `infer` to extract the codec value rather than direct indexing
|
|
89
|
+
* because TypeScript doesn't narrow index validity inside a conditional
|
|
90
|
+
* type's true branch — `typeof schema.segmentParams[K]` produces TS2538
|
|
91
|
+
* even when the condition proves K is a valid key. In .d.ts files that
|
|
92
|
+
* error is suppressed and the type silently becomes `any`.
|
|
93
|
+
*/
|
|
94
|
+
export function buildSchemaParamType(p: ParamEntry, fallback?: string): string {
|
|
95
|
+
const key = JSON.stringify(p.bracketName);
|
|
96
|
+
const fb = fallback ?? p.type;
|
|
97
|
+
return `typeof schema['segmentParams'] extends Record<${key}, infer V> ? InferCodecType<V> : ${fb}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Format the searchParams type for a route entry.
|
|
102
|
+
*
|
|
103
|
+
* When a page.tsx (or params.ts) exports searchParams, we reference its
|
|
104
|
+
* inferred type via an import type. The import path is relative to
|
|
105
|
+
* `importBase` (the directory where the .d.ts will be written). When
|
|
106
|
+
* importBase is undefined, falls back to a bare relative path.
|
|
107
|
+
*/
|
|
108
|
+
export function formatSearchParamsType(route: RouteEntry, importBase?: string): string {
|
|
109
|
+
if (route.hasSearchParams && route.searchParamsPagePath) {
|
|
110
|
+
const importPath = codecImportPath(route.searchParamsPagePath, importBase);
|
|
111
|
+
// Extract the type from the named 'searchParams' export of the page module.
|
|
112
|
+
return `(typeof import('${importPath}'))['searchParams'] extends import('@timber-js/app/search-params').SearchParamsDefinition<infer T> ? T : never`;
|
|
113
|
+
}
|
|
114
|
+
return '{}';
|
|
115
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for route codegen modules.
|
|
3
|
+
*
|
|
4
|
+
* Lives in its own file so `link-codegen.ts` and `codegen.ts` can import
|
|
5
|
+
* the same `RouteEntry` / `ParamEntry` shapes without a cyclic
|
|
6
|
+
* dependency between the two.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** A single route entry extracted from the segment tree. */
|
|
10
|
+
export interface RouteEntry {
|
|
11
|
+
/** URL path pattern (e.g. "/products/[id]") */
|
|
12
|
+
urlPath: string;
|
|
13
|
+
/** Full tree path including groups and slots (e.g. "/(browse)/[artistSlug]/@shows/[year]").
|
|
14
|
+
* Uniquely identifies a segment — unlike urlPath which strips groups/slots. */
|
|
15
|
+
segmentPath: string;
|
|
16
|
+
/** Accumulated params from all ancestor dynamic segments */
|
|
17
|
+
params: ParamEntry[];
|
|
18
|
+
/** Whether the page.tsx exports searchParams */
|
|
19
|
+
hasSearchParams: boolean;
|
|
20
|
+
/** Absolute path to the page file that exports searchParams (for import paths) */
|
|
21
|
+
searchParamsPagePath?: string;
|
|
22
|
+
/** Whether this is an API route (route.ts) vs page route */
|
|
23
|
+
isApiRoute: boolean;
|
|
24
|
+
/** Whether a global schema (app/schema.ts) exists for this app */
|
|
25
|
+
hasSchema?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ParamEntry {
|
|
29
|
+
name: string;
|
|
30
|
+
/** Bracket-wrapped segment name as it appears in the filesystem and schema.
|
|
31
|
+
* e.g. '[id]', '[...slug]', '[[...slug]]' */
|
|
32
|
+
bracketName: string;
|
|
33
|
+
type: 'string' | 'string[]' | 'string[] | undefined';
|
|
34
|
+
/**
|
|
35
|
+
* Ordered list of params.ts files in the route chain that may declare
|
|
36
|
+
* a codec for this param, in priority order — **closest-to-leaf
|
|
37
|
+
* first**. The generated type emits a chain that picks the first
|
|
38
|
+
* entry whose `segmentParams` definition declares this param key.
|
|
39
|
+
*
|
|
40
|
+
* This array is the SAME for every param in a given route entry
|
|
41
|
+
* (it is the route's full ancestry of params.ts files in leaf-first
|
|
42
|
+
* order); the type-level conditional in `buildCodecChainType`
|
|
43
|
+
* narrows per-key. Sharing the array matches the runtime semantics
|
|
44
|
+
* of `coerceSegmentParams`, which walks segments top-down and lets
|
|
45
|
+
* later (deeper) coercions overwrite earlier ones — closest-to-leaf
|
|
46
|
+
* wins for both types and runtime.
|
|
47
|
+
*
|
|
48
|
+
* See TIM-834.
|
|
49
|
+
*/
|
|
50
|
+
codecFilePaths?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Per-segment legacy fallback: a layout.tsx or page.tsx that exports
|
|
53
|
+
* `segmentParams` directly (pre-TIM-508 convention). Used only when
|
|
54
|
+
* the chain has no params.ts files at all. Does NOT participate in
|
|
55
|
+
* inheritance — a layout/page export is per-segment only.
|
|
56
|
+
*
|
|
57
|
+
* @internal Set during `collectRoutes`; consumed at leaf time when
|
|
58
|
+
* building the final `codecFilePaths`.
|
|
59
|
+
*/
|
|
60
|
+
legacyCodecFilePath?: string;
|
|
61
|
+
}
|