@timber-js/app 0.1.0
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/bin/timber.mjs +5 -0
- package/dist/_chunks/error-boundary-dj-WO5uq.js +121 -0
- package/dist/_chunks/error-boundary-dj-WO5uq.js.map +1 -0
- package/dist/_chunks/format-DNt20Kt8.js +163 -0
- package/dist/_chunks/format-DNt20Kt8.js.map +1 -0
- package/dist/_chunks/interception-DIaZN1bF.js +669 -0
- package/dist/_chunks/interception-DIaZN1bF.js.map +1 -0
- package/dist/_chunks/metadata-routes-BDnswgRO.js +141 -0
- package/dist/_chunks/metadata-routes-BDnswgRO.js.map +1 -0
- package/dist/_chunks/registry-DUIpYD_x.js +20 -0
- package/dist/_chunks/registry-DUIpYD_x.js.map +1 -0
- package/dist/_chunks/request-context-D6XHINkR.js +330 -0
- package/dist/_chunks/request-context-D6XHINkR.js.map +1 -0
- package/dist/_chunks/tracing-BtOwb8O6.js +174 -0
- package/dist/_chunks/tracing-BtOwb8O6.js.map +1 -0
- package/dist/_chunks/use-cookie-8ZlA0rr3.js +125 -0
- package/dist/_chunks/use-cookie-8ZlA0rr3.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +92 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -0
- package/dist/adapters/cloudflare.js +188 -0
- package/dist/adapters/cloudflare.js.map +1 -0
- package/dist/adapters/nitro.d.ts +72 -0
- package/dist/adapters/nitro.d.ts.map +1 -0
- package/dist/adapters/nitro.js +217 -0
- package/dist/adapters/nitro.js.map +1 -0
- package/dist/adapters/types.d.ts +53 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/cache/index.d.ts +52 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +283 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/redis-handler.d.ts +45 -0
- package/dist/cache/redis-handler.d.ts.map +1 -0
- package/dist/cache/register-cached-function.d.ts +17 -0
- package/dist/cache/register-cached-function.d.ts.map +1 -0
- package/dist/cache/singleflight.d.ts +11 -0
- package/dist/cache/singleflight.d.ts.map +1 -0
- package/dist/cache/stable-stringify.d.ts +7 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +21 -0
- package/dist/cache/timber-cache.d.ts.map +1 -0
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +135 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/browser-entry.d.ts +22 -0
- package/dist/client/browser-entry.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +42 -0
- package/dist/client/error-boundary.d.ts.map +1 -0
- package/dist/client/form.d.ts +115 -0
- package/dist/client/form.d.ts.map +1 -0
- package/dist/client/head.d.ts +16 -0
- package/dist/client/head.d.ts.map +1 -0
- package/dist/client/history.d.ts +29 -0
- package/dist/client/history.d.ts.map +1 -0
- package/dist/client/index.d.ts +32 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +1218 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/link-navigate-interceptor.d.ts +28 -0
- package/dist/client/link-navigate-interceptor.d.ts.map +1 -0
- package/dist/client/link-status-provider.d.ts +11 -0
- package/dist/client/link-status-provider.d.ts.map +1 -0
- package/dist/client/link.d.ts +119 -0
- package/dist/client/link.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +11 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +11 -0
- package/dist/client/router-ref.d.ts.map +1 -0
- package/dist/client/router.d.ts +85 -0
- package/dist/client/router.d.ts.map +1 -0
- package/dist/client/segment-cache.d.ts +88 -0
- package/dist/client/segment-cache.d.ts.map +1 -0
- package/dist/client/segment-context.d.ts +32 -0
- package/dist/client/segment-context.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +64 -0
- package/dist/client/ssr-data.d.ts.map +1 -0
- package/dist/client/types.d.ts +5 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/unload-guard.d.ts +18 -0
- package/dist/client/unload-guard.d.ts.map +1 -0
- package/dist/client/use-cookie.d.ts +37 -0
- package/dist/client/use-cookie.d.ts.map +1 -0
- package/dist/client/use-link-status.d.ts +35 -0
- package/dist/client/use-link-status.d.ts.map +1 -0
- package/dist/client/use-navigation-pending.d.ts +26 -0
- package/dist/client/use-navigation-pending.d.ts.map +1 -0
- package/dist/client/use-params.d.ts +50 -0
- package/dist/client/use-params.d.ts.map +1 -0
- package/dist/client/use-pathname.d.ts +20 -0
- package/dist/client/use-pathname.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +36 -0
- package/dist/client/use-query-states.d.ts.map +1 -0
- package/dist/client/use-router.d.ts +39 -0
- package/dist/client/use-router.d.ts.map +1 -0
- package/dist/client/use-search-params.d.ts +24 -0
- package/dist/client/use-search-params.d.ts.map +1 -0
- package/dist/client/use-selected-layout-segment.d.ts +68 -0
- package/dist/client/use-selected-layout-segment.d.ts.map +1 -0
- package/dist/content/index.d.ts +11 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +2 -0
- package/dist/cookies/define-cookie.d.ts +61 -0
- package/dist/cookies/define-cookie.d.ts.map +1 -0
- package/dist/cookies/index.d.ts +3 -0
- package/dist/cookies/index.d.ts.map +1 -0
- package/dist/cookies/index.js +82 -0
- package/dist/cookies/index.js.map +1 -0
- package/dist/fonts/ast.d.ts +38 -0
- package/dist/fonts/ast.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +43 -0
- package/dist/fonts/css.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +36 -0
- package/dist/fonts/fallbacks.d.ts.map +1 -0
- package/dist/fonts/google.d.ts +122 -0
- package/dist/fonts/google.d.ts.map +1 -0
- package/dist/fonts/local.d.ts +76 -0
- package/dist/fonts/local.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +85 -0
- package/dist/fonts/types.d.ts.map +1 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14701 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/adapter-build.d.ts +18 -0
- package/dist/plugins/adapter-build.d.ts.map +1 -0
- package/dist/plugins/build-manifest.d.ts +79 -0
- package/dist/plugins/build-manifest.d.ts.map +1 -0
- package/dist/plugins/build-report.d.ts +63 -0
- package/dist/plugins/build-report.d.ts.map +1 -0
- package/dist/plugins/cache-transform.d.ts +36 -0
- package/dist/plugins/cache-transform.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +45 -0
- package/dist/plugins/chunks.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +19 -0
- package/dist/plugins/content.d.ts.map +1 -0
- package/dist/plugins/dev-error-overlay.d.ts +60 -0
- package/dist/plugins/dev-error-overlay.d.ts.map +1 -0
- package/dist/plugins/dev-logs.d.ts +46 -0
- package/dist/plugins/dev-logs.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +22 -0
- package/dist/plugins/dev-server.d.ts.map +1 -0
- package/dist/plugins/dynamic-transform.d.ts +72 -0
- package/dist/plugins/dynamic-transform.d.ts.map +1 -0
- package/dist/plugins/entries.d.ts +21 -0
- package/dist/plugins/entries.d.ts.map +1 -0
- package/dist/plugins/fonts.d.ts +77 -0
- package/dist/plugins/fonts.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts +21 -0
- package/dist/plugins/mdx.d.ts.map +1 -0
- package/dist/plugins/react-prod.d.ts +18 -0
- package/dist/plugins/react-prod.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +13 -0
- package/dist/plugins/routing.d.ts.map +1 -0
- package/dist/plugins/server-action-exports.d.ts +26 -0
- package/dist/plugins/server-action-exports.d.ts.map +1 -0
- package/dist/plugins/server-bundle.d.ts +15 -0
- package/dist/plugins/server-bundle.d.ts.map +1 -0
- package/dist/plugins/shims.d.ts +18 -0
- package/dist/plugins/shims.d.ts.map +1 -0
- package/dist/plugins/static-build.d.ts +55 -0
- package/dist/plugins/static-build.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +29 -0
- package/dist/routing/codegen.d.ts.map +1 -0
- package/dist/routing/index.d.ts +8 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +2 -0
- package/dist/routing/interception.d.ts +46 -0
- package/dist/routing/interception.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +28 -0
- package/dist/routing/scanner.d.ts.map +1 -0
- package/dist/routing/status-file-lint.d.ts +33 -0
- package/dist/routing/status-file-lint.d.ts.map +1 -0
- package/dist/routing/types.d.ts +81 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/search-params/analyze.d.ts +54 -0
- package/dist/search-params/analyze.d.ts.map +1 -0
- package/dist/search-params/codecs.d.ts +53 -0
- package/dist/search-params/codecs.d.ts.map +1 -0
- package/dist/search-params/create.d.ts +106 -0
- package/dist/search-params/create.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +7 -0
- package/dist/search-params/index.d.ts.map +1 -0
- package/dist/search-params/index.js +300 -0
- package/dist/search-params/index.js.map +1 -0
- package/dist/search-params/registry.d.ts +20 -0
- package/dist/search-params/registry.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +42 -0
- package/dist/server/access-gate.d.ts.map +1 -0
- package/dist/server/action-client.d.ts +190 -0
- package/dist/server/action-client.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +48 -0
- package/dist/server/action-handler.d.ts.map +1 -0
- package/dist/server/actions.d.ts +108 -0
- package/dist/server/actions.d.ts.map +1 -0
- package/dist/server/asset-headers.d.ts +42 -0
- package/dist/server/asset-headers.d.ts.map +1 -0
- package/dist/server/body-limits.d.ts +30 -0
- package/dist/server/body-limits.d.ts.map +1 -0
- package/dist/server/build-manifest.d.ts +120 -0
- package/dist/server/build-manifest.d.ts.map +1 -0
- package/dist/server/canonicalize.d.ts +30 -0
- package/dist/server/canonicalize.d.ts.map +1 -0
- package/dist/server/client-module-map.d.ts +47 -0
- package/dist/server/client-module-map.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +34 -0
- package/dist/server/csrf.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +49 -0
- package/dist/server/deny-renderer.d.ts.map +1 -0
- package/dist/server/dev-logger.d.ts +44 -0
- package/dist/server/dev-logger.d.ts.map +1 -0
- package/dist/server/dev-span-processor.d.ts +29 -0
- package/dist/server/dev-span-processor.d.ts.map +1 -0
- package/dist/server/dev-warnings.d.ts +129 -0
- package/dist/server/dev-warnings.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts +38 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -0
- package/dist/server/early-hints.d.ts +83 -0
- package/dist/server/early-hints.d.ts.map +1 -0
- package/dist/server/error-boundary-wrapper.d.ts +17 -0
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -0
- package/dist/server/error-formatter.d.ts +17 -0
- package/dist/server/error-formatter.d.ts.map +1 -0
- package/dist/server/flush.d.ts +74 -0
- package/dist/server/flush.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +60 -0
- package/dist/server/form-data.d.ts.map +1 -0
- package/dist/server/form-flash.d.ts +78 -0
- package/dist/server/form-flash.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +101 -0
- package/dist/server/html-injectors.d.ts.map +1 -0
- package/dist/server/index.d.ts +54 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2925 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/instrumentation.d.ts +61 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/logger.d.ts +83 -0
- package/dist/server/logger.d.ts.map +1 -0
- package/dist/server/manifest-status-resolver.d.ts +58 -0
- package/dist/server/manifest-status-resolver.d.ts.map +1 -0
- package/dist/server/metadata-render.d.ts +20 -0
- package/dist/server/metadata-render.d.ts.map +1 -0
- package/dist/server/metadata-routes.d.ts +67 -0
- package/dist/server/metadata-routes.d.ts.map +1 -0
- package/dist/server/metadata.d.ts +67 -0
- package/dist/server/metadata.d.ts.map +1 -0
- package/dist/server/middleware-runner.d.ts +21 -0
- package/dist/server/middleware-runner.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +28 -0
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +81 -0
- package/dist/server/pipeline.d.ts.map +1 -0
- package/dist/server/prerender.d.ts +77 -0
- package/dist/server/prerender.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +131 -0
- package/dist/server/primitives.d.ts.map +1 -0
- package/dist/server/proxy.d.ts +23 -0
- package/dist/server/proxy.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +175 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +66 -0
- package/dist/server/route-element-builder.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +35 -0
- package/dist/server/route-handler.d.ts.map +1 -0
- package/dist/server/route-matcher.d.ts +78 -0
- package/dist/server/route-matcher.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +11 -0
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +30 -0
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/helpers.d.ts +73 -0
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -0
- package/dist/server/rsc-entry/index.d.ts +11 -0
- package/dist/server/rsc-entry/index.d.ts.map +1 -0
- package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -0
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +34 -0
- package/dist/server/slot-resolver.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +73 -0
- package/dist/server/ssr-entry.d.ts.map +1 -0
- package/dist/server/ssr-render.d.ts +67 -0
- package/dist/server/ssr-render.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +77 -0
- package/dist/server/status-code-resolver.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +99 -0
- package/dist/server/tracing.d.ts.map +1 -0
- package/dist/server/tree-builder.d.ts +116 -0
- package/dist/server/tree-builder.d.ts.map +1 -0
- package/dist/server/types.d.ts +231 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +41 -0
- package/dist/shims/font-google.d.ts.map +1 -0
- package/dist/shims/headers.d.ts +11 -0
- package/dist/shims/headers.d.ts.map +1 -0
- package/dist/shims/image.d.ts +328 -0
- package/dist/shims/image.d.ts.map +1 -0
- package/dist/shims/link.d.ts +9 -0
- package/dist/shims/link.d.ts.map +1 -0
- package/dist/shims/navigation-client.d.ts +25 -0
- package/dist/shims/navigation-client.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +25 -0
- package/dist/shims/navigation.d.ts.map +1 -0
- package/dist/utils/directive-parser.d.ts +70 -0
- package/dist/utils/directive-parser.d.ts.map +1 -0
- package/dist/utils/format.d.ts +6 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/startup-timer.d.ts +34 -0
- package/dist/utils/startup-timer.d.ts.map +1 -0
- package/package.json +140 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form Flash — ALS-based store for no-JS form action results.
|
|
3
|
+
*
|
|
4
|
+
* When a no-JS form action completes, the server re-renders the page with
|
|
5
|
+
* the action result injected via AsyncLocalStorage instead of redirecting
|
|
6
|
+
* (which would discard the result). Server components read the flash and
|
|
7
|
+
* pass it to client form components as the initial `useActionState` value.
|
|
8
|
+
*
|
|
9
|
+
* This follows the Remix/Rails pattern — the form component becomes the
|
|
10
|
+
* single source of truth for both with-JS (React state) and no-JS (flash).
|
|
11
|
+
*
|
|
12
|
+
* The flash data is server-side only — never serialized to cookies or headers.
|
|
13
|
+
*
|
|
14
|
+
* See design/08-forms-and-actions.md §"No-JS Error Round-Trip"
|
|
15
|
+
*/
|
|
16
|
+
import type { ValidationErrors } from './action-client.js';
|
|
17
|
+
/**
|
|
18
|
+
* Flash data injected into the re-render after a no-JS form submission.
|
|
19
|
+
*
|
|
20
|
+
* This is the action result from the server action, stored in ALS so server
|
|
21
|
+
* components can read it and pass it to client form components as the initial
|
|
22
|
+
* state for `useActionState`. This makes the form component a single source
|
|
23
|
+
* of truth for both with-JS and no-JS paths.
|
|
24
|
+
*
|
|
25
|
+
* The shape matches `ActionResult<unknown>` — it's one of:
|
|
26
|
+
* - `{ data: ... }` — success
|
|
27
|
+
* - `{ validationErrors, submittedValues }` — validation failure
|
|
28
|
+
* - `{ serverError }` — server error
|
|
29
|
+
*/
|
|
30
|
+
export interface FormFlashData {
|
|
31
|
+
/** Success data from the action. */
|
|
32
|
+
data?: unknown;
|
|
33
|
+
/** Validation errors keyed by field name. `_root` for form-level errors. */
|
|
34
|
+
validationErrors?: ValidationErrors;
|
|
35
|
+
/** Raw submitted values for repopulating form fields. File objects are excluded. */
|
|
36
|
+
submittedValues?: Record<string, unknown>;
|
|
37
|
+
/** Server error if the action threw an ActionError. */
|
|
38
|
+
serverError?: {
|
|
39
|
+
code: string;
|
|
40
|
+
data?: Record<string, unknown>;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read the form flash data for the current request.
|
|
45
|
+
*
|
|
46
|
+
* Returns `null` if no flash data is present (i.e., this is a normal page
|
|
47
|
+
* render, not a re-render after a no-JS form submission).
|
|
48
|
+
*
|
|
49
|
+
* Pass the flash as the initial state to `useActionState` so the form
|
|
50
|
+
* component has a single source of truth for both with-JS and no-JS paths:
|
|
51
|
+
*
|
|
52
|
+
* ```tsx
|
|
53
|
+
* // app/contact/page.tsx (server component)
|
|
54
|
+
* import { getFormFlash } from '@timber/app/server'
|
|
55
|
+
*
|
|
56
|
+
* export default function ContactPage() {
|
|
57
|
+
* const flash = getFormFlash()
|
|
58
|
+
* return <ContactForm flash={flash} />
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
* // app/contact/form.tsx (client component)
|
|
62
|
+
* export function ContactForm({ flash }) {
|
|
63
|
+
* const [result, action, isPending] = useActionState(submitContact, flash)
|
|
64
|
+
* // result is the single source of truth — flash seeds it on no-JS
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function getFormFlash(): FormFlashData | null;
|
|
69
|
+
/**
|
|
70
|
+
* Run a callback with form flash data in scope.
|
|
71
|
+
*
|
|
72
|
+
* Used by the action handler to re-render the page with validation errors
|
|
73
|
+
* available via `getFormFlash()`. Not part of the public API.
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export declare function runWithFormFlash<T>(data: FormFlashData, fn: () => T): T;
|
|
78
|
+
//# sourceMappingURL=form-flash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-flash.d.ts","sourceRoot":"","sources":["../../src/server/form-flash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,uDAAuD;IACvD,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAChE;AAQD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,IAAI,aAAa,GAAG,IAAI,CAEnD;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEvE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML stream injectors — TransformStreams that modify streamed HTML.
|
|
3
|
+
*
|
|
4
|
+
* These are extracted into a separate module so they can be tested
|
|
5
|
+
* independently of rsc-entry.ts (which imports virtual modules).
|
|
6
|
+
*
|
|
7
|
+
* Design docs: 02-rendering-pipeline.md, 18-build-system.md §"Entry Files"
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Inject metadata elements before </head> in the HTML stream.
|
|
11
|
+
*
|
|
12
|
+
* If no </head> is found, the buffer is emitted as-is.
|
|
13
|
+
*/
|
|
14
|
+
export declare function injectHead(stream: ReadableStream<Uint8Array>, headHtml: string): ReadableStream<Uint8Array>;
|
|
15
|
+
/**
|
|
16
|
+
* Inject client bootstrap scripts before </body> in the HTML stream.
|
|
17
|
+
*
|
|
18
|
+
* Returns the stream unchanged if scriptsHtml is empty (client JS disabled mode).
|
|
19
|
+
* If no </body> is found, the buffer is emitted as-is.
|
|
20
|
+
*/
|
|
21
|
+
export declare function injectScripts(stream: ReadableStream<Uint8Array>, scriptsHtml: string): ReadableStream<Uint8Array>;
|
|
22
|
+
/**
|
|
23
|
+
* Transform an RSC Flight stream into a stream of inline `<script>` tags.
|
|
24
|
+
*
|
|
25
|
+
* Uses a **pull-based** ReadableStream — the consumer (the injection
|
|
26
|
+
* transform) drives reads from the RSC stream on demand. No background
|
|
27
|
+
* reader, no shared mutable arrays, no race conditions.
|
|
28
|
+
*
|
|
29
|
+
* Each RSC chunk becomes:
|
|
30
|
+
* <script>(self.__timber_f=self.__timber_f||[]).push([1,"escaped_chunk"])</script>
|
|
31
|
+
*
|
|
32
|
+
* The first chunk emitted is the bootstrap signal [0] which the client
|
|
33
|
+
* uses to initialize its buffer.
|
|
34
|
+
*
|
|
35
|
+
* Uses JSON-encoded typed tuples matching the pattern from Next.js:
|
|
36
|
+
* [0] — bootstrap signal
|
|
37
|
+
* [1, data] — RSC Flight data chunk (UTF-8 string)
|
|
38
|
+
*/
|
|
39
|
+
export declare function createInlinedRscStream(rscStream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array>;
|
|
40
|
+
/**
|
|
41
|
+
* Progressively inline RSC Flight payload chunks into the HTML stream.
|
|
42
|
+
*
|
|
43
|
+
* Architecture (3 TransformStream pipeline):
|
|
44
|
+
* 1. HTML stream → moveSuffix (captures </body></html>, re-emits at end)
|
|
45
|
+
* 2. → flightInjection (merges RSC <script> tags between HTML chunks)
|
|
46
|
+
* 3. → output (well-formed HTML with interleaved RSC data)
|
|
47
|
+
*
|
|
48
|
+
* The RSC stream is transformed into <script> tags via createInlinedRscStream
|
|
49
|
+
* (pull-based, no shared mutable state) and merged into the HTML pipeline
|
|
50
|
+
* via createFlightInjectionTransform.
|
|
51
|
+
*
|
|
52
|
+
* The client reads these script tags via `self.__timber_f` and feeds
|
|
53
|
+
* them to `createFromReadableStream` for progressive hydration.
|
|
54
|
+
* Stream completion is signaled by the DOMContentLoaded event on the
|
|
55
|
+
* client side — no custom done flag needed.
|
|
56
|
+
*/
|
|
57
|
+
export declare function injectRscPayload(htmlStream: ReadableStream<Uint8Array>, rscStream: ReadableStream<Uint8Array> | undefined): ReadableStream<Uint8Array>;
|
|
58
|
+
/**
|
|
59
|
+
* Client bootstrap configuration returned by buildClientScripts.
|
|
60
|
+
*
|
|
61
|
+
* - `bootstrapScriptContent`: Inline JS passed to React's renderToReadableStream
|
|
62
|
+
* as `bootstrapScriptContent`. React injects this as a non-deferred `<script>`
|
|
63
|
+
* in the shell HTML, so it executes immediately during parsing — even while
|
|
64
|
+
* Suspense boundaries are still streaming. Uses dynamic `import()` to kick off
|
|
65
|
+
* module loading, enabling hydration to start before the stream closes.
|
|
66
|
+
*
|
|
67
|
+
* - `preloadLinks`: `<link rel="modulepreload">` tags for production dependency
|
|
68
|
+
* preloading. Injected into `<head>` via injectHead so the browser starts
|
|
69
|
+
* downloading JS chunks early.
|
|
70
|
+
*/
|
|
71
|
+
export interface ClientBootstrapConfig {
|
|
72
|
+
bootstrapScriptContent: string;
|
|
73
|
+
preloadLinks: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build client bootstrap configuration based on runtime config.
|
|
77
|
+
*
|
|
78
|
+
* Returns empty strings when client JavaScript is disabled,
|
|
79
|
+
* which produces zero-JS output. When `enableHMRInDev` is true and
|
|
80
|
+
* running in dev mode, injects only the Vite HMR client (no app
|
|
81
|
+
* bootstrap) so hot reloading works during development.
|
|
82
|
+
*
|
|
83
|
+
* In production, uses hashed chunk URLs from the build manifest.
|
|
84
|
+
*
|
|
85
|
+
* The bootstrap uses dynamic `import()` inside a regular (non-module)
|
|
86
|
+
* inline script so it executes immediately during HTML parsing. This
|
|
87
|
+
* is critical for streaming: `<script type="module">` is deferred
|
|
88
|
+
* until the document finishes parsing, which blocks hydration behind
|
|
89
|
+
* Suspense boundaries. Dynamic `import()` starts module loading and
|
|
90
|
+
* execution as soon as the shell HTML is parsed.
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildClientScripts(runtimeConfig: {
|
|
93
|
+
output: string;
|
|
94
|
+
clientJavascript: {
|
|
95
|
+
disabled: boolean;
|
|
96
|
+
enableHMRInDev: boolean;
|
|
97
|
+
};
|
|
98
|
+
dev: boolean;
|
|
99
|
+
buildManifest?: import('./build-manifest.js').BuildManifest;
|
|
100
|
+
}): ClientBootstrapConfig;
|
|
101
|
+
//# sourceMappingURL=html-injectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-injectors.d.ts","sourceRoot":"","sources":["../../src/server/html-injectors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiEH;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,EAAE,MAAM,GACf,cAAc,CAAC,UAAU,CAAC,CAE5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,CAE5B;AAkBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,GACpC,cAAc,CAAC,UAAU,CAAC,CA4B5B;AAyID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,EACtC,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,SAAS,GAChD,cAAc,CAAC,UAAU,CAAC,CAU5B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAkBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,qBAAqB,EAAE,aAAa,CAAC;CAC7D,GAAG,qBAAqB,CA2DxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type { AccessContext } from './types';
|
|
2
|
+
export type { MiddlewareContext } from './types';
|
|
3
|
+
export type { RouteContext } from './types';
|
|
4
|
+
export type { Metadata, MetadataRoute } from './types';
|
|
5
|
+
export { headers, cookies, searchParams, setParsedSearchParams, runWithRequestContext, setMutableCookieContext, markResponseFlushed, getSetCookieHeaders, setCookieSecrets, } from './request-context';
|
|
6
|
+
export type { ReadonlyHeaders, RequestCookies, CookieOptions } from './request-context';
|
|
7
|
+
export { deny, notFound, redirect, permanentRedirect, redirectExternal, RedirectType, RenderError, waitUntil, DenySignal, RedirectSignal, } from './primitives';
|
|
8
|
+
export type { RenderErrorDigest, WaitUntilAdapter } from './primitives';
|
|
9
|
+
export { createPipeline } from './pipeline';
|
|
10
|
+
export type { PipelineConfig, RouteMatch, RouteMatcher, RouteRenderer, EarlyHintsEmitter, } from './pipeline';
|
|
11
|
+
export { collectEarlyHintHeaders, formatLinkHeader } from './early-hints';
|
|
12
|
+
export type { EarlyHint } from './early-hints';
|
|
13
|
+
export { runWithEarlyHintsSender, sendEarlyHints103 } from './early-hints-sender';
|
|
14
|
+
export type { EarlyHintsSenderFn } from './early-hints-sender';
|
|
15
|
+
export { canonicalize } from './canonicalize';
|
|
16
|
+
export type { CanonicalizeResult } from './canonicalize';
|
|
17
|
+
export { runProxy } from './proxy';
|
|
18
|
+
export type { ProxyFn, ProxyExport } from './proxy';
|
|
19
|
+
export { runMiddleware } from './middleware-runner';
|
|
20
|
+
export type { MiddlewareFn } from './middleware-runner';
|
|
21
|
+
export { buildElementTree } from './tree-builder';
|
|
22
|
+
export type { TreeBuilderConfig, TreeBuildResult, LoadedModule, ModuleLoader, AccessGateProps, SlotAccessGateProps, ErrorBoundaryProps, } from './tree-builder';
|
|
23
|
+
export { AccessGate, SlotAccessGate } from './access-gate';
|
|
24
|
+
export { resolveStatusFile, resolveSlotDenied } from './status-code-resolver';
|
|
25
|
+
export type { StatusFileResolution, StatusFileKind, StatusFileFormat, SlotDeniedResolution, SlotDeniedKind, } from './status-code-resolver';
|
|
26
|
+
export { flushResponse } from './flush';
|
|
27
|
+
export type { FlushOptions, FlushResult, RenderFn, RenderResult } from './flush';
|
|
28
|
+
export { validateCsrf } from './csrf';
|
|
29
|
+
export type { CsrfConfig, CsrfResult } from './csrf';
|
|
30
|
+
export { parseBodySize, enforceBodyLimits, DEFAULT_LIMITS } from './body-limits';
|
|
31
|
+
export type { BodyLimitsConfig, BodyLimitResult, BodyKind } from './body-limits';
|
|
32
|
+
export { resolveMetadata, resolveTitle, resolveMetadataUrls, renderMetadataToElements, } from './metadata';
|
|
33
|
+
export type { SegmentMetadataEntry, ResolveMetadataOptions, HeadElement } from './metadata';
|
|
34
|
+
export { classifyMetadataRoute, getMetadataRouteServePath, getMetadataRouteAutoLink, METADATA_ROUTE_CONVENTIONS, } from './metadata-routes';
|
|
35
|
+
export type { MetadataRouteInfo, MetadataRouteType } from './metadata-routes';
|
|
36
|
+
export { createActionClient, ActionError, validated } from './action-client';
|
|
37
|
+
export type { ActionResult, ActionFn, ActionBuilder, ActionBuilderWithSchema, ActionContext, ActionMiddleware, ActionSchema, ValidationErrors, } from './action-client';
|
|
38
|
+
export { parseFormData, coerce } from './form-data';
|
|
39
|
+
export { getFormFlash } from './form-flash';
|
|
40
|
+
export type { FormFlashData } from './form-flash';
|
|
41
|
+
export { revalidatePath, revalidateTag, executeAction, buildNoJsResponse, isRscActionRequest, } from './actions';
|
|
42
|
+
export type { RevalidateRenderer, RevalidationState, ActionHandlerConfig, ActionHandlerResult, } from './actions';
|
|
43
|
+
export { traceId, spanId, generateTraceId, runWithTraceId, replaceTraceId, withSpan, addSpanEvent, } from './tracing';
|
|
44
|
+
export type { TraceStore } from './tracing';
|
|
45
|
+
export { setLogger, getLogger } from './logger';
|
|
46
|
+
export { logRequestCompleted, logRequestReceived, logSlowRequest, logMiddlewareShortCircuit, logMiddlewareError, logRenderError, logProxyError, logWaitUntilUnsupported, logWaitUntilRejected, logSwrRefetchFailed, logCacheMiss, } from './logger';
|
|
47
|
+
export type { TimberLogger } from './logger';
|
|
48
|
+
export { loadInstrumentation, callOnRequestError, hasOnRequestError } from './instrumentation';
|
|
49
|
+
export type { InstrumentationOnRequestError, InstrumentationRequestInfo, InstrumentationErrorContext, } from './instrumentation';
|
|
50
|
+
export { warnSuspenseWrappingChildren, warnDenyInSuspense, warnRedirectInSuspense, warnRedirectInAccess, warnStaticRequestApi, warnCacheRequestProps, warnSlowSlotWithoutSuspense, setViteServer, WarningId, warnDynamicApiInStaticBuild, warnRedirectInSlotAccess, warnDenyAfterFlush, } from './dev-warnings';
|
|
51
|
+
export type { DevWarningConfig } from './dev-warnings';
|
|
52
|
+
export { handleRouteRequest, resolveAllowedMethods } from './route-handler';
|
|
53
|
+
export type { RouteModule, RouteHandler, HttpMethod } from './route-handler';
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|