@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.150
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/LICENSE +8 -0
- package/dist/_chunks/actions-a0RczDnB.js +1106 -0
- package/dist/_chunks/actions-a0RczDnB.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/cache-api-Co-yI-gP.js +424 -0
- package/dist/_chunks/cache-api-Co-yI-gP.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → canonicalize-P41GR6tY.js} +94 -18
- package/dist/_chunks/canonicalize-P41GR6tY.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-DJDdyEae.js +629 -0
- package/dist/_chunks/cli-schema-sync-DJDdyEae.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D_IhHEUW.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-Bssfp6ot.js +82 -0
- package/dist/_chunks/define-Bssfp6ot.js.map +1 -0
- package/dist/_chunks/define-CFmvb4Bt.js +203 -0
- package/dist/_chunks/define-CFmvb4Bt.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/href-validation-FiA_rToW.js +141 -0
- package/dist/_chunks/href-validation-FiA_rToW.js.map +1 -0
- package/dist/_chunks/logger-CM0clugc.js +645 -0
- package/dist/_chunks/logger-CM0clugc.js.map +1 -0
- package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
- package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
- package/dist/_chunks/plugin-context-DurqFBuY.js +2 -0
- package/dist/_chunks/plugin-context-GfDWsdd2.js +268 -0
- package/dist/_chunks/plugin-context-GfDWsdd2.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-3iUvBV5T.js +50 -0
- package/dist/_chunks/resolve-schema-3iUvBV5T.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-BY3QLBL7.js +119 -0
- package/dist/_chunks/schema-bridge-BY3QLBL7.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/tree-match-D2l830j2.js +102 -0
- package/dist/_chunks/tree-match-D2l830j2.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-DvWDj453.js +790 -0
- package/dist/_chunks/walkers-DvWDj453.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 +117 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +142 -20
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +150 -64
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/compress-module.d.ts +5 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +17 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +146 -147
- 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 +25 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +100 -240
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +85 -8
- package/dist/cache/redis-handler.d.ts.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/stable-stringify.d.ts +9 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -1
- package/dist/cache/timber-cache.d.ts +20 -10
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +26 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +70 -33
- 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 +29 -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 +28 -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 +47 -10
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +61 -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 +11 -3
- 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 +900 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +69 -60
- package/dist/client/link.d.ts.map +1 -1
- 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 +122 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +3 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +119 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- 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 +86 -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/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 +12 -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 +249 -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 +50 -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/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -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/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.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/dev-tools/instrumentation.d.ts +59 -0
- 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/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +110 -6
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -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/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +4 -2
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +4 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +158 -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 +77 -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 +6432 -13423
- 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 +137 -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 +73 -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 +21 -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 +17 -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 +16 -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 +29 -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 +64 -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/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.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/interception.d.ts +0 -5
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +90 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +32 -0
- package/dist/routing/manifest-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 +91 -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 +37 -440
- 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 +9 -30
- 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 +6 -29
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.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 +115 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +2 -2
- 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/form-data.d.ts +29 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injector-core.d.ts +221 -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 +44 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +3015 -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 +119 -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 +122 -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 +75 -31
- 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/render-utils.d.ts +25 -0
- package/dist/server/render-utils.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 +30 -18
- 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 +51 -23
- 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 +7 -5
- 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 +22 -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 +7 -6
- 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/utils/mdx-file.d.ts +15 -0
- package/dist/server/utils/mdx-file.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/head-header.d.ts +54 -0
- package/dist/shared/head-header.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -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/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.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 +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +16 -16
- package/dist/shims/navigation-client.d.ts +35 -11
- 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 -24
- package/src/adapters/build-output-helper.ts +139 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +179 -0
- package/src/adapters/cloudflare.ts +356 -116
- package/src/adapters/compress-module.ts +27 -92
- package/src/adapters/nitro.ts +155 -99
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +47 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +84 -18
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/redis-handler.ts +110 -15
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/timber-cache.ts +132 -36
- package/src/cli-schema-sync.ts +388 -0
- package/src/cli.ts +98 -34
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +119 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +187 -0
- package/src/client/browser-entry/index.ts +111 -0
- package/src/client/browser-entry/post-hydration.ts +104 -0
- package/src/client/browser-entry/router-init.ts +292 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/error-boundary.tsx +127 -22
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +11 -3
- package/src/client/index.ts +67 -45
- package/src/client/internal.ts +58 -0
- package/src/client/link.tsx +346 -150
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +347 -0
- package/src/client/navigation-context.ts +15 -7
- package/src/client/navigation-root.tsx +355 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +490 -140
- package/src/client/rsc-fetch.ts +220 -17
- 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/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 +31 -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 +311 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +217 -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 +286 -0
- package/src/dev-tools/browser-logs.ts +291 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -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/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +477 -126
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +7 -3
- package/src/fonts/local.ts +9 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +316 -0
- package/src/fonts/transform.ts +344 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +417 -346
- 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 +84 -0
- package/src/plugin-context.ts +325 -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 +285 -0
- package/src/plugins/client-chunks.ts +113 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +264 -46
- package/src/plugins/entries.ts +110 -8
- package/src/plugins/fonts.ts +170 -663
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/routing.ts +237 -241
- package/src/plugins/server-bundle.ts +85 -12
- package/src/plugins/shims.ts +207 -64
- package/src/plugins/static-build.ts +15 -89
- package/src/routing/codegen-shared.ts +115 -0
- package/src/routing/codegen-types.ts +65 -0
- package/src/routing/codegen.ts +380 -178
- package/src/routing/convention-lint.ts +358 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +3 -22
- package/src/routing/link-codegen.ts +310 -0
- package/src/routing/manifest-codegen.ts +290 -0
- package/src/routing/scanner.ts +248 -188
- 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/schema-bridge.ts +252 -0
- package/src/search-params/define.ts +570 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +110 -0
- package/src/segment-params/define.ts +249 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +84 -34
- package/src/server/action-client.ts +119 -28
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +122 -16
- package/src/server/actions.ts +39 -53
- 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 +13 -56
- package/src/server/canonicalize.ts +6 -3
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +34 -7
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +147 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +311 -0
- package/src/server/deny-renderer.ts +80 -64
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +37 -27
- package/src/server/error-boundary-wrapper.ts +61 -22
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/form-data.ts +101 -5
- package/src/server/html-injector-core.ts +437 -0
- package/src/server/html-injectors.ts +256 -251
- package/src/server/index.ts +29 -183
- package/src/server/internal.ts +165 -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 +331 -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 +213 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +126 -63
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +31 -0
- package/src/server/request-context.ts +168 -337
- package/src/server/route-element-builder.ts +481 -222
- package/src/server/route-handler.ts +31 -4
- package/src/server/route-matcher.ts +144 -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 +306 -89
- package/src/server/rsc-entry/helpers.ts +160 -59
- package/src/server/rsc-entry/index.ts +299 -329
- package/src/server/rsc-entry/render-route.ts +311 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
- package/src/server/rsc-entry/rsc-payload.ts +71 -26
- 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 +273 -43
- 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 +258 -257
- package/src/server/ssr-bridge-types.ts +124 -0
- package/src/server/ssr-entry.ts +206 -78
- package/src/server/ssr-render.ts +345 -82
- package/src/server/ssr-wrappers.tsx +141 -0
- package/src/server/state-tree-diff.ts +30 -23
- package/src/server/status-code-resolver.ts +115 -130
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +38 -11
- package/src/server/tree-builder.ts +204 -90
- package/src/server/tree-match.ts +220 -0
- package/src/server/types.ts +78 -9
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/shared/head-header.ts +69 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +51 -29
- package/src/shims/navigation.ts +14 -7
- package/src/utils/state-machine.ts +111 -0
- 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 +0 -164
- 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/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- 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 +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.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/stale-reload.ts +0 -87
- 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/codecs.ts +0 -153
- 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/dev-warnings.ts +0 -283
- package/src/server/flush.ts +0 -182
- 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
|
@@ -11,8 +11,41 @@
|
|
|
11
11
|
* Design docs: design/11-platform.md, design/25-production-deployments.md
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
+
import { builtinModules } from 'node:module';
|
|
14
15
|
import type { Plugin } from 'vite';
|
|
15
16
|
|
|
17
|
+
// Every Node built-in as both bare (`stream`) and prefixed (`node:stream`).
|
|
18
|
+
// Available at runtime on all targets (Node natively, Workers via nodejs_compat).
|
|
19
|
+
// Listing explicitly silences Vite's "Automatically externalized" warnings.
|
|
20
|
+
const NODE_BUILTINS: string[] = builtinModules.flatMap((m) => [m, `node:${m}`]);
|
|
21
|
+
|
|
22
|
+
// Build-time-only packages that must never be bundled into the runtime
|
|
23
|
+
// server environments. With `noExternal: true` rolldown otherwise follows
|
|
24
|
+
// the transitive graph through the user's `timber.config.ts` (loaded by the
|
|
25
|
+
// `virtual:timber-cache-handler` dynamic import) into adapter code, dragging
|
|
26
|
+
// build tooling into the prod server bundle. The most visible symptom is
|
|
27
|
+
// rolldown trying to parse `fsevents.node` as JS and failing with
|
|
28
|
+
// `[UNLOADABLE_DEPENDENCY] … stream did not contain valid UTF-8`.
|
|
29
|
+
//
|
|
30
|
+
// - `nitro`, `@mdx-js/rollup` — build-time tooling reachable
|
|
31
|
+
// transitively through adapter modules and timber's own MDX activation.
|
|
32
|
+
// - `rollup` — pulled in by nitro and
|
|
33
|
+
// @mdx-js/rollup; declares `fsevents` as an optional native dep.
|
|
34
|
+
// - `fsevents`, `chokidar` — native/optional deps of
|
|
35
|
+
// rollup/vite. They are macOS-only file watchers with no runtime use
|
|
36
|
+
// in a server bundle.
|
|
37
|
+
//
|
|
38
|
+
// Mirrored on both rsc and ssr environments. See TIM-988.
|
|
39
|
+
const BUILD_ONLY_EXTERNALS: string[] = [
|
|
40
|
+
...NODE_BUILTINS,
|
|
41
|
+
'vite',
|
|
42
|
+
'nitro',
|
|
43
|
+
'rollup',
|
|
44
|
+
'@mdx-js/rollup',
|
|
45
|
+
'fsevents',
|
|
46
|
+
'chokidar',
|
|
47
|
+
];
|
|
48
|
+
|
|
16
49
|
export function timberServerBundle(): Plugin[] {
|
|
17
50
|
const bundlePlugin: Plugin = {
|
|
18
51
|
name: 'timber-server-bundle',
|
|
@@ -80,11 +113,11 @@ export function timberServerBundle(): Plugin[] {
|
|
|
80
113
|
ssr: { target: 'webworker' },
|
|
81
114
|
environments: {
|
|
82
115
|
rsc: {
|
|
83
|
-
resolve: { noExternal: true },
|
|
116
|
+
resolve: { noExternal: true, external: BUILD_ONLY_EXTERNALS },
|
|
84
117
|
define: serverDefine,
|
|
85
118
|
},
|
|
86
119
|
ssr: {
|
|
87
|
-
resolve: { noExternal: true },
|
|
120
|
+
resolve: { noExternal: true, external: BUILD_ONLY_EXTERNALS },
|
|
88
121
|
define: serverDefine,
|
|
89
122
|
},
|
|
90
123
|
},
|
|
@@ -103,15 +136,18 @@ export function timberServerBundle(): Plugin[] {
|
|
|
103
136
|
// back to lazy retry on failure. This handles two failure modes:
|
|
104
137
|
//
|
|
105
138
|
// 1. Forward references (e.g. Zod v4): `init_iso` calls `init_schemas`
|
|
106
|
-
// which hasn't been defined yet. Eager execution fails, but
|
|
107
|
-
// function is called lazily later, all dependencies are
|
|
139
|
+
// which hasn't been defined yet. Eager execution fails silently, but
|
|
140
|
+
// when the function is called lazily later, all dependencies are
|
|
141
|
+
// available and the retry succeeds (and caches).
|
|
108
142
|
//
|
|
109
143
|
// 2. Optional peer dep shims (e.g. @emotion/is-prop-valid for
|
|
110
144
|
// framer-motion): Vite generates shims that throw for missing
|
|
111
|
-
// optional deps. The
|
|
112
|
-
// the consuming package's try/catch handles it.
|
|
145
|
+
// optional deps. The eager attempt swallows the throw; the lazy call
|
|
146
|
+
// PROPAGATES it so the consuming package's try/catch handles it.
|
|
113
147
|
//
|
|
114
|
-
// The key:
|
|
148
|
+
// The key: only the eager attempt swallows errors. Once the helper is
|
|
149
|
+
// returned, lazy calls use the original Rolldown semantics — a throwing
|
|
150
|
+
// init propagates to the caller (and clears `fn`, matching upstream).
|
|
115
151
|
// On success, `fn` is set to 0 so subsequent calls are no-ops.
|
|
116
152
|
const esmInitFixPlugin: Plugin = {
|
|
117
153
|
name: 'timber-esm-init-fix',
|
|
@@ -122,13 +158,19 @@ export function timberServerBundle(): Plugin[] {
|
|
|
122
158
|
const lazy = 'var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);';
|
|
123
159
|
if (!code.includes(lazy)) return null;
|
|
124
160
|
|
|
125
|
-
// Eager-with-retry: attempt init immediately
|
|
126
|
-
// (
|
|
127
|
-
//
|
|
161
|
+
// Eager-with-retry: attempt init immediately, swallowing failures
|
|
162
|
+
// (forward refs aren't defined yet). After the eager attempt, flip
|
|
163
|
+
// to lazy mode where errors propagate to the caller — consumers'
|
|
164
|
+
// try/catch (framer-motion's optional @emotion dep) must see them.
|
|
128
165
|
const eager = [
|
|
129
166
|
'var __esmMin = (fn, res) => {',
|
|
130
|
-
' var
|
|
167
|
+
' var eager = 1;',
|
|
168
|
+
' var l = () => {',
|
|
169
|
+
' if (fn) { if (eager) { try { res = fn(); fn = 0; } catch(e) {} } else { res = fn(fn = 0); } }',
|
|
170
|
+
' return res;',
|
|
171
|
+
' };',
|
|
131
172
|
' l();',
|
|
173
|
+
' eager = 0;',
|
|
132
174
|
' return l;',
|
|
133
175
|
'};',
|
|
134
176
|
].join(' ');
|
|
@@ -137,5 +179,36 @@ export function timberServerBundle(): Plugin[] {
|
|
|
137
179
|
},
|
|
138
180
|
};
|
|
139
181
|
|
|
140
|
-
|
|
182
|
+
// Fix Rolldown's `createRequire(import.meta.url)` CJS interop shim for
|
|
183
|
+
// Cloudflare Workers. Rolldown emits this for CJS dependencies (e.g.
|
|
184
|
+
// @opentelemetry/context-async-hooks) that use `require()`. On Workers,
|
|
185
|
+
// `import.meta.url` is `undefined` for non-entry modules, causing:
|
|
186
|
+
// TypeError: The argument 'path' must be a file URL object, a file URL
|
|
187
|
+
// string, or an absolute path string. Received 'undefined'
|
|
188
|
+
//
|
|
189
|
+
// The fix: provide a fallback URL when `import.meta.url` is undefined.
|
|
190
|
+
// The actual URL doesn't matter — `createRequire` only needs it for
|
|
191
|
+
// resolving relative paths, but the only `__require()` calls are for
|
|
192
|
+
// Node built-ins (events, async_hooks) which resolve from any base.
|
|
193
|
+
//
|
|
194
|
+
// The top-level `ssr: { target: 'webworker' }` was supposed to prevent
|
|
195
|
+
// this, but it doesn't propagate to custom environments (rsc) in Vite's
|
|
196
|
+
// Environment API. See LOCAL-405.
|
|
197
|
+
const createRequireFixPlugin: Plugin = {
|
|
198
|
+
name: 'timber-create-require-fix',
|
|
199
|
+
applyToEnvironment(environment) {
|
|
200
|
+
return environment.name === 'rsc' || environment.name === 'ssr';
|
|
201
|
+
},
|
|
202
|
+
renderChunk(code) {
|
|
203
|
+
const pattern = 'createRequire(import.meta.url)';
|
|
204
|
+
if (!code.includes(pattern)) return null;
|
|
205
|
+
|
|
206
|
+
return {
|
|
207
|
+
code: code.replace(pattern, 'createRequire(import.meta.url || "file:///app")'),
|
|
208
|
+
map: null,
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
return [bundlePlugin, esmInitFixPlugin, createRequireFixPlugin];
|
|
141
214
|
}
|
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,72 @@ 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 — tests/shims-drift.test.ts enumerates package.json
|
|
48
|
+
* exports and fails if an entry is missing. See TIM-568.
|
|
49
|
+
*
|
|
50
|
+
* Exported for the drift test.
|
|
51
|
+
*/
|
|
52
|
+
export const SUBPATH_SRC_MAP: Record<string, string> = {
|
|
53
|
+
'cache': 'cache/index.ts',
|
|
54
|
+
'codec': 'codec.ts',
|
|
55
|
+
'cookies': 'cookies/index.ts',
|
|
56
|
+
'params': 'params/index.ts',
|
|
57
|
+
'search-params': 'search-params/index.ts',
|
|
58
|
+
'segment-params': 'segment-params/index.ts',
|
|
59
|
+
|
|
60
|
+
'adapters/cloudflare': 'adapters/cloudflare.ts',
|
|
61
|
+
'adapters/cloudflare/cache': 'adapters/cloudflare-kv-cache.ts',
|
|
62
|
+
'adapters/cloudflare/dev': 'adapters/cloudflare-dev.ts',
|
|
63
|
+
'adapters/nitro': 'adapters/nitro.ts',
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Runtime value exports of @timber-js/app/server, stubbed in the client
|
|
68
|
+
* (browser) environment so a stray client-side import fails with a clear
|
|
69
|
+
* call-time error instead of a confusing bundler error.
|
|
70
|
+
*
|
|
71
|
+
* Must stay in sync with the actual runtime exports of server/index.ts —
|
|
72
|
+
* tests/shims-drift.test.ts compares this list against
|
|
73
|
+
* Object.keys(import('../server/index.ts')) and fails on drift.
|
|
74
|
+
* Type-only exports (DenyOptions, AccessContext, …) are erased at runtime
|
|
75
|
+
* and must NOT appear here.
|
|
76
|
+
*/
|
|
77
|
+
export const SERVER_STUB_EXPORTS: readonly string[] = [
|
|
78
|
+
// request-context
|
|
79
|
+
'getHeaders',
|
|
80
|
+
'getSegmentParams',
|
|
81
|
+
// cookie-context
|
|
82
|
+
'getCookieJar',
|
|
83
|
+
// primitives
|
|
84
|
+
'deny',
|
|
85
|
+
'redirect',
|
|
86
|
+
'redirectExternal',
|
|
87
|
+
'RedirectType',
|
|
88
|
+
'waitUntil',
|
|
89
|
+
// action-client
|
|
90
|
+
'createActionClient',
|
|
91
|
+
'ActionError',
|
|
92
|
+
'validated',
|
|
93
|
+
// form-data
|
|
94
|
+
'coerce',
|
|
95
|
+
'parseFormData',
|
|
96
|
+
// form-flash
|
|
97
|
+
'getFormFlash',
|
|
98
|
+
// revalidation
|
|
99
|
+
'revalidatePath',
|
|
100
|
+
'revalidateTag',
|
|
101
|
+
// tracing
|
|
102
|
+
'getTraceId',
|
|
103
|
+
'getSpanId',
|
|
104
|
+
'withSpan',
|
|
105
|
+
'addSpanEvent',
|
|
106
|
+
];
|
|
107
|
+
|
|
41
108
|
/**
|
|
42
109
|
* Map from next/* import specifiers to shim file paths.
|
|
43
110
|
*
|
|
@@ -49,10 +116,14 @@ const SHIM_MAP: Record<string, string> = {
|
|
|
49
116
|
'next/image': resolve(SHIMS_DIR, 'image.ts'),
|
|
50
117
|
'next/navigation': resolve(SHIMS_DIR, 'navigation.ts'),
|
|
51
118
|
'next/headers': resolve(SHIMS_DIR, 'headers.ts'),
|
|
52
|
-
// next/font/*
|
|
53
|
-
// The fonts plugin's load hook serves the actual module
|
|
119
|
+
// next/font/* and @timber-js/app/fonts/* redirect to the timber-fonts
|
|
120
|
+
// virtual modules. The fonts plugin's load hook serves the actual module
|
|
121
|
+
// code. The package.json exports point to shim stubs for non-Vite contexts
|
|
122
|
+
// (tsc, tests), but in Vite the virtual module takes priority via this map.
|
|
54
123
|
'next/font/google': '\0@timber/fonts/google',
|
|
55
124
|
'next/font/local': '\0@timber/fonts/local',
|
|
125
|
+
'@timber-js/app/fonts/google': '\0@timber/fonts/google',
|
|
126
|
+
'@timber-js/app/fonts/local': '\0@timber/fonts/local',
|
|
56
127
|
};
|
|
57
128
|
|
|
58
129
|
/**
|
|
@@ -65,6 +136,16 @@ function stripJsExtension(id: string): string {
|
|
|
65
136
|
return id.endsWith('.js') ? id.slice(0, -3) : id;
|
|
66
137
|
}
|
|
67
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Read the Vite environment name from a plugin hook's `this` context.
|
|
141
|
+
*
|
|
142
|
+
* Duck-typed because the hook context type doesn't expose `environment`
|
|
143
|
+
* in a way that survives our Plugin typing — see Vite's Environment API.
|
|
144
|
+
*/
|
|
145
|
+
function envName(hookCtx: unknown): string | undefined {
|
|
146
|
+
return (hookCtx as { environment?: { name?: string } }).environment?.name;
|
|
147
|
+
}
|
|
148
|
+
|
|
68
149
|
/**
|
|
69
150
|
* Create the timber-shims Vite plugin.
|
|
70
151
|
*
|
|
@@ -88,14 +169,16 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
88
169
|
* 3. Check next/* shim map
|
|
89
170
|
* 4. Return null (pass through) for everything else
|
|
90
171
|
*
|
|
91
|
-
* @timber-js/app
|
|
92
|
-
*
|
|
93
|
-
*
|
|
172
|
+
* In server environments (RSC + SSR), @timber-js/app/* subpath imports
|
|
173
|
+
* are remapped to src/ via SUBPATH_SRC_MAP and the explicit branches
|
|
174
|
+
* below — dist/ chunks miss Vite's RSC transforms and would duplicate
|
|
175
|
+
* mutable module state (see TIM-568 and the rationale comments below).
|
|
94
176
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
177
|
+
* In the client (browser) environment, imports resolve to dist/ via
|
|
178
|
+
* package.json exports — except @timber-js/app/client (remapped to src/
|
|
179
|
+
* to share module instances with browser-entry) and @timber-js/app/server,
|
|
180
|
+
* which returns a virtual stub: server code must never be bundled into
|
|
181
|
+
* the browser.
|
|
99
182
|
*/
|
|
100
183
|
resolveId(id: string) {
|
|
101
184
|
// Poison pill packages — resolve to virtual modules handled by load()
|
|
@@ -110,45 +193,117 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
110
193
|
// functions like redirect() and deny(). This prevents server/primitives.ts
|
|
111
194
|
// from being pulled into the browser bundle.
|
|
112
195
|
if (cleanId in SHIM_MAP) {
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
196
|
+
const env = envName(this);
|
|
197
|
+
if (env === 'client' && cleanId === 'next/navigation') {
|
|
115
198
|
return resolve(SHIMS_DIR, 'navigation-client.ts');
|
|
116
199
|
}
|
|
117
200
|
return SHIM_MAP[cleanId];
|
|
118
201
|
}
|
|
119
202
|
|
|
120
|
-
// @timber-js/app
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
203
|
+
// ── @timber-js/app/* → src/ resolution in server environments ──
|
|
204
|
+
//
|
|
205
|
+
// All @timber-js/app/* subpath imports are remapped to src/ in server
|
|
206
|
+
// environments (RSC + SSR). This is required for two reasons:
|
|
207
|
+
//
|
|
208
|
+
// 1. RSC correctness: dist/ chunks eagerly import from 'react' (e.g.
|
|
209
|
+
// createContext in segment-context) which doesn't exist in RSC's
|
|
210
|
+
// React build. Vite's RSC plugin only transforms src/ files —
|
|
211
|
+
// dist/ chunks are pre-built and served as-is.
|
|
212
|
+
//
|
|
213
|
+
// 2. Module singleton correctness: framework internals use relative
|
|
214
|
+
// imports that resolve within src/. If user code resolved to dist/
|
|
215
|
+
// while framework code resolved to src/, mutable module-level state
|
|
216
|
+
// (ALS refs, registered callbacks) would be duplicated. By remapping
|
|
217
|
+
// all @timber-js/app/* to src/, everything shares one module graph.
|
|
218
|
+
//
|
|
219
|
+
// Exception: @timber-js/app/client in RSC resolves to dist/ where
|
|
220
|
+
// 'use client' is preserved for client boundary detection.
|
|
221
|
+
//
|
|
222
|
+
// In the client (browser) environment, all imports resolve to dist/
|
|
223
|
+
// via package.json exports (no remapping needed).
|
|
224
|
+
|
|
225
|
+
// ── #imports resolution for package-internal modules ─────────────
|
|
226
|
+
//
|
|
227
|
+
// #server-internal and #client-internal are Node package imports
|
|
228
|
+
// (package.json "imports" field). They are only resolvable from
|
|
229
|
+
// within this package — external consumers get module-not-found.
|
|
230
|
+
//
|
|
231
|
+
// In Vite, we intercept them here to resolve to src/ for dev/build
|
|
232
|
+
// correctness (same rationale as the @timber-js/app/* remap above).
|
|
233
|
+
if (cleanId === '#server-internal') {
|
|
234
|
+
const env = envName(this);
|
|
235
|
+
if (env === 'client') {
|
|
236
|
+
return '\0timber:server-empty';
|
|
237
|
+
}
|
|
238
|
+
return resolve(PKG_ROOT, 'src', 'server', 'internal.ts');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (cleanId === '#client-internal') {
|
|
242
|
+
// Always resolve to src/ — all environments (RSC, SSR, client)
|
|
243
|
+
// use src/ for framework internals. In the client env, this
|
|
244
|
+
// ensures browser-entry and @timber-js/app/client share the
|
|
245
|
+
// same module graph (both resolve to src/).
|
|
246
|
+
return resolve(PKG_ROOT, 'src', 'client', 'internal.ts');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (cleanId === '#routing') {
|
|
250
|
+
return resolve(PKG_ROOT, 'src', 'routing', 'index.ts');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Legacy aliases — vitest and monorepo configs may still reference
|
|
254
|
+
// the old @timber-js/app/server/internal and @timber-js/app/client/internal
|
|
255
|
+
// specifiers via resolve.alias. When those aliases resolve to the
|
|
256
|
+
// absolute src/ path, they bypass this plugin entirely. But if the
|
|
257
|
+
// specifier reaches us unresolved (e.g., in a Vite build without
|
|
258
|
+
// aliases), handle it the same way as the #imports above.
|
|
259
|
+
if (cleanId === '@timber-js/app/server/internal') {
|
|
260
|
+
const env = envName(this);
|
|
261
|
+
if (env === 'client') {
|
|
262
|
+
return '\0timber:server-empty';
|
|
263
|
+
}
|
|
264
|
+
return resolve(PKG_ROOT, 'src', 'server', 'internal.ts');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (cleanId === '@timber-js/app/client/internal') {
|
|
268
|
+
// Same as #client-internal above — always resolve to src/.
|
|
269
|
+
return resolve(PKG_ROOT, 'src', 'client', 'internal.ts');
|
|
270
|
+
}
|
|
271
|
+
|
|
124
272
|
if (cleanId === '@timber-js/app/server') {
|
|
125
|
-
const
|
|
126
|
-
if (
|
|
273
|
+
const env = envName(this);
|
|
274
|
+
if (env === 'client') {
|
|
127
275
|
return '\0timber:server-empty';
|
|
128
276
|
}
|
|
277
|
+
// RSC + SSR: remap to src/
|
|
129
278
|
return resolve(PKG_ROOT, 'src', 'server', 'index.ts');
|
|
130
279
|
}
|
|
131
280
|
|
|
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
281
|
if (cleanId === '@timber-js/app/client') {
|
|
148
|
-
const
|
|
149
|
-
|
|
282
|
+
const env = envName(this);
|
|
283
|
+
// RSC: return null — needs dist/ for 'use client' boundary detection.
|
|
284
|
+
// SSR + Client: resolve to src/ so that browser-entry (which uses
|
|
285
|
+
// relative imports from src/) and user code (which uses the bare
|
|
286
|
+
// specifier @timber-js/app/client) share the same module instances.
|
|
287
|
+
// Without this, state.ts is loaded twice (src/ and dist/) and
|
|
288
|
+
// setGlobalRouter() writes to one copy while getRouterOrNull()
|
|
289
|
+
// reads from the other (always null).
|
|
290
|
+
if (env === 'ssr' || env === 'client') {
|
|
150
291
|
return resolve(PKG_ROOT, 'src', 'client', 'index.ts');
|
|
151
292
|
}
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Catch-all: remap any other @timber-js/app/<subpath> to src/
|
|
297
|
+
// in non-client environments (RSC + SSR).
|
|
298
|
+
if (cleanId.startsWith('@timber-js/app/') && cleanId !== '@timber-js/app/package.json') {
|
|
299
|
+
const env = envName(this);
|
|
300
|
+
if (env !== 'client') {
|
|
301
|
+
const subpath = cleanId.slice('@timber-js/app/'.length);
|
|
302
|
+
const srcPath = SUBPATH_SRC_MAP[subpath];
|
|
303
|
+
if (srcPath) {
|
|
304
|
+
return resolve(PKG_ROOT, 'src', srcPath);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
152
307
|
}
|
|
153
308
|
|
|
154
309
|
return null;
|
|
@@ -162,8 +317,8 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
162
317
|
* clearly identifies the boundary violation.
|
|
163
318
|
*/
|
|
164
319
|
load(id: string) {
|
|
165
|
-
const
|
|
166
|
-
const isClient =
|
|
320
|
+
const env = envName(this);
|
|
321
|
+
const isClient = env === 'client';
|
|
167
322
|
|
|
168
323
|
if (id === SERVER_ONLY_VIRTUAL) {
|
|
169
324
|
if (isClient) {
|
|
@@ -193,35 +348,23 @@ export function timberShims(_ctx: PluginContext): Plugin {
|
|
|
193
348
|
if (id === '\0timber:server-empty') {
|
|
194
349
|
// Export named stubs instead of throwing at evaluation time.
|
|
195
350
|
// Throwing at eval breaks the module system — the browser can't
|
|
196
|
-
// resolve named imports like `import {
|
|
351
|
+
// resolve named imports like `import { deny } from '...'`.
|
|
197
352
|
// Instead, each stub throws at call time with a clear message.
|
|
353
|
+
// The export names are generated from SERVER_STUB_EXPORTS so the
|
|
354
|
+
// list cannot drift from server/index.ts (drift test enforced).
|
|
355
|
+
// RedirectType is a plain const object on the server, so it is
|
|
356
|
+
// mirrored as one here — libraries read RedirectType.push as a value.
|
|
357
|
+
const stubExports = SERVER_STUB_EXPORTS.map((name) =>
|
|
358
|
+
name === 'RedirectType'
|
|
359
|
+
? `export const RedirectType = { push: 'push', replace: 'replace' };`
|
|
360
|
+
: `export const ${name} = stub;`
|
|
361
|
+
).join('\n');
|
|
198
362
|
return `
|
|
199
363
|
const msg = "[timber] @timber-js/app/server was imported from client code. " +
|
|
200
364
|
"Server modules (headers, cookies, redirect, deny, etc.) cannot be used in client components. " +
|
|
201
365
|
"If you need these APIs, move the import to a server component or middleware.";
|
|
202
366
|
function stub() { throw new Error(msg); }
|
|
203
|
-
|
|
204
|
-
export const cookies = stub;
|
|
205
|
-
export const searchParams = stub;
|
|
206
|
-
export const deny = stub;
|
|
207
|
-
export const notFound = stub;
|
|
208
|
-
export const redirect = stub;
|
|
209
|
-
export const permanentRedirect = stub;
|
|
210
|
-
export const redirectExternal = stub;
|
|
211
|
-
export const waitUntil = stub;
|
|
212
|
-
export const RenderError = stub;
|
|
213
|
-
export const RedirectType = {};
|
|
214
|
-
export const DenySignal = stub;
|
|
215
|
-
export const RedirectSignal = stub;
|
|
216
|
-
export const createPipeline = stub;
|
|
217
|
-
export const revalidatePath = stub;
|
|
218
|
-
export const revalidateTag = stub;
|
|
219
|
-
export const createActionClient = stub;
|
|
220
|
-
export const ActionError = stub;
|
|
221
|
-
export const validated = stub;
|
|
222
|
-
export const getFormFlash = stub;
|
|
223
|
-
export const parseFormData = stub;
|
|
224
|
-
export const coerce = stub;
|
|
367
|
+
${stubExports}
|
|
225
368
|
`;
|
|
226
369
|
}
|
|
227
370
|
},
|
|
@@ -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
|