@timber-js/app 0.1.48 → 0.1.49

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.
Files changed (70) hide show
  1. package/dist/_chunks/{als-registry-c0AGnbqS.js → als-registry-k-AtAQ9R.js} +4 -2
  2. package/dist/_chunks/{als-registry-c0AGnbqS.js.map → als-registry-k-AtAQ9R.js.map} +1 -1
  3. package/dist/_chunks/interception-DGDIjDbR.js.map +1 -1
  4. package/dist/_chunks/{request-context-C69VW4xS.js → request-context-CRj2Zh1E.js} +2 -2
  5. package/dist/_chunks/request-context-CRj2Zh1E.js.map +1 -0
  6. package/dist/_chunks/{tracing-tIvqStk8.js → tracing-DF0G3FB7.js} +2 -2
  7. package/dist/_chunks/{tracing-tIvqStk8.js.map → tracing-DF0G3FB7.js.map} +1 -1
  8. package/dist/_chunks/use-query-states-DAhgj8Gx.js.map +1 -1
  9. package/dist/adapters/nitro.d.ts.map +1 -1
  10. package/dist/adapters/nitro.js +32 -5
  11. package/dist/adapters/nitro.js.map +1 -1
  12. package/dist/cache/index.js +2 -2
  13. package/dist/client/index.js.map +1 -1
  14. package/dist/client/navigation-context.d.ts +1 -1
  15. package/dist/client/navigation-context.d.ts.map +1 -1
  16. package/dist/client/router.d.ts.map +1 -1
  17. package/dist/client/transition-root.d.ts.map +1 -1
  18. package/dist/client/use-query-states.d.ts.map +1 -1
  19. package/dist/client/use-router.d.ts.map +1 -1
  20. package/dist/cookies/index.js +2 -2
  21. package/dist/index.d.ts +8 -12
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +53 -10
  24. package/dist/index.js.map +1 -1
  25. package/dist/plugins/chunks.d.ts.map +1 -1
  26. package/dist/plugins/entries.d.ts +10 -0
  27. package/dist/plugins/entries.d.ts.map +1 -1
  28. package/dist/routing/scanner.d.ts.map +1 -1
  29. package/dist/server/als-registry.d.ts +4 -0
  30. package/dist/server/als-registry.d.ts.map +1 -1
  31. package/dist/server/index.js +39 -7
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/metadata-platform.d.ts.map +1 -1
  34. package/dist/server/metadata-social.d.ts.map +1 -1
  35. package/dist/server/pipeline.d.ts.map +1 -1
  36. package/dist/server/primitives.d.ts +8 -4
  37. package/dist/server/primitives.d.ts.map +1 -1
  38. package/dist/server/request-context.d.ts.map +1 -1
  39. package/dist/server/rsc-entry/index.d.ts +1 -0
  40. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  41. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  42. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  43. package/dist/server/rsc-prop-warnings.d.ts.map +1 -1
  44. package/dist/server/waituntil-bridge.d.ts +27 -0
  45. package/dist/server/waituntil-bridge.d.ts.map +1 -0
  46. package/package.json +2 -2
  47. package/src/adapters/nitro.ts +44 -8
  48. package/src/client/browser-entry.ts +80 -12
  49. package/src/client/navigation-context.ts +4 -1
  50. package/src/client/router.ts +5 -7
  51. package/src/client/transition-root.tsx +5 -11
  52. package/src/client/use-query-states.ts +4 -1
  53. package/src/client/use-router.ts +3 -1
  54. package/src/index.ts +8 -25
  55. package/src/plugins/chunks.ts +2 -1
  56. package/src/plugins/entries.ts +66 -2
  57. package/src/routing/scanner.ts +1 -4
  58. package/src/server/als-registry.ts +10 -0
  59. package/src/server/compress.ts +0 -1
  60. package/src/server/metadata-platform.ts +4 -1
  61. package/src/server/metadata-social.ts +4 -1
  62. package/src/server/pipeline.ts +6 -23
  63. package/src/server/primitives.ts +19 -9
  64. package/src/server/request-context.ts +1 -5
  65. package/src/server/rsc-entry/index.ts +16 -0
  66. package/src/server/rsc-entry/rsc-stream.ts +1 -4
  67. package/src/server/rsc-entry/ssr-renderer.ts +1 -3
  68. package/src/server/rsc-prop-warnings.ts +7 -17
  69. package/src/server/waituntil-bridge.ts +34 -0
  70. package/dist/_chunks/request-context-C69VW4xS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/plugins/chunks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAwGnC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4B1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,GAAG,SAAS,CAcrB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAoBrC"}
1
+ {"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/plugins/chunks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAwGnC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4B1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,GAAG,SAAS,CAerB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAoBrC"}
@@ -12,6 +12,16 @@
12
12
  */
13
13
  import type { Plugin } from 'vite';
14
14
  import type { PluginContext } from '#/index.js';
15
+ /**
16
+ * Generate the virtual:timber-instrumentation module source.
17
+ *
18
+ * When the user's instrumentation.ts exists, generates a module that
19
+ * dynamically imports it. When it doesn't exist, generates a module
20
+ * that returns null. The RSC entry calls this loader at startup time.
21
+ *
22
+ * See design/17-logging.md §"instrumentation.ts — The Entry Point"
23
+ */
24
+ export declare function generateInstrumentationModule(instrumentationPath: string | null): string;
15
25
  /**
16
26
  * Create the timber-entries Vite plugin.
17
27
  *
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/plugins/entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqGhD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CA+DxD"}
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/plugins/entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyHhD;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAwBxF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAwExD"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/routing/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EAEX,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAgDpB;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,SAAS,CAwBhF;AAyBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CA8CA"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/routing/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EAEX,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA6CpB;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,SAAS,CAwBhF;AAyBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CA8CA"}
@@ -77,4 +77,8 @@ export declare const formFlashAls: AsyncLocalStorage<import("./form-flash.js").F
77
77
  export type EarlyHintsSenderFn = (links: string[]) => void;
78
78
  /** @internal — import via early-hints-sender.ts public API */
79
79
  export declare const earlyHintsSenderAls: AsyncLocalStorage<EarlyHintsSenderFn>;
80
+ /** Function that extends the request lifecycle with a background promise. */
81
+ export type WaitUntilFn = (promise: Promise<unknown>) => void;
82
+ /** @internal — import via waituntil-bridge.ts public API */
83
+ export declare const waitUntilAls: AsyncLocalStorage<WaitUntilFn>;
80
84
  //# sourceMappingURL=als-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"als-registry.d.ts","sourceRoot":"","sources":["../../src/server/als-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,wCAA+C,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,uEAAuE;IACvE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,wFAAwF;IACxF,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;CACvD;AAMD,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,eAAO,MAAM,QAAQ,+BAAsC,CAAC;AAM5D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;CACrD;AAED,yDAAyD;AACzD,eAAO,MAAM,SAAS,gCAAuC,CAAC;AAM9D,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,mDAAmD;AACnD,eAAO,MAAM,eAAe,sCAA6C,CAAC;AAM1E,sDAAsD;AACtD,eAAO,MAAM,YAAY,4DAAmE,CAAC;AAM7F,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE3D,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,uCAA8C,CAAC"}
1
+ {"version":3,"file":"als-registry.d.ts","sourceRoot":"","sources":["../../src/server/als-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,wCAA+C,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,uEAAuE;IACvE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,wFAAwF;IACxF,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC;CACvD;AAMD,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,eAAO,MAAM,QAAQ,+BAAsC,CAAC;AAM5D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;CACrD;AAED,yDAAyD;AACzD,eAAO,MAAM,SAAS,gCAAuC,CAAC;AAM9D,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,mDAAmD;AACnD,eAAO,MAAM,eAAe,sCAA6C,CAAC;AAM1E,sDAAsD;AACtD,eAAO,MAAM,YAAY,4DAAmE,CAAC;AAM7F,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE3D,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,uCAA8C,CAAC;AAM/E,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAE9D,4DAA4D;AAC5D,eAAO,MAAM,YAAY,gCAAuC,CAAC"}
@@ -1,9 +1,32 @@
1
1
  import { a as warnDenyAfterFlush, c as warnRedirectInAccess, d as warnSlowSlotWithoutSuspense, f as warnStaticRequestApi, i as warnCacheRequestProps, l as warnRedirectInSlotAccess, n as WarningId, o as warnDenyInSuspense, p as warnSuspenseWrappingChildren, r as setViteServer, s as warnDynamicApiInStaticBuild, t as formatSize, u as warnRedirectInSuspense } from "../_chunks/format-DNt20Kt8.js";
2
2
  import { i as getMetadataRouteServePath, n as classifyMetadataRoute, r as getMetadataRouteAutoLink, t as METADATA_ROUTE_CONVENTIONS } from "../_chunks/metadata-routes-CQCnF4VK.js";
3
- import { a as timingAls, i as revalidationAls, n as formFlashAls, t as earlyHintsSenderAls } from "../_chunks/als-registry-c0AGnbqS.js";
4
- import { a as markResponseFlushed, c as setCookieSecrets, i as headers, l as setMutableCookieContext, n as cookies, o as runWithRequestContext, r as getSetCookieHeaders, s as searchParams, t as applyRequestHeaderOverlay, u as setParsedSearchParams } from "../_chunks/request-context-C69VW4xS.js";
5
- import { a as replaceTraceId, c as spanId, i as getTraceStore, l as traceId, n as generateTraceId, o as runWithTraceId, r as getOtelTraceId, s as setSpanAttribute, t as addSpanEvent, u as withSpan } from "../_chunks/tracing-tIvqStk8.js";
3
+ import { a as timingAls, i as revalidationAls, n as formFlashAls, s as waitUntilAls, t as earlyHintsSenderAls } from "../_chunks/als-registry-k-AtAQ9R.js";
4
+ import { a as markResponseFlushed, c as setCookieSecrets, i as headers, l as setMutableCookieContext, n as cookies, o as runWithRequestContext, r as getSetCookieHeaders, s as searchParams, t as applyRequestHeaderOverlay, u as setParsedSearchParams } from "../_chunks/request-context-CRj2Zh1E.js";
5
+ import { a as replaceTraceId, c as spanId, i as getTraceStore, l as traceId, n as generateTraceId, o as runWithTraceId, r as getOtelTraceId, s as setSpanAttribute, t as addSpanEvent, u as withSpan } from "../_chunks/tracing-DF0G3FB7.js";
6
6
  import { readFile } from "node:fs/promises";
7
+ //#region src/server/waituntil-bridge.ts
8
+ /**
9
+ * Per-request waitUntil bridge — ALS bridge for platform adapters.
10
+ *
11
+ * The generated entry point (Nitro, Cloudflare) wraps the handler with
12
+ * `runWithWaitUntil`, binding the platform's lifecycle extension function
13
+ * (e.g., h3's `event.waitUntil()` or CF's `ctx.waitUntil()`) for the
14
+ * request duration. The `waitUntil()` primitive reads from this ALS to
15
+ * dispatch background work to the correct platform API.
16
+ *
17
+ * Design doc: design/11-platform.md §"waitUntil()"
18
+ */
19
+ /**
20
+ * Get the current request's waitUntil function, if available.
21
+ *
22
+ * Returns undefined when no platform adapter has installed a waitUntil
23
+ * handler for the current request (e.g., on platforms that don't support
24
+ * lifecycle extension, or outside a request context).
25
+ */
26
+ function getWaitUntil() {
27
+ return waitUntilAls.getStore();
28
+ }
29
+ //#endregion
7
30
  //#region src/server/primitives.ts
8
31
  /**
9
32
  * Check if a value is JSON-serializable without data loss.
@@ -219,14 +242,23 @@ var _waitUntilWarned = false;
219
242
  * Register a promise to be kept alive after the response is sent.
220
243
  * Maps to `ctx.waitUntil()` on Cloudflare Workers and similar platforms.
221
244
  *
222
- * If the adapter does not support `waitUntil`, a warning is logged once
223
- * and the promise is left to resolve (or reject) without being tracked.
245
+ * In production, the platform adapter installs a per-request waitUntil
246
+ * function via ALS (see waituntil-bridge.ts). This function checks the
247
+ * ALS bridge first, then falls back to the legacy adapter argument.
248
+ *
249
+ * If neither is available, a warning is logged once and the promise is
250
+ * left to resolve (or reject) without being tracked.
224
251
  *
225
252
  * @param promise - The background work to keep alive.
226
- * @param adapter - The platform adapter (injected by the framework at runtime).
253
+ * @param adapter - Optional legacy adapter (prefer ALS bridge in production).
227
254
  */
228
255
  function waitUntil(promise, adapter) {
229
- if (typeof adapter.waitUntil === "function") {
256
+ const alsFn = getWaitUntil();
257
+ if (alsFn) {
258
+ alsFn(promise);
259
+ return;
260
+ }
261
+ if (adapter && typeof adapter.waitUntil === "function") {
230
262
  adapter.waitUntil(promise);
231
263
  return;
232
264
  }