@timber-js/app 0.2.0-alpha.71 → 0.2.0-alpha.72
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/actions-Dg-ANYHb.js +421 -0
- package/dist/_chunks/actions-Dg-ANYHb.js.map +1 -0
- package/dist/_chunks/{als-registry-BJARkOcu.js → als-registry-HS0LGUl2.js} +1 -1
- package/dist/_chunks/als-registry-HS0LGUl2.js.map +1 -0
- package/dist/_chunks/{define-Dz1bqwaS.js → define-C77ScO0m.js} +14 -14
- package/dist/_chunks/define-C77ScO0m.js.map +1 -0
- package/dist/_chunks/{define-CGuYoRHU.js → define-CZqDwhSu.js} +15 -15
- package/dist/_chunks/define-CZqDwhSu.js.map +1 -0
- package/dist/_chunks/{define-cookie-B5mewxwM.js → define-cookie-C2IkoFGN.js} +9 -8
- package/dist/_chunks/{define-cookie-B5mewxwM.js.map → define-cookie-C2IkoFGN.js.map} +1 -1
- package/dist/_chunks/{format-Rn922VH2.js → dev-warnings-DpGRGoDi.js} +4 -26
- package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +1 -0
- package/dist/_chunks/format-CYBGxKtc.js +14 -0
- package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
- package/dist/_chunks/{interception-CEdHHviP.js → interception-Dpn_UfAD.js} +2 -2
- package/dist/_chunks/{interception-CEdHHviP.js.map → interception-Dpn_UfAD.js.map} +1 -1
- package/dist/_chunks/{segment-context-hzuJ048X.js → merge-search-params-Cm_KIWDX.js} +2 -33
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
- package/dist/_chunks/{request-context-CywiO4jV.js → request-context-qMsWgy9C.js} +72 -36
- package/dist/_chunks/request-context-qMsWgy9C.js.map +1 -0
- package/dist/_chunks/{schema-bridge-C4SwjCQD.js → schema-bridge-C3xl_vfb.js} +1 -1
- package/dist/_chunks/{schema-bridge-C4SwjCQD.js.map → schema-bridge-C3xl_vfb.js.map} +1 -1
- package/dist/_chunks/segment-context-fHFLF1PE.js +34 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js.map +1 -0
- package/dist/_chunks/ssr-data-DzuI0bIV.js +88 -0
- package/dist/_chunks/ssr-data-DzuI0bIV.js.map +1 -0
- package/dist/_chunks/{stale-reload-BLUC_Pl_.js → stale-reload-C2plcNtG.js} +1 -1
- package/dist/_chunks/{stale-reload-BLUC_Pl_.js.map → stale-reload-C2plcNtG.js.map} +1 -1
- package/dist/_chunks/{handler-store-BVePM7hp.js → tracing-CCYbKn5n.js} +60 -60
- package/dist/_chunks/tracing-CCYbKn5n.js.map +1 -0
- package/dist/_chunks/use-params-B1AuhI1p.js +307 -0
- package/dist/_chunks/use-params-B1AuhI1p.js.map +1 -0
- package/dist/_chunks/{use-query-states-DAhgj8Gx.js → use-query-states-Lo_s_pw2.js} +4 -4
- package/dist/_chunks/use-query-states-Lo_s_pw2.js.map +1 -0
- package/dist/_chunks/{wrappers-LZbghvn0.js → wrappers-_DTmImGt.js} +1 -1
- package/dist/_chunks/{wrappers-LZbghvn0.js.map → wrappers-_DTmImGt.js.map} +1 -1
- package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +95 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/cache/index.d.ts +18 -4
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +78 -12
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cli.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +27 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +23 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.js +131 -1
- package/dist/client/error-boundary.js.map +1 -0
- package/dist/client/index.d.ts +4 -19
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +14 -1191
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +18 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +890 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/top-loader.d.ts +2 -2
- package/dist/client/use-link-status.d.ts +1 -1
- package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-router.d.ts +1 -1
- package/dist/codec.d.ts +10 -0
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +1 -1
- package/dist/config-types.d.ts +210 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +0 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +2 -3
- package/dist/index.d.ts +25 -288
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +261 -43
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +84 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +1 -1
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +1 -1
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-browser-logs.d.ts +1 -1
- package/dist/plugins/dev-browser-logs.d.ts.map +1 -1
- package/dist/plugins/dev-logs.d.ts +1 -1
- package/dist/plugins/dev-logs.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +1 -1
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +1 -1
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +4 -4
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/index.js +1 -1
- package/dist/search-params/define.d.ts +6 -6
- package/dist/search-params/define.d.ts.map +1 -1
- package/dist/search-params/index.d.ts +1 -2
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +4 -4
- package/dist/search-params/registry.d.ts +1 -1
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/segment-params/define.d.ts +6 -6
- package/dist/segment-params/define.d.ts.map +1 -1
- package/dist/segment-params/index.d.ts +0 -1
- package/dist/segment-params/index.d.ts.map +1 -1
- package/dist/segment-params/index.js +3 -3
- package/dist/server/als-registry.d.ts +1 -1
- package/dist/server/dev-holding-server.d.ts +52 -0
- package/dist/server/dev-holding-server.d.ts.map +1 -0
- package/dist/server/dev-warnings.d.ts +1 -7
- package/dist/server/dev-warnings.d.ts.map +1 -1
- package/dist/server/index.d.ts +6 -45
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -3272
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +46 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2865 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +41 -17
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +45 -15
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/tracing.d.ts +4 -4
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/shims/headers.d.ts +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +2 -1
- package/dist/shims/navigation.d.ts.map +1 -1
- package/package.json +19 -13
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/cache/handler-store.ts +2 -2
- package/src/cache/index.ts +74 -15
- package/src/cache/sizeof.ts +31 -0
- package/src/cli.ts +6 -1
- package/src/client/browser-dev.ts +128 -1
- package/src/client/browser-entry/action-dispatch.ts +116 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +138 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +184 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/index.ts +10 -38
- package/src/client/internal.ts +57 -0
- package/src/client/navigation-context.ts +6 -2
- package/src/client/navigation-root.tsx +1 -1
- package/src/client/router-ref.ts +1 -1
- package/src/client/top-loader.tsx +2 -2
- package/src/client/use-link-status.ts +1 -1
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +5 -5
- package/src/client/use-query-states.ts +2 -2
- package/src/client/use-router.ts +1 -1
- package/src/codec.ts +15 -0
- package/src/config-types.ts +208 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +9 -7
- package/src/cookies/index.ts +6 -5
- package/src/index.ts +84 -416
- package/src/plugin-context.ts +200 -0
- package/src/plugins/adapter-build.ts +1 -1
- package/src/plugins/build-manifest.ts +1 -1
- package/src/plugins/build-report.ts +1 -1
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-browser-logs.ts +1 -1
- package/src/plugins/dev-logs.ts +1 -1
- package/src/plugins/dev-server.ts +16 -1
- package/src/plugins/entries.ts +2 -2
- package/src/plugins/fonts.ts +4 -3
- package/src/plugins/mdx.ts +1 -1
- package/src/plugins/routing.ts +1 -1
- package/src/plugins/shims.ts +53 -5
- package/src/plugins/static-build.ts +8 -6
- package/src/search-params/define.ts +22 -22
- package/src/search-params/index.ts +3 -3
- package/src/search-params/registry.ts +1 -1
- package/src/segment-params/define.ts +18 -18
- package/src/segment-params/index.ts +2 -1
- package/src/server/action-handler.ts +1 -1
- package/src/server/als-registry.ts +3 -3
- package/src/server/dev-holding-server.ts +185 -0
- package/src/server/dev-warnings.ts +2 -21
- package/src/server/html-injectors.ts +3 -3
- package/src/server/index.ts +25 -180
- package/src/server/internal.ts +169 -0
- package/src/server/pipeline.ts +12 -7
- package/src/server/primitives.ts +71 -30
- package/src/server/request-context.ts +77 -39
- package/src/server/route-element-builder.ts +1 -1
- package/src/server/rsc-entry/index.ts +2 -2
- package/src/server/rsc-entry/ssr-renderer.ts +1 -1
- package/src/server/slot-resolver.ts +1 -1
- package/src/server/tracing.ts +6 -6
- package/src/server/tree-builder.ts +1 -1
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation.ts +5 -1
- package/dist/_chunks/als-registry-BJARkOcu.js.map +0 -1
- package/dist/_chunks/define-CGuYoRHU.js.map +0 -1
- package/dist/_chunks/define-Dz1bqwaS.js.map +0 -1
- package/dist/_chunks/error-boundary-D9hzsveV.js +0 -216
- package/dist/_chunks/error-boundary-D9hzsveV.js.map +0 -1
- package/dist/_chunks/format-Rn922VH2.js.map +0 -1
- package/dist/_chunks/handler-store-BVePM7hp.js.map +0 -1
- package/dist/_chunks/request-context-CywiO4jV.js.map +0 -1
- package/dist/_chunks/segment-context-hzuJ048X.js.map +0 -1
- package/dist/_chunks/use-query-states-DAhgj8Gx.js.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/use-navigation-pending.d.ts.map +0 -1
- package/src/client/browser-entry.ts +0 -846
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/server/pipeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/server/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,24 +21,43 @@ export declare class DenySignal extends Error {
|
|
|
21
21
|
*/
|
|
22
22
|
get sourceFile(): string | undefined;
|
|
23
23
|
}
|
|
24
|
+
/** Options for deny() when using the object form. */
|
|
25
|
+
export interface DenyOptions {
|
|
26
|
+
/** HTTP status code (4xx or 5xx). Default: 403. */
|
|
27
|
+
status?: number;
|
|
28
|
+
/** Human-readable message (logged server-side, not sent to client). */
|
|
29
|
+
message?: string;
|
|
30
|
+
/** JSON-serializable data passed as `dangerouslyPassData` prop to status-code files. */
|
|
31
|
+
data?: JsonSerializable;
|
|
32
|
+
}
|
|
24
33
|
/**
|
|
25
|
-
* Universal denial primitive. Throws a `DenySignal` that the framework catches.
|
|
34
|
+
* Universal denial/error primitive. Throws a `DenySignal` that the framework catches.
|
|
26
35
|
*
|
|
27
36
|
* - In segment context (outside Suspense): produces HTTP status code
|
|
28
37
|
* - In slot context: graceful degradation → denied.tsx → default.tsx → null
|
|
29
38
|
* - Inside Suspense (hold window): promoted to pre-flush behavior
|
|
30
39
|
* - Inside Suspense (after flush): error boundary + noindex meta
|
|
31
40
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
41
|
+
* Supports both positional and object signatures:
|
|
42
|
+
* ```ts
|
|
43
|
+
* deny() // 403 (default)
|
|
44
|
+
* deny(404) // 404
|
|
45
|
+
* deny(503, { retry: true }) // 503 with data
|
|
46
|
+
* deny({ status: 503, message: 'Maintenance' }) // object form
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* Accepts any 4xx or 5xx status code. This replaces the need for
|
|
50
|
+
* `throw new RenderError(...)` in user code — RenderError is now an
|
|
51
|
+
* internal pipeline detail.
|
|
52
|
+
*
|
|
53
|
+
* @param statusOrOptions - Status code (number) or options object. Default: 403.
|
|
54
|
+
* @param data - Optional JSON-serializable data (positional form only).
|
|
34
55
|
*/
|
|
35
|
-
export declare function deny(
|
|
56
|
+
export declare function deny(statusOrOptions?: number | DenyOptions, data?: JsonSerializable): never;
|
|
36
57
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* call `notFound()` from `next/navigation` get the same behavior as
|
|
41
|
-
* `deny(404)` in timber.
|
|
58
|
+
* @deprecated Use `deny(404)` instead.
|
|
59
|
+
* Kept for internal use by the Next.js shim layer.
|
|
60
|
+
* @internal
|
|
42
61
|
*/
|
|
43
62
|
export declare function notFound(): never;
|
|
44
63
|
/**
|
|
@@ -65,8 +84,17 @@ export declare class RedirectSignal extends Error {
|
|
|
65
84
|
* Options for redirect() — alternative to passing a bare status code.
|
|
66
85
|
*/
|
|
67
86
|
export interface RedirectOptions {
|
|
68
|
-
/** HTTP redirect status code (3xx). Defaults to 302. */
|
|
87
|
+
/** HTTP redirect status code (3xx). Defaults to 302 (or 308 when `permanent: true`). */
|
|
69
88
|
status?: number;
|
|
89
|
+
/**
|
|
90
|
+
* When true, defaults the status to 308 (Permanent Redirect, preserves HTTP method).
|
|
91
|
+
* If `status` is also provided, `status` takes precedence.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* redirect('/new-path', { permanent: true }); // 308
|
|
95
|
+
* redirect('/new-path', { permanent: true, status: 301 }); // 301
|
|
96
|
+
*/
|
|
97
|
+
permanent?: boolean;
|
|
70
98
|
/**
|
|
71
99
|
* Preserve search params from the current request URL on the redirect target.
|
|
72
100
|
*
|
|
@@ -96,13 +124,9 @@ export interface RedirectOptions {
|
|
|
96
124
|
*/
|
|
97
125
|
export declare function redirect(path: string, statusOrOptions?: number | RedirectOptions): never;
|
|
98
126
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* will replay POST requests to the new location. This matches Next.js behavior.
|
|
103
|
-
*
|
|
104
|
-
* @param path - Relative path (e.g. '/new-page', '/dashboard')
|
|
105
|
-
* @param options - Optional redirect options (e.g. preserveSearchParams).
|
|
127
|
+
* @deprecated Use `redirect(path, { permanent: true })` instead.
|
|
128
|
+
* Kept for internal use by the Next.js shim layer.
|
|
129
|
+
* @internal
|
|
106
130
|
*/
|
|
107
131
|
export declare function permanentRedirect(path: string, options?: Omit<RedirectOptions, 'status'>): never;
|
|
108
132
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/server/primitives.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQnD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAS,GAAG,MAAM,GAAG,IAAI,CA8DhF;AAsBD;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB;IAOnD;;;;OAIG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAqBnC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/server/primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Request Context — per-request ALS store for
|
|
2
|
+
* Request Context — per-request ALS store for getHeaders() and getCookies().
|
|
3
3
|
*
|
|
4
4
|
* Follows the same pattern as tracing.ts: a module-level AsyncLocalStorage
|
|
5
5
|
* instance, public accessor functions that throw outside request scope,
|
|
@@ -17,7 +17,22 @@ export { requestContextAls };
|
|
|
17
17
|
* Available in middleware, access checks, server components, and server actions.
|
|
18
18
|
* Throws if called outside a request context (security principle #2: no global fallback).
|
|
19
19
|
*/
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function getHeaders(): Promise<ReadonlyHeaders>;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the value of a single request header, or undefined if absent.
|
|
23
|
+
*
|
|
24
|
+
* Thin wrapper over `(await getHeaders()).get(name)` for the common
|
|
25
|
+
* case where you need exactly one header.
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { getHeader } from '@timber-js/app/server'
|
|
29
|
+
*
|
|
30
|
+
* export default async function Page() {
|
|
31
|
+
* const auth = await getHeader('authorization');
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function getHeader(name: string): Promise<string | undefined>;
|
|
21
36
|
/**
|
|
22
37
|
* Returns a cookie accessor for the current request.
|
|
23
38
|
*
|
|
@@ -33,7 +48,22 @@ export declare function headers(): ReadonlyHeaders;
|
|
|
33
48
|
*
|
|
34
49
|
* See design/29-cookies.md
|
|
35
50
|
*/
|
|
36
|
-
export declare function
|
|
51
|
+
export declare function getCookies(): Promise<RequestCookies>;
|
|
52
|
+
/**
|
|
53
|
+
* Returns the value of a single cookie, or undefined if absent.
|
|
54
|
+
*
|
|
55
|
+
* Thin wrapper over `(await getCookies()).get(name)` for the common
|
|
56
|
+
* case where you need exactly one cookie.
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { getCookie } from '@timber-js/app/server'
|
|
60
|
+
*
|
|
61
|
+
* export default async function Page() {
|
|
62
|
+
* const session = await getCookie('session_id');
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function getCookie(name: string): Promise<string | undefined>;
|
|
37
67
|
/**
|
|
38
68
|
* Returns a Promise resolving to the current request's raw URLSearchParams.
|
|
39
69
|
*
|
|
@@ -42,20 +72,20 @@ export declare function cookies(): RequestCookies;
|
|
|
42
72
|
*
|
|
43
73
|
* ```ts
|
|
44
74
|
* import { searchParams } from './params'
|
|
45
|
-
* const parsed = await searchParams.
|
|
75
|
+
* const parsed = await searchParams.get()
|
|
46
76
|
* ```
|
|
47
77
|
*
|
|
48
78
|
* Or explicitly:
|
|
49
79
|
*
|
|
50
80
|
* ```ts
|
|
51
|
-
* import {
|
|
81
|
+
* import { getSearchParams } from '@timber-js/app/server'
|
|
52
82
|
* import { searchParams } from './params'
|
|
53
|
-
* const parsed = searchParams.parse(await
|
|
83
|
+
* const parsed = searchParams.parse(await getSearchParams())
|
|
54
84
|
* ```
|
|
55
85
|
*
|
|
56
86
|
* Throws if called outside a request context.
|
|
57
87
|
*/
|
|
58
|
-
export declare function
|
|
88
|
+
export declare function getSearchParams(): Promise<URLSearchParams>;
|
|
59
89
|
/**
|
|
60
90
|
* Returns a Promise resolving to the current request's coerced segment params.
|
|
61
91
|
*
|
|
@@ -67,17 +97,17 @@ export declare function rawSearchParams(): Promise<URLSearchParams>;
|
|
|
67
97
|
* This is the primary way page and layout components access route params:
|
|
68
98
|
*
|
|
69
99
|
* ```ts
|
|
70
|
-
* import {
|
|
100
|
+
* import { getSegmentParams } from '@timber-js/app/server'
|
|
71
101
|
*
|
|
72
102
|
* export default async function Page() {
|
|
73
|
-
* const { slug } = await
|
|
103
|
+
* const { slug } = await getSegmentParams()
|
|
74
104
|
* // ...
|
|
75
105
|
* }
|
|
76
106
|
* ```
|
|
77
107
|
*
|
|
78
108
|
* Throws if called outside a request context.
|
|
79
109
|
*/
|
|
80
|
-
export declare function
|
|
110
|
+
export declare function getSegmentParams(): Promise<Record<string, string | string[]>>;
|
|
81
111
|
/**
|
|
82
112
|
* Set the segment params promise on the current request context.
|
|
83
113
|
* Called by the pipeline after route matching and param coercion.
|
|
@@ -121,7 +151,7 @@ export interface CookieOptions {
|
|
|
121
151
|
partitioned?: boolean;
|
|
122
152
|
}
|
|
123
153
|
/**
|
|
124
|
-
* Cookie accessor returned by `
|
|
154
|
+
* Cookie accessor returned by `getCookies()`.
|
|
125
155
|
*
|
|
126
156
|
* Read methods are always available. Mutation methods throw in read-only
|
|
127
157
|
* contexts (access.ts, server components).
|
|
@@ -148,7 +178,7 @@ export interface RequestCookies {
|
|
|
148
178
|
* Useful when forwarding cookies from an internal `fetch()` or auth handler:
|
|
149
179
|
* ```ts
|
|
150
180
|
* const response = await auth.handler(req);
|
|
151
|
-
*
|
|
181
|
+
* getCookies().then(c => c.setFromHeaders(response.headers));
|
|
152
182
|
* ```
|
|
153
183
|
*/
|
|
154
184
|
setFromHeaders(headers: Headers): void;
|
|
@@ -161,7 +191,7 @@ export interface RequestCookies {
|
|
|
161
191
|
}
|
|
162
192
|
/**
|
|
163
193
|
* Run a callback within a request context. Used by the pipeline to establish
|
|
164
|
-
* per-request ALS scope so that `
|
|
194
|
+
* per-request ALS scope so that `getHeaders()` and `getCookies()` work.
|
|
165
195
|
*
|
|
166
196
|
* @param req - The incoming Request object.
|
|
167
197
|
* @param fn - The function to run within the request context.
|
|
@@ -184,7 +214,7 @@ export declare function markResponseFlushed(): void;
|
|
|
184
214
|
/**
|
|
185
215
|
* Build a Map of cookie name → value reflecting the current request's
|
|
186
216
|
* read-your-own-writes state. Includes incoming cookies plus any
|
|
187
|
-
* mutations from
|
|
217
|
+
* mutations from getCookies().set() / getCookies().delete() in the same request.
|
|
188
218
|
*
|
|
189
219
|
* Used by SSR renderers to populate NavContext.cookies so that
|
|
190
220
|
* useCookie()'s server snapshot matches the actual response state.
|
|
@@ -205,7 +235,7 @@ export declare function getSetCookieHeaders(): string[];
|
|
|
205
235
|
*
|
|
206
236
|
* Called by the pipeline after middleware.ts runs. Merges overlay headers
|
|
207
237
|
* on top of the original request headers so downstream code (access.ts,
|
|
208
|
-
* server components, server actions) sees them via `
|
|
238
|
+
* server components, server actions) sees them via `getHeaders()`.
|
|
209
239
|
*
|
|
210
240
|
* The original request headers are never mutated — a new frozen Headers
|
|
211
241
|
* object is created with the overlay applied on top.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAA8C,MAAM,mBAAmB,CAAC;AAMlG,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAQ7B;;;;;GAKG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"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"}
|
package/dist/server/tracing.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tracing — per-request trace ID via AsyncLocalStorage, OTEL span helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* getTraceId() is always available in server code (middleware, access, components, actions).
|
|
5
5
|
* Returns a 32-char lowercase hex string — the OTEL trace ID when an SDK is active,
|
|
6
6
|
* or a crypto.randomUUID()-derived fallback otherwise.
|
|
7
7
|
*
|
|
@@ -17,11 +17,11 @@ export type { TraceStore } from './als-registry.js';
|
|
|
17
17
|
*
|
|
18
18
|
* Throws if called outside a request context (no ALS store).
|
|
19
19
|
*/
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function getTraceId(): string;
|
|
21
21
|
/**
|
|
22
22
|
* Returns the current OTEL span ID if available, undefined otherwise.
|
|
23
23
|
*/
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function getSpanId(): string | undefined;
|
|
25
25
|
/**
|
|
26
26
|
* Generate a 32-char lowercase hex ID from crypto.randomUUID().
|
|
27
27
|
* Same format as OTEL trace IDs — zero-friction upgrade path.
|
|
@@ -45,7 +45,7 @@ export declare function replaceTraceId(newTraceId: string, newSpanId?: string):
|
|
|
45
45
|
export declare function updateSpanId(newSpanId: string | undefined): void;
|
|
46
46
|
/**
|
|
47
47
|
* Get the current trace store, or undefined if outside a request context.
|
|
48
|
-
* Framework-internal — use
|
|
48
|
+
* Framework-internal — use getTraceId()/getSpanId() in user code.
|
|
49
49
|
*/
|
|
50
50
|
export declare function getTraceStore(): TraceStore | undefined;
|
|
51
51
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/server/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;;;;;GAOG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/server/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;;;;;GAOG;AACH,wBAAgB,UAAU,IAAI,MAAM,CASnC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAID;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAM3E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAKhE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD;AAID;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,OAAO,iBAAiB,EAAE,eAAe,GAChD,OAAO,CAAC,IAAI,CAAC,CAuCf;AA4BD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC,CAUrF;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACrD,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,IAAI,CASN;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAc/F"}
|
package/dist/shims/headers.d.ts
CHANGED
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
* via native package.json exports. This ensures the same ALS singleton as the
|
|
6
6
|
* pipeline (both import from the same shared request-context chunk in dist/).
|
|
7
7
|
*/
|
|
8
|
-
export {
|
|
8
|
+
export { getHeaders, getCookies } from '@timber-js/app/server';
|
|
9
|
+
export { getHeaders as headers, getCookies as cookies } from '@timber-js/app/server';
|
|
9
10
|
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
* functions import from @timber-js/app/server for ALS singleton consistency.
|
|
7
7
|
*/
|
|
8
8
|
export { useSegmentParams, useSegmentParams as useParams, usePathname, useSearchParams, useRouter, useSelectedLayoutSegment, useSelectedLayoutSegments, } from '@timber-js/app/client';
|
|
9
|
-
export { redirect,
|
|
9
|
+
export { redirect, redirectExternal, RedirectType } from '@timber-js/app/server';
|
|
10
|
+
export { permanentRedirect, notFound } from '../server/primitives.js';
|
|
10
11
|
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/shims/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,IAAI,SAAS,EAC7B,WAAW,EACX,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/shims/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,IAAI,SAAS,EAC7B,WAAW,EACX,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIjF,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timber-js/app",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.72",
|
|
4
4
|
"description": "Vite-native React framework built for Servers and Serverless Platforms — correct HTTP semantics, real status codes, pages that work without JavaScript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare-workers",
|
|
@@ -30,6 +30,20 @@
|
|
|
30
30
|
"LICENSE"
|
|
31
31
|
],
|
|
32
32
|
"type": "module",
|
|
33
|
+
"imports": {
|
|
34
|
+
"#server-internal": {
|
|
35
|
+
"types": "./dist/server/internal.d.ts",
|
|
36
|
+
"default": "./dist/server/internal.js"
|
|
37
|
+
},
|
|
38
|
+
"#client-internal": {
|
|
39
|
+
"types": "./dist/client/internal.d.ts",
|
|
40
|
+
"default": "./dist/client/internal.js"
|
|
41
|
+
},
|
|
42
|
+
"#routing": {
|
|
43
|
+
"types": "./dist/routing/index.d.ts",
|
|
44
|
+
"default": "./dist/routing/index.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
33
47
|
"exports": {
|
|
34
48
|
".": {
|
|
35
49
|
"types": "./dist/index.d.ts",
|
|
@@ -47,10 +61,6 @@
|
|
|
47
61
|
"types": "./dist/cache/index.d.ts",
|
|
48
62
|
"import": "./dist/cache/index.js"
|
|
49
63
|
},
|
|
50
|
-
"./content": {
|
|
51
|
-
"types": "./dist/content/index.d.ts",
|
|
52
|
-
"import": "./dist/content/index.js"
|
|
53
|
-
},
|
|
54
64
|
"./codec": {
|
|
55
65
|
"types": "./dist/codec.d.ts",
|
|
56
66
|
"import": "./dist/codec.js"
|
|
@@ -59,22 +69,18 @@
|
|
|
59
69
|
"types": "./dist/cookies/index.d.ts",
|
|
60
70
|
"import": "./dist/cookies/index.js"
|
|
61
71
|
},
|
|
62
|
-
"./segment-params": {
|
|
63
|
-
"types": "./dist/segment-params/index.d.ts",
|
|
64
|
-
"import": "./dist/segment-params/index.js"
|
|
65
|
-
},
|
|
66
72
|
"./search-params": {
|
|
67
73
|
"types": "./dist/search-params/index.d.ts",
|
|
68
74
|
"import": "./dist/search-params/index.js"
|
|
69
75
|
},
|
|
70
|
-
"./routing": {
|
|
71
|
-
"types": "./dist/routing/index.d.ts",
|
|
72
|
-
"import": "./dist/routing/index.js"
|
|
73
|
-
},
|
|
74
76
|
"./adapters/cloudflare": {
|
|
75
77
|
"types": "./dist/adapters/cloudflare.d.ts",
|
|
76
78
|
"import": "./dist/adapters/cloudflare.js"
|
|
77
79
|
},
|
|
80
|
+
"./adapters/cloudflare/cache": {
|
|
81
|
+
"types": "./dist/adapters/cloudflare-kv-cache.d.ts",
|
|
82
|
+
"import": "./dist/adapters/cloudflare-kv-cache.js"
|
|
83
|
+
},
|
|
78
84
|
"./adapters/cloudflare/dev": {
|
|
79
85
|
"types": "./dist/adapters/cloudflare-dev.d.ts",
|
|
80
86
|
"import": "./dist/adapters/cloudflare-dev.js"
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { CacheHandler } from '../cache/index';
|
|
2
|
+
import { getCloudflareBindings } from './cloudflare';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Cloudflare Workers KV interface — the subset of KVNamespace we depend on.
|
|
6
|
+
* Users don't need to import this; the handler resolves the binding internally
|
|
7
|
+
* via `getCloudflareBindings()`.
|
|
8
|
+
*/
|
|
9
|
+
export interface CloudflareKVNamespace {
|
|
10
|
+
get(key: string, options: { type: 'json' }): Promise<unknown>;
|
|
11
|
+
get(key: string, options?: { type?: string }): Promise<string | null>;
|
|
12
|
+
put(key: string, value: string, options?: { expirationTtl?: number }): Promise<void>;
|
|
13
|
+
delete(key: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface KVCacheEntry {
|
|
17
|
+
value: unknown;
|
|
18
|
+
tags: string[];
|
|
19
|
+
expiresAt: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Cloudflare Workers KV–backed CacheHandler.
|
|
24
|
+
*
|
|
25
|
+
* Uses tag index keys for tag-based invalidation (KV has no secondary indexes).
|
|
26
|
+
* Stores entries with 2× TTL so stale entries survive for `staleWhileRevalidate`
|
|
27
|
+
* reads. The logical staleness is determined by the `expiresAt` timestamp inside
|
|
28
|
+
* the entry payload.
|
|
29
|
+
*
|
|
30
|
+
* **Consistency:** KV is eventually consistent (~60s propagation). TTL is the
|
|
31
|
+
* primary expiry mechanism. Tag invalidation is best-effort — do not rely on it
|
|
32
|
+
* for security-critical cache purging (use short TTLs instead).
|
|
33
|
+
*
|
|
34
|
+
* ```ts
|
|
35
|
+
* // timber.config.ts
|
|
36
|
+
* import { CloudflareKVCacheHandler } from '@timber-js/app/adapters/cloudflare/cache';
|
|
37
|
+
*
|
|
38
|
+
* export default {
|
|
39
|
+
* cacheHandler: new CloudflareKVCacheHandler({ bindingName: 'TIMBER_CACHE' }),
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class CloudflareKVCacheHandler implements CacheHandler {
|
|
44
|
+
private bindingName: string;
|
|
45
|
+
private prefix: string;
|
|
46
|
+
|
|
47
|
+
constructor(options: { bindingName: string; prefix?: string }) {
|
|
48
|
+
this.bindingName = options.bindingName;
|
|
49
|
+
this.prefix = options.prefix ?? 'tc:';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Resolve the KV binding from the current request's Cloudflare env. */
|
|
53
|
+
private getKV(): CloudflareKVNamespace {
|
|
54
|
+
const env = getCloudflareBindings<Record<string, CloudflareKVNamespace>>();
|
|
55
|
+
const kv = env[this.bindingName];
|
|
56
|
+
if (!kv) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`CloudflareKVCacheHandler: binding "${this.bindingName}" not found. ` +
|
|
59
|
+
'Check your wrangler.jsonc kv_namespaces configuration.'
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
return kv;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private dataKey(key: string): string {
|
|
66
|
+
return `${this.prefix}d:${key}`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private tagKey(tag: string): string {
|
|
70
|
+
return `${this.prefix}t:${tag}`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async get(key: string): Promise<{ value: unknown; stale: boolean } | null> {
|
|
74
|
+
const kv = this.getKV();
|
|
75
|
+
const raw = await kv.get(this.dataKey(key), { type: 'json' });
|
|
76
|
+
if (!raw) return null;
|
|
77
|
+
|
|
78
|
+
const entry = raw as KVCacheEntry;
|
|
79
|
+
const stale = Date.now() > entry.expiresAt;
|
|
80
|
+
return { value: entry.value, stale };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async set(key: string, value: unknown, opts: { ttl: number; tags: string[] }): Promise<void> {
|
|
84
|
+
const kv = this.getKV();
|
|
85
|
+
const entry: KVCacheEntry = {
|
|
86
|
+
value,
|
|
87
|
+
tags: opts.tags,
|
|
88
|
+
expiresAt: Date.now() + opts.ttl * 1000,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// KV expirationTtl minimum is 60s. Use 2× TTL (min 60s) so stale entries
|
|
92
|
+
// survive for staleWhileRevalidate background refetches.
|
|
93
|
+
const kvTtl = Math.max(opts.ttl * 2, 60);
|
|
94
|
+
await kv.put(this.dataKey(key), JSON.stringify(entry), { expirationTtl: kvTtl });
|
|
95
|
+
|
|
96
|
+
// Update tag indexes (best-effort, eventually consistent).
|
|
97
|
+
// Tag indexes have no TTL — cleaned up on invalidation.
|
|
98
|
+
await Promise.all(
|
|
99
|
+
opts.tags.map(async (tag) => {
|
|
100
|
+
const existing = (await kv.get(this.tagKey(tag), { type: 'json' })) as string[] | null;
|
|
101
|
+
const keys: string[] = Array.isArray(existing) ? existing : [];
|
|
102
|
+
if (!keys.includes(key)) {
|
|
103
|
+
keys.push(key);
|
|
104
|
+
await kv.put(this.tagKey(tag), JSON.stringify(keys));
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async invalidate(opts: { key?: string; tag?: string }): Promise<void> {
|
|
111
|
+
const kv = this.getKV();
|
|
112
|
+
|
|
113
|
+
if (opts.key) {
|
|
114
|
+
// Read entry to find its tags, then clean up tag indexes
|
|
115
|
+
const raw = (await kv.get(this.dataKey(opts.key), { type: 'json' })) as KVCacheEntry | null;
|
|
116
|
+
if (raw) {
|
|
117
|
+
await Promise.all(
|
|
118
|
+
raw.tags.map(async (tag) => {
|
|
119
|
+
const existing = (await kv.get(this.tagKey(tag), { type: 'json' })) as string[] | null;
|
|
120
|
+
if (Array.isArray(existing)) {
|
|
121
|
+
const filtered = existing.filter((k: string) => k !== opts.key);
|
|
122
|
+
if (filtered.length > 0) {
|
|
123
|
+
await kv.put(this.tagKey(tag), JSON.stringify(filtered));
|
|
124
|
+
} else {
|
|
125
|
+
await kv.delete(this.tagKey(tag));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
})
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
await kv.delete(this.dataKey(opts.key));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (opts.tag) {
|
|
135
|
+
const existing = (await kv.get(this.tagKey(opts.tag), { type: 'json' })) as string[] | null;
|
|
136
|
+
if (Array.isArray(existing)) {
|
|
137
|
+
await Promise.all(existing.map((key: string) => kv.delete(this.dataKey(key))));
|
|
138
|
+
}
|
|
139
|
+
await kv.delete(this.tagKey(opts.tag));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -36,7 +36,7 @@ export function getCacheHandler(): CacheHandlerLike {
|
|
|
36
36
|
|
|
37
37
|
function createDefaultHandler(): CacheHandlerLike {
|
|
38
38
|
const store = new Map<string, { value: unknown; expiresAt: number; tags: string[] }>();
|
|
39
|
-
const
|
|
39
|
+
const maxEntries = 1000;
|
|
40
40
|
|
|
41
41
|
return {
|
|
42
42
|
async get(key) {
|
|
@@ -49,7 +49,7 @@ function createDefaultHandler(): CacheHandlerLike {
|
|
|
49
49
|
},
|
|
50
50
|
async set(key, value, opts) {
|
|
51
51
|
if (store.has(key)) store.delete(key);
|
|
52
|
-
while (store.size >=
|
|
52
|
+
while (store.size >= maxEntries) {
|
|
53
53
|
const oldest = store.keys().next().value;
|
|
54
54
|
if (oldest !== undefined) store.delete(oldest);
|
|
55
55
|
else break;
|