@timber-js/app 0.2.0-alpha.7 → 0.2.0-alpha.71
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/{als-registry-B7DbZ2hS.js → als-registry-BJARkOcu.js} +1 -1
- package/dist/_chunks/als-registry-BJARkOcu.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-CGuYoRHU.js +199 -0
- package/dist/_chunks/define-CGuYoRHU.js.map +1 -0
- package/dist/_chunks/define-Dz1bqwaS.js +106 -0
- package/dist/_chunks/define-Dz1bqwaS.js.map +1 -0
- package/dist/_chunks/define-cookie-B5mewxwM.js +93 -0
- package/dist/_chunks/define-cookie-B5mewxwM.js.map +1 -0
- package/dist/_chunks/error-boundary-D9hzsveV.js +216 -0
- package/dist/_chunks/error-boundary-D9hzsveV.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → format-Rn922VH2.js} +3 -20
- package/dist/_chunks/format-Rn922VH2.js.map +1 -0
- package/dist/_chunks/{tracing-Cwn7697K.js → handler-store-BVePM7hp.js} +68 -3
- package/dist/_chunks/handler-store-BVePM7hp.js.map +1 -0
- package/dist/_chunks/{interception-BOoWmLUA.js → interception-CEdHHviP.js} +171 -97
- package/dist/_chunks/interception-CEdHHviP.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-DIkVh_jG.js → request-context-CywiO4jV.js} +181 -69
- package/dist/_chunks/request-context-CywiO4jV.js.map +1 -0
- package/dist/_chunks/schema-bridge-C4SwjCQD.js +86 -0
- package/dist/_chunks/schema-bridge-C4SwjCQD.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-hzuJ048X.js +72 -0
- package/dist/_chunks/segment-context-hzuJ048X.js.map +1 -0
- package/dist/_chunks/stale-reload-BLUC_Pl_.js +64 -0
- package/dist/_chunks/stale-reload-BLUC_Pl_.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-DAhgj8Gx.js} +1 -1
- package/dist/_chunks/use-query-states-DAhgj8Gx.js.map +1 -0
- package/dist/_chunks/wrappers-LZbghvn0.js +63 -0
- package/dist/_chunks/wrappers-LZbghvn0.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.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/fast-hash.d.ts +22 -0
- package/dist/cache/fast-hash.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 +7 -5
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +111 -73
- 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/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- 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 +1 -125
- 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 +6 -5
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +537 -166
- package/dist/client/index.js.map +1 -1
- package/dist/client/link-pending-store.d.ts +78 -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.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-context.d.ts +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-merger.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 +3 -3
- package/dist/client/top-loader.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-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/codec.d.ts +23 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/cookies/define-cookie.d.ts +35 -14
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -0
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +3 -84
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/index.d.ts +154 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12092 -11916
- package/dist/index.js.map +1 -1
- 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 +1 -1
- 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 -6
- 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 +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 +7 -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-warnings.d.ts +0 -14
- 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 +5 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2176 -1663
- package/dist/server/index.js.map +1 -1
- 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 +32 -10
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +30 -3
- 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 +76 -37
- 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 +10 -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 +10 -0
- 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/server/waituntil-bridge.d.ts.map +1 -1
- 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/navigation-client.d.ts +1 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +1 -1
- 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 +37 -17
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare.ts +342 -28
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +58 -9
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -0
- package/src/cache/fast-hash.ts +34 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +9 -5
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/timber-cache.ts +40 -29
- package/src/cli.ts +0 -0
- package/src/client/browser-entry.ts +314 -142
- 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 +13 -4
- package/src/client/link-pending-store.ts +136 -0
- package/src/client/link.tsx +346 -105
- 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 +27 -6
- package/src/client/navigation-root.tsx +346 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router.ts +302 -77
- package/src/client/rsc-fetch.ts +93 -5
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-context.ts +6 -1
- package/src/client/segment-merger.ts +2 -8
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +73 -6
- package/src/client/top-loader.tsx +22 -13
- package/src/client/use-navigation-pending.ts +1 -1
- package/src/client/use-params.ts +7 -5
- package/src/client/use-query-states.ts +2 -2
- package/src/codec.ts +34 -0
- package/src/cookies/define-cookie.ts +72 -21
- package/src/cookies/index.ts +7 -0
- package/src/fonts/css.ts +2 -1
- package/src/index.ts +328 -92
- 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 +55 -9
- package/src/plugins/entries.ts +70 -9
- package/src/plugins/fonts.ts +167 -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 +76 -33
- package/src/plugins/static-build.ts +10 -6
- 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 +13 -19
- package/src/search-params/registry.ts +1 -1
- package/src/search-params/wrappers.ts +85 -0
- package/src/segment-params/define.ts +279 -0
- package/src/segment-params/index.ts +28 -0
- package/src/server/access-gate.tsx +70 -29
- package/src/server/action-client.ts +28 -3
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +20 -3
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +32 -4
- 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-warnings.ts +2 -28
- 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 +277 -117
- package/src/server/index.ts +9 -5
- 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 +195 -51
- package/src/server/primitives.ts +47 -5
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +240 -117
- package/src/server/route-element-builder.ts +284 -197
- 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 +202 -113
- package/src/server/rsc-entry/rsc-payload.ts +100 -21
- package/src/server/rsc-entry/rsc-stream.ts +74 -18
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +173 -40
- 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 +243 -228
- 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 +37 -3
- 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/server/waituntil-bridge.ts +4 -1
- 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/navigation-client.ts +1 -1
- package/src/shims/navigation.ts +2 -1
- 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.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js +0 -88
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-Cwn7697K.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/error-boundary.js.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/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 -53
- package/dist/server/response-cache.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -99
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/transition-root.tsx +0 -160
- 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 -277
package/src/server/ssr-entry.ts
CHANGED
|
@@ -14,17 +14,66 @@
|
|
|
14
14
|
|
|
15
15
|
// @ts-expect-error — virtual module provided by timber-entries plugin
|
|
16
16
|
import config from 'virtual:timber-config';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
createFromReadableStream,
|
|
19
|
+
createFromNodeStream,
|
|
20
|
+
hasNodeStreamDecode,
|
|
21
|
+
} from '../rsc-runtime/ssr.js';
|
|
18
22
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
19
23
|
|
|
20
|
-
import {
|
|
21
|
-
|
|
24
|
+
import {
|
|
25
|
+
renderSsrStream,
|
|
26
|
+
renderSsrNodeStream,
|
|
27
|
+
nodeReadableToWeb,
|
|
28
|
+
useNodeStreams,
|
|
29
|
+
buildSsrResponse,
|
|
30
|
+
} from './ssr-render.js';
|
|
31
|
+
import { logRenderError } from './logger.js';
|
|
22
32
|
import { SsrStreamError } from './primitives.js';
|
|
23
|
-
import { injectHead, injectRscPayload } from './html-injectors.js';
|
|
24
|
-
import {
|
|
33
|
+
import { createBufferedTransformStream, injectHead, injectRscPayload } from './html-injectors.js';
|
|
34
|
+
import { wrapSsrElement } from './ssr-wrappers.js';
|
|
25
35
|
import { withSpan } from './tracing.js';
|
|
26
|
-
import { setCurrentParams } from '
|
|
27
|
-
import { registerSsrDataProvider, type SsrData } from '
|
|
36
|
+
import { setCurrentParams } from '../client/use-params.js';
|
|
37
|
+
import { registerSsrDataProvider, type SsrData } from '../client/ssr-data.js';
|
|
38
|
+
|
|
39
|
+
// Pre-import Node.js stream modules at module load time — not per-request.
|
|
40
|
+
// Dynamic imports of node-stream-transforms and node:stream/promises were
|
|
41
|
+
// costing 3-17ms per request due to module resolution overhead.
|
|
42
|
+
let _nodeStreamImports: {
|
|
43
|
+
createNodeBufferedTransform: typeof import('./node-stream-transforms.js').createNodeBufferedTransform;
|
|
44
|
+
createNodeHeadInjector: typeof import('./node-stream-transforms.js').createNodeHeadInjector;
|
|
45
|
+
createNodeMoveSuffixTransform: typeof import('./node-stream-transforms.js').createNodeMoveSuffixTransform;
|
|
46
|
+
createNodeFlightInjector: typeof import('./node-stream-transforms.js').createNodeFlightInjector;
|
|
47
|
+
createNodeErrorHandler: typeof import('./node-stream-transforms.js').createNodeErrorHandler;
|
|
48
|
+
pipeline: typeof import('node:stream/promises').pipeline;
|
|
49
|
+
PassThrough: typeof import('node:stream').PassThrough;
|
|
50
|
+
ReadableFromWeb: (
|
|
51
|
+
webStream: import('stream/web').ReadableStream
|
|
52
|
+
) => import('node:stream').Readable;
|
|
53
|
+
} | null = null;
|
|
54
|
+
|
|
55
|
+
if (useNodeStreams) {
|
|
56
|
+
try {
|
|
57
|
+
const [transforms, streamPromises, stream] = await Promise.all([
|
|
58
|
+
import('./node-stream-transforms.js'),
|
|
59
|
+
import('node:stream/promises'),
|
|
60
|
+
import('node:stream'),
|
|
61
|
+
]);
|
|
62
|
+
_nodeStreamImports = {
|
|
63
|
+
createNodeBufferedTransform: transforms.createNodeBufferedTransform,
|
|
64
|
+
createNodeHeadInjector: transforms.createNodeHeadInjector,
|
|
65
|
+
createNodeMoveSuffixTransform: transforms.createNodeMoveSuffixTransform,
|
|
66
|
+
createNodeFlightInjector: transforms.createNodeFlightInjector,
|
|
67
|
+
createNodeErrorHandler: transforms.createNodeErrorHandler,
|
|
68
|
+
pipeline: streamPromises.pipeline,
|
|
69
|
+
PassThrough: stream.PassThrough,
|
|
70
|
+
ReadableFromWeb: (webStream: import('stream/web').ReadableStream) =>
|
|
71
|
+
stream.Readable.fromWeb(webStream) as import('node:stream').Readable,
|
|
72
|
+
};
|
|
73
|
+
} catch {
|
|
74
|
+
// Fall back to Web Streams path
|
|
75
|
+
}
|
|
76
|
+
}
|
|
28
77
|
|
|
29
78
|
// ─── SSR Data ALS ─────────────────────────────────────────────────────────
|
|
30
79
|
//
|
|
@@ -81,6 +130,29 @@ export interface NavContext {
|
|
|
81
130
|
* to a page-level deny. See LOCAL-298.
|
|
82
131
|
*/
|
|
83
132
|
_denyHandledByBoundary?: boolean;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Mutable: SSR timing data populated by handleSsr().
|
|
136
|
+
* Read by the RSC entry to record sub-phase Server-Timing entries
|
|
137
|
+
* when `serverTiming: 'detailed'` is configured.
|
|
138
|
+
*
|
|
139
|
+
* This bridges the RSC→SSR environment boundary: the SSR entry populates
|
|
140
|
+
* these fields, the RSC entry reads them after callSsr() returns.
|
|
141
|
+
*/
|
|
142
|
+
_ssrTimings?: {
|
|
143
|
+
/** Time to decode RSC stream (createFromReadableStream/createFromNodeStream) */
|
|
144
|
+
decodeMs: number;
|
|
145
|
+
/** Time for Fizz to render the shell (onShellReady) */
|
|
146
|
+
shellMs: number;
|
|
147
|
+
/** Time for pipe() to flush shell bytes to the output stream */
|
|
148
|
+
pipeMs: number;
|
|
149
|
+
/** Time to set up Node.js Transform pipeline / Web Stream transforms */
|
|
150
|
+
pipelineMs: number;
|
|
151
|
+
/** Total SSR time (decode → response ready) */
|
|
152
|
+
totalMs: number;
|
|
153
|
+
/** Whether the Node.js native stream path was used */
|
|
154
|
+
nodeStreams: boolean;
|
|
155
|
+
};
|
|
84
156
|
}
|
|
85
157
|
|
|
86
158
|
/**
|
|
@@ -127,7 +199,7 @@ export async function handleSsr(
|
|
|
127
199
|
// Client hooks read from getSsrData() which delegates to this
|
|
128
200
|
// ALS store via the registered provider.
|
|
129
201
|
return ssrDataAls.run(ssrData, async () => {
|
|
130
|
-
// Also set the module-level currentParams for
|
|
202
|
+
// Also set the module-level currentParams for useSegmentParams().
|
|
131
203
|
// useParams reads from getSsrData() during SSR (ALS-backed),
|
|
132
204
|
// but setCurrentParams is kept for the client-side path where
|
|
133
205
|
// the segment router updates params on navigation.
|
|
@@ -137,47 +209,154 @@ export async function handleSsr(
|
|
|
137
209
|
// createFromReadableStream resolves client component references
|
|
138
210
|
// (from "use client" modules) using the SSR environment's module
|
|
139
211
|
// map, importing the actual components for server-side rendering.
|
|
140
|
-
const
|
|
212
|
+
const _ssrStart = performance.now();
|
|
213
|
+
|
|
214
|
+
// Decode the RSC stream into a React element tree.
|
|
215
|
+
// On Node.js: convert Web ReadableStream → Node Readable → createFromNodeStream
|
|
216
|
+
// (eliminates Promise-per-chunk overhead from Web Streams reader)
|
|
217
|
+
// On Workers: createFromReadableStream (Web Streams are V8-native C++ there)
|
|
218
|
+
let element: React.ReactNode;
|
|
219
|
+
if (hasNodeStreamDecode && _nodeStreamImports) {
|
|
220
|
+
const nodeRscStream = _nodeStreamImports.ReadableFromWeb(
|
|
221
|
+
rscStream as import('stream/web').ReadableStream
|
|
222
|
+
);
|
|
223
|
+
element = createFromNodeStream(nodeRscStream) as React.ReactNode;
|
|
224
|
+
} else {
|
|
225
|
+
element = createFromReadableStream(rscStream) as React.ReactNode;
|
|
226
|
+
}
|
|
227
|
+
const _decodeEnd = performance.now();
|
|
141
228
|
|
|
142
|
-
// Wrap with
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
const
|
|
229
|
+
// Wrap with the same component tree structure as the client hydration
|
|
230
|
+
// tree (NavigationRoot → PendingNavigationProvider → TopLoader →
|
|
231
|
+
// TimberNuqsAdapter → NuqsAdapterProvider → NavigationProvider).
|
|
232
|
+
// This ensures useId() produces matching IDs on both sides, preventing
|
|
233
|
+
// hydration mismatches in libraries like Radix UI. See TIM-532.
|
|
234
|
+
const hasTopLoader = _runtimeConfig.topLoader?.enabled !== false;
|
|
235
|
+
const wrappedElement = wrapSsrElement(element, navContext.searchParams, hasTopLoader);
|
|
148
236
|
|
|
149
237
|
// Render to HTML stream (waits for onShellReady).
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
238
|
+
//
|
|
239
|
+
// Two paths based on platform:
|
|
240
|
+
// - Node.js: renderToPipeableStream → Node Transform pipeline → Readable.toWeb() → Response
|
|
241
|
+
// Entire pipeline stays in C++ native streams until the Response boundary.
|
|
242
|
+
// - Workers: renderToReadableStream → Web TransformStream pipeline → Response
|
|
243
|
+
// Web Streams are V8-native C++ built-ins on Workers.
|
|
244
|
+
if (_nodeStreamImports) {
|
|
245
|
+
// Node.js fast path: full pipeline in native streams
|
|
246
|
+
const {
|
|
247
|
+
createNodeBufferedTransform,
|
|
248
|
+
createNodeHeadInjector,
|
|
249
|
+
createNodeMoveSuffixTransform,
|
|
250
|
+
createNodeFlightInjector,
|
|
251
|
+
createNodeErrorHandler,
|
|
252
|
+
pipeline,
|
|
253
|
+
PassThrough,
|
|
254
|
+
} = _nodeStreamImports;
|
|
255
|
+
|
|
256
|
+
const renderTimeoutMs = _runtimeConfig.renderTimeoutMs ?? undefined;
|
|
257
|
+
|
|
258
|
+
let nodeHtmlStream: import('node:stream').Readable;
|
|
259
|
+
try {
|
|
260
|
+
nodeHtmlStream = await renderSsrNodeStream(wrappedElement, {
|
|
261
|
+
bootstrapScriptContent: navContext.bootstrapScriptContent || undefined,
|
|
262
|
+
deferSuspenseFor: navContext.deferSuspenseFor,
|
|
263
|
+
signal: navContext.signal,
|
|
264
|
+
renderTimeoutMs,
|
|
265
|
+
});
|
|
266
|
+
} catch (renderError) {
|
|
267
|
+
logRenderError({ method: '', path: '', error: renderError });
|
|
268
|
+
throw new SsrStreamError(
|
|
269
|
+
'SSR renderToReadableStream failed due to RSC stream error',
|
|
270
|
+
renderError
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
const _renderEnd = performance.now();
|
|
274
|
+
|
|
275
|
+
// React 19.3+ emits <!DOCTYPE html> automatically when the root
|
|
276
|
+
// element is <html>, so no framework-level doctype prepend needed.
|
|
277
|
+
//
|
|
278
|
+
// Pipeline: buffer → errorHandler → headInjector → flightInjector → moveSuffix → output
|
|
279
|
+
//
|
|
280
|
+
// 1. buffer: coalesces Fizz micro-chunks into coherent fragments (TIM-528)
|
|
281
|
+
// 2. errorHandler: catches post-shell streaming errors
|
|
282
|
+
// 3. headInjector: injects metadata before </head>
|
|
283
|
+
// 4. flightInjector: interleaves RSC scripts between HTML chunks (TIM-529)
|
|
284
|
+
// 5. moveSuffix: strips </body></html>, re-emits at end (TIM-530)
|
|
285
|
+
const bufferedTransform = createNodeBufferedTransform();
|
|
286
|
+
const errorHandler = createNodeErrorHandler(navContext.signal);
|
|
287
|
+
const headInjector = createNodeHeadInjector(navContext.headHtml);
|
|
288
|
+
const flightInjector = createNodeFlightInjector(navContext.rscStream, {
|
|
289
|
+
renderTimeoutMs,
|
|
290
|
+
});
|
|
291
|
+
const moveSuffix = createNodeMoveSuffixTransform();
|
|
292
|
+
|
|
293
|
+
const output = new PassThrough();
|
|
294
|
+
pipeline(
|
|
295
|
+
nodeHtmlStream,
|
|
296
|
+
bufferedTransform,
|
|
297
|
+
errorHandler,
|
|
298
|
+
headInjector,
|
|
299
|
+
flightInjector,
|
|
300
|
+
moveSuffix,
|
|
301
|
+
output
|
|
302
|
+
).catch(() => {
|
|
303
|
+
// Pipeline errors are handled by errorHandler transform
|
|
304
|
+
});
|
|
305
|
+
const _pipelineEnd = performance.now();
|
|
306
|
+
|
|
307
|
+
// Record SSR sub-timings for Server-Timing header (detailed mode).
|
|
308
|
+
navContext._ssrTimings = {
|
|
309
|
+
decodeMs: Math.round(_decodeEnd - _ssrStart),
|
|
310
|
+
shellMs: Math.round(_renderEnd - _decodeEnd),
|
|
311
|
+
pipeMs: 0, // pipe() timing is inside renderSsrNodeStream
|
|
312
|
+
pipelineMs: Math.round(_pipelineEnd - _renderEnd),
|
|
313
|
+
totalMs: Math.round(_pipelineEnd - _ssrStart),
|
|
314
|
+
nodeStreams: true,
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
const webStream = nodeReadableToWeb(output);
|
|
318
|
+
return buildSsrResponse(webStream, navContext.statusCode, navContext.responseHeaders);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Web Streams path (CF Workers / fallback)
|
|
322
|
+
const renderTimeoutMs = _runtimeConfig.renderTimeoutMs ?? undefined;
|
|
154
323
|
let htmlStream: ReadableStream<Uint8Array>;
|
|
155
324
|
try {
|
|
156
325
|
htmlStream = await renderSsrStream(wrappedElement, {
|
|
157
326
|
bootstrapScriptContent: navContext.bootstrapScriptContent || undefined,
|
|
158
327
|
deferSuspenseFor: navContext.deferSuspenseFor,
|
|
159
328
|
signal: navContext.signal,
|
|
329
|
+
renderTimeoutMs,
|
|
160
330
|
});
|
|
161
331
|
} catch (renderError) {
|
|
162
|
-
|
|
163
|
-
// that wasn't caught by any error boundary in the decoded tree.
|
|
164
|
-
// Wrap in SsrStreamError so the RSC entry can handle it without
|
|
165
|
-
// re-executing server components via renderDenyPage.
|
|
166
|
-
// See LOCAL-293.
|
|
167
|
-
console.error(
|
|
168
|
-
'[timber] SSR shell failed from RSC stream error:',
|
|
169
|
-
formatSsrError(renderError)
|
|
170
|
-
);
|
|
332
|
+
logRenderError({ method: '', path: '', error: renderError });
|
|
171
333
|
throw new SsrStreamError(
|
|
172
334
|
'SSR renderToReadableStream failed due to RSC stream error',
|
|
173
335
|
renderError
|
|
174
336
|
);
|
|
175
337
|
}
|
|
176
338
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
339
|
+
const _renderEnd = performance.now();
|
|
340
|
+
|
|
341
|
+
// Pipeline: buffer → injectHead → injectRscPayload
|
|
342
|
+
//
|
|
343
|
+
// The buffered transform coalesces Fizz micro-chunks into coherent
|
|
344
|
+
// HTML fragments so downstream transforms never see chunk boundaries
|
|
345
|
+
// mid-tag. This prevents RSC script injection from breaking HTML
|
|
346
|
+
// structure (TIM-527).
|
|
347
|
+
let outputStream = htmlStream.pipeThrough(createBufferedTransformStream());
|
|
348
|
+
outputStream = injectHead(outputStream, navContext.headHtml);
|
|
349
|
+
outputStream = injectRscPayload(outputStream, navContext.rscStream, renderTimeoutMs);
|
|
350
|
+
const _pipelineEnd = performance.now();
|
|
351
|
+
|
|
352
|
+
navContext._ssrTimings = {
|
|
353
|
+
decodeMs: Math.round(_decodeEnd - _ssrStart),
|
|
354
|
+
shellMs: Math.round(_renderEnd - _decodeEnd),
|
|
355
|
+
pipeMs: 0,
|
|
356
|
+
pipelineMs: Math.round(_pipelineEnd - _renderEnd),
|
|
357
|
+
totalMs: Math.round(_pipelineEnd - _ssrStart),
|
|
358
|
+
nodeStreams: false,
|
|
359
|
+
};
|
|
181
360
|
|
|
182
361
|
// Build and return the Response.
|
|
183
362
|
return buildSsrResponse(outputStream, navContext.statusCode, navContext.responseHeaders);
|