@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
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev holding server — serves a loading page while Vite initializes.
|
|
3
|
+
*
|
|
4
|
+
* When `timber dev` (or `vite dev`) starts, Vite takes several seconds
|
|
5
|
+
* to initialize all plugins, scan routes, and boot the RSC environment.
|
|
6
|
+
* During this window, the port is unbound and browsers get
|
|
7
|
+
* ERR_CONNECTION_REFUSED.
|
|
8
|
+
*
|
|
9
|
+
* This module creates a lightweight HTTP server that binds the port
|
|
10
|
+
* immediately and serves a branded holding page with auto-refresh.
|
|
11
|
+
* Once Vite is ready, the holding server is closed and Vite's server
|
|
12
|
+
* takes over the port.
|
|
13
|
+
*
|
|
14
|
+
* The holding server is started in rootSync's config() hook (the
|
|
15
|
+
* earliest Vite plugin lifecycle point where we know the port) and
|
|
16
|
+
* closed in timber-dev-server's configureServer() hook (the last
|
|
17
|
+
* plugin, right before Vite calls server.listen()).
|
|
18
|
+
*
|
|
19
|
+
* Browser requests (Accept: text/html) get the HTML holding page.
|
|
20
|
+
* API requests (Accept: application/json) get a 503 JSON response.
|
|
21
|
+
* All responses include Retry-After: 1.
|
|
22
|
+
*
|
|
23
|
+
* See design/21-dev-server.md, TIM-665.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import http from 'node:http';
|
|
27
|
+
|
|
28
|
+
// ─── Types ────────────────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
export interface HoldingServer {
|
|
31
|
+
/**
|
|
32
|
+
* Start listening on the given port.
|
|
33
|
+
* Returns the actual bound port (useful when port is 0 for OS assignment).
|
|
34
|
+
*/
|
|
35
|
+
listen(port: number): Promise<number>;
|
|
36
|
+
|
|
37
|
+
/** Gracefully close the server and stop accepting connections. */
|
|
38
|
+
close(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ─── Holding Page HTML ────────────────────────────────────────────────────
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Minimal self-contained HTML holding page.
|
|
45
|
+
*
|
|
46
|
+
* Matches the timber.js docs site theme:
|
|
47
|
+
* - Light mode: warm stone/grain background, timber/bark text
|
|
48
|
+
* - Dark mode: stone-900 background, stone-200 text
|
|
49
|
+
* - 🪵 timber.js branding
|
|
50
|
+
*
|
|
51
|
+
* Uses meta-refresh (1s) for auto-reload — works without JavaScript.
|
|
52
|
+
* Inline CSS only, no external dependencies.
|
|
53
|
+
*/
|
|
54
|
+
const HOLDING_PAGE_HTML = [
|
|
55
|
+
'<!DOCTYPE html>',
|
|
56
|
+
'<html lang="en">',
|
|
57
|
+
'<head>',
|
|
58
|
+
' <meta charset="utf-8">',
|
|
59
|
+
' <meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
60
|
+
' <meta http-equiv="refresh" content="2">',
|
|
61
|
+
' <title>timber — starting...</title>',
|
|
62
|
+
' <style>',
|
|
63
|
+
' *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }',
|
|
64
|
+
' body {',
|
|
65
|
+
' font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;',
|
|
66
|
+
' background: #fafaf9;',
|
|
67
|
+
' color: #44403c;',
|
|
68
|
+
' display: flex;',
|
|
69
|
+
' align-items: center;',
|
|
70
|
+
' justify-content: center;',
|
|
71
|
+
' min-height: 100vh;',
|
|
72
|
+
' -webkit-font-smoothing: antialiased;',
|
|
73
|
+
' }',
|
|
74
|
+
' @media (prefers-color-scheme: dark) {',
|
|
75
|
+
' body { background: #1c1917; color: #e7e5e4; }',
|
|
76
|
+
' .message { color: #a8a29e; }',
|
|
77
|
+
' .spinner { border-color: #57534e; border-top-color: #a1887f; }',
|
|
78
|
+
' .logo { color: #e7e5e4; }',
|
|
79
|
+
' }',
|
|
80
|
+
' .container { text-align: center; padding: 2rem; }',
|
|
81
|
+
' .logo {',
|
|
82
|
+
' font-size: 1.5rem;',
|
|
83
|
+
' font-weight: 700;',
|
|
84
|
+
' letter-spacing: -0.02em;',
|
|
85
|
+
' color: #5c3d2e;',
|
|
86
|
+
' margin-bottom: 1.5rem;',
|
|
87
|
+
' }',
|
|
88
|
+
' .message {',
|
|
89
|
+
' font-size: 0.95rem;',
|
|
90
|
+
' color: #78716c;',
|
|
91
|
+
' margin-bottom: 2rem;',
|
|
92
|
+
' }',
|
|
93
|
+
' .spinner {',
|
|
94
|
+
' width: 24px;',
|
|
95
|
+
' height: 24px;',
|
|
96
|
+
' border: 2.5px solid #d7ccc8;',
|
|
97
|
+
' border-top-color: #6d4c41;',
|
|
98
|
+
' border-radius: 50%;',
|
|
99
|
+
' animation: spin 0.8s linear infinite;',
|
|
100
|
+
' margin: 0 auto;',
|
|
101
|
+
' }',
|
|
102
|
+
' @keyframes spin { to { transform: rotate(360deg); } }',
|
|
103
|
+
' </style>',
|
|
104
|
+
'</head>',
|
|
105
|
+
'<body>',
|
|
106
|
+
' <div class="container">',
|
|
107
|
+
' <div class="logo">\u{1FAB5} timber.js</div>',
|
|
108
|
+
' <p class="message">Dev server starting…</p>',
|
|
109
|
+
' <div class="spinner"></div>',
|
|
110
|
+
' </div>',
|
|
111
|
+
'</body>',
|
|
112
|
+
'</html>',
|
|
113
|
+
].join('\n');
|
|
114
|
+
|
|
115
|
+
// ─── Factory ──────────────────────────────────────────────────────────────
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Create a holding HTTP server that serves a loading page during startup.
|
|
119
|
+
*
|
|
120
|
+
* Usage (inside Vite plugin):
|
|
121
|
+
* ```ts
|
|
122
|
+
* // In config() hook — earliest point where port is known.
|
|
123
|
+
* // Use bindWithBump() to honor the default-3000 + auto-bump policy
|
|
124
|
+
* // (see ../server/port-resolution.ts and TIM-842).
|
|
125
|
+
* const holding = createHoldingServer();
|
|
126
|
+
* await bindWithBump((p) => holding.listen(p), { startPort: 3000, autoBump: true });
|
|
127
|
+
*
|
|
128
|
+
* // In last plugin's configureServer() — wrap listen for seamless handoff
|
|
129
|
+
* const originalListen = server.listen.bind(server);
|
|
130
|
+
* server.listen = async (...args) => {
|
|
131
|
+
* await holding.close();
|
|
132
|
+
* return originalListen(...args);
|
|
133
|
+
* };
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export function createHoldingServer(): HoldingServer {
|
|
137
|
+
const server = http.createServer((req, res) => {
|
|
138
|
+
const accept = req.headers.accept ?? '';
|
|
139
|
+
|
|
140
|
+
// API requests: JSON 503
|
|
141
|
+
if (accept.includes('application/json') && !accept.includes('text/html')) {
|
|
142
|
+
res.writeHead(503, {
|
|
143
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
144
|
+
'Retry-After': '1',
|
|
145
|
+
'Cache-Control': 'no-store',
|
|
146
|
+
});
|
|
147
|
+
res.end(
|
|
148
|
+
JSON.stringify({
|
|
149
|
+
error: 'Service Unavailable',
|
|
150
|
+
message: 'timber dev server is starting — please retry shortly',
|
|
151
|
+
})
|
|
152
|
+
);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Browser and other requests: HTML holding page
|
|
157
|
+
res.writeHead(503, {
|
|
158
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
159
|
+
'Retry-After': '1',
|
|
160
|
+
'Cache-Control': 'no-store',
|
|
161
|
+
});
|
|
162
|
+
res.end(HOLDING_PAGE_HTML);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
listen(port: number): Promise<number> {
|
|
167
|
+
return new Promise((resolve, reject) => {
|
|
168
|
+
server.once('error', reject);
|
|
169
|
+
server.listen(port, () => {
|
|
170
|
+
server.removeListener('error', reject);
|
|
171
|
+
const addr = server.address();
|
|
172
|
+
const boundPort = typeof addr === 'object' && addr ? addr.port : port;
|
|
173
|
+
resolve(boundPort);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
close(): Promise<void> {
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
server.close((err) => {
|
|
181
|
+
if (err) reject(err);
|
|
182
|
+
else resolve();
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hydration mismatch diff overlay — dev-only.
|
|
3
|
+
*
|
|
4
|
+
* Parses React 19's structured diff from hydration error messages and
|
|
5
|
+
* renders a color-coded + Client / - Server diff in a dismissible overlay.
|
|
6
|
+
*
|
|
7
|
+
* See design/21-dev-server.md §"Error Overlay"
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const REACT_HYDRATION_LINK = 'https://react.dev/link/hydration-mismatch';
|
|
11
|
+
|
|
12
|
+
const HYDRATION_PATTERNS = [
|
|
13
|
+
/^In HTML, (.+?) cannot be a child of <(.+?)>\./,
|
|
14
|
+
/^In HTML, (.+?) cannot be a descendant of <(.+?)>\./,
|
|
15
|
+
/^In HTML, text nodes cannot be a child of <(.+?)>\./,
|
|
16
|
+
/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\./,
|
|
17
|
+
/Hydration failed because the server rendered (text|HTML) didn't match the client\./,
|
|
18
|
+
/A tree hydrated but some attributes of the server rendered HTML didn't match the client properties/,
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export function isHydrationError(error: unknown): boolean {
|
|
22
|
+
if (!error || typeof error !== 'object') return false;
|
|
23
|
+
const msg = (error as { message?: string }).message;
|
|
24
|
+
if (typeof msg !== 'string') return false;
|
|
25
|
+
return HYDRATION_PATTERNS.some((re) => re.test(msg));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface ParsedHydrationError {
|
|
29
|
+
message: string;
|
|
30
|
+
diff: string | null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function parseHydrationError(msg: string): ParsedHydrationError {
|
|
34
|
+
const hasComponentStackDiff = [
|
|
35
|
+
/^In HTML, (.+?) cannot be a child of <(.+?)>\.(.*)\nThis will cause a hydration error\.(.*)/,
|
|
36
|
+
/^In HTML, (.+?) cannot be a descendant of <(.+?)>\.\nThis will cause a hydration error\.(.*)/,
|
|
37
|
+
/^In HTML, text nodes cannot be a child of <(.+?)>\.\nThis will cause a hydration error\./,
|
|
38
|
+
/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\./,
|
|
39
|
+
].some((re) => re.test(msg));
|
|
40
|
+
|
|
41
|
+
if (hasComponentStackDiff) {
|
|
42
|
+
const [message, diffLog = ''] = msg.split('\n\n');
|
|
43
|
+
const diff = diffLog.trim();
|
|
44
|
+
return { message: message.trim(), diff: diff || null };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const [before, after] = msg.split(REACT_HYDRATION_LINK);
|
|
48
|
+
if (after !== undefined && after.length > 1) {
|
|
49
|
+
const lines: string[] = [];
|
|
50
|
+
for (const line of after.split('\n')) {
|
|
51
|
+
const trimmed = line.trim();
|
|
52
|
+
if (trimmed === '' || trimmed.startsWith('at ')) continue;
|
|
53
|
+
lines.push(line);
|
|
54
|
+
}
|
|
55
|
+
return { message: before.trim(), diff: lines.join('\n') || null };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { message: msg.trim(), diff: null };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let overlayEl: HTMLDivElement | null = null;
|
|
62
|
+
let errors: ParsedHydrationError[] = [];
|
|
63
|
+
|
|
64
|
+
function escapeHtml(s: string): string {
|
|
65
|
+
return s
|
|
66
|
+
.replace(/&/g, '&')
|
|
67
|
+
.replace(/</g, '<')
|
|
68
|
+
.replace(/>/g, '>')
|
|
69
|
+
.replace(/"/g, '"');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function renderDiffHtml(diff: string): string {
|
|
73
|
+
return diff
|
|
74
|
+
.split('\n')
|
|
75
|
+
.map((line) => {
|
|
76
|
+
const trimmed = line.trimStart();
|
|
77
|
+
if (trimmed.startsWith('+')) {
|
|
78
|
+
return `<span style="color:#4ade80;display:block">${escapeHtml(line)}</span>`;
|
|
79
|
+
}
|
|
80
|
+
if (trimmed.startsWith('-')) {
|
|
81
|
+
return `<span style="color:#f87171;display:block">${escapeHtml(line)}</span>`;
|
|
82
|
+
}
|
|
83
|
+
return `<span style="color:#a1a1aa;display:block">${escapeHtml(line)}</span>`;
|
|
84
|
+
})
|
|
85
|
+
.join('');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function render(): void {
|
|
89
|
+
if (errors.length === 0) {
|
|
90
|
+
if (overlayEl) {
|
|
91
|
+
overlayEl.remove();
|
|
92
|
+
overlayEl = null;
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!overlayEl) {
|
|
98
|
+
overlayEl = document.createElement('div');
|
|
99
|
+
overlayEl.setAttribute('data-timber-hydration-overlay', '');
|
|
100
|
+
document.body.appendChild(overlayEl);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const count = errors.length;
|
|
104
|
+
const errorsHtml = errors
|
|
105
|
+
.map(
|
|
106
|
+
(err, i) => `
|
|
107
|
+
<div style="margin-bottom:${i < count - 1 ? '16px' : '0'};padding-bottom:${i < count - 1 ? '16px' : '0'};border-bottom:${i < count - 1 ? '1px solid #333' : 'none'}">
|
|
108
|
+
<div style="color:#fbbf24;font-weight:600;margin-bottom:8px">${escapeHtml(err.message)}</div>
|
|
109
|
+
${
|
|
110
|
+
err.diff
|
|
111
|
+
? `<div style="margin-top:8px">
|
|
112
|
+
<div style="display:flex;gap:16px;margin-bottom:6px;font-size:11px">
|
|
113
|
+
<span><span style="color:#4ade80">+</span> Client</span>
|
|
114
|
+
<span><span style="color:#f87171">-</span> Server</span>
|
|
115
|
+
</div>
|
|
116
|
+
<pre style="margin:0;padding:10px;background:#1a1a1a;border-radius:4px;overflow-x:auto;font-size:12px;line-height:1.5">${renderDiffHtml(err.diff)}</pre>
|
|
117
|
+
</div>`
|
|
118
|
+
: ''
|
|
119
|
+
}
|
|
120
|
+
</div>`
|
|
121
|
+
)
|
|
122
|
+
.join('');
|
|
123
|
+
|
|
124
|
+
overlayEl.innerHTML = `
|
|
125
|
+
<div style="position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:2147483646;display:flex;align-items:center;justify-content:center;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif" data-timber-hydration-backdrop>
|
|
126
|
+
<div style="background:#18181b;color:#e4e4e7;border:1px solid #333;border-radius:8px;max-width:720px;width:90vw;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 8px 32px rgba(0,0,0,0.5)">
|
|
127
|
+
<div style="display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333">
|
|
128
|
+
<div style="display:flex;align-items:center;gap:8px">
|
|
129
|
+
<span style="background:#dc2626;color:#fff;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase">Hydration Mismatch</span>
|
|
130
|
+
${count > 1 ? `<span style="color:#71717a;font-size:12px">${count} errors</span>` : ''}
|
|
131
|
+
</div>
|
|
132
|
+
<button data-timber-hydration-close style="background:none;border:1px solid #333;color:#a1a1aa;cursor:pointer;padding:4px 10px;border-radius:4px;font-size:12px;line-height:1">Dismiss</button>
|
|
133
|
+
</div>
|
|
134
|
+
<div style="padding:16px;overflow-y:auto;font-size:13px;line-height:1.6">
|
|
135
|
+
${errorsHtml}
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>`;
|
|
139
|
+
|
|
140
|
+
overlayEl.querySelector('[data-timber-hydration-close]')?.addEventListener('click', dismiss);
|
|
141
|
+
overlayEl.querySelector('[data-timber-hydration-backdrop]')?.addEventListener('click', (e) => {
|
|
142
|
+
if ((e.target as HTMLElement).hasAttribute('data-timber-hydration-backdrop')) dismiss();
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function dismiss(): void {
|
|
147
|
+
errors = [];
|
|
148
|
+
render();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function showHydrationError(error: unknown): void {
|
|
152
|
+
if (!error || typeof error !== 'object') return;
|
|
153
|
+
const msg = (error as { message?: string }).message;
|
|
154
|
+
if (typeof msg !== 'string') return;
|
|
155
|
+
const parsed = parseHydrationError(msg);
|
|
156
|
+
errors.push(parsed);
|
|
157
|
+
render();
|
|
158
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev tools barrel — re-exports all dev-only modules.
|
|
3
|
+
*
|
|
4
|
+
* Organized by concern, not by Vite plugin vs server module:
|
|
5
|
+
* - stack-classifier: frame classification for error display
|
|
6
|
+
* - overlay: Vite browser error overlay integration
|
|
7
|
+
* - error-page: self-contained HTML 500 page
|
|
8
|
+
* - 404-page: self-contained HTML 404 page
|
|
9
|
+
* - terminal: boxed terminal error output
|
|
10
|
+
* - logger: structured request tree logger
|
|
11
|
+
* - browser-logs: forward browser console to server
|
|
12
|
+
* - logs: forward server console to browser
|
|
13
|
+
* - holding-server: startup holding server
|
|
14
|
+
* - instrumentation: fetch tracing + OTEL span processor
|
|
15
|
+
*
|
|
16
|
+
* Dev-only: all modules in this subtree are only active during `vite dev`.
|
|
17
|
+
* They are never included in production builds.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// Stack trace classification
|
|
21
|
+
export {
|
|
22
|
+
classifyFrame,
|
|
23
|
+
classifyStack,
|
|
24
|
+
type FrameType,
|
|
25
|
+
type ClassifiedFrame,
|
|
26
|
+
} from './stack-classifier.js';
|
|
27
|
+
|
|
28
|
+
// Error overlay (Vite integration)
|
|
29
|
+
export {
|
|
30
|
+
sendErrorToOverlay,
|
|
31
|
+
fixErrorStacktrace,
|
|
32
|
+
classifyErrorPhase,
|
|
33
|
+
extractComponentStack,
|
|
34
|
+
parseFirstAppFrame,
|
|
35
|
+
calculateModuleRunnerOffset,
|
|
36
|
+
formatRscDebugContext,
|
|
37
|
+
formatTerminalError,
|
|
38
|
+
PHASE_LABELS,
|
|
39
|
+
type ErrorPhase,
|
|
40
|
+
type RscDebugComponentInfo,
|
|
41
|
+
} from './overlay.js';
|
|
42
|
+
|
|
43
|
+
// HTML error pages
|
|
44
|
+
export { generateDevErrorPage } from './error-page.js';
|
|
45
|
+
export {
|
|
46
|
+
extractHmrOptions,
|
|
47
|
+
renderDevPageShell,
|
|
48
|
+
buildReloadScript,
|
|
49
|
+
type DevErrorHmrOptions,
|
|
50
|
+
} from './dev-page-shell.js';
|
|
51
|
+
export { generateDev404Page, collectRoutes, findSimilarRoutes } from './404-page.js';
|
|
52
|
+
|
|
53
|
+
// Terminal error formatting
|
|
54
|
+
export { formatTerminalError as formatTerminalErrorDirect } from './terminal.js';
|
|
55
|
+
|
|
56
|
+
// Request tree logger
|
|
57
|
+
export {
|
|
58
|
+
formatSpanTree,
|
|
59
|
+
formatSpanSummary,
|
|
60
|
+
formatJson,
|
|
61
|
+
resolveLogMode,
|
|
62
|
+
type DevLogMode,
|
|
63
|
+
type DevLoggerConfig,
|
|
64
|
+
} from './logger.js';
|
|
65
|
+
|
|
66
|
+
// Browser log forwarding
|
|
67
|
+
export {
|
|
68
|
+
timberDevBrowserLogs,
|
|
69
|
+
type BrowserLogLevel,
|
|
70
|
+
type DevBrowserLogsConfig,
|
|
71
|
+
} from './browser-logs.js';
|
|
72
|
+
|
|
73
|
+
// Server log forwarding
|
|
74
|
+
export { timberDevLogs } from './logs.js';
|
|
75
|
+
|
|
76
|
+
// Holding server
|
|
77
|
+
export { createHoldingServer, type HoldingServer } from './holding-server.js';
|
|
78
|
+
|
|
79
|
+
// OTEL instrumentation
|
|
80
|
+
export { instrumentDevFetch, DevSpanProcessor, type DevFetchCleanup } from './instrumentation.js';
|
|
81
|
+
|
|
82
|
+
// Hydration mismatch overlay (client-side, dev-only)
|
|
83
|
+
export { isHydrationError, showHydrationError } from './hydration-overlay.js';
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-mode OTEL instrumentation — fetch tracing and span processing.
|
|
3
|
+
*
|
|
4
|
+
* Combines two concerns:
|
|
5
|
+
* 1. Fetch instrumentation: patches globalThis.fetch to create OTEL spans
|
|
6
|
+
* for every fetch call, giving visibility into async data fetching in
|
|
7
|
+
* the dev request log tree.
|
|
8
|
+
* 2. Span processing: collects completed spans per-request and drives
|
|
9
|
+
* dev log output when the root span ends.
|
|
10
|
+
*
|
|
11
|
+
* Only activated in dev mode — zero overhead in production.
|
|
12
|
+
*
|
|
13
|
+
* Design ref: 17-logging.md §"Dev Logging", 21-dev-server.md §"Dev Logging"
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import * as api from '@opentelemetry/api';
|
|
17
|
+
import type { SpanProcessor, ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
18
|
+
import type { Span, Context } from '@opentelemetry/api';
|
|
19
|
+
import {
|
|
20
|
+
formatSpanTree,
|
|
21
|
+
formatSpanSummary,
|
|
22
|
+
formatJson,
|
|
23
|
+
type DevLogMode,
|
|
24
|
+
type DevLoggerConfig,
|
|
25
|
+
} from './logger.js';
|
|
26
|
+
|
|
27
|
+
// ─── Fetch Instrumentation ──────────────────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
export type DevFetchCleanup = () => void;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Well-known key holding the active fetch patch's cleanup function.
|
|
33
|
+
*
|
|
34
|
+
* The RSC entry module re-evaluates on every HMR invalidation and calls
|
|
35
|
+
* instrumentDevFetch() again. Without this guard each call would wrap the
|
|
36
|
+
* previous wrapper — N nested wrappers emitting N duplicate timber.fetch
|
|
37
|
+
* spans per request. Symbol.for() survives module re-evaluation (same
|
|
38
|
+
* pattern as __timber_dev_browser_log_script). See TIM-1067, B49.
|
|
39
|
+
*/
|
|
40
|
+
const FETCH_PATCH_KEY = Symbol.for('timber.dev.fetch-instrumentation-cleanup');
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Patch globalThis.fetch to wrap every call in an OTEL span.
|
|
44
|
+
*
|
|
45
|
+
* Returns a cleanup function that restores the original fetch.
|
|
46
|
+
* Idempotent: a repeated call restores the previous patch before
|
|
47
|
+
* re-patching, so wrappers never stack. Only call this in dev mode.
|
|
48
|
+
*/
|
|
49
|
+
export function instrumentDevFetch(): DevFetchCleanup {
|
|
50
|
+
const globals = globalThis as Record<symbol, unknown>;
|
|
51
|
+
const priorCleanup = globals[FETCH_PATCH_KEY] as DevFetchCleanup | undefined;
|
|
52
|
+
priorCleanup?.();
|
|
53
|
+
|
|
54
|
+
const originalFetch = globalThis.fetch;
|
|
55
|
+
const tracer = api.trace.getTracer('timber.js');
|
|
56
|
+
|
|
57
|
+
globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
|
|
58
|
+
const { method, url } = extractFetchInfo(input, init);
|
|
59
|
+
|
|
60
|
+
return tracer.startActiveSpan(
|
|
61
|
+
'timber.fetch',
|
|
62
|
+
{
|
|
63
|
+
attributes: {
|
|
64
|
+
'http.request.method': method,
|
|
65
|
+
'http.url': url,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
async (span) => {
|
|
69
|
+
try {
|
|
70
|
+
const response = await originalFetch(input, init);
|
|
71
|
+
|
|
72
|
+
span.setAttribute('http.response.status_code', response.status);
|
|
73
|
+
|
|
74
|
+
// Surface cache status from standard headers
|
|
75
|
+
const cacheStatus =
|
|
76
|
+
response.headers.get('X-Cache') ?? response.headers.get('CF-Cache-Status');
|
|
77
|
+
if (cacheStatus) {
|
|
78
|
+
span.setAttribute('timber.cache_status', cacheStatus);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
span.setStatus({ code: api.SpanStatusCode.OK });
|
|
82
|
+
span.end();
|
|
83
|
+
return response;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
span.setStatus({ code: api.SpanStatusCode.ERROR });
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
span.setAttribute('timber.fetch_error', error.message);
|
|
88
|
+
span.recordException(error);
|
|
89
|
+
}
|
|
90
|
+
span.end();
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const cleanup: DevFetchCleanup = () => {
|
|
98
|
+
globalThis.fetch = originalFetch;
|
|
99
|
+
if (globals[FETCH_PATCH_KEY] === cleanup) {
|
|
100
|
+
delete globals[FETCH_PATCH_KEY];
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
globals[FETCH_PATCH_KEY] = cleanup;
|
|
104
|
+
return cleanup;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Extract method and URL from the various fetch() call signatures.
|
|
109
|
+
*/
|
|
110
|
+
function extractFetchInfo(
|
|
111
|
+
input: RequestInfo | URL,
|
|
112
|
+
init?: RequestInit
|
|
113
|
+
): { method: string; url: string } {
|
|
114
|
+
let method = init?.method ?? 'GET';
|
|
115
|
+
let url: string;
|
|
116
|
+
|
|
117
|
+
if (input instanceof Request) {
|
|
118
|
+
url = input.url;
|
|
119
|
+
if (!init?.method) {
|
|
120
|
+
method = input.method;
|
|
121
|
+
}
|
|
122
|
+
} else if (input instanceof URL) {
|
|
123
|
+
url = input.toString();
|
|
124
|
+
} else {
|
|
125
|
+
url = input;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return { method: method.toUpperCase(), url };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// ─── Span Processor ─────────────────────────────────────────────────────────
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* DevSpanProcessor — Custom OTEL SpanProcessor that drives dev log output.
|
|
135
|
+
*
|
|
136
|
+
* Collects completed spans per-request (correlated by trace ID). When the
|
|
137
|
+
* root span (http.server.request) ends, all child spans are already collected
|
|
138
|
+
* (child spans end before parent in OTEL). The processor formats the span
|
|
139
|
+
* tree and writes it to stderr.
|
|
140
|
+
*
|
|
141
|
+
* This replaces the old DevLogEmitter/DevLogEvents system. OTEL spans are
|
|
142
|
+
* now the single source of truth for dev logging — no more parallel event
|
|
143
|
+
* systems that can drift.
|
|
144
|
+
*/
|
|
145
|
+
export class DevSpanProcessor implements SpanProcessor {
|
|
146
|
+
/**
|
|
147
|
+
* Max traces retained while waiting for their root span. Traces are only
|
|
148
|
+
* deleted when an `http.server.request` root ends — orphan fetches (no
|
|
149
|
+
* active request) and spans ending after their root would otherwise
|
|
150
|
+
* accumulate for the dev-server lifetime. Beyond the cap, the
|
|
151
|
+
* oldest-inserted trace is evicted (Map preserves insertion order).
|
|
152
|
+
* See TIM-1067, B49.
|
|
153
|
+
*/
|
|
154
|
+
private static readonly MAX_PENDING_TRACES = 512;
|
|
155
|
+
|
|
156
|
+
private spansByTrace = new Map<string, ReadableSpan[]>();
|
|
157
|
+
private mode: DevLogMode;
|
|
158
|
+
private config: DevLoggerConfig;
|
|
159
|
+
|
|
160
|
+
constructor(config: DevLoggerConfig) {
|
|
161
|
+
this.config = config;
|
|
162
|
+
this.mode = config.mode ?? 'tree';
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
onStart(_span: Span, _context: Context): void {
|
|
166
|
+
// No action needed on span start — we collect on end.
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
onEnd(span: ReadableSpan): void {
|
|
170
|
+
const traceId = span.spanContext().traceId;
|
|
171
|
+
|
|
172
|
+
let spans = this.spansByTrace.get(traceId);
|
|
173
|
+
if (!spans) {
|
|
174
|
+
if (this.spansByTrace.size >= DevSpanProcessor.MAX_PENDING_TRACES) {
|
|
175
|
+
const oldest = this.spansByTrace.keys().next().value;
|
|
176
|
+
if (oldest !== undefined) {
|
|
177
|
+
this.spansByTrace.delete(oldest);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
spans = [];
|
|
181
|
+
this.spansByTrace.set(traceId, spans);
|
|
182
|
+
}
|
|
183
|
+
spans.push(span);
|
|
184
|
+
|
|
185
|
+
// Root span signals request completion — all child spans are already
|
|
186
|
+
// collected because OTEL ends child spans before parent spans.
|
|
187
|
+
if (span.name === 'http.server.request') {
|
|
188
|
+
const output = this.format(spans);
|
|
189
|
+
if (output) {
|
|
190
|
+
process.stderr.write(output);
|
|
191
|
+
}
|
|
192
|
+
this.spansByTrace.delete(traceId);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private format(spans: ReadableSpan[]): string {
|
|
197
|
+
if (this.mode === 'quiet') return '';
|
|
198
|
+
if (this.mode === 'json') return formatJson(spans);
|
|
199
|
+
if (this.mode === 'summary') return formatSpanSummary(spans, this.config);
|
|
200
|
+
// Both 'tree' and 'verbose' use the tree formatter.
|
|
201
|
+
// verbose will show additional detail (every component render) once
|
|
202
|
+
// component-level spans are wired.
|
|
203
|
+
return formatSpanTree(spans, this.config);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
async shutdown(): Promise<void> {
|
|
207
|
+
this.spansByTrace.clear();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async forceFlush(): Promise<void> {
|
|
211
|
+
// Nothing to flush — output happens synchronously in onEnd.
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import type { Plugin, ViteDevServer } from 'vite';
|
|
16
|
-
import type { PluginContext } from '
|
|
16
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
17
17
|
|
|
18
18
|
// ─── Types ───────────────────────────────────────────────────────────────
|
|
19
19
|
|
|
@@ -149,7 +149,7 @@ function extractCallerLocation(projectRoot: string): string | null {
|
|
|
149
149
|
for (let i = 1; i < lines.length; i++) {
|
|
150
150
|
const line = lines[i].trim();
|
|
151
151
|
// Skip our own patching frames
|
|
152
|
-
if (line.includes('dev-logs')) continue;
|
|
152
|
+
if (line.includes('dev-tools/logs')) continue;
|
|
153
153
|
// Skip node internals
|
|
154
154
|
if (line.includes('node:') || line.includes('node_modules')) continue;
|
|
155
155
|
|
|
@@ -189,7 +189,7 @@ export function isFrameworkInternalCaller(): boolean {
|
|
|
189
189
|
for (let i = 1; i < lines.length; i++) {
|
|
190
190
|
const line = lines[i].trim();
|
|
191
191
|
// Skip our own patching frames
|
|
192
|
-
if (line.includes('dev-logs')) continue;
|
|
192
|
+
if (line.includes('dev-tools/logs')) continue;
|
|
193
193
|
// Skip node internals (but NOT node_modules — we need to inspect those)
|
|
194
194
|
if (line.includes('node:')) continue;
|
|
195
195
|
|
|
@@ -238,8 +238,12 @@ function patchConsole(server: ViteDevServer, projectRoot: string): () => void {
|
|
|
238
238
|
};
|
|
239
239
|
|
|
240
240
|
server.hot.send('timber:server-log', payload);
|
|
241
|
-
} catch {
|
|
242
|
-
//
|
|
241
|
+
} catch (e) {
|
|
242
|
+
// Use the original console.debug to avoid re-entering the patched handler
|
|
243
|
+
originals.get('debug')!(
|
|
244
|
+
'[timber] server log forwarding failed:',
|
|
245
|
+
e instanceof Error ? e.message : e
|
|
246
|
+
);
|
|
243
247
|
}
|
|
244
248
|
};
|
|
245
249
|
}
|