@timber-js/app 0.2.0-alpha.207 → 0.2.0-alpha.209
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/dist/_chunks/{primitives-DLAnvsrk.js → actions-BerlqoXA.js} +640 -410
- package/dist/_chunks/actions-BerlqoXA.js.map +1 -0
- package/dist/_chunks/{als-registry-C6kcfprT.js → als-registry-DaxkVjt5.js} +6 -2
- package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
- package/dist/_chunks/{build-manifest-DTmSGLRz.js → build-manifest-DWppEdLB.js} +2 -51
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/{build-output-helper-9dqCv1pZ.js → build-output-helper-RV_BRcF1.js} +50 -53
- package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
- package/dist/_chunks/{cache-api-CUD9Ezaq.js → cache-api-CR23J_NC.js} +64 -32
- package/dist/_chunks/cache-api-CR23J_NC.js.map +1 -0
- package/dist/_chunks/{chains-B4bgOl2g.js → chains-CpFg56UB.js} +2 -2
- package/dist/_chunks/{chains-B4bgOl2g.js.map → chains-CpFg56UB.js.map} +1 -1
- package/dist/_chunks/{cli-check-G8o30ldg.js → cli-check-C6Ev6wBO.js} +11 -52
- package/dist/_chunks/cli-check-C6Ev6wBO.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--LZKs8Zn.js → cli-schema-sync-CbT2AUUI.js} +3 -3
- package/dist/_chunks/{cli-schema-sync--LZKs8Zn.js.map → cli-schema-sync-CbT2AUUI.js.map} +1 -1
- package/dist/_chunks/{cloudflare-BFb__LYG.js → cloudflare-Byxl8FWP.js} +96 -53
- package/dist/_chunks/{cloudflare-BFb__LYG.js.map → cloudflare-Byxl8FWP.js.map} +1 -1
- package/dist/_chunks/{convention-lint-5KzoMg_A.js → convention-lint-jKTwKwPe.js} +21 -6
- package/dist/_chunks/convention-lint-jKTwKwPe.js.map +1 -0
- package/dist/_chunks/{dev-server-BzBxgYAV.js → dev-server-C4WZdB7L.js} +15 -167
- package/dist/_chunks/dev-server-C4WZdB7L.js.map +1 -0
- package/dist/_chunks/{error-boundary-BndF-3Td.js → error-boundary-tA7kVfs4.js} +84 -104
- package/dist/_chunks/error-boundary-tA7kVfs4.js.map +1 -0
- package/dist/_chunks/{fs-identity-D7vb6GdI.js → fs-identity-BRKuL215.js} +3 -4
- package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
- package/dist/_chunks/{graph-cache-CP4GEmf9.js → graph-cache-CYiUS2aS.js} +4 -5
- package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
- package/dist/_chunks/{json-lossy-check-ClNvBM_3.js → json-lossy-check-ip0Qi0MT.js} +6 -3
- package/dist/_chunks/json-lossy-check-ip0Qi0MT.js.map +1 -0
- package/dist/_chunks/{live-graph-Bm5WTvcr.js → live-graph-Dv-JJCZw.js} +3 -3
- package/dist/_chunks/{live-graph-Bm5WTvcr.js.map → live-graph-Dv-JJCZw.js.map} +1 -1
- package/dist/_chunks/{logger-k2DQ4EUf.js → logger-DiDt5ppH.js} +192 -51
- package/dist/_chunks/logger-DiDt5ppH.js.map +1 -0
- package/dist/_chunks/{navigation-root-mHSK9psY.js → navigation-root-BQfo1-kG.js} +2 -2
- package/dist/_chunks/{navigation-root-mHSK9psY.js.map → navigation-root-BQfo1-kG.js.map} +1 -1
- package/dist/_chunks/{plugin-context-8idfR3UZ.js → plugin-context-BPBPc3lL.js} +28 -4
- package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
- package/dist/_chunks/{poison-scan-DG5eI2_z.js → poison-scan-CpeT6_OJ.js} +2 -2
- package/dist/_chunks/{poison-scan-DG5eI2_z.js.map → poison-scan-CpeT6_OJ.js.map} +1 -1
- package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
- package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
- package/dist/_chunks/{rsc-payload-path-B_LBodc2.js → rsc-payload-path-dffcs4jp.js} +9 -3
- package/dist/_chunks/{rsc-payload-path-B_LBodc2.js.map → rsc-payload-path-dffcs4jp.js.map} +1 -1
- package/dist/_chunks/{scanner-BQ5sPIJ7.js → scanner-Bw0oq1HB.js} +2 -2
- package/dist/_chunks/{scanner-BQ5sPIJ7.js.map → scanner-Bw0oq1HB.js.map} +1 -1
- package/dist/_chunks/{navigation-context-D0TU0Jog.js → segment-context-xtPUGfdq.js} +36 -34
- package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
- package/dist/_chunks/{singleflight-2lUWfcAk.js → singleflight-BeVMMKi0.js} +4 -3
- package/dist/_chunks/{singleflight-2lUWfcAk.js.map → singleflight-BeVMMKi0.js.map} +1 -1
- package/dist/_chunks/{sizeof-lXffQ1Vr.js → sizeof-UwzwB1uM.js} +3 -2
- package/dist/_chunks/sizeof-UwzwB1uM.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-FippDgxN.js → state-BhNGPsdi.js} +6 -8
- package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
- package/dist/_chunks/{status-page-marker-DwQBrLBz.js → status-page-marker-gaihi0KZ.js} +140 -28
- package/dist/_chunks/status-page-marker-gaihi0KZ.js.map +1 -0
- package/dist/_chunks/{walkers-CN2N_bA-.js → walkers-BXExhzzk.js} +2 -2
- package/dist/_chunks/{walkers-CN2N_bA-.js.map → walkers-BXExhzzk.js.map} +1 -1
- 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 +7 -7
- package/dist/adapters/build-output-helper.d.ts.map +1 -1
- package/dist/adapters/canonicalize-module.d.ts +8 -0
- package/dist/adapters/canonicalize-module.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +1 -1
- package/dist/adapters/cloudflare-kv-cache.js +2 -2
- package/dist/adapters/cloudflare.d.ts +30 -8
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -2
- package/dist/adapters/compress-module.d.ts +8 -0
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +2 -3
- package/dist/adapters/fs-identity.d.ts.map +1 -1
- package/dist/adapters/nitro-presets.d.ts +0 -6
- package/dist/adapters/nitro-presets.d.ts.map +1 -1
- package/dist/adapters/nitro-preview.d.ts +43 -11
- package/dist/adapters/nitro-preview.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +1 -13
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +291 -176
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +7 -2
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/types.d.ts +105 -21
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +0 -0
- package/dist/analyze/crawl-entry.js +3 -3
- package/dist/analyze/graph-cache.d.ts.map +1 -1
- package/dist/analyze/graph-command.js +4 -4
- package/dist/cache/index.js +2 -2
- package/dist/cache/json-lossy-check.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts.map +1 -1
- package/dist/cache/stores/memory.js +1 -1
- package/dist/cache/tag-aware-handler.d.ts.map +1 -1
- package/dist/cdn/workers-cache-purge.js +1 -1
- package/dist/cli-check.d.ts +7 -37
- package/dist/cli-check.d.ts.map +1 -1
- package/dist/cli-context.d.ts +54 -0
- package/dist/cli-context.d.ts.map +1 -0
- package/dist/cli.d.ts +9 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -24
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
- package/dist/client/browser-entry/hydrate.d.ts +19 -29
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
- package/dist/client/browser-entry/index.d.ts +7 -7
- package/dist/client/browser-entry/post-hydration.d.ts +6 -9
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -1
- package/dist/client/browser-entry/router-init.d.ts +6 -11
- package/dist/client/browser-entry/router-init.d.ts.map +1 -1
- package/dist/client/error-boundary.d.ts +4 -3
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +1 -1
- package/dist/client/error-reconstituter.d.ts +3 -9
- package/dist/client/error-reconstituter.d.ts.map +1 -1
- package/dist/client/history.d.ts +20 -11
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +3 -3
- package/dist/client/internal.d.ts.map +1 -1
- package/dist/client/internal.js +95 -108
- package/dist/client/internal.js.map +1 -1
- package/dist/client/navigation-commit.d.ts +20 -7
- package/dist/client/navigation-commit.d.ts.map +1 -1
- package/dist/client/navigation-context.d.ts +3 -5
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/react-root.d.ts +3 -2
- package/dist/client/react-root.d.ts.map +1 -1
- package/dist/client/router-pipeline.d.ts +3 -8
- package/dist/client/router-pipeline.d.ts.map +1 -1
- package/dist/client/router-types.d.ts +45 -39
- package/dist/client/router-types.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/client/rsc-fetch.d.ts +8 -4
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +44 -4
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/ssr-data.d.ts +18 -64
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/state.d.ts +2 -5
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts +1 -1
- package/dist/config-types.d.ts +2 -1
- package/dist/config-types.d.ts.map +1 -1
- package/dist/config-validation.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -1
- package/dist/dev-tools/dev-page-shell.d.ts +17 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -1
- package/dist/dev-tools/index.d.ts +1 -1
- package/dist/dev-tools/index.d.ts.map +1 -1
- package/dist/dev-tools/instrumentation.d.ts +17 -2
- package/dist/dev-tools/instrumentation.d.ts.map +1 -1
- package/dist/dev-tools/overlay.d.ts +6 -27
- package/dist/dev-tools/overlay.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +632 -373
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +26 -40
- package/dist/plugin-context.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +15 -2
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +19 -1
- package/dist/plugins/fonts.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 +11 -4
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -1
- package/dist/plugins/prebuilt.d.ts +17 -1
- package/dist/plugins/prebuilt.d.ts.map +1 -1
- package/dist/plugins/prerender-sugar.d.ts.map +1 -1
- package/dist/plugins/react-resolve.d.ts +49 -0
- package/dist/plugins/react-resolve.d.ts.map +1 -0
- package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
- package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +32 -9
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-write.d.ts +0 -9
- package/dist/routing/codegen-write.d.ts.map +1 -1
- package/dist/routing/index.js +2 -2
- package/dist/routing/segment-codegen.d.ts.map +1 -1
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-handler.d.ts +5 -4
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +46 -7
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +58 -5
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/children-interception.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +2 -23
- package/dist/server/cookie-context.d.ts.map +1 -1
- package/dist/server/csp-nonce.d.ts +0 -9
- package/dist/server/csp-nonce.d.ts.map +1 -1
- package/dist/server/csrf.d.ts +27 -4
- 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 +2 -1
- package/dist/server/default-logger.d.ts.map +1 -1
- package/dist/server/deny-boundary.d.ts +12 -6
- package/dist/server/deny-boundary.d.ts.map +1 -1
- package/dist/server/deny-renderer.d.ts +2 -2
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -3
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +9 -2
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/head-response.d.ts +4 -4
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +0 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +10 -3
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/internal.d.ts +1 -4
- package/dist/server/internal.d.ts.map +1 -1
- package/dist/server/internal.js +961 -581
- package/dist/server/internal.js.map +1 -1
- 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 +26 -0
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +11 -6
- package/dist/server/param-coercion.d.ts.map +1 -1
- package/dist/server/pipeline-helpers.d.ts +95 -7
- package/dist/server/pipeline-helpers.d.ts.map +1 -1
- package/dist/server/pipeline-interception.d.ts +11 -0
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +11 -1
- package/dist/server/pipeline-outcome.d.ts.map +1 -1
- package/dist/server/pipeline-phases.d.ts +2 -2
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/pipeline.d.ts +23 -35
- package/dist/server/pipeline.d.ts.map +1 -1
- 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 +79 -35
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -1
- package/dist/server/prebuilt/lifetime.d.ts +38 -0
- package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +7 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -1
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -1
- package/dist/server/prebuilt-builder.d.ts.map +1 -1
- package/dist/server/prebuilt-runtime.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +6 -81
- package/dist/server/primitives.d.ts.map +1 -1
- 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 +15 -0
- package/dist/server/render-timeout.d.ts.map +1 -1
- package/dist/server/render-utils.d.ts +9 -0
- package/dist/server/render-utils.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +26 -5
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +7 -0
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +22 -22
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -1
- package/dist/server/rsc-entry/api-handler.d.ts +7 -0
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +32 -6
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +11 -18
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +0 -1
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +5 -15
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +5 -6
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
- 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 +6 -16
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-payload.d.ts +7 -3
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +8 -53
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +2 -2
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +9 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -1
- package/dist/server/signal-identity.d.ts +43 -0
- package/dist/server/signal-identity.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +4 -3
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +91 -53
- package/dist/server/ssr-bridge-types.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +8 -5
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +26 -40
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +1 -1
- package/dist/server/static-generator.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +12 -0
- package/dist/server/stream-utils.d.ts.map +1 -1
- package/dist/server/tracing.d.ts +12 -16
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/types.d.ts +1 -1
- package/dist/server/version-skew.d.ts +3 -3
- 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/payload-root.d.ts +11 -10
- package/dist/shared/payload-root.d.ts.map +1 -1
- package/dist/shared/rsc-payload-path.d.ts +6 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -1
- 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 +17 -14
- package/docs/api/32-api-cache.mdx +51 -23
- package/docs/api/34-api-config.mdx +34 -6
- package/docs/api/36-cli.mdx +11 -1
- package/docs/learn/03-fetching-data.mdx +17 -1
- package/docs/learn/04-access-control.mdx +1 -1
- package/docs/learn/10-caching.mdx +29 -11
- package/docs/learn/11-middleware.mdx +8 -2
- package/docs/learn/12-error-handling.mdx +6 -1
- package/package.json +7 -3
- package/src/adapters/build-output-helper.ts +55 -53
- package/src/adapters/canonicalize-module.ts +29 -0
- package/src/adapters/cloudflare.ts +105 -63
- package/src/adapters/compress-module.ts +16 -5
- package/src/adapters/fs-identity.ts +2 -3
- package/src/adapters/nitro-presets.ts +0 -15
- package/src/adapters/nitro-preview.ts +272 -136
- package/src/adapters/nitro.ts +119 -82
- package/src/adapters/shared.ts +23 -14
- package/src/adapters/types.ts +110 -21
- package/src/analyze/graph-cache.ts +3 -4
- package/src/cache/json-lossy-check.ts +3 -9
- package/src/cache/singleflight.ts +5 -2
- package/src/cache/sizeof.ts +3 -1
- package/src/cache/tag-aware-handler.ts +43 -26
- package/src/cli-check.ts +8 -98
- package/src/cli-context.ts +119 -0
- package/src/cli.ts +19 -28
- package/src/client/browser-dev.ts +1 -1
- package/src/client/browser-entry/action-dispatch.ts +26 -4
- package/src/client/browser-entry/hydrate.ts +53 -58
- package/src/client/browser-entry/index.ts +16 -27
- package/src/client/browser-entry/post-hydration.ts +6 -40
- package/src/client/browser-entry/router-init.ts +66 -84
- package/src/client/error-boundary.tsx +9 -41
- package/src/client/error-reconstituter.tsx +10 -5
- package/src/client/history.ts +35 -21
- package/src/client/index.ts +0 -1
- package/src/client/internal.ts +2 -7
- package/src/client/navigation-commit.ts +41 -18
- package/src/client/navigation-context.ts +3 -39
- package/src/client/react-root.ts +3 -2
- package/src/client/router-pipeline.ts +96 -132
- package/src/client/router-types.ts +46 -44
- package/src/client/router-url.ts +32 -0
- package/src/client/router.ts +62 -21
- package/src/client/rsc-fetch.ts +117 -155
- package/src/client/segment-cache.ts +110 -11
- package/src/client/ssr-data.ts +19 -80
- package/src/client/state.ts +2 -9
- package/src/client/use-pathname.ts +1 -1
- package/src/config-types.ts +2 -1
- package/src/config-validation.ts +2 -1
- package/src/dev-tools/dev-page-shell.ts +18 -0
- package/src/dev-tools/index.ts +0 -2
- package/src/dev-tools/instrumentation.ts +50 -2
- package/src/dev-tools/overlay.ts +8 -238
- package/src/index.ts +26 -14
- package/src/plugin-context.ts +39 -40
- package/src/plugins/build-manifest.ts +4 -11
- package/src/plugins/build-report.ts +70 -70
- package/src/plugins/dev-server.ts +24 -44
- package/src/plugins/entries.ts +2 -1
- package/src/plugins/fonts.ts +35 -7
- package/src/plugins/post-build.ts +327 -0
- package/src/plugins/prebuilt-capture.ts +28 -32
- package/src/plugins/prebuilt.ts +54 -39
- package/src/plugins/prerender-sugar.ts +0 -4
- package/src/plugins/react-resolve.ts +149 -0
- package/src/plugins/{adapter-build.ts → rsc-assets-manifest.ts} +20 -109
- package/src/plugins/shims.ts +1 -0
- package/src/plugins/static-build.ts +42 -74
- package/src/routing/codegen-write.ts +25 -3
- package/src/routing/segment-codegen.ts +3 -2
- package/src/rsc-runtime/vendor-types.d.ts +8 -0
- package/src/server/access-gate.tsx +2 -1
- package/src/server/action-client.ts +1 -1
- package/src/server/action-handler.ts +253 -110
- package/src/server/actions.ts +73 -25
- package/src/server/als-registry.ts +73 -5
- package/src/server/chain-url-parts.ts +1 -1
- package/src/server/children-interception.ts +2 -1
- package/src/server/cookie-context.ts +18 -48
- package/src/server/csp-nonce.ts +0 -12
- package/src/server/csrf.ts +140 -8
- package/src/server/debug.ts +0 -1
- package/src/server/default-logger.ts +2 -1
- package/src/server/deny-boundary.ts +25 -13
- package/src/server/deny-renderer.ts +30 -97
- package/src/server/error-boundary-wrapper.ts +7 -3
- package/src/server/fallback-error.ts +26 -11
- package/src/server/flight-scripts.ts +1 -1
- package/src/server/head-response.ts +4 -4
- package/src/server/html-injector-core.ts +2 -2
- package/src/server/html-injectors.ts +2 -4
- package/src/server/index.ts +0 -4
- package/src/server/instrumentation.ts +10 -3
- package/src/server/internal.ts +1 -6
- package/src/server/json-status-response.ts +105 -0
- package/src/server/logger.ts +39 -3
- package/src/server/param-coercion.ts +15 -12
- package/src/server/pipeline-helpers.ts +257 -12
- package/src/server/pipeline-interception.ts +133 -0
- package/src/server/pipeline-outcome.ts +103 -31
- package/src/server/pipeline-phases.ts +127 -237
- package/src/server/pipeline.ts +204 -207
- 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 +155 -48
- package/src/server/prebuilt/lifetime.ts +151 -0
- package/src/server/prebuilt/slots.ts +14 -2
- package/src/server/prebuilt/synthetic-store.ts +3 -0
- package/src/server/prebuilt-builder.ts +30 -320
- package/src/server/prebuilt-runtime.ts +125 -129
- package/src/server/primitives.ts +8 -168
- package/src/server/react-cache-bridge.ts +124 -0
- package/src/server/react-cache-scope.ts +104 -0
- package/src/server/render-timeout.ts +20 -0
- package/src/server/render-utils.ts +11 -1
- package/src/server/request-context.ts +36 -9
- package/src/server/route-element-builder.ts +11 -6
- package/src/server/route-handler.ts +36 -23
- package/src/server/route-matcher.ts +15 -1
- package/src/server/rsc-entry/action-middleware-runner.ts +79 -123
- package/src/server/rsc-entry/api-handler.ts +27 -103
- package/src/server/rsc-entry/deny-fallback.ts +93 -26
- package/src/server/rsc-entry/error-renderer.ts +39 -91
- package/src/server/rsc-entry/helpers.ts +2 -4
- package/src/server/rsc-entry/index.ts +64 -58
- package/src/server/rsc-entry/render-route.ts +15 -80
- package/src/server/rsc-entry/render-signals.ts +108 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +56 -57
- package/src/server/rsc-entry/rsc-payload.ts +28 -61
- package/src/server/rsc-entry/rsc-stream.ts +113 -213
- package/src/server/rsc-entry/ssr-bridge.ts +2 -2
- package/src/server/rsc-entry/ssr-renderer.ts +182 -263
- package/src/server/rsc-entry/wrap-action-dispatch.ts +12 -14
- package/src/server/signal-identity.ts +112 -0
- package/src/server/slot-resolver.ts +18 -18
- package/src/server/slot-subtree-contain.ts +2 -1
- package/src/server/ssr-bridge-types.ts +92 -56
- package/src/server/ssr-entry.ts +87 -111
- package/src/server/ssr-render.ts +55 -64
- package/src/server/ssr-wrappers.tsx +2 -2
- package/src/server/static-generator.ts +7 -42
- package/src/server/static-not-found.ts +3 -3
- package/src/server/stream-utils.ts +51 -0
- package/src/server/tracing.ts +58 -75
- package/src/server/types.ts +1 -1
- package/src/server/version-skew.ts +5 -5
- package/src/shared/csrf-reject.ts +15 -0
- package/src/shared/error-digest.ts +46 -0
- package/src/shared/payload-root.ts +11 -10
- package/src/shared/rsc-payload-path.ts +8 -1
- package/src/utils/write-file-atomic.ts +32 -0
- package/dist/_chunks/actions-jNrXdzgs.js +0 -346
- package/dist/_chunks/actions-jNrXdzgs.js.map +0 -1
- package/dist/_chunks/als-registry-C6kcfprT.js.map +0 -1
- package/dist/_chunks/build-manifest-DTmSGLRz.js.map +0 -1
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +0 -1
- package/dist/_chunks/cache-api-CUD9Ezaq.js.map +0 -1
- package/dist/_chunks/cli-check-G8o30ldg.js.map +0 -1
- package/dist/_chunks/convention-lint-5KzoMg_A.js.map +0 -1
- package/dist/_chunks/dev-server-BzBxgYAV.js.map +0 -1
- package/dist/_chunks/error-boundary-BndF-3Td.js.map +0 -1
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +0 -1
- package/dist/_chunks/graph-cache-CP4GEmf9.js.map +0 -1
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +0 -1
- package/dist/_chunks/logger-k2DQ4EUf.js.map +0 -1
- package/dist/_chunks/navigation-context-D0TU0Jog.js.map +0 -1
- package/dist/_chunks/plugin-context-8idfR3UZ.js.map +0 -1
- package/dist/_chunks/primitives-DLAnvsrk.js.map +0 -1
- package/dist/_chunks/segment-context-D9_89u34.js +0 -34
- package/dist/_chunks/segment-context-D9_89u34.js.map +0 -1
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +0 -1
- package/dist/_chunks/ssr-data-D6T6Y3ef.js +0 -60
- package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +0 -1
- package/dist/_chunks/state-FippDgxN.js.map +0 -1
- package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +0 -1
- package/dist/client/types.d.ts +0 -14
- package/dist/client/types.d.ts.map +0 -1
- package/dist/plugins/adapter-build.d.ts +0 -38
- package/dist/plugins/adapter-build.d.ts.map +0 -1
- package/dist/server/asset-headers.d.ts +0 -32
- package/dist/server/asset-headers.d.ts.map +0 -1
- package/dist/server/dev-source-map.d.ts +0 -22
- package/dist/server/dev-source-map.d.ts.map +0 -1
- package/src/client/types.ts +0 -21
- package/src/server/asset-headers.ts +0 -59
- package/src/server/dev-source-map.ts +0 -31
|
@@ -3,15 +3,21 @@
|
|
|
3
3
|
// Primary deployment target. Generates a Workers-compatible entry point
|
|
4
4
|
// and wrangler.jsonc configuration. See design/11-platform.md §"Cloudflare Workers".
|
|
5
5
|
|
|
6
|
-
import { writeFile, readFile, cp, rm, readdir, access } from 'node:fs/promises';
|
|
6
|
+
import { writeFile, readFile, cp, rm, readdir, access, mkdtemp, rename } from 'node:fs/promises';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
7
8
|
import { execFile } from 'node:child_process';
|
|
8
|
-
import { join
|
|
9
|
+
import { join } from 'node:path';
|
|
9
10
|
import { parse as parseJsonc } from 'jsonc-parser';
|
|
10
11
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
11
|
-
import type {
|
|
12
|
+
import type {
|
|
13
|
+
BuildArtifacts,
|
|
14
|
+
PreviewTarget,
|
|
15
|
+
StaticBuildArtifacts,
|
|
16
|
+
TimberPlatformAdapter,
|
|
17
|
+
TimberConfig,
|
|
18
|
+
} from './types.ts';
|
|
12
19
|
import {
|
|
13
20
|
runSharedBuildSteps,
|
|
14
|
-
findUnhashedStaticFiles,
|
|
15
21
|
buildStaticDirectoryOutput,
|
|
16
22
|
writeHeadersFile,
|
|
17
23
|
} from './build-output-helper.ts';
|
|
@@ -245,14 +251,14 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
245
251
|
return {
|
|
246
252
|
name: 'cloudflare',
|
|
247
253
|
|
|
248
|
-
async buildOutput(config: TimberConfig,
|
|
249
|
-
const outDir = join(
|
|
254
|
+
async buildOutput(config: TimberConfig, artifacts: BuildArtifacts) {
|
|
255
|
+
const outDir = join(artifacts.outputDir, 'cloudflare');
|
|
250
256
|
|
|
251
257
|
// ── Static mode: Cloudflare Pages-compatible output ──────────────
|
|
252
258
|
// No Workers entry — just HTML files + client assets in a flat
|
|
253
259
|
// directory that Cloudflare Pages can serve directly.
|
|
254
|
-
if (
|
|
255
|
-
await buildStaticOutput(config,
|
|
260
|
+
if (artifacts.output === 'static') {
|
|
261
|
+
await buildStaticOutput(config, artifacts, outDir, options);
|
|
256
262
|
return;
|
|
257
263
|
}
|
|
258
264
|
|
|
@@ -264,9 +270,11 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
264
270
|
|
|
265
271
|
// Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
|
|
266
272
|
// write _headers, write manifest-init).
|
|
273
|
+
// Prebuilt payloads are inlined into the worker below rather than
|
|
274
|
+
// copied: Workers has no filesystem to read them from.
|
|
267
275
|
await runSharedBuildSteps({
|
|
268
276
|
config,
|
|
269
|
-
|
|
277
|
+
artifacts: { ...artifacts, prebuilt: undefined },
|
|
270
278
|
outDir,
|
|
271
279
|
publicDirName: 'static',
|
|
272
280
|
});
|
|
@@ -298,15 +306,15 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
298
306
|
}
|
|
299
307
|
|
|
300
308
|
// Inline prebuilt flight payloads into the worker JS module (TIM-1162).
|
|
301
|
-
// Data is read from
|
|
302
|
-
// no external Text/Data module imports needed.
|
|
303
|
-
const prebuiltData =
|
|
309
|
+
// Data is read from the build's prebuilt/ artifact and embedded as
|
|
310
|
+
// literals — no external Text/Data module imports needed.
|
|
311
|
+
const prebuiltData = artifacts.prebuilt
|
|
312
|
+
? await readPrebuiltData(artifacts.prebuilt.path)
|
|
313
|
+
: null;
|
|
304
314
|
await writeFile(
|
|
305
315
|
join(outDir, '_timber-prebuilt-source.js'),
|
|
306
316
|
generatePrebuiltSourceModule(prebuiltData)
|
|
307
317
|
);
|
|
308
|
-
// Remove the copied prebuilt/ dir — data is inlined, files aren't needed.
|
|
309
|
-
await rm(join(outDir, 'prebuilt'), { recursive: true, force: true }).catch(() => {});
|
|
310
318
|
|
|
311
319
|
// Write the runtime init module — sets process.env.TIMBER_RUNTIME
|
|
312
320
|
// BEFORE the RSC entry evaluates (ESM import order). Without this,
|
|
@@ -315,8 +323,8 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
315
323
|
await writeFile(join(outDir, '_timber-runtime-init.js'), generateRuntimeInitModule());
|
|
316
324
|
|
|
317
325
|
// Generate the Workers entry point
|
|
318
|
-
const hasManifestInit = !!
|
|
319
|
-
const workerEntry = generateWorkerEntry(
|
|
326
|
+
const hasManifestInit = !!artifacts.manifestInit;
|
|
327
|
+
const workerEntry = generateWorkerEntry(hasManifestInit, hasWorkerHandlers);
|
|
320
328
|
await writeFile(join(outDir, '_worker.js'), workerEntry);
|
|
321
329
|
|
|
322
330
|
// Generate wrangler.jsonc — merges user's wrangler config from disk if present
|
|
@@ -326,9 +334,23 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
326
334
|
await writeFile(join(outDir, 'wrangler.jsonc'), JSON.stringify(wranglerConfig, null, 2));
|
|
327
335
|
},
|
|
328
336
|
|
|
329
|
-
async preview(
|
|
330
|
-
const
|
|
331
|
-
|
|
337
|
+
async preview(config: TimberConfig, target: PreviewTarget) {
|
|
338
|
+
const base = adapterBase(config);
|
|
339
|
+
if (target.output !== 'static' || base === '/') {
|
|
340
|
+
const cmd = generatePreviewCommand(target);
|
|
341
|
+
await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
// A static build under a base: serve a staged copy with the site
|
|
345
|
+
// mounted at the base, as the deployment is reached.
|
|
346
|
+
const stage = await mkdtemp(join(tmpdir(), 'timber-pages-preview-'));
|
|
347
|
+
try {
|
|
348
|
+
await stagePagesPreview(join(target.outputDir, 'cloudflare'), base, stage);
|
|
349
|
+
const cmd = generatePreviewCommand(target, stage);
|
|
350
|
+
await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
|
|
351
|
+
} finally {
|
|
352
|
+
await rm(stage, { recursive: true, force: true });
|
|
353
|
+
}
|
|
332
354
|
},
|
|
333
355
|
|
|
334
356
|
// No adapter-level waitUntil: on Workers there is no ambient
|
|
@@ -342,20 +364,7 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
342
364
|
// ─── Exported helpers (used by tests and build) ─────────────────────────────
|
|
343
365
|
|
|
344
366
|
/** @internal Exported for testing. */
|
|
345
|
-
export function generateWorkerEntry(
|
|
346
|
-
buildDir: string,
|
|
347
|
-
outDir: string,
|
|
348
|
-
hasManifestInit = false,
|
|
349
|
-
hasWorkerHandlers = false
|
|
350
|
-
): string {
|
|
351
|
-
// The RSC entry is the main request handler — it exports the fetch handler as default.
|
|
352
|
-
// The Vite RSC plugin outputs it to rsc/index.js.
|
|
353
|
-
let rscEntryRelative = relative(outDir, join(buildDir, 'rsc', 'index.js'));
|
|
354
|
-
// Ensure the import path starts with ./ for ESM compatibility
|
|
355
|
-
if (!rscEntryRelative.startsWith('.')) {
|
|
356
|
-
rscEntryRelative = './' + rscEntryRelative;
|
|
357
|
-
}
|
|
358
|
-
|
|
367
|
+
export function generateWorkerEntry(hasManifestInit = false, hasWorkerHandlers = false): string {
|
|
359
368
|
// Build manifest init must be imported before the RSC handler so that
|
|
360
369
|
// globalThis.__TIMBER_BUILD_MANIFEST__ is set when the virtual module evaluates.
|
|
361
370
|
// ESM guarantees imports are evaluated in order.
|
|
@@ -381,7 +390,7 @@ import { AsyncLocalStorage } from 'node:async_hooks'
|
|
|
381
390
|
// for cache.component payloads.
|
|
382
391
|
import './_timber-runtime-init.js'
|
|
383
392
|
import './_timber-prebuilt-source.js'
|
|
384
|
-
${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from '
|
|
393
|
+
${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from './rsc/index.js'
|
|
385
394
|
${handlersImport}
|
|
386
395
|
|
|
387
396
|
// Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
|
|
@@ -560,35 +569,26 @@ export interface PrebuiltModuleData {
|
|
|
560
569
|
}
|
|
561
570
|
|
|
562
571
|
/**
|
|
563
|
-
*
|
|
564
|
-
*
|
|
572
|
+
* Read the prebuilt flight payloads the capture pass wrote. Called only
|
|
573
|
+
* when the build produced a `prebuilt` artifact, which always carries its
|
|
574
|
+
* `manifest.json` — so a read failure here is a real error, not absence.
|
|
565
575
|
*
|
|
566
576
|
* @internal Exported for testing.
|
|
567
577
|
*/
|
|
568
|
-
export async function readPrebuiltData(
|
|
569
|
-
const
|
|
570
|
-
let manifestJson: string;
|
|
571
|
-
try {
|
|
572
|
-
manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
|
|
573
|
-
} catch {
|
|
574
|
-
return null;
|
|
575
|
-
}
|
|
578
|
+
export async function readPrebuiltData(prebuiltDir: string): Promise<PrebuiltModuleData> {
|
|
579
|
+
const manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
|
|
576
580
|
const payloads: PrebuiltModuleData['payloads'] = [];
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
payloads.push({ file: filePath, bytes });
|
|
587
|
-
}
|
|
581
|
+
const componentDirs = await readdir(prebuiltDir, { withFileTypes: true });
|
|
582
|
+
for (const dir of componentDirs) {
|
|
583
|
+
if (!dir.isDirectory()) continue;
|
|
584
|
+
const files = await readdir(join(prebuiltDir, dir.name));
|
|
585
|
+
for (const file of files) {
|
|
586
|
+
if (file.endsWith('.flight')) {
|
|
587
|
+
const filePath = `${dir.name}/${file}`;
|
|
588
|
+
const bytes = await readFile(join(prebuiltDir, filePath));
|
|
589
|
+
payloads.push({ file: filePath, bytes });
|
|
588
590
|
}
|
|
589
591
|
}
|
|
590
|
-
} catch {
|
|
591
|
-
// No subdirectories — manifest exists but no payloads
|
|
592
592
|
}
|
|
593
593
|
return { manifestJson, payloads };
|
|
594
594
|
}
|
|
@@ -883,16 +883,16 @@ export function generateWranglerConfig(
|
|
|
883
883
|
*/
|
|
884
884
|
export async function buildStaticOutput(
|
|
885
885
|
config: TimberConfig,
|
|
886
|
-
|
|
886
|
+
artifacts: StaticBuildArtifacts,
|
|
887
887
|
outDir: string,
|
|
888
888
|
_options: CloudflareAdapterOptions
|
|
889
889
|
): Promise<void> {
|
|
890
890
|
// Cloudflare Pages serves from the outDir root directly (no subdirectory).
|
|
891
891
|
// Use '.' as publicDirName so files land at outDir/ not outDir/static/.
|
|
892
|
-
await buildStaticDirectoryOutput(config,
|
|
892
|
+
await buildStaticDirectoryOutput(config, artifacts, outDir, '.');
|
|
893
893
|
|
|
894
894
|
// Write _headers file for cache control + content-type rules.
|
|
895
|
-
await writeHeadersFile(outDir, config,
|
|
895
|
+
await writeHeadersFile(outDir, config, artifacts);
|
|
896
896
|
}
|
|
897
897
|
|
|
898
898
|
// ─── Preview ─────────────────────────────────────────────────────────────────
|
|
@@ -904,9 +904,22 @@ export interface PreviewCommand {
|
|
|
904
904
|
cwd: string;
|
|
905
905
|
}
|
|
906
906
|
|
|
907
|
-
/**
|
|
908
|
-
|
|
909
|
-
|
|
907
|
+
/**
|
|
908
|
+
* A server build runs its Worker under `wrangler dev` with the generated
|
|
909
|
+
* wrangler.jsonc. A static build writes no Worker and no wrangler.jsonc — its
|
|
910
|
+
* output is a Pages directory (`_headers`, `_redirects`, the site) — so it
|
|
911
|
+
* is served by `wrangler pages dev`, which applies those files as Pages does.
|
|
912
|
+
*
|
|
913
|
+
* @internal Exported for testing.
|
|
914
|
+
*/
|
|
915
|
+
export function generatePreviewCommand(
|
|
916
|
+
{ output, outputDir }: PreviewTarget,
|
|
917
|
+
pagesRoot = join(outputDir, 'cloudflare')
|
|
918
|
+
): PreviewCommand {
|
|
919
|
+
if (output === 'static') {
|
|
920
|
+
return { command: 'wrangler', args: ['pages', 'dev', pagesRoot], cwd: pagesRoot };
|
|
921
|
+
}
|
|
922
|
+
const cfDir = join(outputDir, 'cloudflare');
|
|
910
923
|
return {
|
|
911
924
|
command: 'wrangler',
|
|
912
925
|
args: ['dev', '--local', '--config', join(cfDir, 'wrangler.jsonc')],
|
|
@@ -914,6 +927,35 @@ export function generatePreviewCommand(buildDir: string): PreviewCommand {
|
|
|
914
927
|
};
|
|
915
928
|
}
|
|
916
929
|
|
|
930
|
+
/** Pages config files, read from the served root; their rules are in deployed-URL space. */
|
|
931
|
+
const PAGES_ROOT_FILES = ['_headers', '_redirects'];
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Stage a static Cloudflare build for `wrangler pages dev` under a non-root
|
|
935
|
+
* base. The build writes the site at the directory root (a Pages project is
|
|
936
|
+
* served at its domain root, and the base path is supplied by whatever routes
|
|
937
|
+
* to it), but its HTML requests `/repo/...` and its `_headers`/`_redirects`
|
|
938
|
+
* rules are base-prefixed. Serving the directory as-is would 404 every page
|
|
939
|
+
* and asset, so the preview mounts the site at the base and keeps the rule
|
|
940
|
+
* files at the root, where Pages reads them and where their prefixed
|
|
941
|
+
* patterns match.
|
|
942
|
+
*
|
|
943
|
+
* @param base Normalized deployment base, not `/`.
|
|
944
|
+
* @internal Exported for testing.
|
|
945
|
+
*/
|
|
946
|
+
export async function stagePagesPreview(
|
|
947
|
+
siteDir: string,
|
|
948
|
+
base: string,
|
|
949
|
+
stageDir: string
|
|
950
|
+
): Promise<void> {
|
|
951
|
+
const mount = join(stageDir, ...base.split('/').filter(Boolean));
|
|
952
|
+
await cp(siteDir, mount, { recursive: true });
|
|
953
|
+
const rootFiles = new Set(await readdir(mount));
|
|
954
|
+
for (const name of PAGES_ROOT_FILES) {
|
|
955
|
+
if (rootFiles.has(name)) await rename(join(mount, name), join(stageDir, name));
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
|
|
917
959
|
/**
|
|
918
960
|
* Spawn a long-running preview process and pipe stdio to the parent.
|
|
919
961
|
* Resolves when the process exits.
|
|
@@ -80,16 +80,27 @@ export function inlineCompressImports(code: string): string {
|
|
|
80
80
|
for (const { pattern, replacement } of INLINED_IMPORTS) {
|
|
81
81
|
out = out.replace(pattern, replacement);
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
assertStandalone(out, 'server/compress.ts', '_compress.mjs');
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Throw if type-stripped server source still imports anything but a Node
|
|
89
|
+
* builtin. Such a module is emitted alone into the build output, where no
|
|
90
|
+
* specifier has anything to resolve to.
|
|
91
|
+
*
|
|
92
|
+
* @internal Shared by the standalone-module generators.
|
|
93
|
+
*/
|
|
94
|
+
export function assertStandalone(code: string, source: string, emitted: string): void {
|
|
95
|
+
const surviving = MODULE_SPECIFIERS.map((pattern) => pattern.exec(code)).find(Boolean);
|
|
84
96
|
if (surviving) {
|
|
85
97
|
throw new Error(
|
|
86
|
-
`[timber]
|
|
98
|
+
`[timber] ${source} is emitted as a standalone ${emitted} (type-stripped, ` +
|
|
87
99
|
`not bundled), so it cannot import anything at runtime. Found: ${surviving[0].trim()}\n` +
|
|
88
|
-
` Either inline the value in adapters/
|
|
89
|
-
`keep the dependency out of
|
|
100
|
+
` Either inline the value in the generator in adapters/ or ` +
|
|
101
|
+
`keep the dependency out of ${source}.`
|
|
90
102
|
);
|
|
91
103
|
}
|
|
92
|
-
return out;
|
|
93
104
|
}
|
|
94
105
|
|
|
95
106
|
/**
|
|
@@ -21,9 +21,8 @@
|
|
|
21
21
|
* macOS and a case-insensitive mount on Linux are both ordinary, and the
|
|
22
22
|
* answer that matters is the one for the directory being written.
|
|
23
23
|
*
|
|
24
|
-
* Leaf module — Node built-ins only.
|
|
25
|
-
*
|
|
26
|
-
* stay free of `node:fs` for the Workers bundle.
|
|
24
|
+
* Leaf module — Node built-ins only. Kept apart from `adapters/shared.ts`,
|
|
25
|
+
* whose rule builders are pure string functions: this one touches the disk.
|
|
27
26
|
*/
|
|
28
27
|
|
|
29
28
|
import { writeFile, stat, rm } from 'node:fs/promises';
|
|
@@ -26,12 +26,6 @@ export interface PresetConfig {
|
|
|
26
26
|
nitroPreset: string;
|
|
27
27
|
/** Output directory name within the build dir. */
|
|
28
28
|
outputDir: string;
|
|
29
|
-
/**
|
|
30
|
-
* Path to the server bundle directory relative to outputDir.
|
|
31
|
-
* Nitro places the bundled server entry + _chunks/ here.
|
|
32
|
-
* Most presets use `server`; Vercel uses `functions/__server.func`.
|
|
33
|
-
*/
|
|
34
|
-
serverBundleDir: string;
|
|
35
29
|
/** Whether the runtime supports waitUntil. */
|
|
36
30
|
supportsWaitUntil: boolean;
|
|
37
31
|
/** Whether the runtime supports application-level 103 Early Hints. */
|
|
@@ -46,7 +40,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
46
40
|
'vercel': {
|
|
47
41
|
nitroPreset: 'vercel',
|
|
48
42
|
outputDir: '.vercel/output',
|
|
49
|
-
serverBundleDir: 'functions/__server.func',
|
|
50
43
|
supportsWaitUntil: true,
|
|
51
44
|
supportsEarlyHints: false,
|
|
52
45
|
runtimeName: 'vercel',
|
|
@@ -55,7 +48,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
55
48
|
'vercel-edge': {
|
|
56
49
|
nitroPreset: 'vercel-edge',
|
|
57
50
|
outputDir: '.vercel/output',
|
|
58
|
-
serverBundleDir: 'functions/__server.func',
|
|
59
51
|
supportsWaitUntil: true,
|
|
60
52
|
supportsEarlyHints: false,
|
|
61
53
|
runtimeName: 'vercel-edge',
|
|
@@ -63,7 +55,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
63
55
|
'netlify': {
|
|
64
56
|
nitroPreset: 'netlify',
|
|
65
57
|
outputDir: '.netlify/functions-internal',
|
|
66
|
-
serverBundleDir: 'server',
|
|
67
58
|
supportsWaitUntil: false,
|
|
68
59
|
supportsEarlyHints: false,
|
|
69
60
|
runtimeName: 'netlify',
|
|
@@ -71,7 +62,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
71
62
|
'netlify-edge': {
|
|
72
63
|
nitroPreset: 'netlify-edge',
|
|
73
64
|
outputDir: '.netlify/edge-functions',
|
|
74
|
-
serverBundleDir: 'server',
|
|
75
65
|
supportsWaitUntil: true,
|
|
76
66
|
supportsEarlyHints: false,
|
|
77
67
|
runtimeName: 'netlify-edge',
|
|
@@ -79,7 +69,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
79
69
|
'aws-lambda': {
|
|
80
70
|
nitroPreset: 'aws-lambda',
|
|
81
71
|
outputDir: '.output',
|
|
82
|
-
serverBundleDir: 'server',
|
|
83
72
|
supportsWaitUntil: false,
|
|
84
73
|
supportsEarlyHints: false,
|
|
85
74
|
runtimeName: 'aws-lambda',
|
|
@@ -87,7 +76,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
87
76
|
'deno-deploy': {
|
|
88
77
|
nitroPreset: 'deno-deploy',
|
|
89
78
|
outputDir: '.output',
|
|
90
|
-
serverBundleDir: 'server',
|
|
91
79
|
supportsWaitUntil: true,
|
|
92
80
|
supportsEarlyHints: false,
|
|
93
81
|
runtimeName: 'deno-deploy',
|
|
@@ -95,7 +83,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
95
83
|
'azure-functions': {
|
|
96
84
|
nitroPreset: 'azure-functions',
|
|
97
85
|
outputDir: '.output',
|
|
98
|
-
serverBundleDir: 'server',
|
|
99
86
|
supportsWaitUntil: false,
|
|
100
87
|
supportsEarlyHints: false,
|
|
101
88
|
runtimeName: 'azure-functions',
|
|
@@ -103,7 +90,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
103
90
|
'node-server': {
|
|
104
91
|
nitroPreset: 'node-server',
|
|
105
92
|
outputDir: '.output',
|
|
106
|
-
serverBundleDir: 'server',
|
|
107
93
|
supportsWaitUntil: true,
|
|
108
94
|
// Disabled by default: most node-server deployments sit behind a
|
|
109
95
|
// reverse proxy (nginx, caddy, traefik) that doesn't support 103
|
|
@@ -118,7 +104,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
118
104
|
'bun': {
|
|
119
105
|
nitroPreset: 'bun',
|
|
120
106
|
outputDir: '.output',
|
|
121
|
-
serverBundleDir: 'server',
|
|
122
107
|
supportsWaitUntil: true,
|
|
123
108
|
// Disabled for same reason as node-server — reverse proxies choke on 103.
|
|
124
109
|
// Link headers on the 200 response are converted to 103 by CDNs.
|