@timber-js/app 0.2.0-alpha.21 → 0.2.0-alpha.211
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/agent-skill.md +346 -0
- package/bin/timber.mjs +15 -1
- package/dist/_chunks/actions-Rjk4htmA.js +1199 -0
- package/dist/_chunks/actions-Rjk4htmA.js.map +1 -0
- package/dist/_chunks/als-registry-DaxkVjt5.js +45 -0
- package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/build-output-helper-RV_BRcF1.js +367 -0
- package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
- package/dist/_chunks/cache-api-DGdYfNJn.js +1182 -0
- package/dist/_chunks/cache-api-DGdYfNJn.js.map +1 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/chains-DGX9zmg9.js +272 -0
- package/dist/_chunks/chains-DGX9zmg9.js.map +1 -0
- package/dist/_chunks/classify-QwG5rxKI.js +147 -0
- package/dist/_chunks/classify-QwG5rxKI.js.map +1 -0
- package/dist/_chunks/cli-check-ajNY3B2e.js +252 -0
- package/dist/_chunks/cli-check-ajNY3B2e.js.map +1 -0
- package/dist/_chunks/cli-context-By7k2xVo.js +70 -0
- package/dist/_chunks/cli-context-By7k2xVo.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D2eI8jEg.js +299 -0
- package/dist/_chunks/cli-schema-sync-D2eI8jEg.js.map +1 -0
- package/dist/_chunks/client-dep-entries-2HCF09no.js +66 -0
- package/dist/_chunks/client-dep-entries-2HCF09no.js.map +1 -0
- package/dist/_chunks/cloudflare-Byxl8FWP.js +1333 -0
- package/dist/_chunks/cloudflare-Byxl8FWP.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/codegen-Bps1sLKJ.js +432 -0
- package/dist/_chunks/codegen-Bps1sLKJ.js.map +1 -0
- package/dist/_chunks/convention-lint-DLmhGsRS.js +590 -0
- package/dist/_chunks/convention-lint-DLmhGsRS.js.map +1 -0
- package/dist/_chunks/dev-server-TFpEwm3H.js +2039 -0
- package/dist/_chunks/dev-server-TFpEwm3H.js.map +1 -0
- package/dist/_chunks/dist-DtrJyBbw.js +386 -0
- package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
- package/dist/_chunks/error-boundary-DsNScGRM.js +1024 -0
- package/dist/_chunks/error-boundary-DsNScGRM.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/format-BKclgVbk.js +14 -0
- package/dist/_chunks/format-BKclgVbk.js.map +1 -0
- package/dist/_chunks/fs-identity-BRKuL215.js +207 -0
- package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
- package/dist/_chunks/graph-cache-CYiUS2aS.js +303 -0
- package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
- package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
- package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
- package/dist/_chunks/json-lossy-check-CVuRs2hG.js +66 -0
- package/dist/_chunks/json-lossy-check-CVuRs2hG.js.map +1 -0
- package/dist/_chunks/live-graph-cNuWMYQI.js +151 -0
- package/dist/_chunks/live-graph-cNuWMYQI.js.map +1 -0
- package/dist/_chunks/logger-BP0LN6vP.js +662 -0
- package/dist/_chunks/logger-BP0LN6vP.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DSDjM_hJ.js} +71 -27
- package/dist/_chunks/metadata-routes-DSDjM_hJ.js.map +1 -0
- package/dist/_chunks/navigation-root-BQfo1-kG.js +126 -0
- package/dist/_chunks/navigation-root-BQfo1-kG.js.map +1 -0
- package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
- package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
- package/dist/_chunks/plugin-context-BPBPc3lL.js +345 -0
- package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
- package/dist/_chunks/poison-scan-CfQ3unZR.js +99 -0
- package/dist/_chunks/poison-scan-CfQ3unZR.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
- package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-dffcs4jp.js +54 -0
- package/dist/_chunks/rsc-payload-path-dffcs4jp.js.map +1 -0
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/scanner-DmqdxzbW.js +2056 -0
- package/dist/_chunks/scanner-DmqdxzbW.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-xtPUGfdq.js +137 -0
- package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
- package/dist/_chunks/segment-keys-D5hu1hz4.js +62 -0
- package/dist/_chunks/segment-keys-D5hu1hz4.js.map +1 -0
- package/dist/_chunks/singleflight-BeVMMKi0.js +55 -0
- package/dist/_chunks/singleflight-BeVMMKi0.js.map +1 -0
- package/dist/_chunks/sizeof-BM1409x2.js +36 -0
- package/dist/_chunks/sizeof-BM1409x2.js.map +1 -0
- package/dist/_chunks/ssr-data-nA3I70_n.js +49 -0
- package/dist/_chunks/ssr-data-nA3I70_n.js.map +1 -0
- package/dist/_chunks/state-BhNGPsdi.js +50 -0
- package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
- package/dist/_chunks/status-page-marker-BRX9Ib-d.js +564 -0
- package/dist/_chunks/status-page-marker-BRX9Ib-d.js.map +1 -0
- package/dist/_chunks/tree-match-6yihorhk.js +169 -0
- package/dist/_chunks/tree-match-6yihorhk.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/walkers-Czu2jXFq.js +144 -0
- package/dist/_chunks/walkers-Czu2jXFq.js.map +1 -0
- package/dist/_chunks/write-file-atomic-D1qWqHb4.js +32 -0
- package/dist/_chunks/write-file-atomic-D1qWqHb4.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/canonicalize-module.d.ts +8 -0
- package/dist/adapters/canonicalize-module.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 +74 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +123 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +224 -24
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +25 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +63 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro-presets.d.ts +31 -0
- package/dist/adapters/nitro-presets.d.ts.map +1 -0
- package/dist/adapters/nitro-preview.d.ts +64 -0
- package/dist/adapters/nitro-preview.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +54 -37
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +631 -359
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +67 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +122 -16
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +0 -0
- package/dist/analyze/chains.d.ts +124 -0
- package/dist/analyze/chains.d.ts.map +1 -0
- package/dist/analyze/classify.d.ts +153 -0
- package/dist/analyze/classify.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.d.ts +17 -0
- package/dist/analyze/crawl-entry.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.js +314 -0
- package/dist/analyze/crawl-entry.js.map +1 -0
- package/dist/analyze/crawl.d.ts +134 -0
- package/dist/analyze/crawl.d.ts.map +1 -0
- package/dist/analyze/graph-cache.d.ts +104 -0
- package/dist/analyze/graph-cache.d.ts.map +1 -0
- package/dist/analyze/graph-command.d.ts +43 -0
- package/dist/analyze/graph-command.d.ts.map +1 -0
- package/dist/analyze/graph-command.js +472 -0
- package/dist/analyze/graph-command.js.map +1 -0
- package/dist/analyze/live-graph.d.ts +81 -0
- package/dist/analyze/live-graph.d.ts.map +1 -0
- package/dist/analyze/poison-rules.d.ts +72 -0
- package/dist/analyze/poison-rules.d.ts.map +1 -0
- package/dist/analyze/poison-scan.d.ts +48 -0
- package/dist/analyze/poison-scan.d.ts.map +1 -0
- package/dist/analyze/scan.d.ts +73 -0
- package/dist/analyze/scan.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/fast-hash.d.ts +5 -0
- package/dist/cache/fast-hash.d.ts.map +1 -1
- package/dist/cache/handler-store.d.ts +33 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +32 -9
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +3 -326
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/json-lossy-check.d.ts +11 -0
- package/dist/cache/json-lossy-check.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +141 -9
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +21 -2
- 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/store.d.ts +53 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.js +29 -0
- package/dist/cache/stores/cloudflare-kv.js.map +1 -0
- package/dist/cache/stores/memory.d.ts +42 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/memory.js +90 -0
- package/dist/cache/stores/memory.js.map +1 -0
- package/dist/cache/stores/redis.d.ts +69 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/stores/redis.js +35 -0
- package/dist/cache/stores/redis.js.map +1 -0
- package/dist/cache/stores/vercel.d.ts +36 -0
- package/dist/cache/stores/vercel.d.ts.map +1 -0
- package/dist/cache/stores/vercel.js +33 -0
- package/dist/cache/stores/vercel.js.map +1 -0
- package/dist/cache/tag-aware-handler.d.ts +52 -0
- package/dist/cache/tag-aware-handler.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +21 -11
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +23 -0
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
- package/dist/cdn/cloudflare-purge.js +30 -0
- package/dist/cdn/cloudflare-purge.js.map +1 -0
- package/dist/cdn/fastly-purge.d.ts +25 -0
- package/dist/cdn/fastly-purge.d.ts.map +1 -0
- package/dist/cdn/fastly-purge.js +33 -0
- package/dist/cdn/fastly-purge.js.map +1 -0
- package/dist/cdn/headers.d.ts +97 -0
- package/dist/cdn/headers.d.ts.map +1 -0
- package/dist/cdn/index.d.ts +5 -0
- package/dist/cdn/index.d.ts.map +1 -0
- package/dist/cdn/index.js +94 -0
- package/dist/cdn/index.js.map +1 -0
- package/dist/cdn/purge-store.d.ts +23 -0
- package/dist/cdn/purge-store.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.d.ts +20 -0
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.js +35 -0
- package/dist/cdn/workers-cache-purge.js.map +1 -0
- package/dist/cli-check.d.ts +133 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-context.d.ts +54 -0
- package/dist/cli-context.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +85 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +224 -63
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +42 -2
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/action-queue.d.ts +63 -0
- package/dist/client/browser-entry/action-queue.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 +53 -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 +41 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -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/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +58 -9
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -126
- package/dist/client/error-reconstituter.d.ts +55 -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/global-context.d.ts +15 -0
- package/dist/client/global-context.d.ts.map +1 -0
- package/dist/client/history.d.ts +50 -9
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +20 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +330 -1150
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +792 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +85 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/location-search.d.ts +12 -0
- package/dist/client/location-search.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +133 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +111 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +54 -36
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +106 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/navigation-transition.d.ts +192 -0
- package/dist/client/navigation-transition.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/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/react-root.d.ts +45 -0
- package/dist/client/react-root.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +137 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +98 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +84 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +334 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router-url.d.ts +24 -0
- package/dist/client/router-url.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +110 -28
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +186 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +68 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +15 -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/slot-content-cache-context.d.ts +35 -0
- package/dist/client/slot-content-cache-context.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +26 -50
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +21 -13
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.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 +13 -11
- 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 +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +15 -8
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +15 -8
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/use-segment-params.d.ts +55 -0
- 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 +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +323 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +68 -0
- package/dist/config-validation.d.ts.map +1 -0
- 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 +3 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +256 -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 +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +95 -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 +46 -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 +74 -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} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +15 -25
- 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 +112 -8
- 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/css.d.ts +1 -1
- 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 +5 -3
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +5 -5
- 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 +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -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 +35 -181
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8871 -14233
- 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 +262 -0
- package/dist/plugin-context.d.ts.map +1 -0
- 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 +61 -11
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/client-dep-entries.d.ts +44 -0
- package/dist/plugins/client-dep-entries.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-discovery.d.ts +123 -0
- package/dist/plugins/dev-discovery.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +24 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +34 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +35 -74
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/graph-endpoint.d.ts +112 -0
- package/dist/plugins/graph-endpoint.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts +18 -5
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/post-build.d.ts +110 -0
- package/dist/plugins/post-build.d.ts.map +1 -0
- package/dist/plugins/prebuilt-capture.d.ts +67 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +98 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +39 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/react-resolve.d.ts +49 -0
- package/dist/plugins/react-resolve.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
- package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
- 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 +246 -26
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +42 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +8 -3
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +91 -0
- package/dist/routing/export-detect.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 +13 -7
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception-overlap.d.ts +35 -0
- package/dist/routing/interception-overlap.d.ts.map +1 -0
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +14 -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 +114 -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/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +81 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -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 +14 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/rsc-runtime/transforms.d.ts +13 -0
- package/dist/rsc-runtime/transforms.d.ts.map +1 -0
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +98 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +44 -9
- 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 +40 -5
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +78 -40
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +166 -16
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- 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/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +149 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csp-nonce.d.ts +36 -0
- package/dist/server/csp-nonce.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +58 -15
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/debug.d.ts +0 -1
- package/dist/server/debug.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +23 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +257 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +21 -15
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +14 -12
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +102 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts +19 -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 +45 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/form-flash.d.ts +2 -2
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +257 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +84 -42
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +17 -54
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +195 -2922
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +11 -4
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/internal.d.ts +47 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4645 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/json-status-response.d.ts +34 -0
- package/dist/server/json-status-response.d.ts.map +1 -0
- package/dist/server/logger.d.ts +78 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +73 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-render.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +71 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +10 -2
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +20 -5
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +105 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +7 -3
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +83 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +193 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +70 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +7 -1
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +59 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +70 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +147 -23
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +31 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-render.d.ts +25 -0
- package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-routes.d.ts +37 -0
- package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +101 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +52 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/lifetime.d.ts +38 -0
- package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +106 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +101 -90
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/react-cache-bridge.d.ts +59 -0
- package/dist/server/react-cache-bridge.d.ts.map +1 -0
- package/dist/server/react-cache-scope.d.ts +49 -0
- package/dist/server/react-cache-scope.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +66 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +35 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +128 -103
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +57 -30
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +55 -38
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-dispatcher.d.ts +67 -0
- package/dist/server/rsc-entry/action-dispatcher.d.ts.map +1 -0
- 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 +19 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +55 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +35 -21
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +14 -59
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +30 -6
- 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/render-signals.d.ts +65 -0
- package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +98 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +30 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +12 -30
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -2
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +44 -7
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +39 -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/signal-identity.d.ts +43 -0
- package/dist/server/signal-identity.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -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/skippable-prefix.d.ts +29 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +138 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/ssr-bridge-types.d.ts +198 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +8 -47
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +60 -27
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +93 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +59 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +57 -26
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +59 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +89 -8
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +50 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- 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/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/csrf-reject.d.ts +16 -0
- package/dist/shared/csrf-reject.d.ts.map +1 -0
- package/dist/shared/error-digest.d.ts +28 -0
- package/dist/shared/error-digest.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/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +110 -0
- package/dist/shared/payload-root.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/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +16 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +52 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +48 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.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 +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation-rsc.d.ts +21 -0
- package/dist/shims/navigation-rsc.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +10 -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/dist/utils/write-file-atomic.d.ts +17 -0
- package/dist/utils/write-file-atomic.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +239 -0
- package/docs/api/31-api-client.mdx +170 -0
- package/docs/api/32-api-cache.mdx +339 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +359 -0
- package/docs/api/35-api-typescript.mdx +91 -0
- package/docs/api/36-cli.mdx +202 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +227 -0
- package/docs/learn/04-access-control.mdx +115 -0
- package/docs/learn/05-the-flush-point.mdx +175 -0
- package/docs/learn/06-typed-params.mdx +275 -0
- package/docs/learn/07-typed-routes.mdx +108 -0
- package/docs/learn/08-forms-and-actions.mdx +146 -0
- package/docs/learn/09-streaming.mdx +140 -0
- package/docs/learn/10-caching.mdx +270 -0
- package/docs/learn/11-middleware.mdx +164 -0
- package/docs/learn/12-error-handling.mdx +192 -0
- package/docs/learn/13-deploying.mdx +287 -0
- package/llms.txt +55 -0
- package/package.json +120 -29
- package/src/adapters/build-output-helper.ts +353 -0
- package/src/adapters/canonicalize-module.ts +29 -0
- package/src/adapters/cloudflare-dev.ts +183 -0
- package/src/adapters/cloudflare-kv-cache.ts +207 -0
- package/src/adapters/cloudflare.ts +809 -150
- package/src/adapters/compress-module.ts +110 -86
- package/src/adapters/fs-identity.ts +155 -0
- package/src/adapters/nitro-presets.ts +124 -0
- package/src/adapters/nitro-preview.ts +476 -0
- package/src/adapters/nitro.ts +317 -457
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +283 -0
- package/src/adapters/types.ts +127 -17
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/analyze/chains.ts +411 -0
- package/src/analyze/classify.ts +259 -0
- package/src/analyze/crawl-entry.ts +68 -0
- package/src/analyze/crawl.ts +500 -0
- package/src/analyze/graph-cache.ts +331 -0
- package/src/analyze/graph-command.ts +762 -0
- package/src/analyze/live-graph.ts +232 -0
- package/src/analyze/poison-rules.ts +165 -0
- package/src/analyze/poison-scan.ts +159 -0
- package/src/analyze/scan.ts +149 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/fast-hash.ts +5 -0
- package/src/cache/handler-store.ts +76 -0
- package/src/cache/index.ts +115 -22
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +69 -0
- package/src/cache/redis-handler.ts +198 -20
- package/src/cache/singleflight.ts +72 -6
- package/src/cache/sizeof.ts +35 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +254 -0
- package/src/cache/timber-cache.ts +165 -40
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +23 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +34 -0
- package/src/cli-check.ts +417 -0
- package/src/cli-context.ts +119 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +330 -78
- package/src/client/browser-dev.ts +192 -5
- package/src/client/browser-entry/action-dispatch.ts +237 -0
- package/src/client/browser-entry/action-queue.ts +152 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +143 -0
- package/src/client/browser-entry/index.ts +120 -0
- package/src/client/browser-entry/post-hydration.ts +99 -0
- package/src/client/browser-entry/router-init.ts +406 -0
- package/src/client/browser-entry/rsc-stream.ts +145 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +279 -61
- package/src/client/error-reconstituter.tsx +84 -0
- package/src/client/form.tsx +36 -32
- package/src/client/global-context.ts +31 -0
- package/src/client/history.ts +74 -11
- package/src/client/index.ts +89 -53
- package/src/client/internal.ts +54 -0
- package/src/client/link.tsx +468 -151
- package/src/client/location-search.ts +15 -0
- package/src/client/navigation-api.ts +380 -0
- package/src/client/navigation-commit.ts +318 -0
- package/src/client/navigation-context.ts +67 -134
- package/src/client/navigation-root.tsx +236 -0
- package/src/client/navigation-transition.ts +337 -0
- package/src/client/nuqs-adapter.tsx +21 -9
- package/src/client/params-context.ts +187 -0
- package/src/client/react-root.ts +82 -0
- package/src/client/router-effects.ts +235 -0
- package/src/client/router-lifecycle.ts +354 -0
- package/src/client/router-pipeline.ts +458 -0
- package/src/client/router-ref.ts +3 -3
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +370 -0
- package/src/client/router-url.ts +32 -0
- package/src/client/router.ts +491 -424
- package/src/client/rsc-fetch.ts +510 -109
- package/src/client/segment-cache.ts +362 -41
- package/src/client/segment-context.ts +7 -4
- package/src/client/segment-outlet.tsx +96 -0
- package/src/client/segment-update-context.ts +23 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-content-cache-context.ts +43 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -0
- package/src/client/ssr-data.ts +27 -67
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +31 -24
- package/src/client/status-page-marker.tsx +32 -0
- package/src/client/top-loader.tsx +13 -10
- package/src/client/unload-guard.ts +35 -3
- package/src/client/use-cookie.ts +70 -18
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +22 -31
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +31 -9
- package/src/client/use-search-params.ts +38 -49
- package/src/client/use-segment-params.ts +69 -0
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +149 -0
- package/src/config-types.ts +323 -0
- package/src/config-validation.ts +464 -0
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +13 -2
- 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 +55 -0
- package/src/dev-tools/dev-page-shell.ts +278 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +185 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +79 -0
- package/src/dev-tools/instrumentation.ts +261 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +25 -80
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +479 -128
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/css.ts +1 -1
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +101 -19
- package/src/fonts/local.ts +12 -11
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +513 -380
- 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 +502 -0
- package/src/plugins/build-manifest.ts +204 -36
- package/src/plugins/build-report.ts +299 -87
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/client-dep-entries.ts +78 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +31 -2
- package/src/plugins/dev-discovery.ts +218 -0
- package/src/plugins/dev-server.ts +360 -97
- package/src/plugins/entries.ts +149 -16
- package/src/plugins/fonts.ts +260 -657
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +108 -35
- package/src/plugins/post-build.ts +327 -0
- package/src/plugins/prebuilt-capture.ts +213 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +670 -0
- package/src/plugins/prerender-sugar.ts +316 -0
- package/src/plugins/react-resolve.ts +149 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +273 -277
- package/src/plugins/rsc-assets-manifest.ts +251 -0
- package/src/plugins/server-bundle.ts +99 -14
- package/src/plugins/shims.ts +260 -97
- package/src/plugins/static-build.ts +681 -71
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +163 -0
- package/src/routing/codegen.ts +349 -232
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +651 -0
- package/src/routing/export-detect.ts +536 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +16 -7
- package/src/routing/interception-overlap.ts +141 -0
- package/src/routing/interception.ts +1044 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +232 -0
- package/src/routing/scanner.ts +417 -223
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +99 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +82 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +51 -0
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +27 -0
- package/src/schema-bridge.ts +382 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +195 -56
- package/src/server/action-client.ts +126 -33
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +457 -111
- package/src/server/actions.ts +172 -85
- package/src/server/als-registry.ts +224 -25
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +116 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +454 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csp-nonce.ts +58 -0
- package/src/server/csrf.ts +228 -35
- package/src/server/debug.ts +0 -1
- package/src/server/default-logger.ts +100 -0
- package/src/server/default-status-page.ts +88 -0
- package/src/server/deny-boundary.ts +527 -0
- package/src/server/deny-renderer.ts +201 -179
- package/src/server/early-hints-sender.ts +4 -3
- package/src/server/early-hints.ts +39 -29
- package/src/server/error-boundary-wrapper.ts +160 -44
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/fallback-error.ts +88 -104
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +67 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/form-flash.ts +3 -3
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +512 -0
- package/src/server/html-injectors.ts +270 -255
- package/src/server/index.ts +36 -192
- package/src/server/instrumentation.ts +11 -4
- package/src/server/internal.ts +168 -0
- package/src/server/json-status-response.ts +105 -0
- package/src/server/logger.ts +126 -38
- package/src/server/metadata-collector.ts +177 -0
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +30 -8
- package/src/server/metadata-routes.ts +220 -24
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +23 -2
- package/src/server/middleware-runner.ts +32 -5
- package/src/server/node-stream-transforms.ts +323 -0
- package/src/server/nuqs-ssr-provider.tsx +8 -7
- package/src/server/param-coercion.ts +201 -0
- package/src/server/pipeline-helpers.ts +485 -0
- package/src/server/pipeline-interception.ts +241 -32
- package/src/server/pipeline-metadata.ts +15 -1
- package/src/server/pipeline-outcome.ts +290 -0
- package/src/server/pipeline-phases.ts +496 -0
- package/src/server/pipeline.ts +385 -427
- package/src/server/port-resolution.ts +53 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-render.ts +118 -0
- package/src/server/prebuilt/capture-routes.ts +104 -0
- package/src/server/prebuilt/capture-state.ts +196 -0
- package/src/server/prebuilt/key-discipline.ts +122 -0
- package/src/server/prebuilt/lifetime.ts +151 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +202 -0
- package/src/server/prebuilt/synthetic-store.ts +125 -0
- package/src/server/prebuilt-builder.ts +514 -0
- package/src/server/prebuilt-runtime.ts +813 -0
- package/src/server/primitives.ts +153 -171
- package/src/server/publish-params.ts +42 -0
- package/src/server/react-cache-bridge.ts +124 -0
- package/src/server/react-cache-scope.ts +104 -0
- package/src/server/render-timeout.ts +128 -0
- package/src/server/render-utils.ts +45 -0
- package/src/server/request-context.ts +269 -332
- package/src/server/request-dep.ts +37 -0
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +514 -355
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +67 -27
- package/src/server/route-matcher.ts +238 -267
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +122 -0
- package/src/server/rsc-entry/action-dispatcher.ts +142 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +130 -0
- package/src/server/rsc-entry/api-handler.ts +49 -81
- package/src/server/rsc-entry/deny-fallback.ts +151 -0
- package/src/server/rsc-entry/error-renderer.ts +301 -113
- package/src/server/rsc-entry/helpers.ts +90 -115
- package/src/server/rsc-entry/index.ts +370 -350
- package/src/server/rsc-entry/render-route.ts +229 -0
- package/src/server/rsc-entry/render-signals.ts +108 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
- package/src/server/rsc-entry/rsc-payload.ts +192 -72
- package/src/server/rsc-entry/rsc-stream.ts +128 -131
- package/src/server/rsc-entry/ssr-bridge.ts +19 -6
- package/src/server/rsc-entry/ssr-renderer.ts +300 -137
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/rsc-prop-warnings.ts +1 -1
- package/src/server/safe-load.ts +53 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/server-timing.ts +1 -1
- package/src/server/signal-identity.ts +112 -0
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +172 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +707 -300
- package/src/server/slot-subtree-contain.ts +273 -0
- package/src/server/ssr-bridge-types.ts +201 -0
- package/src/server/ssr-entry.ts +225 -104
- package/src/server/ssr-render.ts +354 -91
- package/src/server/ssr-wrappers.tsx +162 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +680 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +343 -0
- package/src/server/tracing.ts +163 -68
- package/src/server/tree-match.ts +494 -0
- package/src/server/types.ts +96 -11
- package/src/server/utils/element-type.ts +88 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/waituntil-bridge.ts +1 -1
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +74 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/csrf-reject.ts +15 -0
- package/src/shared/error-digest.ts +46 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +153 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +16 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +59 -0
- package/src/shared/rsc-payload-path.ts +52 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +109 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shared/status-reason-phrase.ts +61 -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 +36 -32
- package/src/shims/navigation-rsc.ts +47 -0
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/src/utils/write-file-atomic.ts +32 -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 +0 -88
- 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 +0 -109
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.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/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.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/types.d.ts +0 -14
- package/dist/client/types.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 +0 -92
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/content/index.d.ts +0 -11
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -2
- package/dist/plugins/adapter-build.d.ts +0 -18
- package/dist/plugins/adapter-build.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.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/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/asset-headers.d.ts +0 -42
- package/dist/server/asset-headers.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.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/server/tree-builder.d.ts +0 -126
- package/dist/server/tree-builder.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/head.ts +0 -61
- 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/types.ts +0 -21
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/client/use-params.ts +0 -141
- package/src/content/index.ts +0 -13
- package/src/plugins/adapter-build.ts +0 -118
- package/src/plugins/cache-transform.ts +0 -199
- 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/search-params/registry.ts +0 -31
- package/src/server/asset-headers.ts +0 -81
- package/src/server/client-module-map.ts +0 -58
- 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/server/tree-builder.ts +0 -382
- package/src/shims/server-only-noop.js +0 -6
- package/src/utils/directive-parser.ts +0 -529
|
@@ -0,0 +1,762 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graph-command — `timber graph <file> [--json] [--all --json]`.
|
|
3
|
+
*
|
|
4
|
+
* Answers "what environment(s) does this file run in?" by delegating
|
|
5
|
+
* to a running dev server when one is discovered (milliseconds), and
|
|
6
|
+
* falling back to the cold crawl + mtime-keyed cache otherwise
|
|
7
|
+
* (design/47 §5b). Dev-server responses are NOT cached in the mtime
|
|
8
|
+
* cache: live answers may include real browser-graph data.
|
|
9
|
+
*
|
|
10
|
+
* Config anchoring deliberately diverges from `check`/`build`: those
|
|
11
|
+
* discover the Vite config from the cwd ("the app here"), which is
|
|
12
|
+
* wrong for a file-addressed command invoked from a monorepo root —
|
|
13
|
+
* cwd anchoring would select the wrong app. `graph` walks UP from the
|
|
14
|
+
* target file's directory to the nearest Vite config and resolves from
|
|
15
|
+
* there, so the file's own app answers. `--config` overrides, same as
|
|
16
|
+
* everywhere else.
|
|
17
|
+
*
|
|
18
|
+
* Cold-path policy: a cold single-file query runs the full-project
|
|
19
|
+
* crawl (`--all` internally) and caches the entire report — one crawl
|
|
20
|
+
* per project state, every subsequent question a cache hit. The
|
|
21
|
+
* cache-hit path never imports Vite.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { execFile } from 'node:child_process';
|
|
25
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
26
|
+
import { mkdir, readFile, realpath, rm } from 'node:fs/promises';
|
|
27
|
+
import { request as httpRequest } from 'node:http';
|
|
28
|
+
import { request as httpsRequest } from 'node:https';
|
|
29
|
+
import { createRequire } from 'node:module';
|
|
30
|
+
import { dirname, join, relative, resolve, sep } from 'node:path';
|
|
31
|
+
import { fileURLToPath } from 'node:url';
|
|
32
|
+
import { promisify } from 'node:util';
|
|
33
|
+
import { DEV_DISCOVERY_DIR, isPidAlive, type DevRecord } from '../plugins/dev-discovery.ts';
|
|
34
|
+
import {
|
|
35
|
+
collectBaseFingerprintEntries,
|
|
36
|
+
computeProjectFingerprint,
|
|
37
|
+
fingerprintEntriesForFiles,
|
|
38
|
+
hashFingerprintEntries,
|
|
39
|
+
readGraphCache,
|
|
40
|
+
writeGraphCache,
|
|
41
|
+
GRAPH_CACHE_VERSION,
|
|
42
|
+
GRAPH_JSON_VERSION,
|
|
43
|
+
} from './graph-cache.ts';
|
|
44
|
+
import type { CrawlReport, GraphModuleReport } from './crawl.ts';
|
|
45
|
+
import type { ImportChain } from './chains.ts';
|
|
46
|
+
import { normalizeSlashes } from './scan.ts';
|
|
47
|
+
|
|
48
|
+
const execFileAsync = promisify(execFile);
|
|
49
|
+
|
|
50
|
+
export type GraphSource = 'dev-server' | 'static-scan';
|
|
51
|
+
|
|
52
|
+
/** Crawl deadline passed to the child, plus slack for its boot/exit. */
|
|
53
|
+
const CRAWL_TIMEOUT_MS = 120_000;
|
|
54
|
+
const SPAWN_SLACK_MS = 30_000;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Short timeout for the dev-server probe: the fast path must not hold
|
|
58
|
+
* the fallback hostage if the server is wedged or the connection hangs.
|
|
59
|
+
*/
|
|
60
|
+
const DEV_PROBE_TIMEOUT_MS = 2_000;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Vite's own default config file names, in Vite's precedence order.
|
|
64
|
+
* Matching the list (rather than globbing) keeps the walk-up aligned
|
|
65
|
+
* with what `createServer` would discover in each directory.
|
|
66
|
+
*/
|
|
67
|
+
const VITE_CONFIG_FILES = [
|
|
68
|
+
'vite.config.js',
|
|
69
|
+
'vite.config.mjs',
|
|
70
|
+
'vite.config.ts',
|
|
71
|
+
'vite.config.cjs',
|
|
72
|
+
'vite.config.mts',
|
|
73
|
+
'vite.config.cts',
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
export interface GraphOptions {
|
|
77
|
+
/** Target file; required unless `all`. */
|
|
78
|
+
file?: string;
|
|
79
|
+
/** Explicit Vite config path (overrides the walk-up discovery). */
|
|
80
|
+
config?: string;
|
|
81
|
+
json: boolean;
|
|
82
|
+
all: boolean;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Walk up from `startDir` to the nearest directory containing a Vite
|
|
87
|
+
* config file. Returns the config's absolute path, or null at the
|
|
88
|
+
* filesystem root.
|
|
89
|
+
*/
|
|
90
|
+
export function findViteConfigUpward(startDir: string): string | null {
|
|
91
|
+
let dir = startDir;
|
|
92
|
+
for (;;) {
|
|
93
|
+
for (const name of VITE_CONFIG_FILES) {
|
|
94
|
+
const candidate = join(dir, name);
|
|
95
|
+
if (existsSync(candidate)) return candidate;
|
|
96
|
+
}
|
|
97
|
+
const parent = dirname(dir);
|
|
98
|
+
if (parent === dir) return null;
|
|
99
|
+
dir = parent;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Max response body size (16 MB — matches the crawl child). */
|
|
104
|
+
const PROBE_MAX_BODY_BYTES = 16 * 1024 * 1024;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* HTTP(S) GET with a wall-clock deadline and response-size limit,
|
|
108
|
+
* returning the parsed JSON body or null on any failure. Uses
|
|
109
|
+
* node:http/https directly — `fetch` silently strips the Host header,
|
|
110
|
+
* which the endpoint's DNS-rebinding defense needs to see as `localhost`.
|
|
111
|
+
*
|
|
112
|
+
* The wall-clock timer covers both connection and body streaming —
|
|
113
|
+
* node's `timeout` option is an INACTIVITY timeout that resets on every
|
|
114
|
+
* chunk, so a slow-drip response would never fire it.
|
|
115
|
+
*/
|
|
116
|
+
function probeEndpoint(record: DevRecord, path: string, timeoutMs: number): Promise<unknown> {
|
|
117
|
+
return new Promise((resolve) => {
|
|
118
|
+
let settled = false;
|
|
119
|
+
const done = (value: unknown) => {
|
|
120
|
+
if (settled) return;
|
|
121
|
+
settled = true;
|
|
122
|
+
clearTimeout(wallClock);
|
|
123
|
+
resolve(value);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const probeHost =
|
|
127
|
+
record.host === '0.0.0.0' || record.host === '::' || record.host === ''
|
|
128
|
+
? '127.0.0.1'
|
|
129
|
+
: record.host;
|
|
130
|
+
const doRequest = record.protocol === 'https' ? httpsRequest : httpRequest;
|
|
131
|
+
const req = doRequest(
|
|
132
|
+
{
|
|
133
|
+
hostname: probeHost,
|
|
134
|
+
port: record.port,
|
|
135
|
+
path,
|
|
136
|
+
method: 'GET',
|
|
137
|
+
// Self-signed certs are normal for dev servers.
|
|
138
|
+
rejectUnauthorized: false,
|
|
139
|
+
},
|
|
140
|
+
(res) => {
|
|
141
|
+
if (res.statusCode !== 200) {
|
|
142
|
+
req.destroy();
|
|
143
|
+
done(null);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const chunks: Buffer[] = [];
|
|
147
|
+
let totalBytes = 0;
|
|
148
|
+
res.on('data', (chunk: Buffer) => {
|
|
149
|
+
totalBytes += chunk.length;
|
|
150
|
+
if (totalBytes > PROBE_MAX_BODY_BYTES) {
|
|
151
|
+
req.destroy();
|
|
152
|
+
done(null);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
chunks.push(chunk);
|
|
156
|
+
});
|
|
157
|
+
res.on('end', () => {
|
|
158
|
+
try {
|
|
159
|
+
const parsed = JSON.parse(Buffer.concat(chunks).toString('utf8')) as Record<
|
|
160
|
+
string,
|
|
161
|
+
unknown
|
|
162
|
+
>;
|
|
163
|
+
done(
|
|
164
|
+
parsed?.version === GRAPH_JSON_VERSION && parsed?.source === 'dev-server'
|
|
165
|
+
? parsed
|
|
166
|
+
: null
|
|
167
|
+
);
|
|
168
|
+
} catch {
|
|
169
|
+
done(null);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
res.on('error', () => done(null));
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
req.on('error', () => done(null));
|
|
176
|
+
|
|
177
|
+
const wallClock = setTimeout(() => {
|
|
178
|
+
req.destroy();
|
|
179
|
+
done(null);
|
|
180
|
+
}, timeoutMs);
|
|
181
|
+
req.end();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Try to delegate a graph query to a running dev server discovered via
|
|
187
|
+
* `.timber/dev/` records. Returns the parsed JSON response on success,
|
|
188
|
+
* null on any failure (missing dir, no live records, probe failure).
|
|
189
|
+
* Every failure mode is silent — the caller falls back to the cold crawl.
|
|
190
|
+
*/
|
|
191
|
+
async function tryDevServer(
|
|
192
|
+
configDir: string,
|
|
193
|
+
configFile: string,
|
|
194
|
+
queryString: string
|
|
195
|
+
): Promise<unknown> {
|
|
196
|
+
const dir = join(configDir, DEV_DISCOVERY_DIR);
|
|
197
|
+
let entries: string[];
|
|
198
|
+
try {
|
|
199
|
+
entries = readdirSync(dir);
|
|
200
|
+
} catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
for (const entry of entries) {
|
|
204
|
+
if (!entry.endsWith('.json')) continue;
|
|
205
|
+
let record: DevRecord;
|
|
206
|
+
try {
|
|
207
|
+
record = JSON.parse(readFileSync(join(dir, entry), 'utf8')) as DevRecord;
|
|
208
|
+
} catch {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (
|
|
212
|
+
typeof record.port !== 'number' ||
|
|
213
|
+
!Number.isInteger(record.port) ||
|
|
214
|
+
record.port < 1 ||
|
|
215
|
+
record.port > 65535 ||
|
|
216
|
+
typeof record.pid !== 'number' ||
|
|
217
|
+
!Number.isInteger(record.pid) ||
|
|
218
|
+
record.pid < 1 ||
|
|
219
|
+
typeof record.host !== 'string' ||
|
|
220
|
+
(record.protocol !== 'http' && record.protocol !== 'https')
|
|
221
|
+
) {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
// Skip records from a different Vite config (TIM-1393). Records
|
|
225
|
+
// without configFile (old servers) are accepted — rejecting them
|
|
226
|
+
// would break the fast path until every server restarts.
|
|
227
|
+
if (record.configFile && normalizeSlashes(record.configFile) !== normalizeSlashes(configFile))
|
|
228
|
+
continue;
|
|
229
|
+
if (!isPidAlive(record.pid)) continue;
|
|
230
|
+
let result: unknown;
|
|
231
|
+
try {
|
|
232
|
+
result = await probeEndpoint(record, `/__timber/graph${queryString}`, DEV_PROBE_TIMEOUT_MS);
|
|
233
|
+
} catch {
|
|
234
|
+
// http.request can throw synchronously on malformed hostnames
|
|
235
|
+
// (ERR_INVALID_CHAR) or other invalid options — treat as absent.
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (result) return result;
|
|
239
|
+
}
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Resolve the app root from the config file's own directory, reading
|
|
245
|
+
* it off the timber root-sync plugin api (the single supported way —
|
|
246
|
+
* cf. cli-check.ts). Only runs on the cold path.
|
|
247
|
+
*
|
|
248
|
+
* Resolution uses SERVE/development semantics, not build's: the crawl
|
|
249
|
+
* child evaluates this same config through `createServer` (dev), and
|
|
250
|
+
* the dev-server fast path answers from dev graphs — the dev graphs
|
|
251
|
+
* are the tool's ground truth (design/47 §Motivation). Resolving the
|
|
252
|
+
* root under build mode while crawling under serve would let a
|
|
253
|
+
* command/mode-branching config select one app and crawl another.
|
|
254
|
+
*/
|
|
255
|
+
async function resolveAppRoot(
|
|
256
|
+
configFile: string
|
|
257
|
+
): Promise<{ root: string; configFileDependencies: string[]; pageExtensions?: string[] }> {
|
|
258
|
+
const { resolveConfig } = await import('vite');
|
|
259
|
+
// Lazy for the same reason as Vite itself: plugin-context.ts has a
|
|
260
|
+
// module-level `parseAst` import from vite, so a static import here
|
|
261
|
+
// would make even warm cache hits pay Vite's startup cost — the
|
|
262
|
+
// cache-hit path must stay vite-free (design/47 §Cold-path policy).
|
|
263
|
+
const { isTimberPluginApi } = await import('../plugin-context.ts');
|
|
264
|
+
// Anchor Vite's cwd-relative defaults at the config's directory, not
|
|
265
|
+
// the caller's cwd — the whole point of the walk-up. The config's own
|
|
266
|
+
// explicit `root` option still wins over this cwd, as it should.
|
|
267
|
+
const previousCwd = process.cwd();
|
|
268
|
+
process.chdir(dirname(configFile));
|
|
269
|
+
// Route config-evaluation stdout to stderr for the duration: the
|
|
270
|
+
// app's config and plugin hooks run in THIS process, and any
|
|
271
|
+
// console.log from them would land in front of the --json contract,
|
|
272
|
+
// breaking JSON.parse(stdout) consumers. (The crawl child has the
|
|
273
|
+
// same problem solved by --out; this parent-side evaluation needs
|
|
274
|
+
// the equivalent.) Bind write() so its overloads keep their exact
|
|
275
|
+
// callback semantics.
|
|
276
|
+
const stdoutWrite = process.stdout.write;
|
|
277
|
+
process.stdout.write = process.stderr.write.bind(process.stderr) as typeof process.stdout.write;
|
|
278
|
+
try {
|
|
279
|
+
// TIMBER_ANALYZE and middlewareMode mirror the crawl child's boot:
|
|
280
|
+
// serve-mode config hooks otherwise start dev-only side effects in
|
|
281
|
+
// THIS process — the startup holding server binds the app's port
|
|
282
|
+
// and keeps the CLI alive forever (index.ts gates it on
|
|
283
|
+
// !middlewareMode), and platform dev plugins may open remote
|
|
284
|
+
// connections classification never needs.
|
|
285
|
+
process.env.TIMBER_ANALYZE = '1';
|
|
286
|
+
const {
|
|
287
|
+
plugins,
|
|
288
|
+
configFileDependencies,
|
|
289
|
+
resolve: resolveOptions,
|
|
290
|
+
} = await resolveConfig(
|
|
291
|
+
{ configFile, logLevel: 'error', server: { middlewareMode: true } },
|
|
292
|
+
'serve',
|
|
293
|
+
'development',
|
|
294
|
+
'development'
|
|
295
|
+
);
|
|
296
|
+
const rootSync = plugins.find((plugin) => plugin.name === 'timber-root-sync');
|
|
297
|
+
if (!rootSync || !isTimberPluginApi(rootSync.api)) {
|
|
298
|
+
throw new Error(
|
|
299
|
+
`[timber] ${configFile} does not produce the timber plugin.\n` +
|
|
300
|
+
` \`timber graph\` resolves the app through Vite so it classifies the same\n` +
|
|
301
|
+
` modules the build builds. Check that the config lists timber():\n\n` +
|
|
302
|
+
` import { timber } from '@timber-js/app';\n` +
|
|
303
|
+
` export default { plugins: [timber()] };\n`
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
// Same path space as the crawl's report.root — the hit path
|
|
307
|
+
// fingerprints cache.report.root, so a divergent space here
|
|
308
|
+
// (backslashes, or symlink-vs-physical) would make miss- and
|
|
309
|
+
// hit-path entry strings differ and the cache never match. Vite
|
|
310
|
+
// does NOT realpath its resolved root; the crawl realpaths unless
|
|
311
|
+
// resolve.preserveSymlinks keeps graphs on symlink paths — mirror
|
|
312
|
+
// that decision from the same resolved config.
|
|
313
|
+
const { normalizePath } = await import('vite');
|
|
314
|
+
const pluginCtx = rootSync.api.getContext();
|
|
315
|
+
const rawRoot = pluginCtx.root;
|
|
316
|
+
return {
|
|
317
|
+
root: normalizePath(resolveOptions.preserveSymlinks ? rawRoot : await realpath(rawRoot)),
|
|
318
|
+
// A config helper imported from OUTSIDE the app root (a shared
|
|
319
|
+
// vite.shared.ts beside a monorepo config) can reshape aliases,
|
|
320
|
+
// plugins, or timber options without touching anything the disk
|
|
321
|
+
// scan sees — the fingerprint must track these too. Vite's list
|
|
322
|
+
// covers the vite.config bundle; timber.config.ts is require()d
|
|
323
|
+
// by root-sync during resolveConfig, so its transitive imports
|
|
324
|
+
// live in require.cache and are collected from there.
|
|
325
|
+
configFileDependencies: [...configFileDependencies, ...collectTimberConfigDeps()],
|
|
326
|
+
pageExtensions: pluginCtx.config.pageExtensions,
|
|
327
|
+
};
|
|
328
|
+
} finally {
|
|
329
|
+
process.stdout.write = stdoutWrite;
|
|
330
|
+
process.chdir(previousCwd);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Transitive dependencies of the loaded timber.config, from
|
|
336
|
+
* require.cache: `loadTimberConfigFile` loads the config with native
|
|
337
|
+
* require() (design/11 §Config Loading Semantics), so after
|
|
338
|
+
* resolveConfig has run the config module and everything it imported —
|
|
339
|
+
* including helpers OUTSIDE the app root that Vite's
|
|
340
|
+
* configFileDependencies cannot see — sit in the cache with their
|
|
341
|
+
* children recorded. node_modules entries are skipped (the lockfile
|
|
342
|
+
* fingerprint covers them).
|
|
343
|
+
*/
|
|
344
|
+
function collectTimberConfigDeps(): string[] {
|
|
345
|
+
const require = createRequire(import.meta.url);
|
|
346
|
+
const cache = require.cache ?? {};
|
|
347
|
+
const roots = Object.values(cache).filter(
|
|
348
|
+
(mod): mod is NonNullable<typeof mod> =>
|
|
349
|
+
mod != null && /timber\.config\.(?:ts|js|mjs)$/.test(mod.filename)
|
|
350
|
+
);
|
|
351
|
+
const deps: string[] = [];
|
|
352
|
+
const seen = new Set<string>();
|
|
353
|
+
const queue = [...roots];
|
|
354
|
+
while (queue.length > 0) {
|
|
355
|
+
const mod = queue.shift()!;
|
|
356
|
+
if (seen.has(mod.filename)) continue;
|
|
357
|
+
seen.add(mod.filename);
|
|
358
|
+
if (mod.filename.includes(`${sep}node_modules${sep}`)) continue;
|
|
359
|
+
deps.push(mod.filename);
|
|
360
|
+
queue.push(...mod.children);
|
|
361
|
+
}
|
|
362
|
+
return deps;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Locate the crawl child entry beside this module: the built `.js` in
|
|
367
|
+
* a published install, the `.ts` source under tsx (tests, this repo).
|
|
368
|
+
*/
|
|
369
|
+
function resolveCrawlEntry(): { entry: string; nodeArgs: string[] } {
|
|
370
|
+
const jsEntry = fileURLToPath(new URL('./crawl-entry.js', import.meta.url));
|
|
371
|
+
if (existsSync(jsEntry)) return { entry: jsEntry, nodeArgs: [] };
|
|
372
|
+
const tsEntry = fileURLToPath(new URL('./crawl-entry.ts', import.meta.url));
|
|
373
|
+
return { entry: tsEntry, nodeArgs: ['--import', 'tsx/esm'] };
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/** Spawn the crawl child and read its report from the --out file. */
|
|
377
|
+
async function runColdCrawl(root: string, configFile: string): Promise<CrawlReport> {
|
|
378
|
+
const { entry, nodeArgs } = resolveCrawlEntry();
|
|
379
|
+
const outFile = join(root, '.timber', `graph-crawl-${process.pid}.json`);
|
|
380
|
+
await mkdir(dirname(outFile), { recursive: true });
|
|
381
|
+
try {
|
|
382
|
+
await execFileAsync(
|
|
383
|
+
process.execPath,
|
|
384
|
+
[
|
|
385
|
+
...nodeArgs,
|
|
386
|
+
entry,
|
|
387
|
+
'--root',
|
|
388
|
+
root,
|
|
389
|
+
'--config',
|
|
390
|
+
configFile,
|
|
391
|
+
'--out',
|
|
392
|
+
outFile,
|
|
393
|
+
'--timeout',
|
|
394
|
+
String(CRAWL_TIMEOUT_MS),
|
|
395
|
+
],
|
|
396
|
+
{
|
|
397
|
+
// Same cwd anchor as resolveAppRoot: a config that derives
|
|
398
|
+
// options from process.cwd() must evaluate identically in the
|
|
399
|
+
// resolution that selected the app and in the crawl that
|
|
400
|
+
// classifies it, or the two describe different apps. The app
|
|
401
|
+
// root still reaches the child explicitly via --root.
|
|
402
|
+
cwd: dirname(configFile),
|
|
403
|
+
// The child's BFS deadline handles hung transforms; this spawn
|
|
404
|
+
// timeout is the outer guard for a hang in createServer itself,
|
|
405
|
+
// which the deadline cannot cover (see crawl-entry.ts).
|
|
406
|
+
timeout: CRAWL_TIMEOUT_MS + SPAWN_SLACK_MS,
|
|
407
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
408
|
+
}
|
|
409
|
+
);
|
|
410
|
+
return JSON.parse(await readFile(outFile, 'utf8')) as CrawlReport;
|
|
411
|
+
} finally {
|
|
412
|
+
await rm(outFile, { force: true }).catch(() => {});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
interface GraphAnswer {
|
|
417
|
+
report: CrawlReport;
|
|
418
|
+
configFile: string;
|
|
419
|
+
cached: boolean;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Produce the full-project report: cache hit when the fingerprint
|
|
424
|
+
* matches, cold crawl otherwise.
|
|
425
|
+
*
|
|
426
|
+
* The scan-derived base entries are computed BEFORE the crawl — files
|
|
427
|
+
* changing mid-crawl make the next query miss, never the reverse. The
|
|
428
|
+
* `trackedExtras` (config dependencies + every file the report
|
|
429
|
+
* classifies) are only knowable after resolution and crawl, so their
|
|
430
|
+
* entries are stat'd afterwards; for those alone, a mid-crawl edit is
|
|
431
|
+
* stale-until-the-next-edit rather than an immediate miss.
|
|
432
|
+
*/
|
|
433
|
+
async function loadReport(configFile: string): Promise<GraphAnswer> {
|
|
434
|
+
// The cache is anchored at the config file's directory, NOT the
|
|
435
|
+
// resolved Vite root: knowing the root requires resolveConfig (which
|
|
436
|
+
// imports Vite), and the entire point of the hit path is answering
|
|
437
|
+
// without it. Reading and writing must use the same anchor — a split
|
|
438
|
+
// (read here, write under the resolved root) would never hit for a
|
|
439
|
+
// config whose `root` points elsewhere, silently re-crawling forever.
|
|
440
|
+
const cacheDir = dirname(configFile);
|
|
441
|
+
const cache = await readGraphCache(cacheDir);
|
|
442
|
+
if (cache && cache.configFile === configFile) {
|
|
443
|
+
const fingerprint = await computeProjectFingerprint(
|
|
444
|
+
cache.report.root,
|
|
445
|
+
configFile,
|
|
446
|
+
cache.trackedExtras,
|
|
447
|
+
cache.pageExtensions
|
|
448
|
+
);
|
|
449
|
+
if (fingerprint === cache.fingerprint) {
|
|
450
|
+
return { report: cache.report, configFile, cached: true };
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
const { root, configFileDependencies, pageExtensions } = await resolveAppRoot(configFile);
|
|
455
|
+
const baseEntries = await collectBaseFingerprintEntries(root, configFile, pageExtensions);
|
|
456
|
+
process.stderr.write('[timber] graph cache miss — cold project crawl (~2.5–10 s)\n');
|
|
457
|
+
// Config-dependency entries are snapshotted BEFORE the crawl, like
|
|
458
|
+
// the base entries: a config helper edited during the multi-second
|
|
459
|
+
// crawl must make the next query miss, not be stamped post-crawl
|
|
460
|
+
// with its new mtime beside a report built from its old contents.
|
|
461
|
+
const configDepEntries = await fingerprintEntriesForFiles(configFileDependencies);
|
|
462
|
+
const report = await runColdCrawl(root, configFile);
|
|
463
|
+
if (report.incomplete) {
|
|
464
|
+
// Deadline-truncated report: transient (slow machine, cold dep
|
|
465
|
+
// optimizer). Serve it — a truncated answer now beats none — but
|
|
466
|
+
// never cache it: with unchanged files it would be served forever,
|
|
467
|
+
// with no retry after the transient cause cleared.
|
|
468
|
+
process.stderr.write('[timber] crawl hit its deadline — serving truncated, uncached report\n');
|
|
469
|
+
return { report, configFile, cached: false };
|
|
470
|
+
}
|
|
471
|
+
const trackedExtras = [
|
|
472
|
+
...new Set([...configFileDependencies, ...report.modules.map((m) => m.file)]),
|
|
473
|
+
].sort();
|
|
474
|
+
// Report-file entries can only be stat'd post-crawl (the set is
|
|
475
|
+
// unknowable before); for those alone a mid-crawl edit is stale-
|
|
476
|
+
// until-next-edit. Files already covered pre-crawl (scan overlap,
|
|
477
|
+
// config deps) keep their pre-crawl entries — hashFingerprintEntries
|
|
478
|
+
// dedupes identical strings, and a mid-crawl edit produces a
|
|
479
|
+
// DIFFERENT post-crawl entry for the same path, which changes the
|
|
480
|
+
// hash and correctly misses on the next query.
|
|
481
|
+
const reportFileEntries = await fingerprintEntriesForFiles(report.modules.map((m) => m.file));
|
|
482
|
+
const fingerprint = hashFingerprintEntries([
|
|
483
|
+
...baseEntries,
|
|
484
|
+
...configDepEntries,
|
|
485
|
+
...reportFileEntries,
|
|
486
|
+
]);
|
|
487
|
+
await writeGraphCache(cacheDir, {
|
|
488
|
+
version: GRAPH_CACHE_VERSION,
|
|
489
|
+
fingerprint,
|
|
490
|
+
configFile,
|
|
491
|
+
pageExtensions,
|
|
492
|
+
trackedExtras,
|
|
493
|
+
report,
|
|
494
|
+
});
|
|
495
|
+
return { report, configFile, cached: false };
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/** Project-relative display path (JSON always stays absolute). */
|
|
499
|
+
function displayPath(file: string, root: string): string {
|
|
500
|
+
const rel = relative(root, file);
|
|
501
|
+
return rel.startsWith('..') ? file : rel;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Crawl errors that bear on one file's answer: failures on the file
|
|
506
|
+
* itself (recorded by path or by root-relative URL) plus scan-level
|
|
507
|
+
* failures, which undermine completeness for every file. Without this,
|
|
508
|
+
* a target whose own transform failed would print a confident `server`
|
|
509
|
+
* classification while only `--all` exposed the error (codex review,
|
|
510
|
+
* PR #1056).
|
|
511
|
+
*/
|
|
512
|
+
function errorsForTarget(report: CrawlReport, target: string): CrawlReport['errors'] {
|
|
513
|
+
const asUrl = '/' + relative(report.root, target).split('\\').join('/');
|
|
514
|
+
return report.errors.filter(
|
|
515
|
+
(error) => error.environment === 'scan' || error.id === target || error.id === asUrl
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
async function printSingleFile(
|
|
520
|
+
input: string,
|
|
521
|
+
target: string,
|
|
522
|
+
module: GraphModuleReport,
|
|
523
|
+
answer: GraphAnswer,
|
|
524
|
+
json: boolean
|
|
525
|
+
): Promise<void> {
|
|
526
|
+
const errors = errorsForTarget(answer.report, target);
|
|
527
|
+
if (json) {
|
|
528
|
+
console.log(
|
|
529
|
+
JSON.stringify({
|
|
530
|
+
version: GRAPH_JSON_VERSION,
|
|
531
|
+
source: 'static-scan' satisfies GraphSource,
|
|
532
|
+
cached: answer.cached,
|
|
533
|
+
target: { input, resolved: target },
|
|
534
|
+
kind: module.kind,
|
|
535
|
+
pending: module.pending,
|
|
536
|
+
subtreeUnknown: module.subtreeUnknown,
|
|
537
|
+
envs: module.envs,
|
|
538
|
+
boundary: module.boundary,
|
|
539
|
+
chains: module.chains,
|
|
540
|
+
poisonings: module.poisonings,
|
|
541
|
+
errors,
|
|
542
|
+
})
|
|
543
|
+
);
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const root = answer.report.root;
|
|
548
|
+
const envs = Object.entries(module.envs)
|
|
549
|
+
.filter(([, present]) => present)
|
|
550
|
+
.map(([env]) => env);
|
|
551
|
+
console.log(
|
|
552
|
+
`${displayPath(target, root)} — ${module.kind}` +
|
|
553
|
+
`${module.pending ? ' (pending: no graph has confirmed this file yet)' : ''}`
|
|
554
|
+
);
|
|
555
|
+
console.log(` source: static-scan${answer.cached ? ' (cached)' : ''}`);
|
|
556
|
+
console.log(` environments: ${envs.length > 0 ? envs.join(', ') : 'none'}`);
|
|
557
|
+
if (module.subtreeUnknown) {
|
|
558
|
+
console.log(' note: reachable, but its subtree is unknown (never transformed)');
|
|
559
|
+
}
|
|
560
|
+
if (module.chains.length > 0) {
|
|
561
|
+
// Lazy import: the text formatter pulls Vite (normalizePath); the
|
|
562
|
+
// JSON path above must stay import-free for fast cache hits.
|
|
563
|
+
const { formatChains } = await import('./chains.ts');
|
|
564
|
+
console.log(' import chains:');
|
|
565
|
+
console.log(formatChains(module.chains, root));
|
|
566
|
+
}
|
|
567
|
+
for (const poisoning of module.poisonings) {
|
|
568
|
+
console.log(
|
|
569
|
+
` poisoning: ${poisoning.description} (${poisoning.specifier}) — ` +
|
|
570
|
+
`implies ${poisoning.implies}`
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
for (const error of errors) {
|
|
574
|
+
console.log(` error [${error.environment}]: ${error.message} (${error.id})`);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* The single-file JSON contract shape for dev-server responses. Shared
|
|
580
|
+
* between the HTTP endpoint (graph-endpoint.ts) and this consumer so
|
|
581
|
+
* the boundary crossing is typed, not cast. The endpoint produces this
|
|
582
|
+
* shape; `probeEndpoint` parses it; `printDevServerText` formats it.
|
|
583
|
+
*/
|
|
584
|
+
interface DevServerFileResponse {
|
|
585
|
+
version: number;
|
|
586
|
+
source: string;
|
|
587
|
+
cached: boolean;
|
|
588
|
+
target: { input: string; resolved: string };
|
|
589
|
+
kind: string;
|
|
590
|
+
pending: boolean;
|
|
591
|
+
subtreeUnknown: boolean;
|
|
592
|
+
envs: Record<string, boolean>;
|
|
593
|
+
boundary: boolean;
|
|
594
|
+
chains: ImportChain[];
|
|
595
|
+
poisonings: Array<{ description: string; specifier: string; implies: string }>;
|
|
596
|
+
errors: Array<{ environment: string; message: string; id: string }>;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Text-mode output for a dev-server response. The response carries the
|
|
601
|
+
* same fields as the static-scan JSON, so the formatting mirrors
|
|
602
|
+
* `printSingleFile` with `source: "dev-server"`.
|
|
603
|
+
*/
|
|
604
|
+
async function printDevServerText(data: DevServerFileResponse, configDir: string): Promise<void> {
|
|
605
|
+
console.log(
|
|
606
|
+
`${displayPath(data.target.resolved, configDir)} — ${data.kind}` +
|
|
607
|
+
`${data.pending ? ' (pending: no graph has confirmed this file yet)' : ''}`
|
|
608
|
+
);
|
|
609
|
+
console.log(' source: dev-server');
|
|
610
|
+
const envList = Object.entries(data.envs)
|
|
611
|
+
.filter(([, present]) => present)
|
|
612
|
+
.map(([env]) => env);
|
|
613
|
+
console.log(` environments: ${envList.length > 0 ? envList.join(', ') : 'none'}`);
|
|
614
|
+
if (data.subtreeUnknown) {
|
|
615
|
+
console.log(' note: reachable, but its subtree is unknown (never transformed)');
|
|
616
|
+
}
|
|
617
|
+
if (data.chains.length > 0) {
|
|
618
|
+
const { formatChains } = await import('./chains.ts');
|
|
619
|
+
console.log(' import chains:');
|
|
620
|
+
console.log(formatChains(data.chains, configDir));
|
|
621
|
+
}
|
|
622
|
+
for (const poisoning of data.poisonings) {
|
|
623
|
+
console.log(
|
|
624
|
+
` poisoning: ${poisoning.description} (${poisoning.specifier}) — ` +
|
|
625
|
+
`implies ${poisoning.implies}`
|
|
626
|
+
);
|
|
627
|
+
}
|
|
628
|
+
for (const error of data.errors) {
|
|
629
|
+
console.log(` error [${error.environment}]: ${error.message} (${error.id})`);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* Run `timber graph`. Throws with actionable messages; the CLI's main()
|
|
635
|
+
* prints and exits nonzero.
|
|
636
|
+
*/
|
|
637
|
+
export async function runGraph(options: GraphOptions): Promise<void> {
|
|
638
|
+
if (options.all && !options.json) {
|
|
639
|
+
throw new Error(
|
|
640
|
+
'timber graph --all requires --json (no text format is defined for the full project).'
|
|
641
|
+
);
|
|
642
|
+
}
|
|
643
|
+
let target: { input: string; candidates: string[] } | null = null;
|
|
644
|
+
if (options.file) {
|
|
645
|
+
const resolved = resolve(process.cwd(), options.file);
|
|
646
|
+
if (!existsSync(resolved)) {
|
|
647
|
+
throw new Error(`[timber] file not found: ${resolved}`);
|
|
648
|
+
}
|
|
649
|
+
// Report paths are slash-normalized (normalizeSlashes) and usually
|
|
650
|
+
// realpaths — but under resolve.preserveSymlinks the graphs keep
|
|
651
|
+
// symlink paths. Look up BOTH forms rather than guessing the
|
|
652
|
+
// config's setting (the hit path is vite-free and cannot ask):
|
|
653
|
+
// as-typed first, realpath second.
|
|
654
|
+
const asTyped = normalizeSlashes(resolved);
|
|
655
|
+
const physical = normalizeSlashes(await realpath(resolved));
|
|
656
|
+
target = {
|
|
657
|
+
input: options.file,
|
|
658
|
+
candidates: asTyped === physical ? [asTyped] : [asTyped, physical],
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
if (!options.all && !target) {
|
|
662
|
+
throw new Error('Usage: timber graph <file> [--json], or timber graph --all --json');
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// Anchor config discovery at the AS-TYPED path (candidates[0]): under
|
|
666
|
+
// preserveSymlinks a symlinked target's realpath may live in a
|
|
667
|
+
// sibling workspace package, and walking up from there would select
|
|
668
|
+
// that package's config — or none — instead of the app the user
|
|
669
|
+
// addressed. The realpath candidate exists only for module lookup.
|
|
670
|
+
const anchor = target ? dirname(target.candidates[0]) : process.cwd();
|
|
671
|
+
const configFile = options.config
|
|
672
|
+
? resolve(process.cwd(), options.config)
|
|
673
|
+
: findViteConfigUpward(anchor);
|
|
674
|
+
if (!configFile || !existsSync(configFile)) {
|
|
675
|
+
throw new Error(
|
|
676
|
+
`[timber] no Vite config found walking up from ${anchor}.\n` +
|
|
677
|
+
` \`timber graph\` anchors config discovery at the target file (not the cwd)\n` +
|
|
678
|
+
` so the file's own app answers in a monorepo. Pass --config <path> to override.`
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
// Fast path: delegate to a running dev server if one is discovered.
|
|
683
|
+
// The query string mirrors the endpoint's contract — `?file=` for
|
|
684
|
+
// single-file, `?all=1` for the full project. The endpoint returns
|
|
685
|
+
// the same JSON contract the CLI prints, so on success the response
|
|
686
|
+
// is printed verbatim (JSON mode) or decoded and formatted (text).
|
|
687
|
+
// TIMBER_ANALYZE=1 suppresses delegation: the crawl child sets it
|
|
688
|
+
// to skip dev-server side effects, and it also prevents the child
|
|
689
|
+
// from discovering and probing the parent dev server's own endpoint.
|
|
690
|
+
const configDir = dirname(configFile);
|
|
691
|
+
const delegate = process.env.TIMBER_ANALYZE !== '1';
|
|
692
|
+
if (delegate && options.all) {
|
|
693
|
+
const live = await tryDevServer(configDir, configFile, '?all=1');
|
|
694
|
+
if (live) {
|
|
695
|
+
// --json is already guaranteed by the guard at the top.
|
|
696
|
+
console.log(JSON.stringify(live));
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
} else if (delegate && target) {
|
|
700
|
+
// The endpoint accepts absolute paths — pass the as-typed candidate
|
|
701
|
+
// (matching the CLI's own config anchoring, not the realpath).
|
|
702
|
+
const live = await tryDevServer(
|
|
703
|
+
configDir,
|
|
704
|
+
configFile,
|
|
705
|
+
`?file=${encodeURIComponent(target.candidates[0])}`
|
|
706
|
+
);
|
|
707
|
+
if (live) {
|
|
708
|
+
if (options.json) {
|
|
709
|
+
// Preserve the user's original input (e.g. "app/page.tsx") —
|
|
710
|
+
// the endpoint echoes the absolute path we sent as target.input,
|
|
711
|
+
// which would differ from the cold path's relative input.
|
|
712
|
+
const liveObj = live as Record<string, unknown>;
|
|
713
|
+
if (typeof liveObj.target === 'object' && liveObj.target !== null) {
|
|
714
|
+
(liveObj.target as Record<string, unknown>).input = target.input;
|
|
715
|
+
}
|
|
716
|
+
console.log(JSON.stringify(liveObj));
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
// The endpoint produces DevServerFileResponse by construction —
|
|
720
|
+
// both frontends use the same classification pipeline. This is
|
|
721
|
+
// the HTTP JSON boundary: probeEndpoint returns `unknown` from
|
|
722
|
+
// JSON.parse; we narrow here because the endpoint's shape is our
|
|
723
|
+
// own contract, not third-party data.
|
|
724
|
+
await printDevServerText(live as DevServerFileResponse, configDir);
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
// Cold path: mtime-keyed cache, then crawl.
|
|
730
|
+
const answer = await loadReport(configFile);
|
|
731
|
+
|
|
732
|
+
if (options.all) {
|
|
733
|
+
console.log(
|
|
734
|
+
JSON.stringify({
|
|
735
|
+
version: GRAPH_JSON_VERSION,
|
|
736
|
+
source: 'static-scan' satisfies GraphSource,
|
|
737
|
+
cached: answer.cached,
|
|
738
|
+
root: answer.report.root,
|
|
739
|
+
configFile: answer.configFile,
|
|
740
|
+
modules: answer.report.modules,
|
|
741
|
+
errors: answer.report.errors,
|
|
742
|
+
stats: answer.report.stats,
|
|
743
|
+
})
|
|
744
|
+
);
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
if (!target) {
|
|
749
|
+
// Unreachable — validated at the top; kept for type narrowing.
|
|
750
|
+
throw new Error('Usage: timber graph <file> [--json]');
|
|
751
|
+
}
|
|
752
|
+
const candidates = target.candidates;
|
|
753
|
+
const module = answer.report.modules.find((m) => candidates.includes(m.file));
|
|
754
|
+
if (!module) {
|
|
755
|
+
throw new Error(
|
|
756
|
+
`[timber] ${candidates[0]} is not part of the app at ${answer.report.root}\n` +
|
|
757
|
+
` (resolved from ${configFile}). Only project source files inside the app\n` +
|
|
758
|
+
` root are classified — node_modules and non-source files are not.`
|
|
759
|
+
);
|
|
760
|
+
}
|
|
761
|
+
await printSingleFile(target.input, module.file, module, answer, options.json);
|
|
762
|
+
}
|