@resonatehq/sdk 0.9.6 → 0.10.1

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 (235) hide show
  1. package/README.md +84 -12
  2. package/dist/clock.d.ts.map +1 -0
  3. package/dist/clock.js +12 -0
  4. package/dist/clock.js.map +1 -0
  5. package/dist/codec.d.ts +11 -0
  6. package/dist/codec.d.ts.map +1 -0
  7. package/dist/codec.js +115 -0
  8. package/dist/codec.js.map +1 -0
  9. package/dist/computation.d.ts +40 -0
  10. package/dist/computation.d.ts.map +1 -0
  11. package/dist/computation.js +152 -0
  12. package/dist/computation.js.map +1 -0
  13. package/dist/{src/context.d.ts → context.d.ts} +70 -40
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/{src/context.js → context.js} +140 -155
  16. package/dist/context.js.map +1 -0
  17. package/dist/core.d.ts +45 -0
  18. package/dist/core.d.ts.map +1 -0
  19. package/dist/core.js +140 -0
  20. package/dist/core.js.map +1 -0
  21. package/dist/coroutine.d.ts +37 -0
  22. package/dist/coroutine.d.ts.map +1 -0
  23. package/dist/coroutine.js +259 -0
  24. package/dist/coroutine.js.map +1 -0
  25. package/dist/{src/decorator.d.ts → decorator.d.ts} +9 -8
  26. package/dist/decorator.d.ts.map +1 -0
  27. package/dist/decorator.js +150 -0
  28. package/dist/decorator.js.map +1 -0
  29. package/dist/encryptor.d.ts +10 -0
  30. package/dist/encryptor.d.ts.map +1 -0
  31. package/dist/encryptor.js +9 -0
  32. package/dist/encryptor.js.map +1 -0
  33. package/dist/{src/exceptions.d.ts → exceptions.d.ts} +4 -1
  34. package/dist/exceptions.d.ts.map +1 -0
  35. package/dist/{src/exceptions.js → exceptions.js} +11 -11
  36. package/dist/exceptions.js.map +1 -0
  37. package/dist/{src/heartbeat.d.ts → heartbeat.d.ts} +5 -3
  38. package/dist/heartbeat.d.ts.map +1 -0
  39. package/dist/heartbeat.js +50 -0
  40. package/dist/heartbeat.js.map +1 -0
  41. package/dist/index.d.ts +19 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +15 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/logger.d.ts +33 -0
  46. package/dist/logger.d.ts.map +1 -0
  47. package/dist/logger.js +54 -0
  48. package/dist/logger.js.map +1 -0
  49. package/dist/network/http.d.ts +86 -0
  50. package/dist/network/http.d.ts.map +1 -0
  51. package/dist/network/http.js +350 -0
  52. package/dist/network/http.js.map +1 -0
  53. package/dist/network/local.d.ts +188 -0
  54. package/dist/network/local.d.ts.map +1 -0
  55. package/dist/network/local.js +1349 -0
  56. package/dist/network/local.js.map +1 -0
  57. package/dist/network/network.d.ts +17 -0
  58. package/dist/network/network.d.ts.map +1 -0
  59. package/dist/network/network.js +2 -0
  60. package/dist/network/network.js.map +1 -0
  61. package/dist/network/types.d.ts +1280 -0
  62. package/dist/network/types.d.ts.map +1 -0
  63. package/dist/network/types.js +920 -0
  64. package/dist/network/types.js.map +1 -0
  65. package/dist/{src/options.d.ts → options.d.ts} +15 -6
  66. package/dist/options.d.ts.map +1 -0
  67. package/dist/options.js +34 -0
  68. package/dist/options.js.map +1 -0
  69. package/dist/promises.d.ts +54 -0
  70. package/dist/promises.d.ts.map +1 -0
  71. package/dist/promises.js +122 -0
  72. package/dist/promises.js.map +1 -0
  73. package/dist/{src/registry.d.ts → registry.d.ts} +1 -1
  74. package/dist/registry.d.ts.map +1 -0
  75. package/dist/{src/registry.js → registry.js} +6 -13
  76. package/dist/registry.js.map +1 -0
  77. package/dist/resonate.d.ts +168 -0
  78. package/dist/resonate.d.ts.map +1 -0
  79. package/dist/resonate.js +475 -0
  80. package/dist/resonate.js.map +1 -0
  81. package/dist/retries.d.ts.map +1 -0
  82. package/dist/{src/retries.js → retries.js} +4 -11
  83. package/dist/retries.js.map +1 -0
  84. package/dist/schedules.d.ts +22 -0
  85. package/dist/schedules.d.ts.map +1 -0
  86. package/dist/schedules.js +65 -0
  87. package/dist/schedules.js.map +1 -0
  88. package/dist/trace.d.ts +79 -0
  89. package/dist/trace.d.ts.map +1 -0
  90. package/dist/trace.js +224 -0
  91. package/dist/trace.js.map +1 -0
  92. package/dist/types.d.ts +21 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +2 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/util.d.ts +28 -0
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +196 -0
  99. package/dist/util.js.map +1 -0
  100. package/package.json +18 -10
  101. package/dist/dev/network.d.ts +0 -34
  102. package/dist/dev/network.d.ts.map +0 -1
  103. package/dist/dev/network.js +0 -115
  104. package/dist/dev/network.js.map +0 -1
  105. package/dist/dev/server.d.ts +0 -89
  106. package/dist/dev/server.d.ts.map +0 -1
  107. package/dist/dev/server.js +0 -890
  108. package/dist/dev/server.js.map +0 -1
  109. package/dist/sim/example-1.d.ts +0 -2
  110. package/dist/sim/example-1.d.ts.map +0 -1
  111. package/dist/sim/example-1.js +0 -95
  112. package/dist/sim/example-1.js.map +0 -1
  113. package/dist/sim/example-2.d.ts +0 -2
  114. package/dist/sim/example-2.d.ts.map +0 -1
  115. package/dist/sim/example-2.js +0 -97
  116. package/dist/sim/example-2.js.map +0 -1
  117. package/dist/sim/example-3.d.ts +0 -2
  118. package/dist/sim/example-3.d.ts.map +0 -1
  119. package/dist/sim/example-3.js +0 -97
  120. package/dist/sim/example-3.js.map +0 -1
  121. package/dist/sim/main.d.ts +0 -14
  122. package/dist/sim/main.d.ts.map +0 -1
  123. package/dist/sim/main.js +0 -207
  124. package/dist/sim/main.js.map +0 -1
  125. package/dist/sim/src/server.d.ts +0 -15
  126. package/dist/sim/src/server.d.ts.map +0 -1
  127. package/dist/sim/src/server.js +0 -85
  128. package/dist/sim/src/server.js.map +0 -1
  129. package/dist/sim/src/simulator.d.ts +0 -65
  130. package/dist/sim/src/simulator.d.ts.map +0 -1
  131. package/dist/sim/src/simulator.js +0 -236
  132. package/dist/sim/src/simulator.js.map +0 -1
  133. package/dist/sim/src/worker.d.ts +0 -23
  134. package/dist/sim/src/worker.d.ts.map +0 -1
  135. package/dist/sim/src/worker.js +0 -217
  136. package/dist/sim/src/worker.js.map +0 -1
  137. package/dist/src/clock.d.ts.map +0 -1
  138. package/dist/src/clock.js +0 -17
  139. package/dist/src/clock.js.map +0 -1
  140. package/dist/src/computation.d.ts +0 -49
  141. package/dist/src/computation.d.ts.map +0 -1
  142. package/dist/src/computation.js +0 -314
  143. package/dist/src/computation.js.map +0 -1
  144. package/dist/src/context.d.ts.map +0 -1
  145. package/dist/src/context.js.map +0 -1
  146. package/dist/src/core.d.ts +0 -12
  147. package/dist/src/core.d.ts.map +0 -1
  148. package/dist/src/core.js +0 -28
  149. package/dist/src/core.js.map +0 -1
  150. package/dist/src/coroutine.d.ts +0 -42
  151. package/dist/src/coroutine.d.ts.map +0 -1
  152. package/dist/src/coroutine.js +0 -364
  153. package/dist/src/coroutine.js.map +0 -1
  154. package/dist/src/decorator.d.ts.map +0 -1
  155. package/dist/src/decorator.js +0 -220
  156. package/dist/src/decorator.js.map +0 -1
  157. package/dist/src/encoder.d.ts +0 -12
  158. package/dist/src/encoder.d.ts.map +0 -1
  159. package/dist/src/encoder.js +0 -101
  160. package/dist/src/encoder.js.map +0 -1
  161. package/dist/src/encryptor.d.ts +0 -10
  162. package/dist/src/encryptor.d.ts.map +0 -1
  163. package/dist/src/encryptor.js +0 -13
  164. package/dist/src/encryptor.js.map +0 -1
  165. package/dist/src/exceptions.d.ts.map +0 -1
  166. package/dist/src/exceptions.js.map +0 -1
  167. package/dist/src/handler.d.ts +0 -49
  168. package/dist/src/handler.d.ts.map +0 -1
  169. package/dist/src/handler.js +0 -316
  170. package/dist/src/handler.js.map +0 -1
  171. package/dist/src/heartbeat.d.ts.map +0 -1
  172. package/dist/src/heartbeat.js +0 -87
  173. package/dist/src/heartbeat.js.map +0 -1
  174. package/dist/src/index.d.ts +0 -15
  175. package/dist/src/index.d.ts.map +0 -1
  176. package/dist/src/index.js +0 -61
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/network/network.d.ts +0 -254
  179. package/dist/src/network/network.d.ts.map +0 -1
  180. package/dist/src/network/network.js +0 -4
  181. package/dist/src/network/network.js.map +0 -1
  182. package/dist/src/network/remote.d.ts +0 -85
  183. package/dist/src/network/remote.d.ts.map +0 -1
  184. package/dist/src/network/remote.js +0 -523
  185. package/dist/src/network/remote.js.map +0 -1
  186. package/dist/src/nursery.d.ts +0 -19
  187. package/dist/src/nursery.d.ts.map +0 -1
  188. package/dist/src/nursery.js +0 -102
  189. package/dist/src/nursery.js.map +0 -1
  190. package/dist/src/options.d.ts.map +0 -1
  191. package/dist/src/options.js +0 -70
  192. package/dist/src/options.js.map +0 -1
  193. package/dist/src/processor/processor.d.ts +0 -12
  194. package/dist/src/processor/processor.d.ts.map +0 -1
  195. package/dist/src/processor/processor.js +0 -43
  196. package/dist/src/processor/processor.js.map +0 -1
  197. package/dist/src/promises.d.ts +0 -54
  198. package/dist/src/promises.d.ts.map +0 -1
  199. package/dist/src/promises.js +0 -169
  200. package/dist/src/promises.js.map +0 -1
  201. package/dist/src/registry.d.ts.map +0 -1
  202. package/dist/src/registry.js.map +0 -1
  203. package/dist/src/resonate-inner.d.ts +0 -60
  204. package/dist/src/resonate-inner.d.ts.map +0 -1
  205. package/dist/src/resonate-inner.js +0 -97
  206. package/dist/src/resonate-inner.js.map +0 -1
  207. package/dist/src/resonate.d.ts +0 -341
  208. package/dist/src/resonate.d.ts.map +0 -1
  209. package/dist/src/resonate.js +0 -591
  210. package/dist/src/resonate.js.map +0 -1
  211. package/dist/src/retries.d.ts.map +0 -1
  212. package/dist/src/retries.js.map +0 -1
  213. package/dist/src/schedules.d.ts +0 -19
  214. package/dist/src/schedules.d.ts.map +0 -1
  215. package/dist/src/schedules.js +0 -85
  216. package/dist/src/schedules.js.map +0 -1
  217. package/dist/src/tasks.d.ts +0 -9
  218. package/dist/src/tasks.d.ts.map +0 -1
  219. package/dist/src/tasks.js +0 -61
  220. package/dist/src/tasks.js.map +0 -1
  221. package/dist/src/tracer.d.ts +0 -23
  222. package/dist/src/tracer.d.ts.map +0 -1
  223. package/dist/src/tracer.js +0 -25
  224. package/dist/src/tracer.js.map +0 -1
  225. package/dist/src/types.d.ts +0 -28
  226. package/dist/src/types.d.ts.map +0 -1
  227. package/dist/src/types.js +0 -11
  228. package/dist/src/types.js.map +0 -1
  229. package/dist/src/util.d.ts +0 -20
  230. package/dist/src/util.d.ts.map +0 -1
  231. package/dist/src/util.js +0 -120
  232. package/dist/src/util.js.map +0 -1
  233. package/dist/tsconfig.build.tsbuildinfo +0 -1
  234. /package/dist/{src/clock.d.ts → clock.d.ts} +0 -0
  235. /package/dist/{src/retries.d.ts → retries.d.ts} +0 -0
package/dist/core.js ADDED
@@ -0,0 +1,140 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { Computation } from "./computation.js";
3
+ import exceptions, { ResonateError } from "./exceptions.js";
4
+ import { isRedirect, isSuccess } from "./network/types.js";
5
+ import { Constant, Exponential, Linear, Never } from "./retries.js";
6
+ import * as util from "./util.js";
7
+ export class Core {
8
+ pid;
9
+ ttl;
10
+ clock;
11
+ send;
12
+ codec;
13
+ retries;
14
+ registry;
15
+ heartbeat;
16
+ dependencies;
17
+ optsBuilder;
18
+ logger;
19
+ constructor({ pid, ttl, clock, send, codec, registry, heartbeat, dependencies, optsBuilder, logger, }) {
20
+ this.pid = pid;
21
+ this.ttl = ttl;
22
+ this.clock = clock;
23
+ this.send = send;
24
+ this.codec = codec;
25
+ this.registry = registry;
26
+ this.heartbeat = heartbeat;
27
+ this.dependencies = dependencies;
28
+ this.optsBuilder = optsBuilder;
29
+ this.logger = logger;
30
+ // default retry policies
31
+ this.retries = new Map([
32
+ [Constant.type, Constant],
33
+ [Exponential.type, Exponential],
34
+ [Linear.type, Linear],
35
+ [Never.type, Never],
36
+ ]);
37
+ }
38
+ async executeUntilBlocked(task, rootPromise, preload) {
39
+ util.assert(task.state === "acquired", `expected task state to be 'acquired', got '${task.state}'`);
40
+ const computation = this.createComputation(rootPromise.id, util.buildEffects(this.send, this.codec, { id: task.id, version: task.version }, preload));
41
+ try {
42
+ const status = await computation.executeUntilBlocked(rootPromise);
43
+ if (status.kind === "suspended") {
44
+ const suspendResult = await this.suspendTask(task, rootPromise, status.awaited);
45
+ if (suspendResult.continue) {
46
+ return this.executeUntilBlocked(task, rootPromise, suspendResult.preload);
47
+ }
48
+ }
49
+ if (status.kind === "done") {
50
+ await this.fulfillTask(task, rootPromise, status);
51
+ }
52
+ return status;
53
+ }
54
+ catch (err) {
55
+ // TODO: Some kinds of error must releaseTask, others must haltTask, figure out when to halt and when to release
56
+ if (err instanceof ResonateError) {
57
+ err.log(this.logger);
58
+ }
59
+ else {
60
+ this.logger.warn({ component: "core", error: err instanceof Error ? err.message : String(err) }, "executeUntilBlocked failed unexpectedly");
61
+ }
62
+ await this.releaseTask(task, rootPromise).catch(() => { });
63
+ throw err;
64
+ }
65
+ }
66
+ // Extracted to allow tests to spy on computation creation.
67
+ createComputation(id, effects) {
68
+ return new Computation(id, this.clock, effects, this.retries, this.registry, this.heartbeat, this.dependencies, this.optsBuilder, this.logger);
69
+ }
70
+ async releaseTask(task, rootPromise) {
71
+ await this.send({
72
+ kind: "task.release",
73
+ head: { corrId: randomUUID(), version: util.VERSION, "resonate:origin": rootPromise.tags["resonate:origin"] },
74
+ data: { id: task.id, version: task.version },
75
+ });
76
+ }
77
+ async suspendTask(task, rootPromise, awaited) {
78
+ const res = await this.send({
79
+ kind: "task.suspend",
80
+ head: { corrId: randomUUID(), version: util.VERSION, "resonate:origin": rootPromise.tags["resonate:origin"] },
81
+ data: {
82
+ id: task.id,
83
+ version: task.version,
84
+ actions: awaited.map((a) => ({
85
+ kind: "promise.register_callback",
86
+ head: { corrId: randomUUID(), version: util.VERSION },
87
+ data: { awaiter: rootPromise.id, awaited: a },
88
+ })),
89
+ },
90
+ });
91
+ if (isSuccess(res)) {
92
+ return { continue: false };
93
+ }
94
+ if (isRedirect(res)) {
95
+ return { continue: true, preload: res.data.preload };
96
+ }
97
+ throw exceptions.SERVER_ERROR(res.data, true, {
98
+ code: res.head.status,
99
+ message: res.data,
100
+ });
101
+ }
102
+ async fulfillTask(task, rootPromise, doneValue) {
103
+ const encoded = this.codec.encode(doneValue.value);
104
+ await this.send({
105
+ kind: "task.fulfill",
106
+ head: { corrId: randomUUID(), version: util.VERSION, "resonate:origin": rootPromise.tags["resonate:origin"] },
107
+ data: {
108
+ id: task.id,
109
+ version: task.version,
110
+ action: {
111
+ kind: "promise.settle",
112
+ head: { corrId: randomUUID(), version: util.VERSION, "resonate:origin": rootPromise.tags["resonate:origin"] },
113
+ data: {
114
+ id: doneValue.id,
115
+ state: doneValue.state,
116
+ value: encoded,
117
+ },
118
+ },
119
+ },
120
+ });
121
+ }
122
+ async onMessage(msg) {
123
+ util.assert(msg.kind === "execute");
124
+ const task = msg.data.task;
125
+ const res = await this.send({
126
+ kind: "task.acquire",
127
+ head: { corrId: randomUUID(), version: util.VERSION, "resonate:origin": task.id },
128
+ data: { id: task.id, version: task.version, pid: this.pid, ttl: this.ttl },
129
+ });
130
+ if (!isSuccess(res)) {
131
+ throw exceptions.SERVER_ERROR(res.data, true, {
132
+ code: res.head.status,
133
+ message: res.data,
134
+ });
135
+ }
136
+ const rootPromise = this.codec.decodePromise(res.data.promise);
137
+ return this.executeUntilBlocked(res.data.task, rootPromise, res.data.preload);
138
+ }
139
+ }
140
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Context, InnerContext } from "./context.js";
2
+ import { Decorator } from "./decorator.js";
3
+ import type { Logger } from "./logger.js";
4
+ import type { TraceCollector } from "./trace.js";
5
+ import type { Effects, Result, Yieldable } from "./types.js";
6
+ export type Suspended = {
7
+ type: "suspended";
8
+ todo: {
9
+ remote: RemoteTodo[];
10
+ };
11
+ };
12
+ export type Done = {
13
+ type: "done";
14
+ result: Result<any, any>;
15
+ };
16
+ export interface RemoteTodo {
17
+ id: string;
18
+ }
19
+ export declare class Coroutine<T> {
20
+ private ctx;
21
+ private logger;
22
+ private decorator;
23
+ private effects;
24
+ private trace;
25
+ constructor(ctx: InnerContext, logger: Logger, decorator: Decorator<T>, effects: Effects, trace: TraceCollector);
26
+ private emitTrace;
27
+ static exec(logger: Logger, ctx: InnerContext, func: (ctx: Context, ...args: any[]) => Generator<Yieldable, any, any>, args: any[], effects: Effects, trace: TraceCollector): Promise<Suspended | Done>;
28
+ private exec;
29
+ /**
30
+ * Awaits all in-flight local work entries, settles completed durable promises,
31
+ * and collects remote todos from any suspended child generators.
32
+ */
33
+ private flushLocalWork;
34
+ private settle;
35
+ private completedPromise;
36
+ }
37
+ //# sourceMappingURL=coroutine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coroutine.d.ts","sourceRoot":"","sources":["../src/coroutine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAqC,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG7D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAWD,qBAAa,SAAS,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAiB;gBAElB,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc;IAgB/G,OAAO,CAAC,SAAS;WAKG,IAAI,CACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,EACtE,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAKd,IAAI;IA0NlB;;;OAGG;YACW,cAAc;IAwB5B,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,gBAAgB;CAczB"}
@@ -0,0 +1,259 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { Decorator } from "./decorator.js";
3
+ import { Never } from "./retries.js";
4
+ import * as util from "./util.js";
5
+ // a simple map to suppress duplicate warnings, necessary due to
6
+ // micro retries
7
+ const logged = new Map();
8
+ export class Coroutine {
9
+ ctx;
10
+ logger;
11
+ decorator;
12
+ effects;
13
+ trace;
14
+ constructor(ctx, logger, decorator, effects, trace) {
15
+ this.ctx = ctx;
16
+ this.logger = logger;
17
+ this.decorator = decorator;
18
+ this.effects = effects;
19
+ this.trace = trace;
20
+ if (!(this.ctx.retryPolicy instanceof Never) && !logged.has(this.ctx.id)) {
21
+ this.logger.warn({ component: "coroutine", func: this.ctx.func, id: this.ctx.id }, `Generator function '${this.ctx.func}' does not support retries. Will ignore.`);
22
+ logged.set(this.ctx.id, true);
23
+ }
24
+ }
25
+ emitTrace(event) {
26
+ this.trace.emit(event);
27
+ this.logger.debug({ component: "trace", ...event }, `trace: ${event.kind}`);
28
+ }
29
+ static async exec(logger, ctx, func, args, effects, trace) {
30
+ const coroutine = new Coroutine(ctx, logger, new Decorator(func(ctx, ...args)), effects, trace);
31
+ return await coroutine.exec();
32
+ }
33
+ async exec() {
34
+ const remote = [];
35
+ const localWork = new Map();
36
+ // Emit spawn for this function's execution
37
+ this.emitTrace({ kind: "spawn", id: this.ctx.id });
38
+ let input = {
39
+ type: "internal.nothing",
40
+ };
41
+ while (true) {
42
+ const action = this.decorator.next(input);
43
+ // Handle internal.async.l (lfi/lfc) — local child creation (run)
44
+ if (action.type === "internal.async.l") {
45
+ const res = await this.effects.promiseCreate(action.createReq, action.func.name);
46
+ // Emit "run p q" — parent creates local child
47
+ this.emitTrace({ kind: "run", id: this.ctx.id, callee: action.id });
48
+ const ctx = this.ctx.child({
49
+ id: res.id,
50
+ func: action.func.name,
51
+ timeout: res.timeoutAt,
52
+ version: action.version,
53
+ retryPolicy: action.retryPolicy,
54
+ nonRetryableErrors: action.nonRetryableErrors,
55
+ });
56
+ if (res.state === "pending") {
57
+ // Start local work eagerly — both regular functions and generators
58
+ let localPromise;
59
+ if (!util.isGeneratorFunction(action.func)) {
60
+ // For regular functions, emit spawn/return around execution
61
+ localPromise = (async () => {
62
+ this.emitTrace({ kind: "spawn", id: action.id });
63
+ const result = await util.executeWithRetry(ctx, action.func, action.args, this.logger);
64
+ const state = result.kind === "value" ? "resolved" : "rejected";
65
+ const value = result.kind === "value" ? result.value : result.error;
66
+ this.emitTrace({ kind: "return", id: action.id, state, value });
67
+ return { type: "done", result };
68
+ })();
69
+ }
70
+ else {
71
+ localPromise = Coroutine.exec(this.logger, ctx, action.func, action.args, this.effects, this.trace);
72
+ }
73
+ localWork.set(action.id, { funcName: action.func.name, promise: localPromise });
74
+ input = {
75
+ type: "internal.promise",
76
+ state: "pending",
77
+ mode: "attached",
78
+ id: action.id,
79
+ };
80
+ }
81
+ else {
82
+ // durable promise is already completed (replay) — dedup
83
+ const state = res.state === "resolved" ? "resolved" : "rejected";
84
+ const value = res.value?.data;
85
+ this.emitTrace({ kind: "dedup", id: action.id, state, value });
86
+ input = this.completedPromise(action.id, res);
87
+ }
88
+ continue;
89
+ }
90
+ // Handle internal.async.r — remote child creation (rpc)
91
+ if (action.type === "internal.async.r") {
92
+ const res = await this.effects.promiseCreate(action.createReq, "unknown");
93
+ // Emit "rpc p q" — parent creates remote child
94
+ this.emitTrace({ kind: "rpc", id: this.ctx.id, callee: action.id });
95
+ if (res.state === "pending") {
96
+ // Emit "block q" — rpc child is unsettled
97
+ this.emitTrace({ kind: "block", id: action.id });
98
+ if (action.mode === "attached")
99
+ remote.push({ id: action.id });
100
+ input = {
101
+ type: "internal.promise",
102
+ state: "pending",
103
+ mode: action.mode,
104
+ id: action.id,
105
+ };
106
+ }
107
+ else {
108
+ // Already settled — dedup
109
+ const state = res.state === "resolved" ? "resolved" : "rejected";
110
+ const value = res.value?.data;
111
+ this.emitTrace({ kind: "dedup", id: action.id, state, value });
112
+ input = this.completedPromise(action.id, res);
113
+ }
114
+ continue;
115
+ }
116
+ // Handle die
117
+ if (action.type === "internal.die") {
118
+ if (action.condition) {
119
+ throw action.error;
120
+ }
121
+ input = { type: "internal.nothing" };
122
+ continue;
123
+ }
124
+ // Handle await on a completed promise (fast-path / replay)
125
+ if (action.type === "internal.await" && action.promise.state === "completed") {
126
+ // Emit await + resume (child already settled)
127
+ this.emitTrace({ kind: "await", id: this.ctx.id, callee: action.id });
128
+ this.emitTrace({ kind: "resume", id: this.ctx.id, callee: action.id });
129
+ util.assert(action.promise.value.type === "internal.literal", "promise value must be an 'internal.literal' type");
130
+ util.assertDefined(action.promise.value);
131
+ input = action.promise.value;
132
+ continue;
133
+ }
134
+ // Handle await on a pending promise
135
+ if (action.type === "internal.await" && action.promise.state === "pending") {
136
+ // Emit await
137
+ this.emitTrace({ kind: "await", id: this.ctx.id, callee: action.id });
138
+ if (action.promise.mode === "detached") {
139
+ // User is explicitly awaiting a detached promise — add its remote todo now
140
+ remote.push({ id: action.id });
141
+ }
142
+ const localEntry = localWork.get(action.id);
143
+ if (localEntry) {
144
+ // This is a local in-flight task — await it inline
145
+ localWork.delete(action.id);
146
+ const localResult = await localEntry.promise;
147
+ if (localResult.type === "done") {
148
+ const settleRes = await this.settle(action.id, localResult.result, localEntry.funcName);
149
+ util.assert(settleRes.state !== "pending", "promise must be completed");
150
+ // Emit resume — child completed, parent continues
151
+ this.emitTrace({ kind: "resume", id: this.ctx.id, callee: action.id });
152
+ // Feed the resolved/rejected value directly as a Literal so the generator continues
153
+ input = {
154
+ type: "internal.literal",
155
+ value: localResult.result,
156
+ };
157
+ continue;
158
+ }
159
+ // localResult.type === "suspended": child generator has remote deps
160
+ // Flush remaining local work and collect all remote todos
161
+ const res = await this.flushLocalWork(localWork);
162
+ // Emit suspend — parent cannot continue
163
+ this.emitTrace({ kind: "suspend", id: this.ctx.id });
164
+ const allRemote = [...remote, ...localResult.todo.remote, ...res.remote];
165
+ return { type: "suspended", todo: { remote: allRemote } };
166
+ }
167
+ // Not in localWork — it's a remote pending promise.
168
+ // Flush any in-flight local work so their remote dependencies are surfaced
169
+ const flushResult = await this.flushLocalWork(localWork);
170
+ // Emit suspend — parent cannot continue (blocked on remote)
171
+ this.emitTrace({ kind: "suspend", id: this.ctx.id });
172
+ const allRemote = [...remote, ...flushResult.remote];
173
+ return { type: "suspended", todo: { remote: allRemote } };
174
+ }
175
+ // Handle return
176
+ if (action.type === "internal.return") {
177
+ util.assert(action.value.type === "internal.literal", "promise value must be an 'internal.literal' type");
178
+ util.assertDefined(action.value);
179
+ // Structured concurrency: flush all in-flight local work before completing
180
+ if (localWork.size > 0) {
181
+ const flushResult = await this.flushLocalWork(localWork);
182
+ const allRemote = [...remote, ...flushResult.remote];
183
+ if (allRemote.length > 0) {
184
+ // Emit suspend — parent cannot return due to unsettled remote children
185
+ this.emitTrace({ kind: "suspend", id: this.ctx.id });
186
+ return { type: "suspended", todo: { remote: allRemote } };
187
+ }
188
+ // Emit return — function completes
189
+ const result = action.value.value;
190
+ const state = result.kind === "value" ? "resolved" : "rejected";
191
+ const value = result.kind === "value" ? result.value : result.error;
192
+ this.emitTrace({ kind: "return", id: this.ctx.id, state, value });
193
+ return { type: "done", result: action.value.value };
194
+ }
195
+ if (remote.length > 0) {
196
+ // Emit suspend — parent cannot return due to unsettled remote children
197
+ this.emitTrace({ kind: "suspend", id: this.ctx.id });
198
+ return { type: "suspended", todo: { remote } };
199
+ }
200
+ // Emit return — function completes
201
+ const result = action.value.value;
202
+ const state = result.kind === "value" ? "resolved" : "rejected";
203
+ const value = result.kind === "value" ? result.value : result.error;
204
+ this.emitTrace({ kind: "return", id: this.ctx.id, state, value });
205
+ return { type: "done", result: action.value.value };
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * Awaits all in-flight local work entries, settles completed durable promises,
211
+ * and collects remote todos from any suspended child generators.
212
+ */
213
+ async flushLocalWork(localWork) {
214
+ const entries = [...localWork.entries()];
215
+ localWork.clear();
216
+ // Await all in-flight promises concurrently before checking results
217
+ const results = await Promise.all(entries.map(async ([id, { funcName, promise }]) => ({ id, funcName, result: await promise })));
218
+ const allRemote = [];
219
+ for (const { id, funcName, result } of results) {
220
+ if (result.type === "suspended") {
221
+ // Child generator has remote deps, collect them; its durable promise remains pending
222
+ allRemote.push(...result.todo.remote);
223
+ }
224
+ else {
225
+ // Child completed (success or user error), settle its durable promise
226
+ await this.settle(id, result.result, funcName);
227
+ }
228
+ }
229
+ return { remote: allRemote };
230
+ }
231
+ settle(id, result, funcName) {
232
+ return this.effects.promiseSettle({
233
+ kind: "promise.settle",
234
+ head: { corrId: randomUUID(), version: util.VERSION },
235
+ data: {
236
+ id,
237
+ state: result.kind === "value" ? "resolved" : "rejected",
238
+ value: {
239
+ headers: {},
240
+ data: result.kind === "value" ? result.value : result.error,
241
+ },
242
+ },
243
+ }, funcName);
244
+ }
245
+ completedPromise(id, record) {
246
+ return {
247
+ type: "internal.promise",
248
+ state: "completed",
249
+ id,
250
+ value: {
251
+ type: "internal.literal",
252
+ value: record.state === "resolved"
253
+ ? { kind: "value", value: record.value?.data }
254
+ : { kind: "error", error: record.value?.data },
255
+ },
256
+ };
257
+ }
258
+ }
259
+ //# sourceMappingURL=coroutine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coroutine.js","sourceRoot":"","sources":["../src/coroutine.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { ResonateError } from "./exceptions";
2
- import type { CreatePromiseReq } from "./network/network";
3
- import type { RetryPolicy } from "./retries";
4
- import { type Func, type Result, type Yieldable } from "./types";
1
+ import type { ResonateError } from "./exceptions.js";
2
+ import type { PromiseCreateReq } from "./network/types.js";
3
+ import type { RetryPolicy } from "./retries.js";
4
+ import type { Func, Result, Yieldable } from "./types.js";
5
5
  export type InternalExpr<T> = InternalAsyncL | InternalAsyncR | InternalAwait<T> | InternalReturn<T> | InternalDie;
6
6
  export type InternalDie = {
7
7
  type: "internal.die";
@@ -14,7 +14,7 @@ export type InternalAsyncR = {
14
14
  mode: "attached" | "detached";
15
15
  func: string;
16
16
  version: number;
17
- createReq: CreatePromiseReq<any>;
17
+ createReq: PromiseCreateReq;
18
18
  };
19
19
  export type InternalAsyncL = {
20
20
  type: "internal.async.l";
@@ -23,7 +23,8 @@ export type InternalAsyncL = {
23
23
  args: any[];
24
24
  version: number;
25
25
  retryPolicy: RetryPolicy;
26
- createReq: CreatePromiseReq<any>;
26
+ nonRetryableErrors: Array<new (...args: any[]) => Error>;
27
+ createReq: PromiseCreateReq;
27
28
  };
28
29
  export type InternalAwait<T> = {
29
30
  type: "internal.await";
@@ -40,7 +41,7 @@ export type Nothing = {
40
41
  };
41
42
  export type Literal<T> = {
42
43
  type: "internal.literal";
43
- value: Result<T>;
44
+ value: Result<T, any>;
44
45
  };
45
46
  export type PromisePending = {
46
47
  type: "internal.promise";
@@ -55,8 +56,8 @@ export type PromiseCompleted<T> = {
55
56
  value: Literal<T>;
56
57
  };
57
58
  export declare class Decorator<TRet> {
58
- private invokes;
59
59
  private generator;
60
+ private pendingCall;
60
61
  private nextState;
61
62
  constructor(generator: Generator<Yieldable, TRet, any>);
62
63
  next(value: Value<any>): InternalExpr<any>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}