@resonatehq/sdk 0.6.3 → 0.7.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 (202) hide show
  1. package/README.md +24 -45
  2. package/dist/dev/network.d.ts +16 -0
  3. package/dist/dev/network.d.ts.map +1 -0
  4. package/dist/dev/network.js +89 -0
  5. package/dist/dev/network.js.map +1 -0
  6. package/dist/dev/server.d.ts +87 -0
  7. package/dist/dev/server.d.ts.map +1 -0
  8. package/dist/dev/server.js +891 -0
  9. package/dist/dev/server.js.map +1 -0
  10. package/dist/sim/example-1.d.ts +2 -0
  11. package/dist/sim/example-1.d.ts.map +1 -0
  12. package/dist/sim/example-1.js +94 -0
  13. package/dist/sim/example-1.js.map +1 -0
  14. package/dist/sim/example-2.d.ts +2 -0
  15. package/dist/sim/example-2.d.ts.map +1 -0
  16. package/dist/sim/example-2.js +95 -0
  17. package/dist/sim/example-2.js.map +1 -0
  18. package/dist/sim/example-3.d.ts +2 -0
  19. package/dist/sim/example-3.d.ts.map +1 -0
  20. package/dist/sim/example-3.js +95 -0
  21. package/dist/sim/example-3.js.map +1 -0
  22. package/dist/sim/main.d.ts +14 -0
  23. package/dist/sim/main.d.ts.map +1 -0
  24. package/dist/sim/main.js +206 -0
  25. package/dist/sim/main.js.map +1 -0
  26. package/dist/sim/src/server.d.ts +15 -0
  27. package/dist/sim/src/server.d.ts.map +1 -0
  28. package/dist/sim/src/server.js +85 -0
  29. package/dist/sim/src/server.js.map +1 -0
  30. package/dist/sim/src/simulator.d.ts +65 -0
  31. package/dist/sim/src/simulator.d.ts.map +1 -0
  32. package/dist/sim/src/simulator.js +235 -0
  33. package/dist/sim/src/simulator.js.map +1 -0
  34. package/dist/sim/src/worker.d.ts +22 -0
  35. package/dist/sim/src/worker.d.ts.map +1 -0
  36. package/dist/sim/src/worker.js +175 -0
  37. package/dist/sim/src/worker.js.map +1 -0
  38. package/dist/src/clock.d.ts +11 -0
  39. package/dist/src/clock.d.ts.map +1 -0
  40. package/dist/src/clock.js +17 -0
  41. package/dist/src/clock.js.map +1 -0
  42. package/dist/src/computation.d.ts +40 -0
  43. package/dist/src/computation.d.ts.map +1 -0
  44. package/dist/src/computation.js +225 -0
  45. package/dist/src/computation.js.map +1 -0
  46. package/dist/src/context.d.ts +120 -0
  47. package/dist/src/context.d.ts.map +1 -0
  48. package/dist/src/context.js +288 -0
  49. package/dist/src/context.js.map +1 -0
  50. package/dist/src/coroutine.d.ts +34 -0
  51. package/dist/src/coroutine.d.ts.map +1 -0
  52. package/dist/src/coroutine.js +246 -0
  53. package/dist/src/coroutine.js.map +1 -0
  54. package/dist/src/decorator.d.ts +14 -0
  55. package/dist/src/decorator.d.ts.map +1 -0
  56. package/dist/src/decorator.js +208 -0
  57. package/dist/src/decorator.js.map +1 -0
  58. package/dist/src/handler.d.ts +40 -0
  59. package/dist/src/handler.d.ts.map +1 -0
  60. package/dist/src/handler.js +198 -0
  61. package/dist/src/handler.js.map +1 -0
  62. package/dist/src/heartbeat.d.ts +22 -0
  63. package/dist/src/heartbeat.d.ts.map +1 -0
  64. package/dist/src/heartbeat.js +87 -0
  65. package/dist/src/heartbeat.js.map +1 -0
  66. package/dist/src/index.d.ts +8 -0
  67. package/dist/src/index.d.ts.map +1 -0
  68. package/dist/src/index.js +25 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/src/network/network.d.ts +216 -0
  71. package/dist/src/network/network.d.ts.map +1 -0
  72. package/dist/{core/logger.js → src/network/network.js} +2 -1
  73. package/dist/src/network/network.js.map +1 -0
  74. package/dist/src/network/remote.d.ts +67 -0
  75. package/dist/src/network/remote.d.ts.map +1 -0
  76. package/dist/src/network/remote.js +515 -0
  77. package/dist/src/network/remote.js.map +1 -0
  78. package/dist/src/nursery.d.ts +19 -0
  79. package/dist/src/nursery.d.ts.map +1 -0
  80. package/dist/src/nursery.js +102 -0
  81. package/dist/src/nursery.js.map +1 -0
  82. package/dist/src/processor/processor.d.ts +11 -0
  83. package/dist/src/processor/processor.d.ts.map +1 -0
  84. package/dist/src/processor/processor.js +24 -0
  85. package/dist/src/processor/processor.js.map +1 -0
  86. package/dist/src/promises.d.ts +23 -0
  87. package/dist/src/promises.d.ts.map +1 -0
  88. package/dist/src/promises.js +157 -0
  89. package/dist/src/promises.js.map +1 -0
  90. package/dist/src/registry.d.ts +15 -0
  91. package/dist/src/registry.d.ts.map +1 -0
  92. package/dist/src/registry.js +26 -0
  93. package/dist/src/registry.js.map +1 -0
  94. package/dist/src/resonate-inner.d.ts +45 -0
  95. package/dist/src/resonate-inner.d.ts.map +1 -0
  96. package/dist/src/resonate-inner.js +157 -0
  97. package/dist/src/resonate-inner.js.map +1 -0
  98. package/dist/src/resonate.d.ts +92 -0
  99. package/dist/src/resonate.d.ts.map +1 -0
  100. package/dist/src/resonate.js +240 -0
  101. package/dist/src/resonate.js.map +1 -0
  102. package/dist/src/schedules.d.ts +9 -0
  103. package/dist/src/schedules.d.ts.map +1 -0
  104. package/dist/src/schedules.js +65 -0
  105. package/dist/src/schedules.js.map +1 -0
  106. package/dist/src/tasks.d.ts +9 -0
  107. package/dist/src/tasks.d.ts.map +1 -0
  108. package/dist/src/tasks.js +61 -0
  109. package/dist/src/tasks.js.map +1 -0
  110. package/dist/src/types.d.ts +86 -0
  111. package/dist/src/types.d.ts.map +1 -0
  112. package/dist/src/types.js +14 -0
  113. package/dist/src/types.js.map +1 -0
  114. package/dist/src/util.d.ts +14 -0
  115. package/dist/src/util.d.ts.map +1 -0
  116. package/dist/src/util.js +69 -0
  117. package/dist/src/util.js.map +1 -0
  118. package/dist/tsconfig.build.tsbuildinfo +1 -0
  119. package/package.json +51 -52
  120. package/dist/core/encoder.d.ts +0 -5
  121. package/dist/core/encoder.d.ts.map +0 -1
  122. package/dist/core/encoder.js +0 -3
  123. package/dist/core/encoder.js.map +0 -1
  124. package/dist/core/encoders/base64.d.ts +0 -6
  125. package/dist/core/encoders/base64.d.ts.map +0 -1
  126. package/dist/core/encoders/base64.js +0 -13
  127. package/dist/core/encoders/base64.js.map +0 -1
  128. package/dist/core/encoders/json.d.ts +0 -6
  129. package/dist/core/encoders/json.d.ts.map +0 -1
  130. package/dist/core/encoders/json.js +0 -77
  131. package/dist/core/encoders/json.js.map +0 -1
  132. package/dist/core/errors.d.ts +0 -24
  133. package/dist/core/errors.d.ts.map +0 -1
  134. package/dist/core/errors.js +0 -42
  135. package/dist/core/errors.js.map +0 -1
  136. package/dist/core/logger.d.ts +0 -10
  137. package/dist/core/logger.d.ts.map +0 -1
  138. package/dist/core/logger.js.map +0 -1
  139. package/dist/core/loggers/logger.d.ts +0 -13
  140. package/dist/core/loggers/logger.d.ts.map +0 -1
  141. package/dist/core/loggers/logger.js +0 -48
  142. package/dist/core/loggers/logger.js.map +0 -1
  143. package/dist/core/options.d.ts +0 -160
  144. package/dist/core/options.d.ts.map +0 -1
  145. package/dist/core/options.js +0 -18
  146. package/dist/core/options.js.map +0 -1
  147. package/dist/core/promises/promises.d.ts +0 -210
  148. package/dist/core/promises/promises.d.ts.map +0 -1
  149. package/dist/core/promises/promises.js +0 -300
  150. package/dist/core/promises/promises.js.map +0 -1
  151. package/dist/core/promises/types.d.ts +0 -42
  152. package/dist/core/promises/types.d.ts.map +0 -1
  153. package/dist/core/promises/types.js +0 -70
  154. package/dist/core/promises/types.js.map +0 -1
  155. package/dist/core/retry.d.ts +0 -37
  156. package/dist/core/retry.d.ts.map +0 -1
  157. package/dist/core/retry.js +0 -141
  158. package/dist/core/retry.js.map +0 -1
  159. package/dist/core/schedules/schedules.d.ts +0 -22
  160. package/dist/core/schedules/schedules.d.ts.map +0 -1
  161. package/dist/core/schedules/schedules.js +0 -29
  162. package/dist/core/schedules/schedules.js.map +0 -1
  163. package/dist/core/schedules/types.d.ts +0 -19
  164. package/dist/core/schedules/types.d.ts.map +0 -1
  165. package/dist/core/schedules/types.js +0 -8
  166. package/dist/core/schedules/types.js.map +0 -1
  167. package/dist/core/storage.d.ts +0 -6
  168. package/dist/core/storage.d.ts.map +0 -1
  169. package/dist/core/storage.js +0 -3
  170. package/dist/core/storage.js.map +0 -1
  171. package/dist/core/storages/memory.d.ts +0 -8
  172. package/dist/core/storages/memory.d.ts.map +0 -1
  173. package/dist/core/storages/memory.js +0 -29
  174. package/dist/core/storages/memory.js.map +0 -1
  175. package/dist/core/storages/withTimeout.d.ts +0 -10
  176. package/dist/core/storages/withTimeout.d.ts.map +0 -1
  177. package/dist/core/storages/withTimeout.js +0 -44
  178. package/dist/core/storages/withTimeout.js.map +0 -1
  179. package/dist/core/store.d.ts +0 -142
  180. package/dist/core/store.d.ts.map +0 -1
  181. package/dist/core/store.js +0 -3
  182. package/dist/core/store.js.map +0 -1
  183. package/dist/core/stores/local.d.ts +0 -57
  184. package/dist/core/stores/local.d.ts.map +0 -1
  185. package/dist/core/stores/local.js +0 -405
  186. package/dist/core/stores/local.js.map +0 -1
  187. package/dist/core/stores/remote.d.ts +0 -51
  188. package/dist/core/stores/remote.d.ts.map +0 -1
  189. package/dist/core/stores/remote.js +0 -431
  190. package/dist/core/stores/remote.js.map +0 -1
  191. package/dist/core/utils.d.ts +0 -85
  192. package/dist/core/utils.d.ts.map +0 -1
  193. package/dist/core/utils.js +0 -121
  194. package/dist/core/utils.js.map +0 -1
  195. package/dist/index.d.ts +0 -19
  196. package/dist/index.d.ts.map +0 -1
  197. package/dist/index.js +0 -57
  198. package/dist/index.js.map +0 -1
  199. package/dist/resonate.d.ts +0 -337
  200. package/dist/resonate.d.ts.map +0 -1
  201. package/dist/resonate.js +0 -730
  202. package/dist/resonate.js.map +0 -1
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.InnerContext = exports.Future = exports.RFC = exports.RFI = exports.LFC = exports.LFI = void 0;
37
+ const types_1 = require("./types");
38
+ const util = __importStar(require("./util"));
39
+ class LFI {
40
+ func;
41
+ args;
42
+ createReq;
43
+ constructor(func, args, createReq) {
44
+ this.func = func;
45
+ this.args = args;
46
+ this.createReq = createReq;
47
+ }
48
+ *[Symbol.iterator]() {
49
+ const v = yield this;
50
+ util.assert(v instanceof Future, "expected future");
51
+ return v;
52
+ }
53
+ }
54
+ exports.LFI = LFI;
55
+ class LFC {
56
+ func;
57
+ args;
58
+ createReq;
59
+ constructor(func, args, createReq) {
60
+ this.func = func;
61
+ this.args = args;
62
+ this.createReq = createReq;
63
+ }
64
+ *[Symbol.iterator]() {
65
+ const v = yield this;
66
+ util.assert(!(v instanceof Future), "expected value");
67
+ return v;
68
+ }
69
+ }
70
+ exports.LFC = LFC;
71
+ class RFI {
72
+ createReq;
73
+ mode;
74
+ constructor(createReq, mode = "attached") {
75
+ this.createReq = createReq;
76
+ this.mode = mode;
77
+ }
78
+ *[Symbol.iterator]() {
79
+ const v = yield this;
80
+ util.assert(v instanceof Future, "expected future");
81
+ return v;
82
+ }
83
+ }
84
+ exports.RFI = RFI;
85
+ class RFC {
86
+ createReq;
87
+ mode = "attached";
88
+ constructor(createReq) {
89
+ this.createReq = createReq;
90
+ }
91
+ *[Symbol.iterator]() {
92
+ const v = yield this;
93
+ util.assert(!(v instanceof Future), "expected value");
94
+ return v;
95
+ }
96
+ }
97
+ exports.RFC = RFC;
98
+ class Future {
99
+ id;
100
+ value;
101
+ state;
102
+ mode;
103
+ constructor(id, state, value, mode = "attached") {
104
+ this.id = id;
105
+ this.value = value;
106
+ this.state = state;
107
+ this.mode = mode;
108
+ }
109
+ getValue() {
110
+ if (!this.value) {
111
+ throw new Error("Future is not ready");
112
+ }
113
+ if (this.value.success) {
114
+ return this.value.value;
115
+ }
116
+ throw this.value.error; // Should be unreachble
117
+ }
118
+ *[Symbol.iterator]() {
119
+ yield this;
120
+ util.assertDefined(this.value);
121
+ util.assert(this.value.success, "The value must be and ok result at this point.");
122
+ return this.getValue();
123
+ }
124
+ }
125
+ exports.Future = Future;
126
+ class InnerContext {
127
+ id;
128
+ timeout;
129
+ rId;
130
+ pId;
131
+ clock;
132
+ dependencies;
133
+ seq = 0;
134
+ run = this.lfc.bind(this);
135
+ rpc = this.rfc.bind(this);
136
+ beginRun = this.lfi.bind(this);
137
+ beginRpc = this.rfi.bind(this);
138
+ // TODO(avillega): set the parent timeout to be used to calculate the actual timeout for the createReq
139
+ constructor(id, rId, pId, timeout, clock, dependencies) {
140
+ this.id = id;
141
+ this.rId = rId;
142
+ this.pId = pId;
143
+ this.timeout = timeout;
144
+ this.clock = clock;
145
+ this.dependencies = dependencies;
146
+ }
147
+ static root(id, timeout, clock, dependencies) {
148
+ return new InnerContext(id, id, id, timeout, clock, dependencies);
149
+ }
150
+ child(id, timeout) {
151
+ return new InnerContext(id, this.rId, this.id, timeout, this.clock, this.dependencies);
152
+ }
153
+ lfi(func, ...args) {
154
+ const [argu, opts] = util.splitArgsAndOpts(args, this.options());
155
+ return new LFI(func, argu, this.localCreateReq(opts));
156
+ }
157
+ lfc(func, ...args) {
158
+ const [argu, opts] = util.splitArgsAndOpts(args, this.options());
159
+ return new LFC(func, argu, this.localCreateReq(opts));
160
+ }
161
+ rfi(func, ...args) {
162
+ if (typeof func === "function") {
163
+ throw new Error("not implemented");
164
+ }
165
+ const [argu, opts] = util.splitArgsAndOpts(args, this.options());
166
+ return new RFI(this.remoteCreateReq(func, argu, opts));
167
+ }
168
+ rfc(func, ...args) {
169
+ if (typeof func === "function") {
170
+ throw new Error("not implemented");
171
+ }
172
+ const [argu, opts] = util.splitArgsAndOpts(args, this.options());
173
+ return new RFC(this.remoteCreateReq(func, argu, opts));
174
+ }
175
+ promise({ id, timeout, data, tags, }) {
176
+ return new RFI(this.latentCreateOpts(id, timeout, data, tags));
177
+ }
178
+ sleep(ms) {
179
+ return new RFC(this.sleepCreateOpts(this.options({ timeout: ms })));
180
+ }
181
+ detached(func, ...args) {
182
+ if (typeof func === "function") {
183
+ throw new Error("not implemented");
184
+ }
185
+ const [argu, opts] = util.splitArgsAndOpts(args, this.options());
186
+ return new RFI(this.remoteCreateReq(func, argu, opts, Number.MAX_SAFE_INTEGER), "detached");
187
+ }
188
+ getDependency(key) {
189
+ return this.dependencies.get(key);
190
+ }
191
+ options(opts = {}) {
192
+ return {
193
+ id: this.seqid(),
194
+ target: "poll://any@default",
195
+ timeout: 24 * util.HOUR,
196
+ tags: {},
197
+ ...opts,
198
+ [types_1.RESONATE_OPTIONS]: true,
199
+ };
200
+ }
201
+ localCreateReq(opts) {
202
+ const tags = {
203
+ "resonate:scope": "local",
204
+ "resonate:root": this.rId,
205
+ "resonate:parent": this.pId,
206
+ ...opts.tags,
207
+ };
208
+ // timeout cannot be greater than parent timeout
209
+ const timeout = Math.min(this.clock.now() + opts.timeout, this.timeout);
210
+ return {
211
+ kind: "createPromise",
212
+ id: opts.id,
213
+ timeout: timeout,
214
+ param: {},
215
+ tags,
216
+ iKey: opts.id,
217
+ strict: false,
218
+ };
219
+ }
220
+ remoteCreateReq(func, args, opts, maxTimeout = this.timeout) {
221
+ const tags = {
222
+ "resonate:scope": "global",
223
+ "resonate:invoke": opts.target,
224
+ "resonate:root": this.rId,
225
+ "resonate:parent": this.pId,
226
+ ...opts.tags,
227
+ };
228
+ // timeout cannot be greater than parent timeout (unless detached)
229
+ const timeout = Math.min(this.clock.now() + opts.timeout, maxTimeout);
230
+ return {
231
+ kind: "createPromise",
232
+ id: opts.id,
233
+ timeout: timeout,
234
+ tags,
235
+ param: {
236
+ func,
237
+ args,
238
+ },
239
+ iKey: opts.id,
240
+ strict: false,
241
+ };
242
+ }
243
+ latentCreateOpts(id, timeout, data, tags) {
244
+ const cTags = {
245
+ "resonate:scope": "global",
246
+ "resonate:root": this.rId,
247
+ "resonate:parent": this.pId,
248
+ ...tags,
249
+ };
250
+ const cId = id ?? this.seqid();
251
+ // timeout cannot be greater than parent timeout
252
+ const cTimeout = Math.min(this.clock.now() + (timeout ?? 24 * util.HOUR), this.timeout);
253
+ return {
254
+ kind: "createPromise",
255
+ id: cId,
256
+ timeout: cTimeout,
257
+ param: data,
258
+ tags: cTags,
259
+ iKey: cId,
260
+ strict: false,
261
+ };
262
+ }
263
+ sleepCreateOpts(opts) {
264
+ const tags = {
265
+ "resonate:scope": "global",
266
+ "resonate:root": this.rId,
267
+ "resonate:parent": this.pId,
268
+ "resonate:timeout": "true",
269
+ ...opts.tags,
270
+ };
271
+ // timeout cannot be greater than parent timeout
272
+ const timeout = Math.min(this.clock.now() + opts.timeout, this.timeout);
273
+ return {
274
+ kind: "createPromise",
275
+ id: opts.id,
276
+ timeout: timeout,
277
+ param: {},
278
+ tags,
279
+ iKey: opts.id,
280
+ strict: false,
281
+ };
282
+ }
283
+ seqid() {
284
+ return `${this.id}.${this.seq++}`;
285
+ }
286
+ }
287
+ exports.InnerContext = InnerContext;
288
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Context, InnerContext, Yieldable } from "./context";
2
+ import { Decorator } from "./decorator";
3
+ import type { Handler } from "./handler";
4
+ import type { DurablePromiseRecord } from "./network/network";
5
+ import { type Callback } from "./types";
6
+ export type Suspended = {
7
+ type: "suspended";
8
+ todo: {
9
+ local: LocalTodo[];
10
+ remote: RemoteTodo[];
11
+ };
12
+ };
13
+ export type Completed = {
14
+ type: "completed";
15
+ promise: DurablePromiseRecord;
16
+ };
17
+ export interface LocalTodo {
18
+ id: string;
19
+ ctx: InnerContext;
20
+ func: (ctx: Context, ...args: any[]) => any;
21
+ args: any[];
22
+ }
23
+ export interface RemoteTodo {
24
+ id: string;
25
+ }
26
+ export declare class Coroutine<T> {
27
+ private ctx;
28
+ private decorator;
29
+ private handler;
30
+ constructor(ctx: InnerContext, decorator: Decorator<T>, handler: Handler);
31
+ static exec(id: string, ctx: InnerContext, func: (ctx: Context, ...args: any[]) => Generator<Yieldable, any, any>, args: any[], handler: Handler, callback: Callback<Suspended | Completed>): void;
32
+ private exec;
33
+ }
34
+ //# sourceMappingURL=coroutine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coroutine.d.ts","sourceRoot":"","sources":["../../src/coroutine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,QAAQ,EAAiD,MAAM,SAAS,CAAC;AAGvF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAC5C,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAYD,qBAAa,SAAS,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,OAAO,CAAU;gBAEb,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO;WAM1D,IAAI,CAChB,EAAE,EAAE,MAAM,EACV,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,QAAQ,EAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,GACxC,IAAI;IAqDP,OAAO,CAAC,IAAI;CA6Jb"}
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Coroutine = void 0;
37
+ const decorator_1 = require("./decorator");
38
+ const types_1 = require("./types");
39
+ const util = __importStar(require("./util"));
40
+ class Coroutine {
41
+ ctx;
42
+ decorator;
43
+ handler;
44
+ constructor(ctx, decorator, handler) {
45
+ this.ctx = ctx;
46
+ this.decorator = decorator;
47
+ this.handler = handler;
48
+ }
49
+ static exec(id, ctx, func, args, handler, callback) {
50
+ handler.createPromise({
51
+ // The createReq for this specific creation is not relevant,
52
+ // this promise is guaranteed to have been created already.
53
+ kind: "createPromise",
54
+ id,
55
+ timeout: 0,
56
+ iKey: id,
57
+ strict: false,
58
+ }, (err, res) => {
59
+ if (err)
60
+ return callback(err);
61
+ util.assertDefined(res);
62
+ if (res.state !== "pending") {
63
+ return callback(false, { type: "completed", promise: res });
64
+ }
65
+ const coroutine = new Coroutine(ctx, new decorator_1.Decorator(func(ctx, ...args)), handler);
66
+ coroutine.exec((err, status) => {
67
+ if (err)
68
+ return callback(err);
69
+ util.assertDefined(status);
70
+ switch (status.type) {
71
+ case "more":
72
+ callback(false, { type: "suspended", todo: status.todo });
73
+ break;
74
+ case "done":
75
+ handler.completePromise({
76
+ kind: "completePromise",
77
+ id: id,
78
+ state: status.result.success ? "resolved" : "rejected",
79
+ value: status.result.success ? status.result.value : status.result.error,
80
+ iKey: id,
81
+ strict: false,
82
+ }, (err, promise) => {
83
+ if (err)
84
+ return callback(err);
85
+ util.assertDefined(promise);
86
+ callback(false, { type: "completed", promise });
87
+ });
88
+ break;
89
+ }
90
+ });
91
+ });
92
+ }
93
+ exec(callback) {
94
+ const local = [];
95
+ const remote = [];
96
+ let input = {
97
+ type: "internal.nothing",
98
+ };
99
+ // next needs to be called when we want to go to the top of the loop but are inside a callback
100
+ const next = () => {
101
+ while (true) {
102
+ const action = this.decorator.next(input);
103
+ // Handle internal.async.l (lfi/lfc)
104
+ if (action.type === "internal.async.l") {
105
+ this.handler.createPromise(action.createReq, (err, res) => {
106
+ if (err)
107
+ return callback(err);
108
+ util.assertDefined(res);
109
+ const ctx = this.ctx.child(res.id, res.timeout);
110
+ if (res.state === "pending") {
111
+ if (!util.isGeneratorFunction(action.func)) {
112
+ local.push({
113
+ id: action.id,
114
+ ctx: ctx,
115
+ func: action.func,
116
+ args: action.args,
117
+ });
118
+ input = {
119
+ type: "internal.promise",
120
+ state: "pending",
121
+ mode: "attached",
122
+ id: action.id,
123
+ };
124
+ next(); // Go back to the top of the loop
125
+ return;
126
+ }
127
+ const coroutine = new Coroutine(ctx, new decorator_1.Decorator(action.func(ctx, ...action.args)), this.handler);
128
+ coroutine.exec((err, status) => {
129
+ if (err)
130
+ return callback(err);
131
+ util.assertDefined(status);
132
+ if (status.type === "more") {
133
+ local.push(...status.todo.local);
134
+ remote.push(...status.todo.remote);
135
+ input = {
136
+ type: "internal.promise",
137
+ state: "pending",
138
+ mode: "attached",
139
+ id: action.id,
140
+ };
141
+ next();
142
+ }
143
+ else {
144
+ this.handler.completePromise({
145
+ kind: "completePromise",
146
+ id: action.id,
147
+ state: status.result.success ? "resolved" : "rejected",
148
+ value: status.result.success ? status.result.value : status.result.error,
149
+ iKey: action.id,
150
+ strict: false,
151
+ }, (err, res) => {
152
+ if (err)
153
+ return callback(err);
154
+ util.assertDefined(res);
155
+ input = {
156
+ type: "internal.promise",
157
+ state: "completed",
158
+ id: action.id,
159
+ value: extractResult(res),
160
+ };
161
+ next();
162
+ });
163
+ }
164
+ });
165
+ }
166
+ else {
167
+ // durable promise is completed
168
+ input = {
169
+ type: "internal.promise",
170
+ state: "completed",
171
+ id: action.id,
172
+ value: extractResult(res),
173
+ };
174
+ next();
175
+ }
176
+ });
177
+ return; // Exit the while loop to wait for async callback
178
+ }
179
+ // Handle internal.async.r
180
+ if (action.type === "internal.async.r") {
181
+ this.handler.createPromise(action.createReq, (err, res) => {
182
+ if (err)
183
+ return callback(err);
184
+ util.assertDefined(res);
185
+ if (res.state === "pending") {
186
+ if (action.mode === "attached")
187
+ remote.push({ id: action.id });
188
+ input = {
189
+ type: "internal.promise",
190
+ state: "pending",
191
+ mode: action.mode,
192
+ id: action.id,
193
+ };
194
+ }
195
+ else {
196
+ input = {
197
+ type: "internal.promise",
198
+ state: "completed",
199
+ id: action.id,
200
+ value: extractResult(res),
201
+ };
202
+ }
203
+ next();
204
+ });
205
+ return; // Exit the while loop to wait for async callback
206
+ }
207
+ // Handle await
208
+ if (action.type === "internal.await" && action.promise.state === "completed") {
209
+ util.assert(action.promise.value.type === "internal.literal", "promise value must be an 'internal.literal' type");
210
+ util.assertDefined(action.promise.value);
211
+ input = action.promise.value;
212
+ continue;
213
+ }
214
+ // invoke the callback when awaiting a pending "Future" the list of todos will include
215
+ // the global callbacks to create.
216
+ if (action.type === "internal.await" && action.promise.state === "pending") {
217
+ if (action.promise.mode === "detached") {
218
+ // We didn't add the associated todo of this promise, since the user is explicitly awaiting it we need to add the todo now.
219
+ // All detached are remotes.
220
+ remote.push({ id: action.id });
221
+ }
222
+ callback(false, { type: "more", todo: { local, remote } });
223
+ return;
224
+ }
225
+ // Handle return
226
+ if (action.type === "internal.return") {
227
+ util.assert(action.value.type === "internal.literal", "promise value must be an 'internal.literal' type");
228
+ util.assertDefined(action.value);
229
+ callback(false, { type: "done", result: action.value.value });
230
+ return;
231
+ }
232
+ }
233
+ };
234
+ next();
235
+ }
236
+ }
237
+ exports.Coroutine = Coroutine;
238
+ function extractResult(durablePromise) {
239
+ util.assert(durablePromise.state !== "pending", "Can not get result from a pending promise");
240
+ const value = durablePromise.state === "resolved" ? (0, types_1.ok)(durablePromise.value) : (0, types_1.ko)(durablePromise.value);
241
+ return {
242
+ type: "internal.literal",
243
+ value,
244
+ };
245
+ }
246
+ //# sourceMappingURL=coroutine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coroutine.js","sourceRoot":"","sources":["../../src/coroutine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type Yieldable } from "./context";
2
+ import { type InternalExpr, type Value } from "./types";
3
+ export declare class Decorator<TRet> {
4
+ private invokes;
5
+ private generator;
6
+ private nextState;
7
+ constructor(generator: Generator<Yieldable, TRet, any>);
8
+ next(value: Value<any>): InternalExpr<any>;
9
+ private toExternal;
10
+ private toInternal;
11
+ private toLiteral;
12
+ private safeGeneratorNext;
13
+ }
14
+ //# sourceMappingURL=decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAIL,KAAK,YAAY,EAGjB,KAAK,KAAK,EAGX,MAAM,SAAS,CAAC;AAGjB,qBAAa,SAAS,CAAC,IAAI;IACzB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAA6F;gBAElG,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC;IAK/C,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;IAkDjD,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,UAAU;IAuElB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,iBAAiB;CAuB1B"}