octane 0.2.11 → 0.2.13

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 (264) hide show
  1. package/README.md +5 -0
  2. package/dist/behavior-root.d.ts +13 -3
  3. package/dist/behavior-root.js +28 -5
  4. package/dist/cjs/behavior-root.cjs +32 -6
  5. package/dist/cjs/class-names.cjs +49 -0
  6. package/dist/cjs/constants.cjs +9 -0
  7. package/dist/cjs/context-epoch.cjs +38 -0
  8. package/dist/cjs/css.cjs +6 -27
  9. package/dist/cjs/data-encoding.cjs +160 -0
  10. package/dist/cjs/dom-binding-handoff.cjs +93 -0
  11. package/dist/cjs/dom-binding-protocol.cjs +115 -0
  12. package/dist/cjs/dom-binding-styles.cjs +292 -0
  13. package/dist/cjs/dom-bindings.cjs +700 -0
  14. package/dist/cjs/dom-focused-move.cjs +66 -0
  15. package/dist/cjs/dom-stage.cjs +896 -0
  16. package/dist/cjs/dom-tables.cjs +4 -94
  17. package/dist/cjs/error-codes.client.generated.cjs +33 -0
  18. package/dist/cjs/error-codes.server.generated.cjs +24 -0
  19. package/dist/cjs/hydration/control-capture.cjs +244 -0
  20. package/dist/cjs/hydration/event-capture.cjs +125 -43
  21. package/dist/cjs/hydration/interaction-config.cjs +50 -2
  22. package/dist/cjs/hydration-markers.cjs +37 -0
  23. package/dist/cjs/independent-hydration-protocol.cjs +106 -0
  24. package/dist/cjs/index.cjs +9 -0
  25. package/dist/cjs/runtime.cjs +6397 -1683
  26. package/dist/cjs/runtime.server.cjs +1465 -213
  27. package/dist/cjs/server/early-signals.cjs +45 -0
  28. package/dist/cjs/server/index.cjs +47 -0
  29. package/dist/cjs/server/rpc-batch.cjs +149 -0
  30. package/dist/cjs/server/rpc-stream.cjs +146 -0
  31. package/dist/cjs/server/rpc.cjs +34 -15
  32. package/dist/cjs/server/signal-query-observation.cjs +158 -0
  33. package/dist/cjs/server/streamed-region.cjs +52 -0
  34. package/dist/cjs/server/streamed-signals.cjs +512 -0
  35. package/dist/cjs/server-call.cjs +103 -0
  36. package/dist/cjs/server-rpc-batch-client.cjs +141 -0
  37. package/dist/cjs/server-rpc-client.cjs +94 -27
  38. package/dist/cjs/server-rpc-protocol.cjs +141 -0
  39. package/dist/cjs/server-rpc-stream-client.cjs +118 -0
  40. package/dist/cjs/signals/actions.cjs +474 -0
  41. package/dist/cjs/signals/client.cjs +4 -1
  42. package/dist/cjs/signals/computations.cjs +460 -0
  43. package/dist/cjs/signals/control-binding.cjs +368 -0
  44. package/dist/cjs/signals/derived-facade.cjs +50 -0
  45. package/dist/cjs/signals/document-owner.cjs +71 -0
  46. package/dist/cjs/signals/early-values.cjs +155 -0
  47. package/dist/cjs/signals/encoding.cjs +6 -95
  48. package/dist/cjs/signals/engine.cjs +276 -12
  49. package/dist/cjs/signals/errors.cjs +18 -0
  50. package/dist/cjs/signals/facade.cjs +477 -0
  51. package/dist/cjs/signals/graph.cjs +166 -20
  52. package/dist/cjs/signals/handle-protocol.cjs +36 -0
  53. package/dist/cjs/signals/index.cjs +81 -2
  54. package/dist/cjs/signals/native-read-client.cjs +10 -0
  55. package/dist/cjs/signals/owner-context.cjs +112 -0
  56. package/dist/cjs/signals/query-attempt-observer.cjs +68 -0
  57. package/dist/cjs/signals/query-facade.cjs +72 -0
  58. package/dist/cjs/signals/read-protocol.cjs +54 -0
  59. package/dist/cjs/signals/requests.cjs +287 -14
  60. package/dist/cjs/signals/scalar-computations.cjs +76 -0
  61. package/dist/cjs/signals/server.cjs +4 -1
  62. package/dist/cjs/signals/transition-candidate.cjs +567 -0
  63. package/dist/cjs/signals/transition-state.cjs +106 -0
  64. package/dist/cjs/signals/types.cjs +50 -0
  65. package/dist/cjs/stream-protocol.cjs +3 -0
  66. package/dist/cjs/streamed-signals-protocol.cjs +159 -0
  67. package/dist/cjs/style-values.cjs +122 -0
  68. package/dist/cjs/trusted-html.cjs +30 -0
  69. package/dist/cjs/version.cjs +1 -1
  70. package/dist/class-names.d.ts +5 -0
  71. package/dist/class-names.js +25 -0
  72. package/dist/compiler/bundler.js +51 -22
  73. package/dist/compiler/compile.js +2534 -581
  74. package/dist/compiler/dom-binding-program.js +935 -0
  75. package/dist/compiler/dom-binding-request.js +57 -0
  76. package/dist/compiler/dom-bindings.js +2245 -0
  77. package/dist/compiler/hook-deps.js +759 -10
  78. package/dist/compiler/hydrate-boundaries.js +358 -15
  79. package/dist/compiler/index.d.ts +39 -2
  80. package/dist/compiler/index.js +1 -0
  81. package/dist/compiler/native-attribute-reads.js +127 -0
  82. package/dist/compiler/native-change-diagnostics.js +32 -38
  83. package/dist/compiler/native-read-diagnostics.js +69 -8
  84. package/dist/compiler/native-read-types.js +80 -34
  85. package/dist/compiler/parser.node.js +1 -1
  86. package/dist/compiler/renderer-boundaries.js +40 -0
  87. package/dist/compiler/server-context.js +118 -0
  88. package/dist/compiler/signal-attempt-reads.js +479 -0
  89. package/dist/compiler/signal-declarations.js +557 -0
  90. package/dist/compiler/signal-start-reads.js +413 -0
  91. package/dist/compiler/slot-hooks.d.ts +3 -1
  92. package/dist/compiler/slot-hooks.js +168 -34
  93. package/dist/compiler/strong-auto-memo.js +90 -0
  94. package/dist/compiler/strong-html.js +143 -0
  95. package/dist/compiler/strong-mode.js +764 -66
  96. package/dist/compiler/strong-template-policy.js +307 -0
  97. package/dist/compiler/template-ir.js +200 -0
  98. package/dist/compiler/typescript.d.ts +2 -0
  99. package/dist/compiler/typescript.js +2 -0
  100. package/dist/compiler/vite.d.ts +3 -1
  101. package/dist/compiler/vite.js +122 -4
  102. package/dist/compiler/volar.LICENSES.txt +1 -1
  103. package/dist/compiler/volar.d.ts +6 -1
  104. package/dist/compiler/volar.js +750 -1433
  105. package/dist/constants.d.ts +1 -0
  106. package/dist/constants.js +10 -0
  107. package/dist/context-epoch.d.ts +2 -0
  108. package/dist/context-epoch.js +13 -0
  109. package/dist/css.d.ts +2 -5
  110. package/dist/css.js +2 -23
  111. package/dist/data-encoding.d.ts +9 -0
  112. package/dist/data-encoding.js +134 -0
  113. package/dist/dom-binding-classes.d.ts +15 -0
  114. package/dist/dom-binding-classes.js +129 -0
  115. package/dist/dom-binding-controls.d.ts +2 -0
  116. package/dist/dom-binding-controls.js +6 -0
  117. package/dist/dom-binding-handoff.d.ts +55 -0
  118. package/dist/dom-binding-handoff.js +62 -0
  119. package/dist/dom-binding-program.d.ts +300 -0
  120. package/dist/dom-binding-program.js +1625 -0
  121. package/dist/dom-binding-projections.d.ts +15 -0
  122. package/dist/dom-binding-projections.js +187 -0
  123. package/dist/dom-binding-protocol.d.ts +13 -0
  124. package/dist/dom-binding-protocol.js +88 -0
  125. package/dist/dom-binding-signals.d.ts +21 -0
  126. package/dist/dom-binding-signals.js +109 -0
  127. package/dist/dom-binding-styles.d.ts +17 -0
  128. package/dist/dom-binding-styles.js +272 -0
  129. package/dist/dom-bindings.d.ts +89 -0
  130. package/dist/dom-bindings.js +670 -0
  131. package/dist/dom-focused-move.d.ts +6 -0
  132. package/dist/dom-focused-move.js +42 -0
  133. package/dist/dom-stage.d.ts +52 -0
  134. package/dist/dom-stage.js +872 -0
  135. package/dist/dom-tables.d.ts +1 -3
  136. package/dist/dom-tables.js +1 -91
  137. package/dist/error-codes.client.generated.d.ts +9 -0
  138. package/dist/error-codes.client.generated.js +33 -0
  139. package/dist/error-codes.server.generated.d.ts +6 -0
  140. package/dist/error-codes.server.generated.js +24 -0
  141. package/dist/hydration/control-capture.d.ts +62 -0
  142. package/dist/hydration/control-capture.js +223 -0
  143. package/dist/hydration/document-lifecycle.d.ts +23 -0
  144. package/dist/hydration/document-lifecycle.js +80 -0
  145. package/dist/hydration/event-capture.d.ts +20 -1
  146. package/dist/hydration/event-capture.js +128 -42
  147. package/dist/hydration/independent-island.d.ts +45 -0
  148. package/dist/hydration/independent-island.js +233 -0
  149. package/dist/hydration/index.d.ts +8 -1
  150. package/dist/hydration/index.js +55 -1
  151. package/dist/hydration/interaction-config.d.ts +5 -0
  152. package/dist/hydration/interaction-config.js +44 -1
  153. package/dist/hydration/stream-delivery.d.ts +32 -0
  154. package/dist/hydration/stream-delivery.js +333 -0
  155. package/dist/hydration/stream-receiver.d.ts +26 -0
  156. package/dist/hydration/stream-receiver.js +204 -0
  157. package/dist/hydration/stream-result-receiver.d.ts +70 -0
  158. package/dist/hydration/stream-result-receiver.js +246 -0
  159. package/dist/hydration/streamed-signals.d.ts +44 -0
  160. package/dist/hydration/streamed-signals.js +186 -0
  161. package/dist/hydration/types.d.ts +6 -0
  162. package/dist/hydration-markers.d.ts +7 -0
  163. package/dist/hydration-markers.js +10 -0
  164. package/dist/independent-hydration-protocol.d.ts +31 -0
  165. package/dist/independent-hydration-protocol.js +80 -0
  166. package/dist/index.d.ts +3 -0
  167. package/dist/index.js +6 -0
  168. package/dist/internal/signal-read.d.ts +1 -0
  169. package/dist/internal/signal-read.js +4 -0
  170. package/dist/jsx-runtime-strong.d.ts +33 -0
  171. package/dist/jsx-runtime.d.ts +58 -2
  172. package/dist/public-types.d.ts +15 -1
  173. package/dist/runtime.d.ts +297 -23
  174. package/dist/runtime.js +6405 -1679
  175. package/dist/runtime.server.d.ts +110 -27
  176. package/dist/runtime.server.js +1458 -213
  177. package/dist/server/early-signals.d.ts +14 -0
  178. package/dist/server/early-signals.js +34 -0
  179. package/dist/server/index.d.ts +11 -2
  180. package/dist/server/index.js +50 -1
  181. package/dist/server/rpc-batch.d.ts +17 -0
  182. package/dist/server/rpc-batch.js +129 -0
  183. package/dist/server/rpc-stream.d.ts +9 -0
  184. package/dist/server/rpc-stream.js +125 -0
  185. package/dist/server/rpc.d.ts +5 -1
  186. package/dist/server/rpc.js +37 -13
  187. package/dist/server/signal-query-observation.d.ts +3 -0
  188. package/dist/server/signal-query-observation.js +134 -0
  189. package/dist/server/streamed-region.d.ts +15 -0
  190. package/dist/server/streamed-region.js +30 -0
  191. package/dist/server/streamed-signals.d.ts +45 -0
  192. package/dist/server/streamed-signals.js +488 -0
  193. package/dist/server-call.d.ts +41 -0
  194. package/dist/server-call.js +75 -0
  195. package/dist/server-rpc-batch-client.d.ts +7 -0
  196. package/dist/server-rpc-batch-client.js +119 -0
  197. package/dist/server-rpc-client.d.ts +3 -1
  198. package/dist/server-rpc-client.js +99 -27
  199. package/dist/server-rpc-protocol.d.ts +47 -0
  200. package/dist/server-rpc-protocol.js +109 -0
  201. package/dist/server-rpc-stream-client.d.ts +5 -0
  202. package/dist/server-rpc-stream-client.js +98 -0
  203. package/dist/signals/actions.d.ts +12 -0
  204. package/dist/signals/actions.js +466 -0
  205. package/dist/signals/client.d.ts +2 -0
  206. package/dist/signals/client.js +1 -0
  207. package/dist/signals/computations.d.ts +37 -0
  208. package/dist/signals/computations.js +455 -0
  209. package/dist/signals/control-binding.d.ts +31 -0
  210. package/dist/signals/control-binding.js +353 -0
  211. package/dist/signals/derived-facade.d.ts +3 -0
  212. package/dist/signals/derived-facade.js +25 -0
  213. package/dist/signals/document-owner.d.ts +10 -0
  214. package/dist/signals/document-owner.js +43 -0
  215. package/dist/signals/early-values.d.ts +24 -0
  216. package/dist/signals/early-values.js +124 -0
  217. package/dist/signals/encoding.d.ts +1 -3
  218. package/dist/signals/encoding.js +3 -93
  219. package/dist/signals/engine.d.ts +53 -4
  220. package/dist/signals/engine.js +275 -16
  221. package/dist/signals/errors.d.ts +7 -0
  222. package/dist/signals/errors.js +16 -0
  223. package/dist/signals/facade.d.ts +74 -0
  224. package/dist/signals/facade.js +452 -0
  225. package/dist/signals/graph.d.ts +52 -6
  226. package/dist/signals/graph.js +174 -19
  227. package/dist/signals/handle-protocol.d.ts +4 -0
  228. package/dist/signals/handle-protocol.js +11 -0
  229. package/dist/signals/index.d.ts +12 -3
  230. package/dist/signals/index.js +71 -2
  231. package/dist/signals/native-read-client.d.ts +3 -0
  232. package/dist/signals/native-read-client.js +10 -0
  233. package/dist/signals/owner-context.d.ts +22 -0
  234. package/dist/signals/owner-context.js +77 -0
  235. package/dist/signals/query-attempt-observer.d.ts +49 -0
  236. package/dist/signals/query-attempt-observer.js +41 -0
  237. package/dist/signals/query-facade.d.ts +3 -0
  238. package/dist/signals/query-facade.js +49 -0
  239. package/dist/signals/read-protocol.d.ts +37 -2
  240. package/dist/signals/read-protocol.js +44 -0
  241. package/dist/signals/requests.d.ts +38 -5
  242. package/dist/signals/requests.js +298 -15
  243. package/dist/signals/scalar-computations.d.ts +2 -0
  244. package/dist/signals/scalar-computations.js +60 -0
  245. package/dist/signals/server.d.ts +2 -0
  246. package/dist/signals/server.js +1 -0
  247. package/dist/signals/transition-candidate.d.ts +71 -0
  248. package/dist/signals/transition-candidate.js +557 -0
  249. package/dist/signals/transition-state.d.ts +51 -0
  250. package/dist/signals/transition-state.js +70 -0
  251. package/dist/signals/types.d.ts +95 -5
  252. package/dist/signals/types.js +20 -0
  253. package/dist/stream-protocol.d.ts +0 -5
  254. package/dist/stream-protocol.js +3 -0
  255. package/dist/streamed-signals-protocol.d.ts +60 -0
  256. package/dist/streamed-signals-protocol.js +130 -0
  257. package/dist/style-values.d.ts +3 -0
  258. package/dist/style-values.js +96 -0
  259. package/dist/trusted-html.d.ts +17 -0
  260. package/dist/trusted-html.js +6 -0
  261. package/dist/universal-core.d.ts +6 -0
  262. package/dist/universal-core.js +214 -202
  263. package/dist/version.js +1 -1
  264. package/package.json +48 -5
@@ -0,0 +1,14 @@
1
+ export interface EarlySignalBootstrapOptions {
2
+ readonly nonce?: string;
3
+ /** Include native intent capture for independently activated widgets. */
4
+ readonly independentHydration?: boolean;
5
+ }
6
+ /**
7
+ * Install the framework's renderer-free input and streaming mailboxes before
8
+ * exposing interactive HTML. Envelope-owning hosts emit this once and pass
9
+ * earlySignalBootstrap: 'external' to each fragment renderer. This does not
10
+ * import, preload or activate client modules, nor install application policy.
11
+ */
12
+ export declare function earlySignalBootstrapScript(options?: EarlySignalBootstrapOptions): string;
13
+ /** @internal Shared byte-identical bootstrap for buffered and streaming renderers. */
14
+ export declare function streamedSignalBootstrapJs(independentHydration?: boolean): string;
@@ -0,0 +1,34 @@
1
+ import {
2
+ HYDRATE_ID_ATTR,
3
+ HYDRATE_WHEN_ATTR,
4
+ HYDRATE_INDEPENDENT_ATTR,
5
+ SIGNAL_CONTROL_ATTR,
6
+ STREAM_SCRIPT_ATTR
7
+ } from "../constants.js";
8
+ import {
9
+ EARLY_HYDRATION_INTENTS_KEY,
10
+ EARLY_HYDRATION_INTENTS_LIMIT,
11
+ HYDRATE_DEFAULT_INTERACTION_EVENTS,
12
+ HYDRATE_INTERACTION_EVENTS_ATTR,
13
+ HYDRATE_NATIVE_DEFAULT_INTERACTION_EVENTS,
14
+ HYDRATE_SELECTION_ATTR,
15
+ HYDRATE_SUPPORTED_INTERACTION_EVENTS
16
+ } from "../hydration/interaction-config.js";
17
+ function earlySignalBootstrapScript(options = {}) {
18
+ const nonce = options.nonce === void 0 ? "" : ' nonce="' + options.nonce.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;") + '"';
19
+ return "<script " + STREAM_SCRIPT_ATTR + nonce + ">" + streamedSignalBootstrapJs(options.independentHydration) + "</script>";
20
+ }
21
+ let STREAMED_SIGNAL_BOOTSTRAP_JS;
22
+ let STREAMED_SIGNAL_INDEPENDENT_BOOTSTRAP_JS;
23
+ function streamedSignalBootstrapJs(independentHydration = false) {
24
+ const signals = STREAMED_SIGNAL_BOOTSTRAP_JS ??= '(function(g){var z="__octaneStreamedSignalSelections",v=g[z];if(!v){var a=[];g[z]={version:1,identities:a,register:function(i){if(a.length>=256){this.overflow=true;return;}a.push(i);}};}var k="__octaneStreamedRenderer",e=g[k];if(e)return;var q=[];g[k]={version:1,frames:q,receive:function(f){if(q.length>=512){this.overflow=true;return;}q.push(f);}};var s=g.__octaneEarlySignalControls||(g.__octaneEarlySignalControls={q:[],n:0});if(!s.l){s.l=1;document.addEventListener("input",function(e){var t=e.target;if(!t||!t.getAttribute||!t.getAttribute("' + SIGNAL_CONTROL_ATTR + '"))return;var r=++s.n,p=g.__octanePublishSignalControl;if(p){p(t,r);return;}for(var i=0;i<s.q.length;i++)if(s.q[i][0]===t){s.q[i]=[t,r];return;}if(s.q.length<256)s.q.push([t,r]);},true);}})(globalThis);';
25
+ if (!independentHydration) return signals;
26
+ return STREAMED_SIGNAL_INDEPENDENT_BOOTSTRAP_JS ??= signals + // A completed client build can contain its first independent widget only
27
+ // in a later streamed wave. Capture its intent before module evaluation,
28
+ // with no activation dependency on its parent or sidecar being present.
29
+ "(function(d){var h=" + JSON.stringify(EARLY_HYDRATION_INTENTS_KEY) + ";if(d[h])return;var u=d[h]={version:1,q:[]},es=" + JSON.stringify(HYDRATE_SUPPORTED_INTERACTION_EVENTS) + ",ds=" + JSON.stringify(HYDRATE_DEFAULT_INTERACTION_EVENTS) + ",ns=" + JSON.stringify(HYDRATE_NATIVE_DEFAULT_INTERACTION_EVENTS) + ',is="[' + HYDRATE_INDEPENDENT_ATTR + ']",ms="[' + HYDRATE_ID_ATTR + ']";function c(e){var t=e.target;if(!t||!t.closest)return;var b=t.closest(is);if(!b)return;var id=b.getAttribute("' + HYDRATE_ID_ATTR + '");if(id===null)return;var w=b.getAttribute("' + HYDRATE_WHEN_ATTR + '"),a=b.getAttribute("' + HYDRATE_INTERACTION_EVENTS_ATTR + '");if(w===null||w==="never")return;var link=t.closest("a[href],area[href]");if(link&&b.contains(link))return;if((e.type==="pointerenter"||e.type==="mouseenter")&&d.elementFromPoint){var hit=d.elementFromPoint(e.clientX,e.clientY),nested=hit&&hit.closest(is);if(nested&&nested!==b&&b.contains(nested))return;}var m=t.closest(ms),ok=false;while(m){var x=m.getAttribute("' + HYDRATE_WHEN_ATTR + '"),y=m.getAttribute("' + HYDRATE_INTERACTION_EVENTS_ATTR + '");if(x==="dynamic"&&e.type==="click"||x==="interaction"&&(y===null?ds:y.split(/\\s+/)).indexOf(e.type)!==-1)ok=true;if(m===b)break;m=m.parentElement&&m.parentElement.closest(ms);}if(!ok)return;var c=null,g=null,p=u.q[u.q.length-1];if(e.type==="click"&&e.button===0&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){c=t.closest("button[' + HYDRATE_SELECTION_ATTR + ']");if(c&&c.type==="button"&&c.closest(is)===b)g=c.getAttribute("' + HYDRATE_SELECTION_ATTR + '");}var v=g?[e,t,b,id,w,a,c,g]:[e,t,b,id,w,a];if(g&&p&&p[2]===b&&p[7]===g&&p[6].isConnected&&p[6].contains(p[1])&&p[6].type==="button"&&p[6].getAttribute("' + HYDRATE_SELECTION_ATTR + '")===g){u.q[u.q.length-1]=v;}else{if(u.q.length>=' + EARLY_HYDRATION_INTENTS_LIMIT + "){u.overflow=true;u.q.length=0;u.stop();return;}u.q.push(v);}if(e.bubbles){if(e.cancelable&&ns.indexOf(e.type)===-1)e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();}}u.stop=function(){for(var i=0;i<es.length;i++)d.removeEventListener(es[i],c,true);u.stop=null;};for(var j=0;j<es.length;j++)d.addEventListener(es[j],c,true);})(document);";
30
+ }
31
+ export {
32
+ earlySignalBootstrapScript,
33
+ streamedSignalBootstrapJs
34
+ };
@@ -1,3 +1,4 @@
1
+ export { trustHTML, type TrustedHTML } from '../trusted-html.js';
1
2
  /**
2
3
  * `octane/server` — server-rendering entry.
3
4
  *
@@ -20,9 +21,17 @@
20
21
  * private ABI — present because compiled output needs them, not because apps
21
22
  * should call them.
22
23
  */
23
- export { executeServerFunction } from './rpc.js';
24
+ export { executeServerFunction, executeServerFunctionStream } from './rpc.js';
25
+ export { earlySignalBootstrapScript, type EarlySignalBootstrapOptions } from './early-signals.js';
26
+ export { batchServerCalls, executeServerFunctionBatch, type ServerCallBatchOptions, type ServerBatchMember, } from './rpc-batch.js';
27
+ export type { ServerResultLimits } from '../server-rpc-protocol.js';
28
+ export { createStreamedRegionPlacementFrame, type StreamedRegionPlacementOptions, } from './streamed-region.js';
29
+ export { createAutomaticStreamedSignalInjection, createStreamedRendererFrameStream, createStreamedSignalInjection, createStreamedSignalResultFrames, streamedRendererFrameScript, type StreamedRendererLimits, type AutomaticStreamedSignalInjection, type AutomaticStreamedSignalOptions, type StreamedSignalResultOptions, } from './streamed-signals.js';
30
+ export { installSignalOwnerEnvironment, retireSignalOwnerIdentity, } from '../signals/owner-context.js';
31
+ export type { SignalOwner, SignalOwnerEnvironment } from '../signals/types.js';
32
+ export { __registerServerFunction, __serverCall, __setServerCallContextSource, type ServerCallContext, type ServerCallContextSource, type ServerCallHost, type ServerCallOptions, type ServerFunction, type ServerFunctionTarget, } from '../server-call.js';
24
33
  export { version } from '../version.js';
25
34
  export { StrictMode, unstable_batchedUpdates } from '../compatibility.js';
26
35
  export { createSubSlot, subSlot, type SubSlot, type SlotlessSubSlot, type SubSlotOptions, } from '../sub-slot.js';
27
36
  export { __methodDep } from '../method-dep.js';
28
- export { renderToString, renderToStaticMarkup, renderToPipeableStream, renderToReadableStream, type RenderResult, type RenderOptions, type ServerRenderNode, type StreamOptions, type StreamInjectionSource, setSsrSuspenseTimeout, getSsrSuspenseTimeout, EXTERNAL_HYDRATION_PROMISE, HYDRATION_RANGE_BOUNDARY, useState, useLinkedState, useReducer, __useStateWithGetter, __useLinkedStateWithGetter, __useReducerWithGetter, type LinkedStatePrevious, type LinkedStateOptions, useEffect, useLayoutEffect, useInsertionEffect, useImperativeHandle, useMemo, useCallback, useRef, useId, useEffectEvent, useTransition, useDeferredValue, useSyncExternalStore, useActionState, useActionState as useFormState, useFormStatus, useOptimistic, useDebugValue, memo, lazy, hookSlots, withSlot, manualHook, invokeManualHook, startTransition, flushSync, isChildrenBlock, isValidElement, cloneElement, Children, createPortal, requestFormReset, preload, preinit, preloadModule, preinitModule, preconnect, prefetchDNS, Suspense, ErrorBoundary, Hydrate, Fragment, Activity, Activity as unstable_Activity, ViewTransition, ViewTransition as unstable_ViewTransition, addTransitionType, addTransitionType as unstable_addTransitionType, createContext, use, useContext, ssrIsSuspense, type Context, type FormStatus, markChildrenBlock, markWarm, ssrHtml, ssrChildTextPre, ssrChildPre, descriptorChildren, createElement, createScopedValue, createScopedElement, positionalChildren, escapeHtml, escapeAttr, ssrText, ssrTextPre, ssrNestingText, ssrChild, ssrChildText, ssrAttr, normalizeClass, ssrStyle, ssrClass, ssrAttrs, ssrSnapshotSpread, ssrSpread, ssrInnerHtml, ssrScriptInnerHtml, ssrChildrenSources, ssrSpreadContent, ssrVoidContent, ssrValueAttr, ssrCheckedAttr, ssrInputAttrs, ssrFormAuthoringDiagnostics, ssrTextareaValue, ssrTextareaValueSources, ssrSelectAttrs, ssrSelectScope, ssrSelectScopeSources, ssrOptionValueSources, ssrOption, ssrElement, ssrComponent, ssrComponentNS, ssrInNamespace, ssrBlock, ssrFragmentMarker, ssrActivity, ssrForBlock, mapSlot, ssrControl, ssrArm, ssrForItem, ssrTry, ssrPortal, injectStyle, ssrHeadEl, styleMap, touchStyleMap, ssrStylesheetResource, ssrStyleResource, ssrScriptResource, namespaceHead, namespaceHeadElement, puMemo, puBatch, warmMemo, warmChild, } from '../runtime.server.js';
37
+ export { renderToString, renderToStaticMarkup, renderToPipeableStream, renderToReadableStream, type RenderResult, type RenderOptions, type ServerRenderNode, type StreamOptions, type StreamInjectionSource, setSsrSuspenseTimeout, getSsrSuspenseTimeout, EXTERNAL_HYDRATION_PROMISE, HYDRATION_RANGE_BOUNDARY, useState, useLinkedState, useReducer, __useStateWithGetter, __useLinkedStateWithGetter, __useReducerWithGetter, type LinkedStatePrevious, type LinkedStateOptions, useEffect, useLayoutEffect, useInsertionEffect, useImperativeHandle, useMemo, useCallback, useRef, useId, useEffectEvent, useTransition, useDeferredValue, useSyncExternalStore, useActionState, useActionState as useFormState, useFormStatus, useOptimistic, useDebugValue, memo, lazy, hookSlots, withSlot, manualHook, invokeManualHook, startTransition, flushSync, isChildrenBlock, isValidElement, cloneElement, Children, createPortal, requestFormReset, preload, preinit, preloadModule, preinitModule, preconnect, prefetchDNS, Suspense, ErrorBoundary, Hydrate, Fragment, Activity, Activity as unstable_Activity, ViewTransition, ViewTransition as unstable_ViewTransition, addTransitionType, addTransitionType as unstable_addTransitionType, createContext, use, useContext, ssrIsSuspense, type Context, type FormStatus, markChildrenBlock, markWarm, ssrHtml, ssrChildTextPre, ssrChildPre, descriptorChildren, createElement, createScopedValue, createScopedElement, positionalChildren, escapeHtml, escapeAttr, ssrText, ssrTextPre, ssrNestingText, ssrChild, ssrChildText, ssrAttr, normalizeClass, ssrStyle, ssrClass, ssrAttrs, ssrSignalValue, ssrSignalControlValue, ssrSignalControlAttrs, ssrSnapshotSpread, enableServerSignalBindings, ssrSpread, ssrInnerHtml, ssrScriptInnerHtml, ssrChildrenSources, ssrSpreadContent, ssrVoidContent, ssrValueAttr, ssrCheckedAttr, ssrInputAttrs, ssrFormAuthoringDiagnostics, ssrTextareaValue, ssrTextareaValueSources, ssrSelectAttrs, ssrSelectScope, ssrSelectScopeSources, ssrOptionValueSources, ssrOption, ssrElement, ssrComponent, ssrComponentNS, ssrInNamespace, ssrBlock, ssrFragmentMarker, ssrActivity, ssrForBlock, mapSlot, ssrControl, ssrArm, ssrForItem, ssrTry, ssrPortal, injectStyle, ssrHeadEl, styleMap, touchStyleMap, ssrStylesheetResource, ssrStyleResource, ssrScriptResource, namespaceHead, namespaceHeadElement, puMemo, puBatch, warmMemo, warmChild, } from '../runtime.server.js';
@@ -1,4 +1,29 @@
1
- import { executeServerFunction } from "./rpc.js";
1
+ import { trustHTML } from "../trusted-html.js";
2
+ import { executeServerFunction, executeServerFunctionStream } from "./rpc.js";
3
+ import { earlySignalBootstrapScript } from "./early-signals.js";
4
+ import {
5
+ batchServerCalls,
6
+ executeServerFunctionBatch
7
+ } from "./rpc-batch.js";
8
+ import {
9
+ createStreamedRegionPlacementFrame
10
+ } from "./streamed-region.js";
11
+ import {
12
+ createAutomaticStreamedSignalInjection,
13
+ createStreamedRendererFrameStream,
14
+ createStreamedSignalInjection,
15
+ createStreamedSignalResultFrames,
16
+ streamedRendererFrameScript
17
+ } from "./streamed-signals.js";
18
+ import {
19
+ installSignalOwnerEnvironment,
20
+ retireSignalOwnerIdentity
21
+ } from "../signals/owner-context.js";
22
+ import {
23
+ __registerServerFunction,
24
+ __serverCall,
25
+ __setServerCallContextSource
26
+ } from "../server-call.js";
2
27
  import { version } from "../version.js";
3
28
  import { StrictMode, unstable_batchedUpdates } from "../compatibility.js";
4
29
  import {
@@ -94,7 +119,11 @@ import {
94
119
  ssrStyle,
95
120
  ssrClass,
96
121
  ssrAttrs,
122
+ ssrSignalValue,
123
+ ssrSignalControlValue,
124
+ ssrSignalControlAttrs,
97
125
  ssrSnapshotSpread,
126
+ enableServerSignalBindings,
98
127
  ssrSpread,
99
128
  ssrInnerHtml,
100
129
  ssrScriptInnerHtml,
@@ -152,25 +181,39 @@ export {
152
181
  Suspense,
153
182
  ViewTransition,
154
183
  __methodDep,
184
+ __registerServerFunction,
185
+ __serverCall,
186
+ __setServerCallContextSource,
155
187
  __useLinkedStateWithGetter,
156
188
  __useReducerWithGetter,
157
189
  __useStateWithGetter,
158
190
  addTransitionType,
191
+ batchServerCalls,
159
192
  cloneElement,
193
+ createAutomaticStreamedSignalInjection,
160
194
  createContext,
161
195
  createElement,
162
196
  createPortal,
163
197
  createScopedElement,
164
198
  createScopedValue,
199
+ createStreamedRegionPlacementFrame,
200
+ createStreamedRendererFrameStream,
201
+ createStreamedSignalInjection,
202
+ createStreamedSignalResultFrames,
165
203
  createSubSlot,
166
204
  descriptorChildren,
205
+ earlySignalBootstrapScript,
206
+ enableServerSignalBindings,
167
207
  escapeAttr,
168
208
  escapeHtml,
169
209
  executeServerFunction,
210
+ executeServerFunctionBatch,
211
+ executeServerFunctionStream,
170
212
  flushSync,
171
213
  getSsrSuspenseTimeout,
172
214
  hookSlots,
173
215
  injectStyle,
216
+ installSignalOwnerEnvironment,
174
217
  invokeManualHook,
175
218
  isChildrenBlock,
176
219
  isValidElement,
@@ -197,6 +240,7 @@ export {
197
240
  renderToStaticMarkup,
198
241
  renderToString,
199
242
  requestFormReset,
243
+ retireSignalOwnerIdentity,
200
244
  setSsrSuspenseTimeout,
201
245
  ssrActivity,
202
246
  ssrArm,
@@ -233,6 +277,9 @@ export {
233
277
  ssrSelectAttrs,
234
278
  ssrSelectScope,
235
279
  ssrSelectScopeSources,
280
+ ssrSignalControlAttrs,
281
+ ssrSignalControlValue,
282
+ ssrSignalValue,
236
283
  ssrSnapshotSpread,
237
284
  ssrSpread,
238
285
  ssrSpreadContent,
@@ -247,9 +294,11 @@ export {
247
294
  ssrValueAttr,
248
295
  ssrVoidContent,
249
296
  startTransition,
297
+ streamedRendererFrameScript,
250
298
  styleMap,
251
299
  subSlot,
252
300
  touchStyleMap,
301
+ trustHTML,
253
302
  Activity2 as unstable_Activity,
254
303
  ViewTransition2 as unstable_ViewTransition,
255
304
  addTransitionType2 as unstable_addTransitionType,
@@ -0,0 +1,17 @@
1
+ import { type ServerCallBatchOptions, type ServerResultLimits } from '../server-rpc-protocol.js';
2
+ export type { ServerCallBatchOptions } from '../server-rpc-protocol.js';
3
+ /** In-process calls keep their per-call authorization; there is no HTTP batch to collect. */
4
+ export declare function batchServerCalls<T>(options: ServerCallBatchOptions, callback: () => T): T;
5
+ export interface ServerBatchMember {
6
+ id: number;
7
+ hash: string;
8
+ body: string;
9
+ }
10
+ /**
11
+ * Finite independent reads only. Each member crosses the ordinary authorized
12
+ * request boundary. Multi-yield subscriptions use their own demand-driven RPC.
13
+ * At most 32 bounded single values can be ready; no unbounded per-channel queue.
14
+ */
15
+ export declare function executeServerFunctionBatch(body: string, invoke: (member: ServerBatchMember, signal: AbortSignal) => Promise<Response>, options?: ServerResultLimits & {
16
+ signal?: AbortSignal;
17
+ }): ReadableStream<Uint8Array>;
@@ -0,0 +1,129 @@
1
+ import { InvalidServerFunctionPayloadError } from "../server-call.js";
2
+ import {
3
+ decodeServerArguments,
4
+ encodeServerResultFrame,
5
+ serverResultLimits,
6
+ validateServerCallBatch
7
+ } from "../server-rpc-protocol.js";
8
+ import { readServerResult } from "../server-rpc-stream-client.js";
9
+ import { createServerResultStream } from "./rpc-stream.js";
10
+ function batchServerCalls(options, callback) {
11
+ validateServerCallBatch(options);
12
+ return callback();
13
+ }
14
+ function executeServerFunctionBatch(body, invoke, options = {}) {
15
+ const limits = serverResultLimits(options);
16
+ let members;
17
+ try {
18
+ const envelope = JSON.parse(body);
19
+ if (!Array.isArray(envelope) || envelope.length !== 2 || envelope[0] !== 1 || !Array.isArray(envelope[1]) || envelope[1].length === 0 || envelope[1].length > 32) {
20
+ throw new Error("Invalid batch");
21
+ }
22
+ members = envelope[1].map((member, id) => {
23
+ if (!Array.isArray(member) || member.length !== 3 || member[0] !== id || typeof member[1] !== "string" || !/^[a-f0-9]{8}$/.test(member[1]) || typeof member[2] !== "string") {
24
+ throw new Error("Invalid batch member");
25
+ }
26
+ decodeServerArguments(member[2]);
27
+ return { id, hash: member[1], body: member[2] };
28
+ });
29
+ } catch (error) {
30
+ throw new InvalidServerFunctionPayloadError(error);
31
+ }
32
+ const cancellation = new AbortController();
33
+ const signal = options.signal === void 0 ? cancellation.signal : AbortSignal.any([options.signal, cancellation.signal]);
34
+ async function* results() {
35
+ const ready = [];
36
+ let wake;
37
+ let remaining = members.length;
38
+ let closed = false;
39
+ let sequence = 1;
40
+ for (const member of members) {
41
+ void (async () => {
42
+ const timeout = new AbortController();
43
+ const memberSignal = AbortSignal.any([signal, timeout.signal]);
44
+ const timer = setTimeout(
45
+ () => timeout.abort(new DOMException("Server batch member timed out", "TimeoutError")),
46
+ limits.timeoutMs
47
+ );
48
+ let abort;
49
+ const aborted = new Promise((_, reject) => {
50
+ abort = () => reject(memberSignal.reason);
51
+ memberSignal.addEventListener("abort", abort, { once: true });
52
+ if (memberSignal.aborted) abort();
53
+ });
54
+ let outcome;
55
+ try {
56
+ const work = (async () => {
57
+ memberSignal.throwIfAborted();
58
+ const response = await invoke(member, memberSignal);
59
+ if (memberSignal.aborted) {
60
+ void response.body?.cancel().catch(() => {
61
+ });
62
+ memberSignal.throwIfAborted();
63
+ }
64
+ if (!response.ok) {
65
+ void response.body?.cancel().catch(() => {
66
+ });
67
+ return [
68
+ member.id,
69
+ response.headers.get("Octane-RPC-Outcome") === "rejected" ? "rejected" : "uncertain",
70
+ `Server function failed with status ${response.status}`
71
+ ];
72
+ }
73
+ const value = await readServerResult(response, { ...limits, signal: memberSignal });
74
+ if (value !== null && typeof value === "object" && Symbol.asyncIterator in value) {
75
+ await value[Symbol.asyncIterator]().return?.();
76
+ throw new Error("Subscriptions cannot join a finite server-call batch");
77
+ }
78
+ return [member.id, "value", value];
79
+ })();
80
+ outcome = await Promise.race([work, aborted]);
81
+ } catch {
82
+ outcome = [
83
+ member.id,
84
+ "uncertain",
85
+ "Server batch member did not produce an authoritative result"
86
+ ];
87
+ } finally {
88
+ clearTimeout(timer);
89
+ memberSignal.removeEventListener("abort", abort);
90
+ }
91
+ if (!closed) {
92
+ ready.push(outcome);
93
+ wake?.();
94
+ }
95
+ })();
96
+ }
97
+ try {
98
+ while (remaining > 0) {
99
+ if (ready.length === 0)
100
+ await new Promise((resolve) => {
101
+ wake = resolve;
102
+ });
103
+ wake = void 0;
104
+ while (ready.length > 0) {
105
+ remaining--;
106
+ let outcome = ready.shift();
107
+ if (encodeServerResultFrame(sequence, { kind: "value", value: outcome }).byteLength > limits.maxFrameBytes) {
108
+ outcome = [outcome[0], "uncertain", "Server batch member exceeded its frame budget"];
109
+ }
110
+ sequence++;
111
+ yield outcome;
112
+ }
113
+ }
114
+ } finally {
115
+ closed = true;
116
+ cancellation.abort();
117
+ ready.length = 0;
118
+ }
119
+ }
120
+ return createServerResultStream(results(), {
121
+ ...limits,
122
+ signal,
123
+ cancel: () => cancellation.abort()
124
+ });
125
+ }
126
+ export {
127
+ batchServerCalls,
128
+ executeServerFunctionBatch
129
+ };
@@ -0,0 +1,9 @@
1
+ import { type ServerResultLimits } from '../server-rpc-protocol.js';
2
+ /**
3
+ * One invocation, one bounded result channel. next() is demand-driven: a slow
4
+ * reader cannot make a generator produce an unbounded server-side mailbox.
5
+ */
6
+ export declare function createServerResultStream(result: unknown, options?: ServerResultLimits & {
7
+ signal?: AbortSignal;
8
+ cancel?: () => void;
9
+ }): ReadableStream<Uint8Array>;
@@ -0,0 +1,125 @@
1
+ import {
2
+ encodeServerResultFrame,
3
+ serverResultLimits
4
+ } from "../server-rpc-protocol.js";
5
+ function createServerResultStream(result, options = {}) {
6
+ const limits = serverResultLimits(options);
7
+ let sequence = 0;
8
+ let totalBytes = 0;
9
+ let iterator;
10
+ let finished = false;
11
+ let terminal = false;
12
+ let streaming = false;
13
+ let initialized = false;
14
+ let pending = Promise.resolve(result);
15
+ void pending.catch(() => {
16
+ });
17
+ let controller;
18
+ let timer;
19
+ const cleanup = () => {
20
+ clearTimeout(timer);
21
+ options.signal?.removeEventListener("abort", abort);
22
+ };
23
+ const closeIterator = () => {
24
+ try {
25
+ void Promise.resolve(iterator?.return?.()).catch(() => {
26
+ });
27
+ } catch {
28
+ }
29
+ iterator = void 0;
30
+ };
31
+ const write = (frame) => {
32
+ const encoded = encodeServerResultFrame(sequence, frame);
33
+ if (encoded.byteLength > limits.maxFrameBytes || totalBytes + encoded.byteLength > limits.maxTotalBytes) {
34
+ throw new Error("Server result exceeded its response budget");
35
+ }
36
+ sequence++;
37
+ totalBytes += encoded.byteLength;
38
+ controller.enqueue(encoded);
39
+ };
40
+ const fail = (message) => {
41
+ if (finished) return;
42
+ finished = true;
43
+ pending = void 0;
44
+ cleanup();
45
+ options.cancel?.();
46
+ closeIterator();
47
+ try {
48
+ write({ kind: "error", error: message });
49
+ controller.close();
50
+ } catch (error) {
51
+ controller.error(error);
52
+ }
53
+ };
54
+ const abort = () => fail("Server function was canceled");
55
+ return new ReadableStream(
56
+ {
57
+ start(streamController) {
58
+ controller = streamController;
59
+ timer = setTimeout(() => fail("Server function timed out"), limits.timeoutMs);
60
+ options.signal?.addEventListener("abort", abort, { once: true });
61
+ if (options.signal?.aborted) abort();
62
+ },
63
+ async pull() {
64
+ if (finished) return;
65
+ try {
66
+ if (terminal) {
67
+ write({ kind: "complete" });
68
+ finished = true;
69
+ cleanup();
70
+ controller.close();
71
+ return;
72
+ }
73
+ if (!initialized) {
74
+ const value = await pending;
75
+ pending = void 0;
76
+ if (finished) {
77
+ if (value !== null && typeof value === "object" && Symbol.asyncIterator in value) {
78
+ iterator = value[Symbol.asyncIterator]();
79
+ closeIterator();
80
+ }
81
+ return;
82
+ }
83
+ initialized = true;
84
+ if (value !== null && typeof value === "object" && Symbol.asyncIterator in value) {
85
+ iterator = value[Symbol.asyncIterator]();
86
+ streaming = true;
87
+ write({ kind: "stream" });
88
+ return;
89
+ }
90
+ write({ kind: "value", value });
91
+ terminal = true;
92
+ return;
93
+ }
94
+ if (streaming) {
95
+ const item = await iterator.next();
96
+ if (finished) return;
97
+ if (item.done) {
98
+ iterator = void 0;
99
+ write({ kind: "complete" });
100
+ finished = true;
101
+ cleanup();
102
+ controller.close();
103
+ } else {
104
+ write({ kind: "value", value: item.value });
105
+ }
106
+ }
107
+ } catch {
108
+ fail("Server function failed");
109
+ }
110
+ },
111
+ cancel() {
112
+ if (finished) return;
113
+ finished = true;
114
+ pending = void 0;
115
+ cleanup();
116
+ options.cancel?.();
117
+ closeIterator();
118
+ }
119
+ },
120
+ { highWaterMark: 0 }
121
+ );
122
+ }
123
+ export {
124
+ createServerResultStream
125
+ };
@@ -1,3 +1,5 @@
1
+ import { type ServerCallContext } from '../server-call.js';
2
+ import { type ServerResultLimits } from '../server-rpc-protocol.js';
1
3
  /**
2
4
  * Execute a `module server` function for an RPC request. The wire format is
3
5
  * devalue on both sides (matching @ripple-ts/adapter's client stub, and chosen
@@ -7,4 +9,6 @@
7
9
  * graph (`ssrLoadModule('octane/server')`) so the executor and the resolved
8
10
  * server function share one runtime.
9
11
  */
10
- export declare function executeServerFunction(fn: (...args: any[]) => unknown, body: string): Promise<string>;
12
+ export declare function executeServerFunction(fn: Function, body: string, context?: ServerCallContext): Promise<string>;
13
+ /** Opt-in result streaming; application authorization runs before this executor. */
14
+ export declare function executeServerFunctionStream(fn: Function, body: string, context?: ServerCallContext, limits?: ServerResultLimits): ReadableStream<Uint8Array>;
@@ -1,24 +1,48 @@
1
1
  import * as devalue from "devalue";
2
- class InvalidServerFunctionPayloadError extends Error {
3
- code = "OCTANE_INVALID_RPC_PAYLOAD";
4
- constructor(cause) {
5
- super("Invalid server function arguments", { cause });
6
- this.name = "InvalidServerFunctionPayloadError";
7
- }
8
- }
9
- async function executeServerFunction(fn, body) {
2
+ import {
3
+ InvalidServerFunctionPayloadError,
4
+ invokeServerFunction
5
+ } from "../server-call.js";
6
+ import { createServerResultStream } from "./rpc-stream.js";
7
+ import {
8
+ decodeServerArguments,
9
+ serverResultLimits
10
+ } from "../server-rpc-protocol.js";
11
+ function serverArguments(body) {
10
12
  let args;
11
13
  try {
12
14
  args = devalue.parse(body);
13
15
  } catch (error) {
14
16
  throw new InvalidServerFunctionPayloadError(error);
15
17
  }
16
- if (!Array.isArray(args)) {
17
- throw new InvalidServerFunctionPayloadError();
18
- }
19
- const value = await fn.apply(null, args);
18
+ if (!Array.isArray(args)) throw new InvalidServerFunctionPayloadError();
19
+ return args;
20
+ }
21
+ async function executeServerFunction(fn, body, context) {
22
+ const args = serverArguments(body);
23
+ const value = await invokeServerFunction(fn, args, context);
20
24
  return devalue.stringify({ value });
21
25
  }
26
+ function executeServerFunctionStream(fn, body, context, limits) {
27
+ const resolvedLimits = serverResultLimits(limits);
28
+ let args;
29
+ try {
30
+ args = decodeServerArguments(body);
31
+ } catch (error) {
32
+ throw new InvalidServerFunctionPayloadError(error);
33
+ }
34
+ const cancellation = new AbortController();
35
+ const signal = context === void 0 ? cancellation.signal : AbortSignal.any([context.signal, cancellation.signal]);
36
+ const trusted = context === void 0 ? void 0 : { ...context, signal };
37
+ return createServerResultStream(
38
+ Promise.resolve().then(() => {
39
+ signal.throwIfAborted();
40
+ return invokeServerFunction(fn, args, trusted);
41
+ }),
42
+ { ...resolvedLimits, signal, cancel: () => cancellation.abort() }
43
+ );
44
+ }
22
45
  export {
23
- executeServerFunction
46
+ executeServerFunction,
47
+ executeServerFunctionStream
24
48
  };
@@ -0,0 +1,3 @@
1
+ import type { ServerSignalQueryAttemptObservations } from '../signals/query-attempt-observer.js';
2
+ /** Allocate server mirrors only for an observed attempt, not ordinary browser requests. */
3
+ export declare function createServerSignalQueryAttemptObservations(): ServerSignalQueryAttemptObservations;