@czap/astro 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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/Satellite.d.ts +42 -0
  4. package/dist/Satellite.d.ts.map +1 -0
  5. package/dist/Satellite.js +55 -0
  6. package/dist/Satellite.js.map +1 -0
  7. package/dist/client-directives/gpu.d.ts +3 -0
  8. package/dist/client-directives/gpu.d.ts.map +1 -0
  9. package/dist/client-directives/gpu.js +5 -0
  10. package/dist/client-directives/gpu.js.map +1 -0
  11. package/dist/client-directives/llm.d.ts +3 -0
  12. package/dist/client-directives/llm.d.ts.map +1 -0
  13. package/dist/client-directives/llm.js +5 -0
  14. package/dist/client-directives/llm.js.map +1 -0
  15. package/dist/client-directives/satellite.d.ts +3 -0
  16. package/dist/client-directives/satellite.d.ts.map +1 -0
  17. package/dist/client-directives/satellite.js +5 -0
  18. package/dist/client-directives/satellite.js.map +1 -0
  19. package/dist/client-directives/stream.d.ts +3 -0
  20. package/dist/client-directives/stream.d.ts.map +1 -0
  21. package/dist/client-directives/stream.js +5 -0
  22. package/dist/client-directives/stream.js.map +1 -0
  23. package/dist/client-directives/wasm.d.ts +3 -0
  24. package/dist/client-directives/wasm.d.ts.map +1 -0
  25. package/dist/client-directives/wasm.js +6 -0
  26. package/dist/client-directives/wasm.js.map +1 -0
  27. package/dist/client-directives/worker.d.ts +3 -0
  28. package/dist/client-directives/worker.d.ts.map +1 -0
  29. package/dist/client-directives/worker.js +5 -0
  30. package/dist/client-directives/worker.js.map +1 -0
  31. package/dist/detect-upgrade.d.ts +16 -0
  32. package/dist/detect-upgrade.d.ts.map +1 -0
  33. package/dist/detect-upgrade.js +105 -0
  34. package/dist/detect-upgrade.js.map +1 -0
  35. package/dist/headers.d.ts +45 -0
  36. package/dist/headers.d.ts.map +1 -0
  37. package/dist/headers.js +64 -0
  38. package/dist/headers.js.map +1 -0
  39. package/dist/index.d.ts +30 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +26 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/integration.d.ts +76 -0
  44. package/dist/integration.d.ts.map +1 -0
  45. package/dist/integration.js +240 -0
  46. package/dist/integration.js.map +1 -0
  47. package/dist/middleware.d.ts +69 -0
  48. package/dist/middleware.d.ts.map +1 -0
  49. package/dist/middleware.js +75 -0
  50. package/dist/middleware.js.map +1 -0
  51. package/dist/quantize.d.ts +50 -0
  52. package/dist/quantize.d.ts.map +1 -0
  53. package/dist/quantize.js +122 -0
  54. package/dist/quantize.js.map +1 -0
  55. package/dist/runtime/boundary.d.ts +123 -0
  56. package/dist/runtime/boundary.d.ts.map +1 -0
  57. package/dist/runtime/boundary.js +164 -0
  58. package/dist/runtime/boundary.js.map +1 -0
  59. package/dist/runtime/globals.d.ts +32 -0
  60. package/dist/runtime/globals.d.ts.map +1 -0
  61. package/dist/runtime/globals.js +45 -0
  62. package/dist/runtime/globals.js.map +1 -0
  63. package/dist/runtime/gpu.d.ts +15 -0
  64. package/dist/runtime/gpu.d.ts.map +1 -0
  65. package/dist/runtime/gpu.js +266 -0
  66. package/dist/runtime/gpu.js.map +1 -0
  67. package/dist/runtime/index.d.ts +7 -0
  68. package/dist/runtime/index.d.ts.map +1 -0
  69. package/dist/runtime/index.js +5 -0
  70. package/dist/runtime/index.js.map +1 -0
  71. package/dist/runtime/llm-receipt-tracker.d.ts +21 -0
  72. package/dist/runtime/llm-receipt-tracker.d.ts.map +1 -0
  73. package/dist/runtime/llm-receipt-tracker.js +60 -0
  74. package/dist/runtime/llm-receipt-tracker.js.map +1 -0
  75. package/dist/runtime/llm-render-pipeline.d.ts +89 -0
  76. package/dist/runtime/llm-render-pipeline.d.ts.map +1 -0
  77. package/dist/runtime/llm-render-pipeline.js +241 -0
  78. package/dist/runtime/llm-render-pipeline.js.map +1 -0
  79. package/dist/runtime/llm-session.d.ts +126 -0
  80. package/dist/runtime/llm-session.d.ts.map +1 -0
  81. package/dist/runtime/llm-session.js +385 -0
  82. package/dist/runtime/llm-session.js.map +1 -0
  83. package/dist/runtime/llm.d.ts +16 -0
  84. package/dist/runtime/llm.d.ts.map +1 -0
  85. package/dist/runtime/llm.js +273 -0
  86. package/dist/runtime/llm.js.map +1 -0
  87. package/dist/runtime/policy.d.ts +100 -0
  88. package/dist/runtime/policy.d.ts.map +1 -0
  89. package/dist/runtime/policy.js +147 -0
  90. package/dist/runtime/policy.js.map +1 -0
  91. package/dist/runtime/receipt-chain.d.ts +22 -0
  92. package/dist/runtime/receipt-chain.d.ts.map +1 -0
  93. package/dist/runtime/receipt-chain.js +80 -0
  94. package/dist/runtime/receipt-chain.js.map +1 -0
  95. package/dist/runtime/runtime-session.d.ts +34 -0
  96. package/dist/runtime/runtime-session.d.ts.map +1 -0
  97. package/dist/runtime/runtime-session.js +102 -0
  98. package/dist/runtime/runtime-session.js.map +1 -0
  99. package/dist/runtime/satellite.d.ts +13 -0
  100. package/dist/runtime/satellite.d.ts.map +1 -0
  101. package/dist/runtime/satellite.js +59 -0
  102. package/dist/runtime/satellite.js.map +1 -0
  103. package/dist/runtime/slots.d.ts +34 -0
  104. package/dist/runtime/slots.d.ts.map +1 -0
  105. package/dist/runtime/slots.js +108 -0
  106. package/dist/runtime/slots.js.map +1 -0
  107. package/dist/runtime/stream-session.d.ts +47 -0
  108. package/dist/runtime/stream-session.d.ts.map +1 -0
  109. package/dist/runtime/stream-session.js +82 -0
  110. package/dist/runtime/stream-session.js.map +1 -0
  111. package/dist/runtime/stream.d.ts +9 -0
  112. package/dist/runtime/stream.d.ts.map +1 -0
  113. package/dist/runtime/stream.js +308 -0
  114. package/dist/runtime/stream.js.map +1 -0
  115. package/dist/runtime/url-policy.d.ts +28 -0
  116. package/dist/runtime/url-policy.d.ts.map +1 -0
  117. package/dist/runtime/url-policy.js +87 -0
  118. package/dist/runtime/url-policy.js.map +1 -0
  119. package/dist/runtime/wasm.d.ts +20 -0
  120. package/dist/runtime/wasm.d.ts.map +1 -0
  121. package/dist/runtime/wasm.js +70 -0
  122. package/dist/runtime/wasm.js.map +1 -0
  123. package/dist/runtime/worker.d.ts +11 -0
  124. package/dist/runtime/worker.d.ts.map +1 -0
  125. package/dist/runtime/worker.js +249 -0
  126. package/dist/runtime/worker.js.map +1 -0
  127. package/package.json +106 -0
  128. package/src/Satellite.astro +39 -0
  129. package/src/Satellite.ts +84 -0
  130. package/src/client-directives/gpu.ts +5 -0
  131. package/src/client-directives/llm.ts +5 -0
  132. package/src/client-directives/satellite.ts +5 -0
  133. package/src/client-directives/stream.ts +5 -0
  134. package/src/client-directives/wasm.ts +6 -0
  135. package/src/client-directives/worker.ts +5 -0
  136. package/src/detect-upgrade.ts +105 -0
  137. package/src/headers.ts +84 -0
  138. package/src/index.ts +30 -0
  139. package/src/integration.ts +309 -0
  140. package/src/middleware.ts +133 -0
  141. package/src/quantize.ts +173 -0
  142. package/src/runtime/boundary.ts +263 -0
  143. package/src/runtime/globals.ts +57 -0
  144. package/src/runtime/gpu.ts +291 -0
  145. package/src/runtime/index.ts +12 -0
  146. package/src/runtime/llm-receipt-tracker.ts +88 -0
  147. package/src/runtime/llm-render-pipeline.ts +366 -0
  148. package/src/runtime/llm-session.ts +548 -0
  149. package/src/runtime/llm.ts +344 -0
  150. package/src/runtime/policy.ts +229 -0
  151. package/src/runtime/receipt-chain.ts +106 -0
  152. package/src/runtime/runtime-session.ts +139 -0
  153. package/src/runtime/satellite.ts +80 -0
  154. package/src/runtime/slots.ts +136 -0
  155. package/src/runtime/stream-session.ts +125 -0
  156. package/src/runtime/stream.ts +407 -0
  157. package/src/runtime/url-policy.ts +107 -0
  158. package/src/runtime/wasm.ts +85 -0
  159. package/src/runtime/worker.ts +307 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Generic runtime-session lifecycle used by every `@czap/astro` client
3
+ * directive. Owns a microtask scheduler, a set of pending timers, and
4
+ * a state machine (`idle` / `active` / `reconnecting` / `disposed`)
5
+ * that every concrete session (stream, llm, gpu, ...) composes.
6
+ *
7
+ * @module
8
+ */
9
+ /** Lifecycle states a runtime session progresses through. */
10
+ export type RuntimeSessionState = 'idle' | 'active' | 'reconnecting' | 'disposed';
11
+ /**
12
+ * Shared lifecycle surface shared by every runtime-session kind.
13
+ *
14
+ * `schedule` batches callbacks into a single microtask flush;
15
+ * `setTimer` / `clearTimer` mirror `setTimeout` but participate in
16
+ * `dispose()` so no task outlives the session.
17
+ */
18
+ export interface RuntimeSessionShape {
19
+ readonly state: RuntimeSessionState;
20
+ activate(): void;
21
+ beginReconnect(): void;
22
+ schedule(task: () => void): Promise<void>;
23
+ setTimer(callback: () => void, delay: number): ReturnType<typeof setTimeout> | null;
24
+ clearTimer(handle: ReturnType<typeof setTimeout> | null | undefined): null;
25
+ isDisposed(): boolean;
26
+ dispose(): void;
27
+ }
28
+ /**
29
+ * Build a fresh runtime session. Every session starts in the `idle`
30
+ * state and must be explicitly `activate()`d before tasks are allowed
31
+ * to run.
32
+ */
33
+ export declare function createRuntimeSession(): RuntimeSessionShape;
34
+ //# sourceMappingURL=runtime-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-session.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime-session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6DAA6D;AAC7D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,UAAU,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,IAAI,IAAI,CAAC;IACjB,cAAc,IAAI,IAAI,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IACpF,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC3E,UAAU,IAAI,OAAO,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,CAuG1D"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Generic runtime-session lifecycle used by every `@czap/astro` client
3
+ * directive. Owns a microtask scheduler, a set of pending timers, and
4
+ * a state machine (`idle` / `active` / `reconnecting` / `disposed`)
5
+ * that every concrete session (stream, llm, gpu, ...) composes.
6
+ *
7
+ * @module
8
+ */
9
+ /**
10
+ * Build a fresh runtime session. Every session starts in the `idle`
11
+ * state and must be explicitly `activate()`d before tasks are allowed
12
+ * to run.
13
+ */
14
+ export function createRuntimeSession() {
15
+ let state = 'idle';
16
+ let scheduled = false;
17
+ let tasks = null;
18
+ let resolvers = null;
19
+ let timers = null;
20
+ const resolvePending = (pendingResolvers) => {
21
+ for (const resolve of pendingResolvers) {
22
+ resolve();
23
+ }
24
+ };
25
+ const flush = () => {
26
+ scheduled = false;
27
+ const pendingTasks = tasks ?? [];
28
+ tasks = null;
29
+ const pendingResolvers = resolvers ?? [];
30
+ resolvers = null;
31
+ if (state === 'disposed') {
32
+ resolvePending(pendingResolvers);
33
+ return;
34
+ }
35
+ for (const task of pendingTasks) {
36
+ task();
37
+ }
38
+ resolvePending(pendingResolvers);
39
+ };
40
+ return {
41
+ get state() {
42
+ return state;
43
+ },
44
+ activate() {
45
+ if (state !== 'disposed') {
46
+ state = 'active';
47
+ }
48
+ },
49
+ beginReconnect() {
50
+ if (state !== 'disposed') {
51
+ state = 'reconnecting';
52
+ }
53
+ },
54
+ schedule(task) {
55
+ if (state === 'disposed') {
56
+ return Promise.resolve();
57
+ }
58
+ (tasks ??= []).push(task);
59
+ if (!scheduled) {
60
+ scheduled = true;
61
+ queueMicrotask(flush);
62
+ }
63
+ return new Promise((resolve) => {
64
+ (resolvers ??= []).push(resolve);
65
+ });
66
+ },
67
+ setTimer(callback, delay) {
68
+ if (state === 'disposed') {
69
+ return null;
70
+ }
71
+ const handle = setTimeout(() => {
72
+ timers?.delete(handle);
73
+ callback();
74
+ }, delay);
75
+ (timers ??= new Set()).add(handle);
76
+ return handle;
77
+ },
78
+ clearTimer(handle) {
79
+ if (!handle) {
80
+ return null;
81
+ }
82
+ clearTimeout(handle);
83
+ timers?.delete(handle);
84
+ return null;
85
+ },
86
+ isDisposed() {
87
+ return state === 'disposed';
88
+ },
89
+ dispose() {
90
+ state = 'disposed';
91
+ for (const handle of timers ?? []) {
92
+ clearTimeout(handle);
93
+ }
94
+ timers = null;
95
+ tasks = null;
96
+ const pendingResolvers = resolvers ?? [];
97
+ resolvers = null;
98
+ resolvePending(pendingResolvers);
99
+ },
100
+ };
101
+ }
102
+ //# sourceMappingURL=runtime-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-session.js","sourceRoot":"","sources":["../../src/runtime/runtime-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Entry point used by the `client:satellite` directive. Parses the
3
+ * serialised boundary off `element`, attaches a viewport observer
4
+ * (when the signal is viewport-backed), and recomputes
5
+ * `data-czap-state` plus CSS variables whenever the signal crosses a
6
+ * threshold. Honors `czap:reinit` and `czap:dispose` custom events to
7
+ * re-read / tear down without remounting the island.
8
+ *
9
+ * @param load - Dynamic-import factory the directive passes in.
10
+ * @param element - Satellite root carrying `data-czap-boundary`.
11
+ */
12
+ export declare function initSatelliteDirective(load: () => Promise<unknown>, element: HTMLElement): void;
13
+ //# sourceMappingURL=satellite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"satellite.d.ts","sourceRoot":"","sources":["../../src/runtime/satellite.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA4D/F"}
@@ -0,0 +1,59 @@
1
+ import { applyBoundaryState, attachViewportObserver, evaluateBoundary, parseBoundary, readSignalValue, } from './boundary.js';
2
+ /**
3
+ * Entry point used by the `client:satellite` directive. Parses the
4
+ * serialised boundary off `element`, attaches a viewport observer
5
+ * (when the signal is viewport-backed), and recomputes
6
+ * `data-czap-state` plus CSS variables whenever the signal crosses a
7
+ * threshold. Honors `czap:reinit` and `czap:dispose` custom events to
8
+ * re-read / tear down without remounting the island.
9
+ *
10
+ * @param load - Dynamic-import factory the directive passes in.
11
+ * @param element - Satellite root carrying `data-czap-boundary`.
12
+ */
13
+ export function initSatelliteDirective(load, element) {
14
+ let runtimeBoundary = parseBoundary(element.getAttribute('data-czap-boundary'));
15
+ if (!runtimeBoundary) {
16
+ return;
17
+ }
18
+ let previousState = element.getAttribute('data-czap-state') ?? '';
19
+ let cleanupObserver = null;
20
+ const updateState = () => {
21
+ if (!runtimeBoundary) {
22
+ return;
23
+ }
24
+ const value = readSignalValue(runtimeBoundary.input);
25
+ if (value === undefined) {
26
+ return;
27
+ }
28
+ const state = evaluateBoundary(runtimeBoundary, value, previousState || undefined);
29
+ if (state === previousState) {
30
+ return;
31
+ }
32
+ previousState = state;
33
+ applyBoundaryState(element, runtimeBoundary, {
34
+ discrete: { [runtimeBoundary.name]: state },
35
+ }, 'czap:satellite-state');
36
+ };
37
+ const cleanup = () => {
38
+ cleanupObserver?.();
39
+ cleanupObserver = null;
40
+ };
41
+ const init = () => {
42
+ updateState();
43
+ if (runtimeBoundary) {
44
+ cleanupObserver = attachViewportObserver(runtimeBoundary.input, updateState);
45
+ }
46
+ };
47
+ element.addEventListener('czap:reinit', () => {
48
+ cleanup();
49
+ runtimeBoundary = parseBoundary(element.getAttribute('data-czap-boundary'));
50
+ previousState = element.getAttribute('data-czap-state') ?? '';
51
+ init();
52
+ });
53
+ element.addEventListener('czap:dispose', () => {
54
+ cleanup();
55
+ });
56
+ init();
57
+ load();
58
+ }
59
+ //# sourceMappingURL=satellite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"satellite.js","sourceRoot":"","sources":["../../src/runtime/satellite.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA4B,EAAE,OAAoB;IACvF,IAAI,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAClE,IAAI,eAAe,GAAwB,IAAI,CAAC;IAEhD,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,EAAE,KAAK,EAAE,aAAa,IAAI,SAAS,CAAC,CAAC;QACnF,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,aAAa,GAAG,KAAK,CAAC;QACtB,kBAAkB,CAChB,OAAO,EACP,eAAe,EACf;YACE,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;SAC5C,EACD,sBAAsB,CACvB,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,eAAe,EAAE,EAAE,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,WAAW,EAAE,CAAC;QACd,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,GAAG,sBAAsB,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3C,OAAO,EAAE,CAAC;QACV,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC5E,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { SlotRegistry } from '@czap/web';
2
+ /**
3
+ * Return the document-scoped {@link SlotRegistry.Shape}, creating and
4
+ * persisting one on `window.__CZAP_SLOT_REGISTRY__` the first time
5
+ * it's requested. Returns a detached registry under SSR.
6
+ */
7
+ export declare function getSlotRegistry(): SlotRegistry.Shape;
8
+ /**
9
+ * Clear and rebuild the slot registry by scanning `root` for
10
+ * `data-czap-slot` elements. Also writes a serialised
11
+ * `__CZAP_SLOTS__` snapshot for devtools / diagnostics consumers.
12
+ */
13
+ export declare function rescanSlots(root?: ParentNode): SlotRegistry.Shape;
14
+ /**
15
+ * One-shot bootstrap: arm a slot-registry scan on
16
+ * `DOMContentLoaded` (or immediately if the document is already
17
+ * ready) and re-scan after every Astro View Transitions `after-swap`
18
+ * event. Idempotent -- subsequent calls return the same registry.
19
+ */
20
+ export declare function bootstrapSlots(): SlotRegistry.Shape;
21
+ /**
22
+ * Dispatch `czap:dispose` + `czap:reinit` on every known directive
23
+ * root. Used after Astro View Transitions `after-swap` so directives
24
+ * can re-read fresh `data-czap-*` attributes without remounting.
25
+ */
26
+ export declare function reinitializeDirectives(): void;
27
+ /**
28
+ * Install a one-time listener that fires
29
+ * {@link reinitializeDirectives} on every Astro `after-swap`.
30
+ * Guarded by `window.__CZAP_SWAP_REINIT__` so repeated module loads
31
+ * do not stack listeners.
32
+ */
33
+ export declare function installSwapReinit(): void;
34
+ //# sourceMappingURL=slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/runtime/slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AA6BzC;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAAC,KAAK,CAYpD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,UAAqB,GAAG,YAAY,CAAC,KAAK,CAqB3E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAAC,KAAK,CAuBnD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAUxC"}
@@ -0,0 +1,108 @@
1
+ import { SlotRegistry } from '@czap/web';
2
+ import { readRuntimeGlobal, writeRuntimeGlobal } from './globals.js';
3
+ const REINIT_SELECTOR = '[data-czap-boundary],[data-czap-stream-url],[data-czap-llm-url],[data-czap-wasm]';
4
+ function isSlotRegistryShape(value) {
5
+ if (typeof value !== 'object' || value === null)
6
+ return false;
7
+ if (!('get' in value) || !('register' in value) || !('entries' in value))
8
+ return false;
9
+ return typeof value.get === 'function' && typeof value.register === 'function' && typeof value.entries === 'function';
10
+ }
11
+ function isBoolean(value) {
12
+ return typeof value === 'boolean';
13
+ }
14
+ function runtimeWindow() {
15
+ return typeof window === 'undefined' ? null : window;
16
+ }
17
+ /**
18
+ * Return the document-scoped {@link SlotRegistry.Shape}, creating and
19
+ * persisting one on `window.__CZAP_SLOT_REGISTRY__` the first time
20
+ * it's requested. Returns a detached registry under SSR.
21
+ */
22
+ export function getSlotRegistry() {
23
+ const win = runtimeWindow();
24
+ if (!win) {
25
+ return SlotRegistry.create();
26
+ }
27
+ const existingRegistry = readRuntimeGlobal('__CZAP_SLOT_REGISTRY__', isSlotRegistryShape);
28
+ if (!existingRegistry) {
29
+ return writeRuntimeGlobal('__CZAP_SLOT_REGISTRY__', SlotRegistry.create());
30
+ }
31
+ return existingRegistry;
32
+ }
33
+ /**
34
+ * Clear and rebuild the slot registry by scanning `root` for
35
+ * `data-czap-slot` elements. Also writes a serialised
36
+ * `__CZAP_SLOTS__` snapshot for devtools / diagnostics consumers.
37
+ */
38
+ export function rescanSlots(root = document) {
39
+ const registry = getSlotRegistry();
40
+ const existingPaths = Array.from(registry.entries().keys());
41
+ for (const path of existingPaths) {
42
+ registry.unregister(path);
43
+ }
44
+ const scanRoot = root instanceof Element ? root : document.documentElement;
45
+ SlotRegistry.scanDOM(registry, scanRoot);
46
+ const win = runtimeWindow();
47
+ if (win) {
48
+ writeRuntimeGlobal('__CZAP_SLOTS__', {
49
+ registry,
50
+ entries: Object.fromEntries(Array.from(registry.entries().entries()).map(([path, entry]) => [path, { path, mode: entry.mode }])),
51
+ });
52
+ }
53
+ return registry;
54
+ }
55
+ /**
56
+ * One-shot bootstrap: arm a slot-registry scan on
57
+ * `DOMContentLoaded` (or immediately if the document is already
58
+ * ready) and re-scan after every Astro View Transitions `after-swap`
59
+ * event. Idempotent -- subsequent calls return the same registry.
60
+ */
61
+ export function bootstrapSlots() {
62
+ const win = runtimeWindow();
63
+ if (!win) {
64
+ return SlotRegistry.create();
65
+ }
66
+ const scan = () => {
67
+ rescanSlots(document.documentElement);
68
+ };
69
+ if (!readRuntimeGlobal('__CZAP_SLOT_BOOTSTRAPPED__', isBoolean)) {
70
+ writeRuntimeGlobal('__CZAP_SLOT_BOOTSTRAPPED__', true);
71
+ if (document.readyState === 'loading') {
72
+ document.addEventListener('DOMContentLoaded', scan, { once: true });
73
+ }
74
+ else {
75
+ scan();
76
+ }
77
+ document.addEventListener('astro:after-swap', scan);
78
+ }
79
+ return getSlotRegistry();
80
+ }
81
+ /**
82
+ * Dispatch `czap:dispose` + `czap:reinit` on every known directive
83
+ * root. Used after Astro View Transitions `after-swap` so directives
84
+ * can re-read fresh `data-czap-*` attributes without remounting.
85
+ */
86
+ export function reinitializeDirectives() {
87
+ document.querySelectorAll(REINIT_SELECTOR).forEach((element) => {
88
+ element.dispatchEvent(new CustomEvent('czap:dispose', { bubbles: true }));
89
+ element.dispatchEvent(new CustomEvent('czap:reinit', { bubbles: true }));
90
+ });
91
+ }
92
+ /**
93
+ * Install a one-time listener that fires
94
+ * {@link reinitializeDirectives} on every Astro `after-swap`.
95
+ * Guarded by `window.__CZAP_SWAP_REINIT__` so repeated module loads
96
+ * do not stack listeners.
97
+ */
98
+ export function installSwapReinit() {
99
+ const win = runtimeWindow();
100
+ if (!win || readRuntimeGlobal('__CZAP_SWAP_REINIT__', isBoolean)) {
101
+ return;
102
+ }
103
+ writeRuntimeGlobal('__CZAP_SWAP_REINIT__', true);
104
+ document.addEventListener('astro:after-swap', () => {
105
+ reinitializeDirectives();
106
+ });
107
+ }
108
+ //# sourceMappingURL=slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/runtime/slots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Stream-patch scheduler backing the `client:stream` directive.
3
+ *
4
+ * Batches incoming HTML patches into a single DOM write per microtask
5
+ * and reports whether any of the coalesced patches requires a slot
6
+ * rescan. Delegates lifecycle (activate / dispose / reconnect timer)
7
+ * to a shared {@link createRuntimeSession}.
8
+ *
9
+ * @module
10
+ */
11
+ import { type RuntimeSessionState } from './runtime-session.js';
12
+ /**
13
+ * A single HTML patch pulled off the stream. `requiresRescan` flags
14
+ * patches that inserted or removed slot-bearing elements.
15
+ */
16
+ export interface StreamPatch {
17
+ readonly html: string;
18
+ readonly requiresRescan: boolean;
19
+ }
20
+ /** Callbacks the scheduler invokes when it writes a batch. */
21
+ export interface StreamSchedulerConfig {
22
+ /** Write a coalesced HTML patch into the live document. */
23
+ readonly applyHtml: (html: string) => void;
24
+ /** Observer fired after each flush with batch metadata. */
25
+ readonly onFlush: (context: {
26
+ readonly patchCount: number;
27
+ readonly requiresRescan: boolean;
28
+ }) => void;
29
+ }
30
+ /** Host surface of a stream scheduler. */
31
+ export interface StreamSchedulerShape {
32
+ readonly state: RuntimeSessionState;
33
+ activate(): void;
34
+ beginReconnect(): void;
35
+ enqueue(patch: StreamPatch): Promise<void>;
36
+ enqueueBatch(patches: readonly StreamPatch[]): Promise<void>;
37
+ setReconnectTimer(callback: () => void, delay: number): ReturnType<typeof setTimeout> | null;
38
+ clearReconnectTimer(handle: ReturnType<typeof setTimeout> | null | undefined): null;
39
+ dispose(): void;
40
+ }
41
+ /**
42
+ * Build a new stream scheduler. The scheduler coalesces patches into a
43
+ * single microtask-flushed DOM write and calls `config.onFlush` once
44
+ * per batch.
45
+ */
46
+ export declare function createStreamScheduler(config: StreamSchedulerConfig): StreamSchedulerShape;
47
+ //# sourceMappingURL=stream-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-session.d.ts","sourceRoot":"","sources":["../../src/runtime/stream-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CACxG;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,IAAI,IAAI,CAAC;IACjB,cAAc,IAAI,IAAI,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAC7F,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IACpF,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CA8EzF"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Stream-patch scheduler backing the `client:stream` directive.
3
+ *
4
+ * Batches incoming HTML patches into a single DOM write per microtask
5
+ * and reports whether any of the coalesced patches requires a slot
6
+ * rescan. Delegates lifecycle (activate / dispose / reconnect timer)
7
+ * to a shared {@link createRuntimeSession}.
8
+ *
9
+ * @module
10
+ */
11
+ import { createRuntimeSession } from './runtime-session.js';
12
+ /**
13
+ * Build a new stream scheduler. The scheduler coalesces patches into a
14
+ * single microtask-flushed DOM write and calls `config.onFlush` once
15
+ * per batch.
16
+ */
17
+ export function createStreamScheduler(config) {
18
+ const runtime = createRuntimeSession();
19
+ let queue = [];
20
+ let resolvers = [];
21
+ const flush = () => {
22
+ const patches = queue;
23
+ queue = [];
24
+ const pendingResolvers = resolvers;
25
+ resolvers = [];
26
+ let requiresRescan = false;
27
+ for (const patch of patches) {
28
+ requiresRescan ||= patch.requiresRescan;
29
+ config.applyHtml(patch.html);
30
+ }
31
+ if (patches.length > 0) {
32
+ config.onFlush({ patchCount: patches.length, requiresRescan });
33
+ }
34
+ for (const resolve of pendingResolvers) {
35
+ resolve();
36
+ }
37
+ };
38
+ const schedule = () => {
39
+ return new Promise((resolve) => {
40
+ resolvers.push(resolve);
41
+ void runtime.schedule(flush);
42
+ });
43
+ };
44
+ return {
45
+ get state() {
46
+ return runtime.state;
47
+ },
48
+ activate() {
49
+ runtime.activate();
50
+ },
51
+ beginReconnect() {
52
+ runtime.beginReconnect();
53
+ },
54
+ enqueue(patch) {
55
+ queue.push(patch);
56
+ return schedule();
57
+ },
58
+ enqueueBatch(patches) {
59
+ if (patches.length === 0) {
60
+ return Promise.resolve();
61
+ }
62
+ queue.push(...patches);
63
+ return schedule();
64
+ },
65
+ setReconnectTimer(callback, delay) {
66
+ return runtime.setTimer(callback, delay);
67
+ },
68
+ clearReconnectTimer(handle) {
69
+ return runtime.clearTimer(handle);
70
+ },
71
+ dispose() {
72
+ queue = [];
73
+ const pendingResolvers = resolvers;
74
+ resolvers = [];
75
+ for (const resolve of pendingResolvers) {
76
+ resolve();
77
+ }
78
+ runtime.dispose();
79
+ },
80
+ };
81
+ }
82
+ //# sourceMappingURL=stream-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-session.js","sourceRoot":"","sources":["../../src/runtime/stream-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,oBAAoB,EAA4B,MAAM,sBAAsB,CAAC;AA+BtF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA6B;IACjE,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,IAAI,KAAK,GAAkB,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAsB,EAAE,CAAC;IAEtC,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC;QACtB,KAAK,GAAG,EAAE,CAAC;QACX,MAAM,gBAAgB,GAAG,SAAS,CAAC;QACnC,SAAS,GAAG,EAAE,CAAC;QAEf,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,cAAc,KAAK,KAAK,CAAC,cAAc,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAkB,EAAE;QACnC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,KAAK;YACP,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC;QAED,QAAQ;YACN,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC;QAED,cAAc;YACZ,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,KAAK;YACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,QAAQ,EAAE,CAAC;QACpB,CAAC;QAED,YAAY,CAAC,OAAO;YAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YACvB,OAAO,QAAQ,EAAE,CAAC;QACpB,CAAC;QAED,iBAAiB,CAAC,QAAQ,EAAE,KAAK;YAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,mBAAmB,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,OAAO;YACL,KAAK,GAAG,EAAE,CAAC;YACX,MAAM,gBAAgB,GAAG,SAAS,CAAC;YACnC,SAAS,GAAG,EAAE,CAAC;YACf,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;gBACvC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Entry point for the `client:stream` directive. Opens an SSE client
3
+ * to the `data-czap-stream-url` endpoint, funnels incoming HTML
4
+ * patches through a {@link createStreamScheduler}, and triggers slot
5
+ * rescans when necessary. Honors `czap:reinit` / `czap:dispose` to
6
+ * survive Astro view transitions.
7
+ */
8
+ export declare function initStreamDirective(load: () => Promise<unknown>, element: HTMLElement): void;
9
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/runtime/stream.ts"],"names":[],"mappings":"AA8IA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAiQ5F"}