@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.151
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 +6452 -13421
- 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 +293 -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,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* timber-cache-transform — Vite plugin that injects stable callsite IDs
|
|
3
|
+
* into `cache()` calls imported from `@timber-js/app/cache`.
|
|
4
|
+
*
|
|
5
|
+
* Detected callsite forms (TIM-1054):
|
|
6
|
+
* - named imports, including aliases: `import { cache as c }` + `c(fn, opts)`
|
|
7
|
+
* - namespace imports: `import * as ns` + `ns.cache(fn, opts)`
|
|
8
|
+
* Forms a per-module transform cannot trace — local variable aliases
|
|
9
|
+
* (`const c = cache`), user re-export wrapper modules, computed access
|
|
10
|
+
* (`ns['cache']`) — fall back to the runtime fnId derived from
|
|
11
|
+
* fnv1a(fn.toString()) (see cache/timber-cache.ts), which is deterministic
|
|
12
|
+
* across instances and cold starts of the same build. Without either
|
|
13
|
+
* mechanism, an ordinal counter would collide across instances with a shared
|
|
14
|
+
* CacheHandler (Redis/KV) — cache key poisoning, serving one route's cached
|
|
15
|
+
* data to another.
|
|
16
|
+
*
|
|
17
|
+
* The plugin transforms:
|
|
18
|
+
* cache(fn, opts) → cache(fn, opts, "stable-id")
|
|
19
|
+
* ns.cache(fn, opts) → ns.cache(fn, opts, "stable-id")
|
|
20
|
+
*
|
|
21
|
+
* where stable-id =
|
|
22
|
+
* fnv1a(relPath + ":cache:" + fnv1a(stmtText) + ":" + fnv1a(callSpanText) + ":" + occurrence)
|
|
23
|
+
*
|
|
24
|
+
* stmtText is the source text of the enclosing *top-level statement* and
|
|
25
|
+
* callSpanText is the source text of the cache(...) call expression itself.
|
|
26
|
+
*
|
|
27
|
+
* The ID is derived from the *content* of the call, not its ordinal position
|
|
28
|
+
* in the file. A position-based index (the original TIM-997 scheme) was stable
|
|
29
|
+
* within one build but shifted across builds: inserting, deleting, or
|
|
30
|
+
* reordering a cache() call changed the index of every call below it, so with
|
|
31
|
+
* a persistent shared CacheHandler (Redis/KV) a new function could inherit
|
|
32
|
+
* another function's old ID and serve its persisted data — cross-deploy cache
|
|
33
|
+
* poisoning (TIM-1053). Content hashing makes IDs immune to reordering and
|
|
34
|
+
* unrelated edits, while a changed call gets a fresh ID — which is exactly
|
|
35
|
+
* when invalidation is wanted.
|
|
36
|
+
*
|
|
37
|
+
* The enclosing-statement text is included so that byte-identical cache()
|
|
38
|
+
* calls in different scopes — e.g. two factory helpers that each `return
|
|
39
|
+
* cache(fn, { ttl: 60 })` — get distinct, insertion-stable IDs: their
|
|
40
|
+
* enclosing declarations differ by name/body even when the call spans are
|
|
41
|
+
* identical. Without it, a source-order occurrence counter alone would shift
|
|
42
|
+
* when an identical span is inserted above, reassigning IDs across deploys.
|
|
43
|
+
* Calls that are byte-identical INCLUDING their enclosing top-level statement
|
|
44
|
+
* are disambiguated by a source-order occurrence index. That residue is safe:
|
|
45
|
+
* identical top-level declarations are a redeclaration error, so fully
|
|
46
|
+
* identical (statement, call) pairs can only be expression statements
|
|
47
|
+
* referencing the same bindings — the same function, where an ID swap is
|
|
48
|
+
* harmless.
|
|
49
|
+
*
|
|
50
|
+
* See TIM-997, TIM-1053, design/06-caching.md §"Cache Key Security".
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
import { relative } from 'node:path';
|
|
54
|
+
import MagicString from 'magic-string';
|
|
55
|
+
import { parseAst } from 'vite';
|
|
56
|
+
import type { Plugin } from 'vite';
|
|
57
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
58
|
+
import { fnv1aHash } from '../cache/fast-hash.js';
|
|
59
|
+
|
|
60
|
+
const CACHE_MODULE_SOURCES = new Set(['@timber-js/app/cache', 'timber/cache']);
|
|
61
|
+
|
|
62
|
+
interface PositionedNode {
|
|
63
|
+
type: string;
|
|
64
|
+
start: number;
|
|
65
|
+
end: number;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface IdentifierNode extends PositionedNode {
|
|
70
|
+
type: 'Identifier';
|
|
71
|
+
name: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface ImportDeclarationNode extends PositionedNode {
|
|
75
|
+
type: 'ImportDeclaration';
|
|
76
|
+
source: { value: string };
|
|
77
|
+
specifiers: Array<
|
|
78
|
+
PositionedNode & {
|
|
79
|
+
type: string;
|
|
80
|
+
local: IdentifierNode;
|
|
81
|
+
imported?: IdentifierNode;
|
|
82
|
+
}
|
|
83
|
+
>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
interface CallExpressionNode extends PositionedNode {
|
|
87
|
+
type: 'CallExpression';
|
|
88
|
+
callee: PositionedNode;
|
|
89
|
+
arguments: PositionedNode[];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
interface MemberExpressionNode extends PositionedNode {
|
|
93
|
+
type: 'MemberExpression';
|
|
94
|
+
object: PositionedNode;
|
|
95
|
+
property: PositionedNode;
|
|
96
|
+
computed: boolean;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
interface ProgramNode extends PositionedNode {
|
|
100
|
+
type: 'Program';
|
|
101
|
+
body: PositionedNode[];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
interface CacheBindings {
|
|
105
|
+
/** Local names bound to `cache` via named imports (`import { cache as c }`). */
|
|
106
|
+
named: Set<string>;
|
|
107
|
+
/** Local names of namespace imports (`import * as ns`) of a cache module. */
|
|
108
|
+
namespaces: Set<string>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Find the local binding name(s) for `cache` imported from the cache module —
|
|
113
|
+
* both named imports and namespace imports (TIM-1054).
|
|
114
|
+
*/
|
|
115
|
+
function findCacheBindings(program: ProgramNode): CacheBindings {
|
|
116
|
+
const named = new Set<string>();
|
|
117
|
+
const namespaces = new Set<string>();
|
|
118
|
+
for (const stmt of program.body) {
|
|
119
|
+
if (stmt.type !== 'ImportDeclaration') continue;
|
|
120
|
+
const decl = stmt as unknown as ImportDeclarationNode;
|
|
121
|
+
if (!CACHE_MODULE_SOURCES.has(decl.source.value)) continue;
|
|
122
|
+
for (const spec of decl.specifiers) {
|
|
123
|
+
if (spec.type === 'ImportNamespaceSpecifier') {
|
|
124
|
+
namespaces.add(spec.local.name);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (spec.type !== 'ImportSpecifier') continue;
|
|
128
|
+
const importedName = spec.imported?.name ?? spec.local.name;
|
|
129
|
+
if (importedName === 'cache') {
|
|
130
|
+
named.add(spec.local.name);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { named, namespaces };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Is this callee a reference to the imported `cache` function — either a bare
|
|
139
|
+
* identifier bound by a named import, or `ns.cache` on a namespace import?
|
|
140
|
+
* Computed access (`ns['cache']`) is deliberately not matched; it falls back
|
|
141
|
+
* to the runtime fnId derivation.
|
|
142
|
+
*/
|
|
143
|
+
function isCacheCallee(callee: PositionedNode, bindings: CacheBindings): boolean {
|
|
144
|
+
if (callee.type === 'Identifier') {
|
|
145
|
+
return bindings.named.has((callee as IdentifierNode).name);
|
|
146
|
+
}
|
|
147
|
+
if (callee.type === 'MemberExpression') {
|
|
148
|
+
const member = callee as unknown as MemberExpressionNode;
|
|
149
|
+
return (
|
|
150
|
+
!member.computed &&
|
|
151
|
+
member.object.type === 'Identifier' &&
|
|
152
|
+
bindings.namespaces.has((member.object as IdentifierNode).name) &&
|
|
153
|
+
member.property.type === 'Identifier' &&
|
|
154
|
+
(member.property as IdentifierNode).name === 'cache'
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Recursively walk AST nodes to find cache() call expressions.
|
|
162
|
+
*
|
|
163
|
+
* cache() is typically called at module scope, but we also handle calls
|
|
164
|
+
* inside functions/blocks for completeness.
|
|
165
|
+
*/
|
|
166
|
+
function findCacheCallSites(
|
|
167
|
+
node: PositionedNode,
|
|
168
|
+
cacheBindings: CacheBindings,
|
|
169
|
+
results: CallExpressionNode[]
|
|
170
|
+
): void {
|
|
171
|
+
if (node.type === 'CallExpression') {
|
|
172
|
+
const call = node as unknown as CallExpressionNode;
|
|
173
|
+
if (call.arguments.length === 2 && isCacheCallee(call.callee, cacheBindings)) {
|
|
174
|
+
results.push(call);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
for (const key of Object.keys(node)) {
|
|
178
|
+
if (key === 'type' || key === 'start' || key === 'end') continue;
|
|
179
|
+
const val = node[key];
|
|
180
|
+
if (val && typeof val === 'object') {
|
|
181
|
+
if (Array.isArray(val)) {
|
|
182
|
+
for (const item of val) {
|
|
183
|
+
if (item && typeof item === 'object' && typeof item.type === 'string') {
|
|
184
|
+
findCacheCallSites(item as PositionedNode, cacheBindings, results);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
} else if (typeof (val as PositionedNode).type === 'string') {
|
|
188
|
+
findCacheCallSites(val as PositionedNode, cacheBindings, results);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Generate a stable callsite ID from a module path, the source text of the
|
|
196
|
+
* enclosing top-level statement, the source text of the cache(...) call
|
|
197
|
+
* expression, and an occurrence index among fully byte-identical
|
|
198
|
+
* (statement, call) pairs in the same file.
|
|
199
|
+
*
|
|
200
|
+
* The ID is deterministic and:
|
|
201
|
+
* - Stable across cold starts AND across builds/deploys for unchanged calls —
|
|
202
|
+
* inserting, deleting, or reordering other cache() calls does not affect it
|
|
203
|
+
* - Unique across different modules (relPath component)
|
|
204
|
+
* - Unique across distinct cache() calls within a module (statement + span
|
|
205
|
+
* hashes), with fully identical duplicates disambiguated by source-order
|
|
206
|
+
* occurrence
|
|
207
|
+
* - Fresh when the wrapped fn, opts, or enclosing statement change, which
|
|
208
|
+
* intentionally invalidates the old persisted entries
|
|
209
|
+
*/
|
|
210
|
+
function generateStableId(
|
|
211
|
+
relativeModulePath: string,
|
|
212
|
+
statementText: string,
|
|
213
|
+
callSpanText: string,
|
|
214
|
+
occurrence: number
|
|
215
|
+
): string {
|
|
216
|
+
return fnv1aHash(
|
|
217
|
+
`${relativeModulePath}:cache:${fnv1aHash(statementText)}:${fnv1aHash(callSpanText)}:${occurrence}`
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function timberCacheTransform(ctx: PluginContext): Plugin {
|
|
222
|
+
return {
|
|
223
|
+
name: 'timber-cache-transform',
|
|
224
|
+
|
|
225
|
+
transform(code, id) {
|
|
226
|
+
if (!code.includes('@timber-js/app/cache') && !code.includes('timber/cache')) return;
|
|
227
|
+
// Skip node_modules (don't transform third-party code)
|
|
228
|
+
if (id.includes('node_modules')) return;
|
|
229
|
+
|
|
230
|
+
let program: ProgramNode;
|
|
231
|
+
try {
|
|
232
|
+
program = parseAst(code, { lang: 'tsx' }) as unknown as ProgramNode;
|
|
233
|
+
} catch {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const cacheBindings = findCacheBindings(program);
|
|
238
|
+
if (cacheBindings.named.size === 0 && cacheBindings.namespaces.size === 0) return;
|
|
239
|
+
|
|
240
|
+
// Collect call sites per top-level statement so each call carries its
|
|
241
|
+
// enclosing statement's source text into the ID hash.
|
|
242
|
+
const callSites: Array<{ call: CallExpressionNode; stmt: PositionedNode }> = [];
|
|
243
|
+
for (const stmt of program.body) {
|
|
244
|
+
const calls: CallExpressionNode[] = [];
|
|
245
|
+
findCacheCallSites(stmt, cacheBindings, calls);
|
|
246
|
+
for (const call of calls) callSites.push({ call, stmt });
|
|
247
|
+
}
|
|
248
|
+
if (callSites.length === 0) return;
|
|
249
|
+
|
|
250
|
+
// Sort by position in file so occurrence indices among byte-identical
|
|
251
|
+
// (statement, call) pairs are assigned in deterministic source order
|
|
252
|
+
callSites.sort((a, b) => a.call.start - b.call.start);
|
|
253
|
+
|
|
254
|
+
const root = ctx.root || process.cwd();
|
|
255
|
+
const relPath = relative(root, id);
|
|
256
|
+
const s = new MagicString(code);
|
|
257
|
+
const occurrences = new Map<string, number>();
|
|
258
|
+
|
|
259
|
+
for (const { call, stmt } of callSites) {
|
|
260
|
+
const stmtText = code.slice(stmt.start, stmt.end);
|
|
261
|
+
const spanText = code.slice(call.start, call.end);
|
|
262
|
+
const dupKey = stmtText + String.fromCharCode(0) + spanText;
|
|
263
|
+
const occurrence = occurrences.get(dupKey) ?? 0;
|
|
264
|
+
occurrences.set(dupKey, occurrence + 1);
|
|
265
|
+
const stableId = generateStableId(relPath, stmtText, spanText, occurrence);
|
|
266
|
+
// Insert the stable ID as the 3rd argument directly after the last
|
|
267
|
+
// argument — NOT before the closing ')'. The call may already have a
|
|
268
|
+
// trailing comma after the options argument (Prettier v3 default for
|
|
269
|
+
// multiline calls); inserting before ')' would emit `,, "id"`, a
|
|
270
|
+
// parse error (TIM-1021). A trailing comma after the inserted
|
|
271
|
+
// argument remains valid JS.
|
|
272
|
+
const lastArg = call.arguments[call.arguments.length - 1];
|
|
273
|
+
s.appendLeft(lastArg.end, `, "${stableId}"`);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
code: s.toString(),
|
|
278
|
+
map: s.generateMap({ hires: 'boundary' }),
|
|
279
|
+
};
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Exported for testing
|
|
285
|
+
export { generateStableId };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client chunk grouping strategy for @vitejs/plugin-rsc.
|
|
3
|
+
*
|
|
4
|
+
* Groups client reference modules by layout boundary to balance route-scoped
|
|
5
|
+
* code splitting with HTTP request count. A constant group name would collapse
|
|
6
|
+
* all routes into one chunk (every page downloads every client component).
|
|
7
|
+
* Per-serverChunk grouping creates many sub-500B files. Layout-boundary
|
|
8
|
+
* grouping is the middle ground.
|
|
9
|
+
*
|
|
10
|
+
* See design/27-chunking-strategy.md, TIM-440, TIM-499.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { relative } from 'node:path';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Check whether a root-relative path lives under the app directory,
|
|
17
|
+
* and if so return the first non-group route segment.
|
|
18
|
+
*
|
|
19
|
+
* `appPrefix` is the root-relative app directory with a trailing slash
|
|
20
|
+
* (e.g. "app/" or "src/app/"), computed once from the resolved appDir
|
|
21
|
+
* and root. Matching uses `startsWith` — no ambiguity.
|
|
22
|
+
*
|
|
23
|
+
* Returns:
|
|
24
|
+
* { inApp: false } — path is not under app/
|
|
25
|
+
* { inApp: true, segment: null } — root of app/ (e.g. app/layout.tsx)
|
|
26
|
+
* { inApp: true, segment: "dashboard" } — nested route boundary
|
|
27
|
+
*/
|
|
28
|
+
function findAppBoundary(
|
|
29
|
+
path: string,
|
|
30
|
+
appPrefix: string
|
|
31
|
+
): { inApp: false } | { inApp: true; segment: string | null } {
|
|
32
|
+
const relPath = path.replace(/\\/g, '/');
|
|
33
|
+
if (!relPath.startsWith(appPrefix)) return { inApp: false };
|
|
34
|
+
|
|
35
|
+
const withinApp = relPath.slice(appPrefix.length);
|
|
36
|
+
const segments = withinApp.split('/');
|
|
37
|
+
|
|
38
|
+
for (const seg of segments) {
|
|
39
|
+
if (seg.includes('.')) break;
|
|
40
|
+
if (seg.startsWith('(') && seg.endsWith(')')) continue;
|
|
41
|
+
return { inApp: true, segment: seg };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return { inApp: true, segment: null };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Derive a chunk group name for a client reference module.
|
|
49
|
+
*
|
|
50
|
+
* Groups by the first non-group route segment under appDir so that all
|
|
51
|
+
* client components belonging to the same layout boundary land in one
|
|
52
|
+
* chunk. For example:
|
|
53
|
+
* - `facade:app/dashboard/settings/page.tsx` → `"client-dashboard"`
|
|
54
|
+
* - `facade:app/(group-a)/group-page-a/page.tsx` → `"client-group-page-a"`
|
|
55
|
+
* - `facade:app/layout.tsx` (root layout) → `"client-shared"`
|
|
56
|
+
* - `shared:...` (shared across chunks) → `"client-shared"`
|
|
57
|
+
*
|
|
58
|
+
* When a 'use client' module lives outside the app directory (e.g. in
|
|
59
|
+
* src/posts/ or src/components/), the function falls back to deriving
|
|
60
|
+
* the layout boundary from the serverChunk's facade path. This prevents
|
|
61
|
+
* lazily-loaded client dependencies (e.g. via import.meta.glob) from
|
|
62
|
+
* being hoisted into the shared chunk when they're only used by a
|
|
63
|
+
* specific route.
|
|
64
|
+
*
|
|
65
|
+
* This balances route-scoped code splitting with HTTP request count:
|
|
66
|
+
* fewer chunks than per-serverChunk, but still avoids downloading every
|
|
67
|
+
* client component on every page.
|
|
68
|
+
*/
|
|
69
|
+
export function clientChunkGroup(
|
|
70
|
+
meta: { id: string; normalizedId: string; serverChunk: string },
|
|
71
|
+
appDir: string,
|
|
72
|
+
root: string
|
|
73
|
+
): string {
|
|
74
|
+
const { normalizedId, serverChunk } = meta;
|
|
75
|
+
|
|
76
|
+
// Shared chunks (not associated with a single route entry) get one group.
|
|
77
|
+
if (serverChunk.startsWith('shared:')) return 'client-shared';
|
|
78
|
+
|
|
79
|
+
// Compute the root-relative app directory prefix once. Both normalizedId
|
|
80
|
+
// and serverChunk paths from the RSC plugin are root-relative (via
|
|
81
|
+
// path.relative(root, absoluteId)), so this prefix matches exactly —
|
|
82
|
+
// no ambiguity with content directories that happen to share a name.
|
|
83
|
+
const appPrefix = relative(root, appDir).replace(/\\/g, '/') + '/';
|
|
84
|
+
|
|
85
|
+
// Try the client module's own path first.
|
|
86
|
+
const result = findAppBoundary(normalizedId, appPrefix);
|
|
87
|
+
if (result.inApp && result.segment) return `client-${result.segment}`;
|
|
88
|
+
if (result.inApp) return 'client-shared';
|
|
89
|
+
|
|
90
|
+
// The client module lives outside the app directory (e.g. src/posts/,
|
|
91
|
+
// src/components/). Fall back to the serverChunk's facade path — the
|
|
92
|
+
// RSC entry point that imported this module — to derive the route's
|
|
93
|
+
// layout boundary. This keeps dependencies of lazily-loaded 'use client'
|
|
94
|
+
// components (e.g. from import.meta.glob) in per-route async chunks
|
|
95
|
+
// instead of hoisting them into client-shared.
|
|
96
|
+
if (serverChunk.startsWith('facade:')) {
|
|
97
|
+
const facadePath = serverChunk.slice('facade:'.length).replace(/\\/g, '/');
|
|
98
|
+
const facadeResult = findAppBoundary(facadePath, appPrefix);
|
|
99
|
+
if (facadeResult.inApp && facadeResult.segment) return `client-${facadeResult.segment}`;
|
|
100
|
+
if (facadeResult.inApp) return 'client-shared';
|
|
101
|
+
|
|
102
|
+
// Both module and facade are outside app/. Derive a chunk name from
|
|
103
|
+
// the full facade path to keep these isolated from client-shared.
|
|
104
|
+
// Uses the full path (minus extension) to avoid collisions between
|
|
105
|
+
// facades with the same basename (e.g. foo/index.mdx vs bar/index.mdx).
|
|
106
|
+
const facadeName = facadePath.replace(/\.[^.]+$/, '').replace(/\//g, '-');
|
|
107
|
+
if (facadeName) return `client-${facadeName}`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Root-level files (layout.tsx, page.tsx directly in app/) go into the
|
|
111
|
+
// shared group since the root layout is loaded on every page.
|
|
112
|
+
return 'client-shared';
|
|
113
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* timber-cloudflare-wasm — Handle WASM modules for Cloudflare Workers builds.
|
|
3
|
+
*
|
|
4
|
+
* Cloudflare Workers can natively import `.wasm` files as compiled
|
|
5
|
+
* WebAssembly.Module. But Rolldown can't load `.wasm` files at build time.
|
|
6
|
+
*
|
|
7
|
+
* This plugin bridges the gap:
|
|
8
|
+
* 1. Adds the `workerd` resolve condition so libraries like @takumi-rs/wasm
|
|
9
|
+
* resolve to their Cloudflare-native entry (bare `.wasm` import)
|
|
10
|
+
* 2. Externalizes `.wasm` imports so Rolldown skips them
|
|
11
|
+
* 3. Copies the WASM files to the build output so wrangler can find them
|
|
12
|
+
*
|
|
13
|
+
* Only active for Cloudflare adapter production builds — every hook bails
|
|
14
|
+
* unless `isCloudflareBuild` was set in configResolved. In dev and non-CF
|
|
15
|
+
* builds, `.wasm` imports are left to Vite's own handling (?init / ?url or
|
|
16
|
+
* a clear build error), never silently externalized.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { basename, resolve, dirname } from 'node:path';
|
|
20
|
+
import { createHash } from 'node:crypto';
|
|
21
|
+
import { copyFile, mkdir, readFile } from 'node:fs/promises';
|
|
22
|
+
import type { Plugin, ResolvedConfig } from 'vite';
|
|
23
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
24
|
+
|
|
25
|
+
function isCloudflareAdapter(ctx: PluginContext): boolean {
|
|
26
|
+
const adapter = ctx.config.adapter as { name?: string } | undefined;
|
|
27
|
+
return adapter?.name === 'cloudflare';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function timberCloudflareWasm(ctx: PluginContext): Plugin[] {
|
|
31
|
+
// Resolved WASM files, keyed by absolute source path so two files that
|
|
32
|
+
// share a basename (e.g. lib_bg.wasm from two packages) don't collide.
|
|
33
|
+
// The value is the unique output basename used for the external import
|
|
34
|
+
// specifier and the copy destination.
|
|
35
|
+
const wasmFiles = new Map<string, string>();
|
|
36
|
+
const usedBasenames = new Set<string>();
|
|
37
|
+
let isCloudflareBuild = false;
|
|
38
|
+
|
|
39
|
+
const plugin: Plugin = {
|
|
40
|
+
name: 'timber-cloudflare-wasm',
|
|
41
|
+
|
|
42
|
+
configResolved(resolved: ResolvedConfig) {
|
|
43
|
+
if (resolved.command !== 'build') return;
|
|
44
|
+
if (!isCloudflareAdapter(ctx)) return;
|
|
45
|
+
isCloudflareBuild = true;
|
|
46
|
+
|
|
47
|
+
// Prepend `workerd` to resolve conditions for server environments
|
|
48
|
+
// so @takumi-rs/wasm/auto resolves to the Cloudflare-native entry
|
|
49
|
+
// (bare WASM import) instead of the Vite entry (?url + fetch).
|
|
50
|
+
// Must happen in configResolved because the RSC plugin sets its own
|
|
51
|
+
// conditions during config — merging via config() would lose them.
|
|
52
|
+
for (const envName of ['rsc', 'ssr']) {
|
|
53
|
+
const env = resolved.environments[envName];
|
|
54
|
+
if (!env) continue;
|
|
55
|
+
const conditions = env.resolve.conditions;
|
|
56
|
+
if (!conditions.includes('workerd')) {
|
|
57
|
+
conditions.unshift('workerd');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
// Strip /* @vite-ignore */ from @takumi-rs/wasm dynamic imports so
|
|
63
|
+
// Rolldown bundles them instead of leaving bare specifiers that fail
|
|
64
|
+
// at runtime on Cloudflare Workers (no node_modules).
|
|
65
|
+
transform(code, id) {
|
|
66
|
+
if (!isCloudflareBuild) return;
|
|
67
|
+
if (!id.includes('takumi')) return;
|
|
68
|
+
const stripped = code.replaceAll(
|
|
69
|
+
/\/\*\s*@vite-ignore\s*\*\/\s*\n\s*"@takumi-rs\/wasm"/g,
|
|
70
|
+
'"@takumi-rs/wasm"'
|
|
71
|
+
);
|
|
72
|
+
if (stripped !== code) return stripped;
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
resolveId: {
|
|
76
|
+
order: 'pre',
|
|
77
|
+
async handler(source, importer) {
|
|
78
|
+
if (!isCloudflareBuild) return;
|
|
79
|
+
if (!source.endsWith('.wasm')) return;
|
|
80
|
+
|
|
81
|
+
let absolutePath: string;
|
|
82
|
+
if (source.startsWith('.') && importer) {
|
|
83
|
+
absolutePath = resolve(dirname(importer), source);
|
|
84
|
+
} else {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let outputName = wasmFiles.get(absolutePath);
|
|
89
|
+
if (!outputName) {
|
|
90
|
+
outputName = basename(absolutePath);
|
|
91
|
+
if (usedBasenames.has(outputName)) {
|
|
92
|
+
// Another wasm file already claimed this basename — disambiguate
|
|
93
|
+
// with a short content hash so both files land in the output.
|
|
94
|
+
const hash = createHash('sha256')
|
|
95
|
+
.update(await readFile(absolutePath))
|
|
96
|
+
.digest('hex')
|
|
97
|
+
.slice(0, 8);
|
|
98
|
+
outputName = outputName.replace(/\.wasm$/, `.${hash}.wasm`);
|
|
99
|
+
}
|
|
100
|
+
usedBasenames.add(outputName);
|
|
101
|
+
wasmFiles.set(absolutePath, outputName);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return { id: './' + outputName, external: true };
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
async writeBundle(options, bundle) {
|
|
109
|
+
if (!isCloudflareBuild) return;
|
|
110
|
+
if (wasmFiles.size === 0) return;
|
|
111
|
+
|
|
112
|
+
const outDir = options.dir;
|
|
113
|
+
if (!outDir) return;
|
|
114
|
+
|
|
115
|
+
// Find which output chunks reference WASM files and copy the WASM
|
|
116
|
+
// to the same directory so the relative imports resolve correctly.
|
|
117
|
+
const targetDirs = new Set<string>();
|
|
118
|
+
for (const chunk of Object.values(bundle)) {
|
|
119
|
+
if (chunk.type !== 'chunk') continue;
|
|
120
|
+
for (const outputName of wasmFiles.values()) {
|
|
121
|
+
if (chunk.code.includes(outputName)) {
|
|
122
|
+
targetDirs.add(dirname(resolve(outDir, chunk.fileName)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (targetDirs.size === 0) return;
|
|
128
|
+
|
|
129
|
+
const copies: Promise<void>[] = [];
|
|
130
|
+
for (const dir of targetDirs) {
|
|
131
|
+
await mkdir(dir, { recursive: true });
|
|
132
|
+
for (const [absolutePath, outputName] of wasmFiles) {
|
|
133
|
+
copies.push(copyFile(absolutePath, resolve(dir, outputName)));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
await Promise.all(copies);
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
return [plugin];
|
|
141
|
+
}
|
package/src/plugins/content.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
import type { Plugin } from 'vite';
|
|
12
12
|
import { existsSync } from 'node:fs';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
import type { PluginContext } from '
|
|
14
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
15
15
|
|
|
16
16
|
const CONFIG_FILE_NAMES = [
|
|
17
17
|
'content-collections.ts',
|