@timber-js/app 0.2.0-alpha.8 → 0.2.0-alpha.80
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-Dg-ANYHb.js +421 -0
- package/dist/_chunks/actions-Dg-ANYHb.js.map +1 -0
- package/dist/_chunks/{als-registry-B7DbZ2hS.js → als-registry-HS0LGUl2.js} +1 -1
- package/dist/_chunks/als-registry-HS0LGUl2.js.map +1 -0
- package/dist/_chunks/chunk-DYhsFzuS.js +33 -0
- package/dist/_chunks/{debug-gwlJkDuf.js → debug-ECi_61pb.js} +2 -2
- package/dist/_chunks/debug-ECi_61pb.js.map +1 -0
- package/dist/_chunks/define-C77ScO0m.js +106 -0
- package/dist/_chunks/define-C77ScO0m.js.map +1 -0
- package/dist/_chunks/define-CZqDwhSu.js +199 -0
- package/dist/_chunks/define-CZqDwhSu.js.map +1 -0
- package/dist/_chunks/define-cookie-C2IkoFGN.js +94 -0
- package/dist/_chunks/define-cookie-C2IkoFGN.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → dev-warnings-DpGRGoDi.js} +5 -44
- package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +1 -0
- package/dist/_chunks/format-CYBGxKtc.js +14 -0
- package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
- package/dist/_chunks/{interception-BOoWmLUA.js → interception-Dpn_UfAD.js} +171 -97
- package/dist/_chunks/interception-Dpn_UfAD.js.map +1 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js +41 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DS3eKNmf.js} +1 -1
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js.map → metadata-routes-DS3eKNmf.js.map} +1 -1
- package/dist/_chunks/request-context-qMsWgy9C.js +478 -0
- package/dist/_chunks/request-context-qMsWgy9C.js.map +1 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js +86 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js.map +1 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js +65 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js.map +1 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js +34 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DzuI0bIV.js} +1 -1
- package/dist/_chunks/{ssr-data-MjmprTmO.js.map → ssr-data-DzuI0bIV.js.map} +1 -1
- package/dist/_chunks/stale-reload-C2plcNtG.js +64 -0
- package/dist/_chunks/stale-reload-C2plcNtG.js.map +1 -0
- package/dist/_chunks/{tracing-CemImE6h.js → tracing-CCYbKn5n.js} +60 -9
- package/dist/_chunks/tracing-CCYbKn5n.js.map +1 -0
- package/dist/_chunks/use-params-Br9YSUFV.js +295 -0
- package/dist/_chunks/use-params-Br9YSUFV.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-Lo_s_pw2.js} +4 -4
- package/dist/_chunks/use-query-states-Lo_s_pw2.js.map +1 -0
- package/dist/_chunks/wrappers-_DTmImGt.js +63 -0
- package/dist/_chunks/wrappers-_DTmImGt.js.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 +135 -11
- 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 +56 -13
- package/dist/adapters/nitro.js.map +1 -1
- 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 +142 -80
- 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.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +27 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +23 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +10 -4
- 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 +2 -2
- 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 +7 -21
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +210 -1017
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +18 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +890 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +63 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +90 -32
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +36 -0
- package/dist/client/nav-link-store.d.ts.map +1 -0
- package/dist/client/navigation-api-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +115 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +13 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +70 -4
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +38 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +1 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +63 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-reload.d.ts +15 -0
- package/dist/client/stale-reload.d.ts.map +1 -1
- package/dist/client/top-loader.d.ts +5 -5
- package/dist/client/top-loader.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-params.d.ts +6 -4
- package/dist/client/use-params.d.ts.map +1 -1
- package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/codec.d.ts +33 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/config-types.d.ts +210 -0
- package/dist/config-types.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 +35 -14
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -83
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/index.d.ts +45 -192
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12296 -11901
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +84 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +3 -3
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +32 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-browser-logs.d.ts +84 -0
- package/dist/plugins/dev-browser-logs.d.ts.map +1 -0
- package/dist/plugins/dev-error-overlay.d.ts +26 -1
- package/dist/plugins/dev-error-overlay.d.ts.map +1 -1
- package/dist/plugins/dev-logs.d.ts +1 -1
- package/dist/plugins/dev-logs.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 +19 -5
- 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 +4 -4
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen.d.ts +2 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +3 -2
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +46 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/status-file-lint.d.ts +2 -1
- package/dist/routing/status-file-lint.d.ts.map +1 -1
- package/dist/routing/types.d.ts +16 -4
- package/dist/routing/types.d.ts.map +1 -1
- 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 +139 -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 +4 -474
- 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 +78 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +6 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +4 -0
- package/dist/server/access-gate.d.ts +4 -0
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +12 -1
- 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.map +1 -1
- package/dist/server/actions.d.ts +3 -6
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +32 -4
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +2 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/debug.d.ts +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/deny-page-resolver.d.ts +52 -0
- package/dist/server/deny-page-resolver.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-holding-server.d.ts +52 -0
- package/dist/server/dev-holding-server.d.ts.map +1 -0
- package/dist/server/dev-warnings.d.ts +1 -21
- package/dist/server/dev-warnings.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -5
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -1
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +4 -3
- 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-injectors.d.ts +51 -11
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +6 -43
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +38 -2798
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +46 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2883 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +25 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +19 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +113 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/page-deny-boundary.d.ts +31 -0
- package/dist/server/page-deny-boundary.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.d.ts +42 -10
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +69 -18
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +112 -43
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +27 -1
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +9 -2
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/api-handler.d.ts +2 -2
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +48 -5
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +8 -3
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- 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 +4 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +22 -0
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +39 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +50 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +1 -1
- 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 +4 -4
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +22 -19
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +1 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +1 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +3 -2
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/directive-parser.d.ts +5 -2
- package/dist/utils/directive-parser.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 +53 -23
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +342 -28
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +52 -8
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +81 -18
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +31 -0
- package/src/cache/timber-cache.ts +24 -20
- package/src/cli.ts +6 -1
- package/src/client/browser-dev.ts +128 -1
- package/src/client/browser-entry/action-dispatch.ts +116 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +138 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +193 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/error-boundary.tsx +48 -16
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +2 -2
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +19 -38
- package/src/client/internal.ts +57 -0
- package/src/client/link-pending-store.ts +111 -0
- package/src/client/link.tsx +329 -97
- package/src/client/nav-link-store.ts +47 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +332 -0
- package/src/client/navigation-context.ts +31 -6
- package/src/client/navigation-root.tsx +342 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +299 -72
- package/src/client/rsc-fetch.ts +97 -8
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/top-loader.tsx +16 -8
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-params.ts +7 -5
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
- package/src/client/use-query-states.ts +3 -3
- package/src/client/use-router.ts +1 -1
- package/src/codec.ts +49 -0
- package/src/config-types.ts +208 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +78 -25
- package/src/cookies/index.ts +8 -0
- package/src/fonts/css.ts +2 -1
- package/src/index.ts +258 -354
- package/src/plugin-context.ts +200 -0
- package/src/plugins/adapter-build.ts +8 -2
- package/src/plugins/build-manifest.ts +13 -2
- package/src/plugins/build-report.ts +3 -3
- package/src/plugins/client-chunks.ts +65 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-browser-logs.ts +288 -0
- package/src/plugins/dev-error-overlay.ts +70 -1
- package/src/plugins/dev-logs.ts +1 -1
- package/src/plugins/dev-server.ts +70 -9
- package/src/plugins/entries.ts +71 -10
- package/src/plugins/fonts.ts +168 -61
- package/src/plugins/mdx.ts +1 -1
- package/src/plugins/routing.ts +57 -17
- package/src/plugins/server-action-exports.ts +1 -1
- package/src/plugins/server-bundle.ts +32 -1
- package/src/plugins/shims.ts +135 -35
- package/src/plugins/static-build.ts +17 -11
- package/src/routing/codegen.ts +165 -105
- package/src/routing/index.ts +2 -0
- package/src/routing/scanner.ts +93 -23
- package/src/routing/segment-classify.ts +89 -0
- package/src/routing/status-file-lint.ts +3 -2
- package/src/routing/types.ts +17 -4
- package/src/rsc-runtime/rsc.ts +2 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
- package/src/search-params/define.ts +482 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +85 -0
- package/src/segment-params/define.ts +279 -0
- package/src/segment-params/index.ts +29 -0
- package/src/server/access-gate.tsx +70 -29
- package/src/server/action-client.ts +21 -2
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +21 -4
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +34 -6
- package/src/server/build-manifest.ts +10 -4
- package/src/server/compress.ts +25 -7
- package/src/server/debug.ts +1 -1
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-page-resolver.ts +154 -0
- package/src/server/deny-renderer.ts +24 -38
- package/src/server/dev-holding-server.ts +185 -0
- package/src/server/dev-warnings.ts +4 -49
- package/src/server/early-hints.ts +36 -15
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +31 -15
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/flush.ts +2 -1
- package/src/server/form-data.ts +76 -0
- package/src/server/html-injectors.ts +280 -120
- package/src/server/index.ts +26 -177
- package/src/server/internal.ts +169 -0
- package/src/server/logger.ts +44 -36
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +509 -0
- package/src/server/page-deny-boundary.tsx +56 -0
- package/src/server/pipeline-interception.ts +17 -16
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline.ts +227 -62
- package/src/server/primitives.ts +111 -28
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +293 -132
- package/src/server/route-element-builder.ts +283 -191
- package/src/server/route-handler.ts +24 -4
- package/src/server/route-matcher.ts +24 -20
- package/src/server/rsc-entry/api-handler.ts +15 -16
- package/src/server/rsc-entry/error-renderer.ts +300 -89
- package/src/server/rsc-entry/helpers.ts +134 -5
- package/src/server/rsc-entry/index.ts +200 -112
- package/src/server/rsc-entry/rsc-payload.ts +65 -18
- package/src/server/rsc-entry/rsc-stream.ts +65 -13
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +168 -38
- package/src/server/safe-load.ts +60 -0
- package/src/server/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +126 -0
- package/src/server/slot-resolver.ts +244 -229
- package/src/server/ssr-entry.ts +211 -32
- package/src/server/ssr-render.ts +289 -67
- package/src/server/ssr-wrappers.tsx +139 -0
- package/src/server/status-code-resolver.ts +1 -1
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +20 -9
- package/src/server/tree-builder.ts +92 -58
- package/src/server/types.ts +3 -6
- package/src/server/version-skew.ts +104 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation-client.ts +1 -1
- package/src/shims/navigation.ts +7 -2
- package/src/utils/directive-parser.ts +5 -2
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
- package/dist/_chunks/format-DviM89f0.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
- package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/cookies/index.js.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/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.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/search-params/index.js.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/response-cache.d.ts +0 -54
- package/dist/server/response-cache.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/transition-root.tsx +0 -166
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dynamic-transform.ts +0 -161
- 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/prerender.ts +0 -139
- package/src/server/response-cache.ts +0 -410
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timber configuration types.
|
|
3
|
+
*
|
|
4
|
+
* Extracted to a shared file so both the public entry point (index.ts)
|
|
5
|
+
* and internal plugin-context.ts can import them without circular deps.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Configuration for client-side JavaScript output. */
|
|
9
|
+
export interface ClientJavascriptConfig {
|
|
10
|
+
/** When true, no client JS bundles are emitted or referenced in HTML. */
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* When `disabled` is true, still inject the Vite HMR client in dev mode
|
|
14
|
+
* so hot reloading works during development. Default: true.
|
|
15
|
+
*/
|
|
16
|
+
enableHMRInDev?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface TimberUserConfig {
|
|
20
|
+
output?: 'server' | 'static';
|
|
21
|
+
/**
|
|
22
|
+
* Enable timber debug logging in production builds.
|
|
23
|
+
*
|
|
24
|
+
* When `true`, timber's own diagnostics (dev warnings, verbose logging)
|
|
25
|
+
* are active even in production mode. React stays in production mode —
|
|
26
|
+
* only timber's logs are affected.
|
|
27
|
+
*
|
|
28
|
+
* Can also be enabled at runtime via the `TIMBER_DEBUG` environment variable.
|
|
29
|
+
*
|
|
30
|
+
* Default: `false`.
|
|
31
|
+
*/
|
|
32
|
+
debug?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Control client-side JavaScript output.
|
|
35
|
+
*
|
|
36
|
+
* Boolean shorthand:
|
|
37
|
+
* `clientJavascript: false` disables all client JS (equivalent to `{ disabled: true }`).
|
|
38
|
+
* `clientJavascript: true` enables client JS (the default).
|
|
39
|
+
*
|
|
40
|
+
* Object form:
|
|
41
|
+
* `clientJavascript: { disabled: true, enableHMRInDev: true }` disables client JS
|
|
42
|
+
* in production but preserves Vite HMR in dev mode.
|
|
43
|
+
*
|
|
44
|
+
* When `disabled` is true, `enableHMRInDev` defaults to `true`.
|
|
45
|
+
* Server-side JS still runs — this only affects what is sent to the browser.
|
|
46
|
+
*/
|
|
47
|
+
clientJavascript?: boolean | ClientJavascriptConfig;
|
|
48
|
+
adapter?: unknown;
|
|
49
|
+
cacheHandler?: unknown;
|
|
50
|
+
allowedOrigins?: string[];
|
|
51
|
+
csrf?: boolean;
|
|
52
|
+
limits?: {
|
|
53
|
+
actionBodySize?: string;
|
|
54
|
+
uploadBodySize?: string;
|
|
55
|
+
maxFields?: number;
|
|
56
|
+
};
|
|
57
|
+
pageExtensions?: string[];
|
|
58
|
+
/**
|
|
59
|
+
* Slow request threshold in milliseconds. Requests exceeding this emit
|
|
60
|
+
* a warning via the logger. Set to 0 to disable. Default: 3000.
|
|
61
|
+
*
|
|
62
|
+
* See design/17-logging.md §"slowRequestMs".
|
|
63
|
+
*/
|
|
64
|
+
slowRequestMs?: number;
|
|
65
|
+
/**
|
|
66
|
+
* Render timeout in milliseconds. If an SSR render or RSC stream read
|
|
67
|
+
* does not complete within this duration, the render is aborted and
|
|
68
|
+
* the connection is closed. Protects against hung fetches and Suspense
|
|
69
|
+
* components that never resolve.
|
|
70
|
+
*
|
|
71
|
+
* Set to 0 to disable (not recommended in production).
|
|
72
|
+
* Default: 30000 (30 seconds).
|
|
73
|
+
*
|
|
74
|
+
* See design/02-rendering-pipeline.md §"Streaming Constraints".
|
|
75
|
+
*/
|
|
76
|
+
renderTimeoutMs?: number;
|
|
77
|
+
/**
|
|
78
|
+
* Forward browser console output to the server terminal in dev mode.
|
|
79
|
+
*
|
|
80
|
+
* Sets the minimum log level to forward:
|
|
81
|
+
* - `'error'` — only `console.error`
|
|
82
|
+
* - `'warn'` — `console.error` + `console.warn` (default)
|
|
83
|
+
* - `'info'` — `console.error` + `console.warn` + `console.info`
|
|
84
|
+
* - `'none'` — disabled
|
|
85
|
+
*
|
|
86
|
+
* Does not intercept `console.log` or `console.debug` (too noisy).
|
|
87
|
+
* No effect in production builds.
|
|
88
|
+
*
|
|
89
|
+
* See TIM-513.
|
|
90
|
+
*/
|
|
91
|
+
devBrowserLogs?: 'error' | 'warn' | 'info' | 'none';
|
|
92
|
+
/** Dev-mode options. These have no effect in production builds. */
|
|
93
|
+
dev?: {
|
|
94
|
+
/** Threshold in ms to highlight slow phases in dev logging output. Default: 200. */
|
|
95
|
+
slowPhaseMs?: number;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Control Server-Timing header output.
|
|
99
|
+
*
|
|
100
|
+
* - `'detailed'` — per-phase breakdown (proxy, middleware, render). Useful
|
|
101
|
+
* for APM / network monitoring. Exposes phase names to clients.
|
|
102
|
+
* - `'total'` — single `total;dur=N` entry. Safe to expose, gives
|
|
103
|
+
* browser DevTools useful timing without internal details.
|
|
104
|
+
* - `false` — no Server-Timing header at all.
|
|
105
|
+
*
|
|
106
|
+
* Default: `'detailed'` in dev, `'total'` in production.
|
|
107
|
+
*
|
|
108
|
+
* This is separate from `debug` / `TIMBER_DEBUG` — it's an intentional
|
|
109
|
+
* decision to expose timing data to clients, not a side effect of debug
|
|
110
|
+
* logging.
|
|
111
|
+
*/
|
|
112
|
+
serverTiming?: 'detailed' | 'total' | false;
|
|
113
|
+
/**
|
|
114
|
+
* Override the app directory location. By default, timber auto-detects
|
|
115
|
+
* `app/` at the project root, falling back to `src/app/`.
|
|
116
|
+
*
|
|
117
|
+
* Set this to a relative path from the project root (e.g. `'src/app'`)
|
|
118
|
+
* to use a custom location.
|
|
119
|
+
*/
|
|
120
|
+
appDir?: string;
|
|
121
|
+
/** MDX compilation options passed to @mdx-js/rollup. See design/20-content-collections.md. */
|
|
122
|
+
mdx?: {
|
|
123
|
+
remarkPlugins?: unknown[];
|
|
124
|
+
rehypePlugins?: unknown[];
|
|
125
|
+
recmaPlugins?: unknown[];
|
|
126
|
+
remarkRehypeOptions?: Record<string, unknown>;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Server action bound args encryption configuration.
|
|
130
|
+
*
|
|
131
|
+
* The RSC plugin encrypts closure variables captured by 'use server' functions
|
|
132
|
+
* using AES-256-GCM so they are opaque and tamper-proof in the Flight payload.
|
|
133
|
+
* Encryption is always enabled in production.
|
|
134
|
+
*
|
|
135
|
+
* The encryption key is auto-generated at build time and embedded in the server bundle,
|
|
136
|
+
* so all instances running the same build share the same key automatically.
|
|
137
|
+
* For rolling/blue-green deployments where multiple builds coexist, set
|
|
138
|
+
* `TIMBER_ACTIONS_ENCRYPTION_KEY` env var to share a key across builds.
|
|
139
|
+
*
|
|
140
|
+
* See design/08-forms-and-actions.md §"Security"
|
|
141
|
+
*/
|
|
142
|
+
actionEncryption?: {
|
|
143
|
+
/**
|
|
144
|
+
* Disable encryption in dev mode for easier debugging of bound args.
|
|
145
|
+
* Has no effect in production — encryption is always enabled.
|
|
146
|
+
* Default: false (encryption is on in dev too).
|
|
147
|
+
*/
|
|
148
|
+
disableInDev?: boolean;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Enable the React Compiler (babel-plugin-react-compiler) for automatic
|
|
152
|
+
* memoization of components and hooks at build time.
|
|
153
|
+
*
|
|
154
|
+
* - `true` — enable with default options
|
|
155
|
+
* - `{ compilationMode, target }` — enable with custom options
|
|
156
|
+
* - `compilationMode: 'annotation'` — only compile files with `'use memo'`
|
|
157
|
+
* - `target: '18'` — target React 18 (uses react-compiler-runtime package)
|
|
158
|
+
* - `false` or omitted — disabled (default)
|
|
159
|
+
*
|
|
160
|
+
* Uses `@vitejs/plugin-react`'s built-in `reactCompilerPreset`, which:
|
|
161
|
+
* - Applies Babel only for the compiler pass (OXC handles JSX)
|
|
162
|
+
* - Automatically scopes to client environment only
|
|
163
|
+
* - Uses `react/compiler-runtime` built into React 19
|
|
164
|
+
*
|
|
165
|
+
* Requires `babel-plugin-react-compiler` as a peer dependency.
|
|
166
|
+
*/
|
|
167
|
+
reactCompiler?: boolean | { compilationMode?: string; target?: string };
|
|
168
|
+
/**
|
|
169
|
+
* Auto-generate sitemap.xml from the route tree.
|
|
170
|
+
*
|
|
171
|
+
* When enabled, timber walks the file-system route tree and produces a sitemap
|
|
172
|
+
* for all discoverable pages. Dynamic routes with `generateStaticParams()` are
|
|
173
|
+
* enumerated. Routes protected by `access.ts` are excluded by default.
|
|
174
|
+
*
|
|
175
|
+
* If a user-authored `sitemap.ts` or `sitemap.xml` exists at the app root,
|
|
176
|
+
* auto-generation is disabled — the user takes full control.
|
|
177
|
+
*
|
|
178
|
+
* Supports automatic pagination (sitemap index) for sites with > 50,000 URLs.
|
|
179
|
+
*
|
|
180
|
+
* See design/16-metadata.md §"Auto-generated Sitemap"
|
|
181
|
+
*/
|
|
182
|
+
sitemap?: {
|
|
183
|
+
/** Must be explicitly `true` to enable auto-generation. Default: false. */
|
|
184
|
+
enabled?: boolean;
|
|
185
|
+
/** Base URL for absolute URLs in the sitemap. Required when enabled. e.g., 'https://example.com' */
|
|
186
|
+
baseUrl?: string;
|
|
187
|
+
/** Default `<changefreq>` for all entries. Optional. */
|
|
188
|
+
defaultChangeFrequency?: string;
|
|
189
|
+
/** Default `<priority>` for all entries (0.0–1.0). Optional. */
|
|
190
|
+
defaultPriority?: number;
|
|
191
|
+
/** Include routes protected by `access.ts`. Default: false. */
|
|
192
|
+
includeProtected?: boolean;
|
|
193
|
+
};
|
|
194
|
+
topLoader?: {
|
|
195
|
+
/** Whether the top-loader is enabled. Default: true. */
|
|
196
|
+
enabled?: boolean;
|
|
197
|
+
/** Bar color. Default: '#2299DD'. */
|
|
198
|
+
color?: string;
|
|
199
|
+
/** Bar height in pixels. Default: 3. */
|
|
200
|
+
height?: number;
|
|
201
|
+
/** Show subtle glow/shadow effect. Default: true. */
|
|
202
|
+
shadow?: boolean;
|
|
203
|
+
/** Delay in ms before showing the bar (avoids flash on fast navs). Default: 0. */
|
|
204
|
+
delay?: number;
|
|
205
|
+
/** CSS z-index. Default: 1600. */
|
|
206
|
+
zIndex?: number;
|
|
207
|
+
};
|
|
208
|
+
}
|
package/src/content/index.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* or use this module for the re-exports.
|
|
7
|
-
*
|
|
8
|
-
* Design doc: 20-content-collections.md §"Querying Collections"
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// Re-export defineCollection and defineConfig for convenience.
|
|
12
|
-
// Users can also import these directly from @content-collections/core.
|
|
13
|
-
export { defineCollection, defineConfig } from '@content-collections/core';
|
|
1
|
+
// @timber-js/app/content entry point removed per TIM-722.
|
|
2
|
+
//
|
|
3
|
+
// Import defineCollection and defineConfig directly from @content-collections/core.
|
|
4
|
+
// This file is kept for the content plugin which uses other files in this directory.
|
|
5
|
+
export {};
|
|
@@ -2,36 +2,42 @@
|
|
|
2
2
|
* defineCookie — typed cookie definitions.
|
|
3
3
|
*
|
|
4
4
|
* Bundles name + codec + options into a reusable CookieDefinition<T>
|
|
5
|
-
* with .
|
|
5
|
+
* with async .getCookie(), .setCookie(), .deleteCookie() server methods
|
|
6
|
+
* and a sync .useCookie() client hook.
|
|
7
|
+
*
|
|
8
|
+
* Server methods are async to future-proof the API for v2 features
|
|
9
|
+
* (signed cookies via crypto.subtle, encrypted cookies, external stores).
|
|
6
10
|
*
|
|
7
11
|
* Reuses the SearchParamCodec protocol via fromSchema() bridge.
|
|
8
12
|
* Validation on read returns the codec default (never throws).
|
|
9
13
|
*
|
|
14
|
+
* IMPORTANT: This module must NOT have top-level value imports from either
|
|
15
|
+
* server or client modules. Server methods lazy-import request-context;
|
|
16
|
+
* useCookie() lazy-imports use-cookie. This ensures:
|
|
17
|
+
* - Client bundles don't pull in ALS/server code
|
|
18
|
+
* - RSC bundles don't pull in useSyncExternalStore/client code
|
|
19
|
+
* - Tree-shaking is not required for correctness
|
|
20
|
+
*
|
|
10
21
|
* See design/29-cookies.md §"Typed Cookies with Schema Validation"
|
|
11
22
|
*/
|
|
12
23
|
|
|
13
|
-
import {
|
|
14
|
-
import type {
|
|
15
|
-
import { useCookie as useRawCookie } from '#/client/use-cookie.js';
|
|
16
|
-
import type { ClientCookieOptions } from '#/client/use-cookie.js';
|
|
24
|
+
import type { CookieOptions } from '../server/request-context.js';
|
|
25
|
+
import type { ClientCookieOptions } from '../client/use-cookie.js';
|
|
17
26
|
|
|
18
27
|
// ─── Types ────────────────────────────────────────────────────────────────
|
|
19
28
|
|
|
29
|
+
import type { Codec } from '../codec.js';
|
|
30
|
+
|
|
20
31
|
/**
|
|
21
32
|
* A codec that converts between string cookie values and typed values.
|
|
22
|
-
*
|
|
33
|
+
* Type alias for the shared Codec<T> protocol.
|
|
23
34
|
*/
|
|
24
|
-
export
|
|
25
|
-
parse(value: string | string[] | undefined): T;
|
|
26
|
-
serialize(value: T): string | null;
|
|
27
|
-
}
|
|
35
|
+
export type CookieCodec<T> = Codec<T>;
|
|
28
36
|
|
|
29
37
|
/** Options for defineCookie: codec + CookieOptions merged. */
|
|
30
|
-
export interface DefineCookieOptions<T> extends
|
|
38
|
+
export interface DefineCookieOptions<T> extends CookieOptions {
|
|
31
39
|
/** Codec for parsing/serializing the cookie value. */
|
|
32
40
|
codec: CookieCodec<T>;
|
|
33
|
-
/** Sign the cookie with HMAC-SHA256. */
|
|
34
|
-
signed?: boolean;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
/** A fully typed cookie definition with server and client methods. */
|
|
@@ -44,16 +50,49 @@ export interface CookieDefinition<T> {
|
|
|
44
50
|
readonly codec: CookieCodec<T>;
|
|
45
51
|
|
|
46
52
|
/** Server: read the typed value from the current request. */
|
|
47
|
-
|
|
53
|
+
getCookie(): Promise<T>;
|
|
48
54
|
/** Server: set the typed value on the response. */
|
|
49
|
-
|
|
55
|
+
setCookie(value: T): Promise<void>;
|
|
50
56
|
/** Server: delete the cookie. */
|
|
51
|
-
|
|
57
|
+
deleteCookie(): Promise<void>;
|
|
52
58
|
|
|
53
59
|
/** Client: React hook for reading/writing this cookie. Returns [value, setter, deleter]. */
|
|
54
60
|
useCookie(): [T, (value: T) => void, () => void];
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
// ─── Lazy Module References ───────────────────────────────────────────────
|
|
64
|
+
//
|
|
65
|
+
// These are resolved on first use, not at module load time. This prevents
|
|
66
|
+
// the server module graph from pulling in client code and vice versa.
|
|
67
|
+
// The dynamic import() in server methods is natural (they're async).
|
|
68
|
+
// For useCookie() (sync), we cache the module reference after first load.
|
|
69
|
+
|
|
70
|
+
let _useCookieModule: typeof import('../client/use-cookie.js') | undefined;
|
|
71
|
+
|
|
72
|
+
function getUseCookieModule(): typeof import('../client/use-cookie.js') {
|
|
73
|
+
if (!_useCookieModule) {
|
|
74
|
+
// In the client/SSR environment, this module is already in the module
|
|
75
|
+
// graph (imported by the client entry). The throw is a safeguard —
|
|
76
|
+
// if useCookie() is somehow called before the module is available,
|
|
77
|
+
// the developer gets a clear error instead of a silent failure.
|
|
78
|
+
throw new Error(
|
|
79
|
+
'[timber] defineCookie().useCookie() requires @timber-js/app/client to be loaded. ' +
|
|
80
|
+
'This hook can only be used in client components.'
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return _useCookieModule;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Register the client cookie module. Called by the client entry to wire
|
|
88
|
+
* up the lazy reference without a top-level import.
|
|
89
|
+
*
|
|
90
|
+
* @internal — framework use only
|
|
91
|
+
*/
|
|
92
|
+
export function _registerUseCookieModule(mod: typeof import('../client/use-cookie.js')): void {
|
|
93
|
+
_useCookieModule = mod;
|
|
94
|
+
}
|
|
95
|
+
|
|
57
96
|
// ─── Factory ──────────────────────────────────────────────────────────────
|
|
58
97
|
|
|
59
98
|
/**
|
|
@@ -61,7 +100,7 @@ export interface CookieDefinition<T> {
|
|
|
61
100
|
*
|
|
62
101
|
* ```ts
|
|
63
102
|
* import { defineCookie } from '@timber-js/app/cookies';
|
|
64
|
-
* import { fromSchema } from '@timber-js/app/
|
|
103
|
+
* import { fromSchema } from '@timber-js/app/codec';
|
|
65
104
|
* import { z } from 'zod/v4';
|
|
66
105
|
*
|
|
67
106
|
* export const themeCookie = defineCookie('theme', {
|
|
@@ -69,6 +108,13 @@ export interface CookieDefinition<T> {
|
|
|
69
108
|
* httpOnly: false,
|
|
70
109
|
* maxAge: 60 * 60 * 24 * 365,
|
|
71
110
|
* });
|
|
111
|
+
*
|
|
112
|
+
* // Server
|
|
113
|
+
* const theme = await themeCookie.getCookie();
|
|
114
|
+
* await themeCookie.setCookie('dark');
|
|
115
|
+
*
|
|
116
|
+
* // Client
|
|
117
|
+
* const [theme, setTheme] = themeCookie.useCookie();
|
|
72
118
|
* ```
|
|
73
119
|
*/
|
|
74
120
|
export function defineCookie<T>(
|
|
@@ -83,32 +129,39 @@ export function defineCookie<T>(
|
|
|
83
129
|
options: resolvedOptions,
|
|
84
130
|
codec,
|
|
85
131
|
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
const
|
|
132
|
+
async getCookie(): Promise<T> {
|
|
133
|
+
const { getCookies } = await import('../server/request-context.js');
|
|
134
|
+
const jar = await getCookies();
|
|
135
|
+
const raw = jar.get(name);
|
|
89
136
|
return codec.parse(raw);
|
|
90
137
|
},
|
|
91
138
|
|
|
92
|
-
|
|
139
|
+
async setCookie(value: T): Promise<void> {
|
|
140
|
+
const { getCookies } = await import('../server/request-context.js');
|
|
141
|
+
const jar = await getCookies();
|
|
93
142
|
const serialized = codec.serialize(value);
|
|
94
143
|
if (serialized === null) {
|
|
95
|
-
|
|
144
|
+
jar.delete(name, {
|
|
96
145
|
path: resolvedOptions.path,
|
|
97
146
|
domain: resolvedOptions.domain,
|
|
98
147
|
});
|
|
99
148
|
} else {
|
|
100
|
-
|
|
149
|
+
jar.set(name, serialized, resolvedOptions);
|
|
101
150
|
}
|
|
102
151
|
},
|
|
103
152
|
|
|
104
|
-
|
|
105
|
-
|
|
153
|
+
async deleteCookie(): Promise<void> {
|
|
154
|
+
const { getCookies } = await import('../server/request-context.js');
|
|
155
|
+
const jar = await getCookies();
|
|
156
|
+
jar.delete(name, {
|
|
106
157
|
path: resolvedOptions.path,
|
|
107
158
|
domain: resolvedOptions.domain,
|
|
108
159
|
});
|
|
109
160
|
},
|
|
110
161
|
|
|
111
162
|
useCookie(): [T, (value: T) => void, () => void] {
|
|
163
|
+
const { useCookie: useRawCookie } = getUseCookieModule();
|
|
164
|
+
|
|
112
165
|
// Extract client-safe options (no httpOnly — client cookies can't be httpOnly)
|
|
113
166
|
const clientOpts: ClientCookieOptions = {
|
|
114
167
|
path: resolvedOptions.path,
|
package/src/cookies/index.ts
CHANGED
|
@@ -3,3 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
export { defineCookie } from './define-cookie.js';
|
|
5
5
|
export type { CookieDefinition, CookieCodec, DefineCookieOptions } from './define-cookie.js';
|
|
6
|
+
|
|
7
|
+
// Codec is the canonical home for the Codec type — import from
|
|
8
|
+
// @timber-js/app/codec. Re-export removed per TIM-721.
|
|
9
|
+
|
|
10
|
+
// cookies() is a server-only function (requires AsyncLocalStorage) and is
|
|
11
|
+
// exported from @timber-js/app/server. It is intentionally NOT re-exported
|
|
12
|
+
// here so that client-side code importing defineCookie doesn't pull in
|
|
13
|
+
// server ALS code. See TIM-704.
|
package/src/fonts/css.ts
CHANGED
|
@@ -39,6 +39,7 @@ export function generateFontFaces(descriptors: FontFaceDescriptor[]): string {
|
|
|
39
39
|
* ```css
|
|
40
40
|
* .timber-font-inter {
|
|
41
41
|
* --font-sans: 'Inter', 'Inter Fallback', system-ui, sans-serif;
|
|
42
|
+
* font-family: 'Inter', 'Inter Fallback', system-ui, sans-serif;
|
|
42
43
|
* }
|
|
43
44
|
* ```
|
|
44
45
|
*/
|
|
@@ -47,7 +48,7 @@ export function generateVariableClass(
|
|
|
47
48
|
variable: string,
|
|
48
49
|
fontFamily: string
|
|
49
50
|
): string {
|
|
50
|
-
return `.${className} {\n ${variable}: ${fontFamily};\n}`;
|
|
51
|
+
return `.${className} {\n ${variable}: ${fontFamily};\n font-family: ${fontFamily};\n}`;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
/**
|