@timber-js/app 0.2.0-alpha.10 → 0.2.0-alpha.100
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-CQ8Z8VGL.js +1061 -0
- package/dist/_chunks/actions-CQ8Z8VGL.js.map +1 -0
- package/dist/_chunks/build-output-helper-DXnW0qjz.js +61 -0
- package/dist/_chunks/build-output-helper-DXnW0qjz.js.map +1 -0
- package/dist/_chunks/chunk-BYIpzuS7.js +39 -0
- package/dist/_chunks/define-B-Q_UMOD.js +195 -0
- package/dist/_chunks/define-B-Q_UMOD.js.map +1 -0
- package/dist/_chunks/define-CfBPoJb0.js +123 -0
- package/dist/_chunks/define-CfBPoJb0.js.map +1 -0
- package/dist/_chunks/define-cookie-BjpIt4UC.js +194 -0
- package/dist/_chunks/define-cookie-BjpIt4UC.js.map +1 -0
- package/dist/_chunks/format-Bcn-Iv1x.js +14 -0
- package/dist/_chunks/format-Bcn-Iv1x.js.map +1 -0
- package/dist/_chunks/handler-store-B-lqaGyh.js +54 -0
- package/dist/_chunks/handler-store-B-lqaGyh.js.map +1 -0
- package/dist/_chunks/logger-0m8MsKdc.js +291 -0
- package/dist/_chunks/logger-0m8MsKdc.js.map +1 -0
- package/dist/_chunks/merge-search-params-BphMdht_.js +122 -0
- package/dist/_chunks/merge-search-params-BphMdht_.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-BU684ls2.js} +1 -1
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js.map → metadata-routes-BU684ls2.js.map} +1 -1
- package/dist/_chunks/navigation-root-BCYczjml.js +96 -0
- package/dist/_chunks/navigation-root-BCYczjml.js.map +1 -0
- package/dist/_chunks/registry-I2ss-lvy.js +20 -0
- package/dist/_chunks/registry-I2ss-lvy.js.map +1 -0
- package/dist/_chunks/router-ref-h3-UaCQv.js +28 -0
- package/dist/_chunks/router-ref-h3-UaCQv.js.map +1 -0
- package/dist/_chunks/schema-bridge-Cxu4l-7p.js +86 -0
- package/dist/_chunks/schema-bridge-Cxu4l-7p.js.map +1 -0
- package/dist/_chunks/segment-classify-BjfuctV2.js +137 -0
- package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
- package/dist/_chunks/segment-context-Dx_OizxD.js +34 -0
- package/dist/_chunks/segment-context-Dx_OizxD.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-B4CdH7rE.js} +1 -1
- package/dist/_chunks/ssr-data-B4CdH7rE.js.map +1 -0
- package/dist/_chunks/stale-reload-Bab885FO.js +64 -0
- package/dist/_chunks/stale-reload-Bab885FO.js.map +1 -0
- package/dist/_chunks/tracing-C8V-YGsP.js +329 -0
- package/dist/_chunks/tracing-C8V-YGsP.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-B2XTqxDR.js} +7 -20
- package/dist/_chunks/use-query-states-B2XTqxDR.js.map +1 -0
- package/dist/_chunks/use-segment-params-BkpKAQ7D.js +185 -0
- package/dist/_chunks/use-segment-params-BkpKAQ7D.js.map +1 -0
- package/dist/_chunks/walkers-Tg0Alwcg.js +850 -0
- package/dist/_chunks/walkers-Tg0Alwcg.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → warnings-Cg47l5sk.js} +6 -45
- package/dist/_chunks/warnings-Cg47l5sk.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +28 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +95 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +148 -12
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +142 -38
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +17 -1
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +143 -45
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +16 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +24 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +31 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +23 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +150 -81
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/singleflight.d.ts +18 -1
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +34 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +23 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +26 -5
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +54 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +19 -4
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +9 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +261 -1100
- 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 +964 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +63 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +62 -55
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +36 -0
- package/dist/client/nav-link-store.d.ts.map +1 -0
- package/dist/client/navigation-api-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +115 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +13 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +70 -4
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +38 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +1 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +63 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-reload.d.ts +15 -0
- package/dist/client/stale-reload.d.ts.map +1 -1
- package/dist/client/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 +8 -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-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +7 -5
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +33 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/config-types.d.ts +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 +98 -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 +36 -72
- 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 +46 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +46 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +84 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +58 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
- package/dist/dev-tools/warnings.d.ts.map +1 -0
- package/dist/fonts/bundle.d.ts +48 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +167 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +64 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +45 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +103 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +46 -190
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14569 -12451
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +107 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +9 -7
- 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-server.d.ts +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +17 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +6 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +4 -4
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +55 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +52 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +2 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts +41 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/index.d.ts +5 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +3 -2
- package/dist/routing/link-codegen.d.ts +90 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +75 -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 +77 -25
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +51 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +76 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +157 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +4 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +34 -441
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/registry.d.ts +2 -2
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/search-params/wrappers.d.ts +53 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/segment-params/define.d.ts +95 -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 +3 -6
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +33 -5
- 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/build-manifest.d.ts +2 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- 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/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-boundary.d.ts +90 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- 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 -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 +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/flush.d.ts.map +1 -1
- package/dist/server/form-data.d.ts +29 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injector-core.d.ts +212 -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 +9 -46
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +155 -2905
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +48 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2900 -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/middleware-runner.d.ts +36 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +110 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +26 -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 +52 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +93 -23
- 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 +69 -18
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +41 -109
- 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 +21 -34
- 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 +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 +49 -6
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +20 -3
- 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/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 +14 -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/rsc-entry/wrap-action-dispatch.d.ts +119 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +23 -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/state-tree-diff.d.ts.map +1 -1
- package/dist/server/status-code-resolver.d.ts +16 -11
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +36 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +5 -5
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +62 -30
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +49 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +3 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +11 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/directive-parser.d.ts +1 -43
- 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 +56 -22
- package/src/adapters/build-output-helper.ts +77 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +350 -76
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +142 -59
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +81 -18
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +31 -0
- package/src/cache/timber-cache.ts +25 -20
- package/src/cli.ts +16 -6
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +116 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +143 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +193 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/error-boundary.tsx +97 -20
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +77 -43
- package/src/client/internal.ts +58 -0
- package/src/client/link-pending-store.ts +111 -0
- package/src/client/link.tsx +342 -113
- package/src/client/nav-link-store.ts +47 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +332 -0
- package/src/client/navigation-context.ts +31 -6
- package/src/client/navigation-root.tsx +342 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +300 -73
- package/src/client/rsc-fetch.ts +112 -8
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/state.ts +2 -2
- package/src/client/top-loader.tsx +18 -6
- package/src/client/use-cookie.ts +29 -0
- package/src/client/use-link-status.ts +7 -7
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
- package/src/client/use-query-states.ts +9 -3
- package/src/client/use-router.ts +1 -1
- package/src/client/{use-params.ts → use-segment-params.ts} +7 -5
- package/src/codec.ts +45 -0
- package/src/config-types.ts +292 -0
- package/src/config-validation.ts +303 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +301 -55
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +134 -0
- package/src/dev-tools/404-page.ts +387 -0
- package/src/dev-tools/browser-logs.ts +288 -0
- package/src/dev-tools/error-page.ts +509 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/index.ts +90 -0
- package/src/dev-tools/instrumentation.ts +176 -0
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +3 -3
- package/src/dev-tools/overlay.ts +456 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +183 -0
- package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
- package/src/fonts/bundle.ts +142 -0
- package/src/fonts/css.ts +2 -1
- package/src/fonts/dev-middleware.ts +74 -0
- package/src/fonts/pipeline.ts +314 -0
- package/src/fonts/transform.ts +406 -0
- package/src/fonts/types.ts +50 -1
- package/src/fonts/virtual-modules.ts +227 -0
- package/src/index.ts +376 -356
- package/src/plugin-context.ts +240 -0
- package/src/plugins/adapter-build.ts +12 -4
- package/src/plugins/build-manifest.ts +13 -2
- package/src/plugins/build-report.ts +16 -25
- package/src/plugins/client-chunks.ts +65 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +154 -21
- package/src/plugins/entries.ts +111 -10
- package/src/plugins/fonts.ts +155 -654
- package/src/plugins/mdx.ts +43 -10
- package/src/plugins/routing.ts +225 -41
- package/src/plugins/server-action-exports.ts +1 -1
- package/src/plugins/server-bundle.ts +32 -1
- package/src/plugins/shims.ts +136 -35
- package/src/plugins/static-build.ts +17 -11
- package/src/routing/codegen-shared.ts +98 -0
- package/src/routing/codegen-types.ts +53 -0
- package/src/routing/codegen.ts +143 -176
- package/src/routing/convention-lint.ts +357 -0
- package/src/routing/index.ts +5 -1
- package/src/routing/interception.ts +1 -1
- package/src/routing/link-codegen.ts +294 -0
- package/src/routing/scanner.ts +107 -110
- package/src/routing/segment-classify.ts +188 -0
- package/src/routing/status-file-lint.ts +10 -7
- package/src/routing/types.ts +78 -25
- package/src/routing/walkers.ts +90 -0
- package/src/rsc-runtime/rsc.ts +2 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
- package/src/search-params/define.ts +538 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +92 -0
- package/src/segment-params/define.ts +332 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +76 -34
- package/src/server/action-client.ts +88 -15
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +112 -14
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +35 -7
- package/src/server/asset-headers.ts +8 -34
- package/src/server/build-manifest.ts +10 -4
- package/src/server/compress.ts +25 -7
- package/src/server/cookie-context.ts +468 -0
- package/src/server/cookie-parsing.ts +135 -0
- package/src/server/debug.ts +1 -1
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +218 -0
- package/src/server/deny-renderer.ts +31 -50
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +36 -15
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +74 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/flush.ts +2 -1
- package/src/server/form-data.ts +76 -0
- package/src/server/html-injector-core.ts +403 -0
- package/src/server/html-injectors.ts +244 -223
- package/src/server/index.ts +31 -184
- package/src/server/internal.ts +176 -0
- package/src/server/logger.ts +67 -36
- package/src/server/middleware-runner.ts +75 -4
- package/src/server/node-stream-transforms.ts +369 -0
- package/src/server/param-coercion.ts +76 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +17 -16
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline-outcome.ts +167 -0
- package/src/server/pipeline-phases.ts +409 -0
- package/src/server/pipeline.ts +128 -394
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +111 -28
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +94 -338
- package/src/server/route-element-builder.ts +288 -192
- package/src/server/route-handler.ts +24 -4
- package/src/server/route-matcher.ts +44 -65
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +16 -17
- package/src/server/rsc-entry/error-renderer.ts +305 -89
- package/src/server/rsc-entry/helpers.ts +136 -12
- package/src/server/rsc-entry/index.ts +312 -341
- package/src/server/rsc-entry/render-route.ts +304 -0
- package/src/server/rsc-entry/rsc-payload.ts +65 -18
- package/src/server/rsc-entry/rsc-stream.ts +81 -13
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +171 -38
- 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 +126 -0
- package/src/server/slot-resolver.ts +245 -230
- package/src/server/ssr-entry.ts +215 -32
- package/src/server/ssr-render.ts +289 -67
- package/src/server/ssr-wrappers.tsx +139 -0
- package/src/server/state-tree-diff.ts +4 -1
- package/src/server/status-code-resolver.ts +112 -128
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +21 -10
- package/src/server/tree-builder.ts +202 -90
- package/src/server/types.ts +55 -6
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation-client.ts +4 -3
- package/src/shims/navigation.ts +14 -7
- package/src/utils/directive-parser.ts +1 -390
- 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-gwlJkDuf.js +0 -108
- package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
- package/dist/_chunks/format-DviM89f0.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
- package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
- package/dist/_chunks/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/transition-root.d.ts.map +0 -1
- 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/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/response-cache.d.ts +0 -54
- package/dist/server/response-cache.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/transition-root.tsx +0 -166
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- 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/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/server/response-cache.ts +0 -410
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal error formatting — boxed, color-coded error output for dev mode.
|
|
3
|
+
*
|
|
4
|
+
* Produces a visually scannable error block with:
|
|
5
|
+
* - Unicode box-drawing border around the error
|
|
6
|
+
* - Phase badge and error message
|
|
7
|
+
* - First app frame highlighted as the primary action item
|
|
8
|
+
* - OSC 8 clickable file:line links (VSCode terminal, iTerm2, etc.)
|
|
9
|
+
* - Internal/framework frames collapsed with a count
|
|
10
|
+
* - Component stack (for React render errors)
|
|
11
|
+
*
|
|
12
|
+
* Dev-only: this module is only imported by dev-error-overlay.ts.
|
|
13
|
+
*
|
|
14
|
+
* Design doc: 21-dev-server.md §"Error Overlay"
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { pathToFileURL } from 'node:url';
|
|
18
|
+
import {
|
|
19
|
+
extractComponentStack,
|
|
20
|
+
parseFirstAppFrame,
|
|
21
|
+
PHASE_LABELS,
|
|
22
|
+
type ErrorPhase,
|
|
23
|
+
} from './overlay.js';
|
|
24
|
+
import { classifyStack } from './stack-classifier.js';
|
|
25
|
+
|
|
26
|
+
// ─── ANSI Codes ─────────────────────────────────────────────────────────────
|
|
27
|
+
|
|
28
|
+
const RED = '\x1b[31m';
|
|
29
|
+
const CYAN = '\x1b[36m';
|
|
30
|
+
const DIM = '\x1b[2m';
|
|
31
|
+
const RESET = '\x1b[0m';
|
|
32
|
+
const BOLD = '\x1b[1m';
|
|
33
|
+
const UNDERLINE = '\x1b[4m';
|
|
34
|
+
|
|
35
|
+
// ─── OSC 8 Hyperlinks ──────────────────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Wrap text in an OSC 8 hyperlink escape sequence.
|
|
39
|
+
*
|
|
40
|
+
* Terminals that support OSC 8 (VSCode, iTerm2, Windows Terminal, etc.)
|
|
41
|
+
* render this as a clickable link. Others ignore the escape sequences
|
|
42
|
+
* and show the text normally.
|
|
43
|
+
*
|
|
44
|
+
* Format: \x1b]8;;URL\x07TEXT\x1b]8;;\x07
|
|
45
|
+
*/
|
|
46
|
+
function hyperlink(text: string, url: string): string {
|
|
47
|
+
return `\x1b]8;;${url}\x07${text}\x1b]8;;\x07`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Format a file:line:col reference as a clickable terminal link.
|
|
52
|
+
*
|
|
53
|
+
* Uses file:// URLs so terminals open the file in the configured editor.
|
|
54
|
+
* The link text is styled with cyan + underline for visibility.
|
|
55
|
+
*/
|
|
56
|
+
function fileLink(filePath: string, line?: number, col?: number): string {
|
|
57
|
+
const display = line ? `${filePath}:${line}${col ? `:${col}` : ''}` : filePath;
|
|
58
|
+
// Use pathToFileURL for proper encoding of spaces, #, ?, and Windows
|
|
59
|
+
// drive letters (TIM-792). Append :line:col after the URL.
|
|
60
|
+
const base = pathToFileURL(filePath).href;
|
|
61
|
+
const url = line ? `${base}:${line}${col ? `:${col}` : ''}` : base;
|
|
62
|
+
return `${CYAN}${UNDERLINE}${hyperlink(display, url)}${RESET}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ─── Box Drawing ────────────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
const BOX = {
|
|
68
|
+
topLeft: '╭',
|
|
69
|
+
topRight: '╮',
|
|
70
|
+
bottomLeft: '╰',
|
|
71
|
+
bottomRight: '╯',
|
|
72
|
+
horizontal: '─',
|
|
73
|
+
vertical: '│',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Wrap lines of text in a Unicode box with a colored left border.
|
|
78
|
+
*
|
|
79
|
+
* @param lines - Content lines (no ANSI length calculation — keeps it simple)
|
|
80
|
+
* @param width - Box width (characters). Lines longer than this are not truncated.
|
|
81
|
+
*/
|
|
82
|
+
function box(lines: string[], borderColor: string, width = 80): string {
|
|
83
|
+
const bar = BOX.horizontal.repeat(width - 2);
|
|
84
|
+
const output: string[] = [];
|
|
85
|
+
|
|
86
|
+
output.push(`${borderColor}${BOX.topLeft}${bar}${BOX.topRight}${RESET}`);
|
|
87
|
+
for (const line of lines) {
|
|
88
|
+
output.push(`${borderColor}${BOX.vertical}${RESET} ${line}`);
|
|
89
|
+
}
|
|
90
|
+
output.push(`${borderColor}${BOX.bottomLeft}${bar}${BOX.bottomRight}${RESET}`);
|
|
91
|
+
|
|
92
|
+
return output.join('\n');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Frame classification and parsing provided by stack-classifier.ts
|
|
96
|
+
|
|
97
|
+
// ─── Public API ─────────────────────────────────────────────────────────────
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Format an error for terminal output with a boxed layout.
|
|
101
|
+
*
|
|
102
|
+
* The output is designed to be scannable at a glance:
|
|
103
|
+
* 1. Red box with phase badge and error message
|
|
104
|
+
* 2. First app frame as a clickable link (the primary action item)
|
|
105
|
+
* 3. App frames listed normally
|
|
106
|
+
* 4. Internal/framework frames collapsed with count
|
|
107
|
+
* 5. Component stack (if present)
|
|
108
|
+
*/
|
|
109
|
+
export function formatTerminalError(error: Error, phase: ErrorPhase, projectRoot: string): string {
|
|
110
|
+
const sections: string[] = [];
|
|
111
|
+
const componentStack = extractComponentStack(error);
|
|
112
|
+
const loc = parseFirstAppFrame(error.stack ?? '', projectRoot);
|
|
113
|
+
const frames = error.stack ? classifyStack(error.stack, projectRoot) : [];
|
|
114
|
+
const appFrames = frames.filter((f) => f.type === 'app');
|
|
115
|
+
const internalCount = frames.filter((f) => f.type !== 'app').length;
|
|
116
|
+
|
|
117
|
+
// ── Box: Phase + Message ──────────────────────────────────────────
|
|
118
|
+
const boxLines: string[] = [];
|
|
119
|
+
boxLines.push(`${RED}${BOLD}${PHASE_LABELS[phase]} Error${RESET}`);
|
|
120
|
+
boxLines.push('');
|
|
121
|
+
|
|
122
|
+
// Error message — may be multi-line
|
|
123
|
+
for (const msgLine of error.message.split('\n')) {
|
|
124
|
+
boxLines.push(`${RED}${msgLine}${RESET}`);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Primary file location (clickable)
|
|
128
|
+
if (loc) {
|
|
129
|
+
boxLines.push('');
|
|
130
|
+
const relPath = loc.file.startsWith(projectRoot)
|
|
131
|
+
? loc.file.slice(projectRoot.length + 1)
|
|
132
|
+
: loc.file;
|
|
133
|
+
boxLines.push(
|
|
134
|
+
`${BOLD}→${RESET} ${fileLink(loc.file, loc.line, loc.column)} ${DIM}(${relPath})${RESET}`
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
sections.push(box(boxLines, RED));
|
|
139
|
+
|
|
140
|
+
// ── Component Stack ───────────────────────────────────────────────
|
|
141
|
+
if (componentStack) {
|
|
142
|
+
sections.push('');
|
|
143
|
+
sections.push(` ${BOLD}Component Stack:${RESET}`);
|
|
144
|
+
for (const csLine of componentStack.trim().split('\n')) {
|
|
145
|
+
sections.push(` ${DIM}${csLine.trim()}${RESET}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// ── App Frames ────────────────────────────────────────────────────
|
|
150
|
+
if (appFrames.length > 0) {
|
|
151
|
+
sections.push('');
|
|
152
|
+
sections.push(` ${BOLD}Application Frames:${RESET}`);
|
|
153
|
+
for (let i = 0; i < appFrames.length; i++) {
|
|
154
|
+
const f = appFrames[i]!;
|
|
155
|
+
if (f.file && f.line) {
|
|
156
|
+
const prefix = i === 0 ? `${BOLD}▸${RESET}` : ' ';
|
|
157
|
+
sections.push(
|
|
158
|
+
` ${prefix} ${fileLink(f.file, f.line, f.col)} ${DIM}${extractFnName(f.raw)}${RESET}`
|
|
159
|
+
);
|
|
160
|
+
} else {
|
|
161
|
+
sections.push(` ${f.raw}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ── Internal Frames (collapsed) ───────────────────────────────────
|
|
167
|
+
if (internalCount > 0) {
|
|
168
|
+
sections.push(
|
|
169
|
+
` ${DIM}… ${internalCount} internal frame${internalCount !== 1 ? 's' : ''} hidden${RESET}`
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
sections.push('');
|
|
174
|
+
return sections.join('\n');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
178
|
+
|
|
179
|
+
/** Extract the function name from a stack frame line like " at fnName (/path:1:2)". */
|
|
180
|
+
function extractFnName(frameLine: string): string {
|
|
181
|
+
const match = /at\s+(\S+)\s+\(/.exec(frameLine.trim());
|
|
182
|
+
return match ? match[1]! : '';
|
|
183
|
+
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type { ViteDevServer } from 'vite';
|
|
18
|
-
import { isDebug } from '
|
|
18
|
+
import { isDebug } from '../server/debug.js';
|
|
19
19
|
|
|
20
20
|
// ─── Warning IDs ───────────────────────────────────────────────────────────
|
|
21
21
|
|
|
@@ -25,7 +25,6 @@ export const WarningId = {
|
|
|
25
25
|
REDIRECT_IN_SUSPENSE: 'REDIRECT_IN_SUSPENSE',
|
|
26
26
|
REDIRECT_IN_ACCESS: 'REDIRECT_IN_ACCESS',
|
|
27
27
|
STATIC_REQUEST_API: 'STATIC_REQUEST_API',
|
|
28
|
-
CACHE_REQUEST_PROPS: 'CACHE_REQUEST_PROPS',
|
|
29
28
|
SLOW_SLOT_NO_SUSPENSE: 'SLOW_SLOT_NO_SUSPENSE',
|
|
30
29
|
} as const;
|
|
31
30
|
|
|
@@ -111,7 +110,7 @@ export function warnSuspenseWrappingChildren(layoutFile: string): void {
|
|
|
111
110
|
'warn',
|
|
112
111
|
`Layout at ${layoutFile} wraps {children} in <Suspense>. ` +
|
|
113
112
|
'This prevents child pages from setting HTTP status codes. ' +
|
|
114
|
-
'Use
|
|
113
|
+
'Use usePendingNavigation() for loading states instead.'
|
|
115
114
|
);
|
|
116
115
|
}
|
|
117
116
|
|
|
@@ -179,7 +178,7 @@ export function warnRedirectInAccess(accessFile: string, line?: number): void {
|
|
|
179
178
|
}
|
|
180
179
|
|
|
181
180
|
/**
|
|
182
|
-
* Warn when
|
|
181
|
+
* Warn when getCookies() or getHeaders() is called during a static build.
|
|
183
182
|
*
|
|
184
183
|
* In output: 'static' mode, there is no per-request context — these APIs
|
|
185
184
|
* read build-time values only. This is almost always a mistake.
|
|
@@ -197,33 +196,8 @@ export function warnStaticRequestApi(api: 'cookies' | 'headers', file: string):
|
|
|
197
196
|
);
|
|
198
197
|
}
|
|
199
198
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
*
|
|
203
|
-
* Cached components should not depend on per-request data — a userId or
|
|
204
|
-
* sessionId in the props means the cache will either be ineffective
|
|
205
|
-
* (key per user) or dangerous (serve one user's data to another).
|
|
206
|
-
*
|
|
207
|
-
* @param componentName - Name of the cached component
|
|
208
|
-
* @param propName - Name of the suspicious prop
|
|
209
|
-
* @param file - Relative path to the component file
|
|
210
|
-
* @param line - Line number
|
|
211
|
-
*/
|
|
212
|
-
export function warnCacheRequestProps(
|
|
213
|
-
componentName: string,
|
|
214
|
-
propName: string,
|
|
215
|
-
file: string,
|
|
216
|
-
line?: number
|
|
217
|
-
): void {
|
|
218
|
-
const location = line ? `${file}:${line}` : file;
|
|
219
|
-
emitOnce(
|
|
220
|
-
WarningId.CACHE_REQUEST_PROPS,
|
|
221
|
-
`${componentName}:${propName}:${location}`,
|
|
222
|
-
'warn',
|
|
223
|
-
`Cached component ${componentName} receives prop "${propName}" which appears request-specific. ` +
|
|
224
|
-
'Cached components should not depend on per-request data.'
|
|
225
|
-
);
|
|
226
|
-
}
|
|
199
|
+
// NOTE: warnCacheRequestProps removed — 'use cache' directive is a future feature.
|
|
200
|
+
// See design/06-caching.md.
|
|
227
201
|
|
|
228
202
|
/**
|
|
229
203
|
* Warn when a parallel slot resolves slowly without a <Suspense> wrapper.
|
|
@@ -245,25 +219,6 @@ export function warnSlowSlotWithoutSuspense(slotName: string, durationMs: number
|
|
|
245
219
|
);
|
|
246
220
|
}
|
|
247
221
|
|
|
248
|
-
// ─── Legacy aliases ─────────────────────────────────────────────────────────
|
|
249
|
-
|
|
250
|
-
/** @deprecated Use warnStaticRequestApi instead */
|
|
251
|
-
export const warnDynamicApiInStaticBuild = warnStaticRequestApi;
|
|
252
|
-
|
|
253
|
-
/** @deprecated Use warnRedirectInAccess instead */
|
|
254
|
-
export function warnRedirectInSlotAccess(slotName: string): void {
|
|
255
|
-
warnRedirectInAccess(`${slotName}/access.ts`);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/** @deprecated Use warnDenyInSuspense / warnRedirectInSuspense instead */
|
|
259
|
-
export function warnDenyAfterFlush(signal: 'deny' | 'redirect'): void {
|
|
260
|
-
if (signal === 'deny') {
|
|
261
|
-
warnDenyInSuspense('unknown');
|
|
262
|
-
} else {
|
|
263
|
-
warnRedirectInSuspense('unknown');
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
222
|
// ─── Testing ────────────────────────────────────────────────────────────────
|
|
268
223
|
|
|
269
224
|
/**
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-output emission for the timber-fonts plugin.
|
|
3
|
+
*
|
|
4
|
+
* Splits the `generateBundle` hook into pure helpers so the plugin shell
|
|
5
|
+
* can stay focused on Vite wiring. The functions here are deliberately
|
|
6
|
+
* Rollup-agnostic — they take an `EmitFile` callback so the plugin can
|
|
7
|
+
* pass `this.emitFile` from the `generateBundle` context.
|
|
8
|
+
*
|
|
9
|
+
* Design doc: 24-fonts.md
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
13
|
+
import { resolve, normalize } from 'node:path';
|
|
14
|
+
import type { ManifestFontEntry, BuildManifest } from '../server/build-manifest.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Minimal shape of the asset descriptor accepted by Rollup's `emitFile`.
|
|
18
|
+
* Declared inline rather than importing from `rollup` to keep `bundle.ts`
|
|
19
|
+
* Rollup-agnostic and avoid pulling the type into the build graph.
|
|
20
|
+
*/
|
|
21
|
+
interface EmittedAsset {
|
|
22
|
+
type: 'asset';
|
|
23
|
+
fileName: string;
|
|
24
|
+
source: string | Uint8Array;
|
|
25
|
+
}
|
|
26
|
+
import type { FontPipeline } from './pipeline.js';
|
|
27
|
+
import type { CachedFont } from './google.js';
|
|
28
|
+
import { inferFontFormat } from './local.js';
|
|
29
|
+
|
|
30
|
+
type EmitFile = (asset: EmittedAsset) => string;
|
|
31
|
+
type EmitWarning = (msg: string) => void;
|
|
32
|
+
|
|
33
|
+
/** Group cached Google Font binaries by lowercase family name. */
|
|
34
|
+
export function groupCachedFontsByFamily(
|
|
35
|
+
cachedFonts: readonly CachedFont[]
|
|
36
|
+
): Map<string, CachedFont[]> {
|
|
37
|
+
const cachedByFamily = new Map<string, CachedFont[]>();
|
|
38
|
+
for (const cf of cachedFonts) {
|
|
39
|
+
const key = cf.face.family.toLowerCase();
|
|
40
|
+
const arr = cachedByFamily.get(key) ?? [];
|
|
41
|
+
arr.push(cf);
|
|
42
|
+
cachedByFamily.set(key, arr);
|
|
43
|
+
}
|
|
44
|
+
return cachedByFamily;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Emit cached Google Font binaries and local font files into the build
|
|
49
|
+
* output under `_timber/fonts/`. Local files missing on disk produce a
|
|
50
|
+
* warning rather than an error so the build still succeeds.
|
|
51
|
+
*
|
|
52
|
+
* Cached Google Font binaries are deduplicated by `hashedFilename` so
|
|
53
|
+
* each unique file is written exactly once even when multiple font
|
|
54
|
+
* entries share a family (and therefore share `CachedFont` references).
|
|
55
|
+
*/
|
|
56
|
+
export function emitFontAssets(
|
|
57
|
+
pipeline: FontPipeline,
|
|
58
|
+
emitFile: EmitFile,
|
|
59
|
+
warn: EmitWarning
|
|
60
|
+
): void {
|
|
61
|
+
// Cached Google Font binaries (content-hashed, deduped by filename)
|
|
62
|
+
for (const cf of pipeline.uniqueCachedFiles()) {
|
|
63
|
+
emitFile({
|
|
64
|
+
type: 'asset',
|
|
65
|
+
fileName: `_timber/fonts/${cf.hashedFilename}`,
|
|
66
|
+
source: cf.data,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Local font files (emitted by basename)
|
|
71
|
+
for (const font of pipeline.fonts()) {
|
|
72
|
+
if (font.provider !== 'local' || !font.localSources) continue;
|
|
73
|
+
for (const src of font.localSources) {
|
|
74
|
+
const absolutePath = normalize(resolve(src.path));
|
|
75
|
+
if (!existsSync(absolutePath)) {
|
|
76
|
+
warn(`Local font file not found: ${absolutePath}`);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const basename = src.path.split('/').pop() ?? src.path;
|
|
80
|
+
const data = readFileSync(absolutePath);
|
|
81
|
+
emitFile({
|
|
82
|
+
type: 'asset',
|
|
83
|
+
fileName: `_timber/fonts/${basename}`,
|
|
84
|
+
source: data,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Populate `buildManifest.fonts` with `ManifestFontEntry[]` keyed by the
|
|
92
|
+
* importer module path (relative to the project root, matching how Vite's
|
|
93
|
+
* `manifest.json` keys css/js).
|
|
94
|
+
*
|
|
95
|
+
* Google fonts use the content-hashed filenames produced during
|
|
96
|
+
* `buildStart`. Local fonts use the source basename.
|
|
97
|
+
*/
|
|
98
|
+
export function writeFontManifest(
|
|
99
|
+
pipeline: FontPipeline,
|
|
100
|
+
buildManifest: BuildManifest,
|
|
101
|
+
rootDir: string
|
|
102
|
+
): void {
|
|
103
|
+
const fontsByImporter = new Map<string, ManifestFontEntry[]>();
|
|
104
|
+
|
|
105
|
+
for (const entry of pipeline.entries()) {
|
|
106
|
+
const manifestEntries = fontsByImporter.get(entry.importer) ?? [];
|
|
107
|
+
|
|
108
|
+
if (entry.provider === 'local' && entry.localSources) {
|
|
109
|
+
for (const src of entry.localSources) {
|
|
110
|
+
const filename = src.path.split('/').pop() ?? src.path;
|
|
111
|
+
const format = inferFontFormat(src.path);
|
|
112
|
+
manifestEntries.push({
|
|
113
|
+
href: `/_timber/fonts/${filename}`,
|
|
114
|
+
format,
|
|
115
|
+
crossOrigin: 'anonymous',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
} else if (entry.cachedFiles) {
|
|
119
|
+
// Google fonts: use the per-entry cached files attached during
|
|
120
|
+
// buildStart. Each entry owns its own cached binaries (TIM-829),
|
|
121
|
+
// so we no longer need a family-grouped lookup.
|
|
122
|
+
for (const cf of entry.cachedFiles) {
|
|
123
|
+
manifestEntries.push({
|
|
124
|
+
href: `/_timber/fonts/${cf.hashedFilename}`,
|
|
125
|
+
format: 'woff2',
|
|
126
|
+
crossOrigin: 'anonymous',
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fontsByImporter.set(entry.importer, manifestEntries);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Normalize importer paths to be relative to project root (matching how
|
|
135
|
+
// Vite's manifest.json keys work for css/js).
|
|
136
|
+
for (const [importer, entries] of fontsByImporter) {
|
|
137
|
+
const relativePath = importer.startsWith(rootDir)
|
|
138
|
+
? importer.slice(rootDir.length + 1)
|
|
139
|
+
: importer;
|
|
140
|
+
buildManifest.fonts[relativePath] = entries;
|
|
141
|
+
}
|
|
142
|
+
}
|
package/src/fonts/css.ts
CHANGED
|
@@ -39,6 +39,7 @@ export function generateFontFaces(descriptors: FontFaceDescriptor[]): string {
|
|
|
39
39
|
* ```css
|
|
40
40
|
* .timber-font-inter {
|
|
41
41
|
* --font-sans: 'Inter', 'Inter Fallback', system-ui, sans-serif;
|
|
42
|
+
* font-family: 'Inter', 'Inter Fallback', system-ui, sans-serif;
|
|
42
43
|
* }
|
|
43
44
|
* ```
|
|
44
45
|
*/
|
|
@@ -47,7 +48,7 @@ export function generateVariableClass(
|
|
|
47
48
|
variable: string,
|
|
48
49
|
fontFamily: string
|
|
49
50
|
): string {
|
|
50
|
-
return `.${className} {\n ${variable}: ${fontFamily};\n}`;
|
|
51
|
+
return `.${className} {\n ${variable}: ${fontFamily};\n font-family: ${fontFamily};\n}`;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
/**
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-mode middleware that serves local font binaries under
|
|
3
|
+
* `/_timber/fonts/<basename>`.
|
|
4
|
+
*
|
|
5
|
+
* Only files registered in the FontPipeline are served, and only by
|
|
6
|
+
* basename — directory traversal and path separators in the requested
|
|
7
|
+
* filename are rejected up front. Font CSS is no longer served here; it
|
|
8
|
+
* goes through Vite's CSS pipeline via virtual modules.
|
|
9
|
+
*
|
|
10
|
+
* Design doc: 24-fonts.md
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { ViteDevServer } from 'vite';
|
|
14
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
15
|
+
import { resolve, normalize } from 'node:path';
|
|
16
|
+
import type { FontPipeline } from './pipeline.js';
|
|
17
|
+
|
|
18
|
+
const FONT_MIME_TYPES: Record<string, string> = {
|
|
19
|
+
woff2: 'font/woff2',
|
|
20
|
+
woff: 'font/woff',
|
|
21
|
+
ttf: 'font/ttf',
|
|
22
|
+
otf: 'font/otf',
|
|
23
|
+
eot: 'application/vnd.ms-fontopen',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Wire the timber-fonts dev middleware onto a Vite dev server.
|
|
28
|
+
*
|
|
29
|
+
* Returns synchronously after registering the middleware. The pipeline is
|
|
30
|
+
* captured by reference so that fonts registered after `configureServer`
|
|
31
|
+
* runs (during transform) are still resolvable.
|
|
32
|
+
*/
|
|
33
|
+
export function installFontDevMiddleware(server: ViteDevServer, pipeline: FontPipeline): void {
|
|
34
|
+
server.middlewares.use((req, res, next) => {
|
|
35
|
+
const url = req.url;
|
|
36
|
+
if (!url || !url.startsWith('/_timber/fonts/')) return next();
|
|
37
|
+
|
|
38
|
+
const requestedFilename = url.slice('/_timber/fonts/'.length);
|
|
39
|
+
// Reject path traversal attempts and any subdirectory access. We only
|
|
40
|
+
// serve flat basenames out of the registry.
|
|
41
|
+
if (requestedFilename.includes('..') || requestedFilename.includes('/')) {
|
|
42
|
+
res.statusCode = 400;
|
|
43
|
+
res.end('Bad request');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Find the matching font file in the registry. We iterate every local
|
|
48
|
+
// font's source list and match by basename. The set is small (one per
|
|
49
|
+
// localFont() call) so this is cheap.
|
|
50
|
+
for (const font of pipeline.fonts()) {
|
|
51
|
+
if (font.provider !== 'local' || !font.localSources) continue;
|
|
52
|
+
for (const src of font.localSources) {
|
|
53
|
+
const basename = src.path.split('/').pop() ?? '';
|
|
54
|
+
if (basename !== requestedFilename) continue;
|
|
55
|
+
|
|
56
|
+
const absolutePath = normalize(resolve(src.path));
|
|
57
|
+
if (!existsSync(absolutePath)) {
|
|
58
|
+
res.statusCode = 404;
|
|
59
|
+
res.end('Not found');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const data = readFileSync(absolutePath);
|
|
63
|
+
const ext = absolutePath.split('.').pop()?.toLowerCase();
|
|
64
|
+
res.setHeader('Content-Type', FONT_MIME_TYPES[ext ?? ''] ?? 'application/octet-stream');
|
|
65
|
+
res.setHeader('Cache-Control', 'public, max-age=31536000, immutable');
|
|
66
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
67
|
+
res.end(data);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
next();
|
|
73
|
+
});
|
|
74
|
+
}
|