@resonatehq/sdk 0.5.2 → 0.5.5
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.
- package/dist/async.d.ts +23 -5
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +94 -22
- package/dist/async.js.map +1 -1
- package/dist/core/calls.d.ts +23 -0
- package/dist/core/calls.d.ts.map +1 -0
- package/dist/core/calls.js +13 -0
- package/dist/core/calls.js.map +1 -0
- package/dist/core/encoders/json.d.ts.map +1 -1
- package/dist/core/encoders/json.js +12 -0
- package/dist/core/encoders/json.js.map +1 -1
- package/dist/core/errors.d.ts +7 -6
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +7 -6
- package/dist/core/errors.js.map +1 -1
- package/dist/core/execution.d.ts +0 -10
- package/dist/core/execution.d.ts.map +1 -1
- package/dist/core/execution.js +10 -105
- package/dist/core/execution.js.map +1 -1
- package/dist/core/invocation.d.ts +4 -7
- package/dist/core/invocation.d.ts.map +1 -1
- package/dist/core/invocation.js +6 -28
- package/dist/core/invocation.js.map +1 -1
- package/dist/core/options.d.ts +58 -10
- package/dist/core/options.d.ts.map +1 -1
- package/dist/core/options.js.map +1 -1
- package/dist/core/promises/promises.d.ts +2 -2
- package/dist/core/promises/promises.d.ts.map +1 -1
- package/dist/core/promises/promises.js +8 -4
- package/dist/core/promises/promises.js.map +1 -1
- package/dist/core/promises/types.d.ts +10 -83
- package/dist/core/promises/types.d.ts.map +1 -1
- package/dist/core/promises/types.js +10 -10
- package/dist/core/promises/types.js.map +1 -1
- package/dist/core/retry.d.ts +35 -26
- package/dist/core/retry.d.ts.map +1 -1
- package/dist/core/retry.js +111 -14
- package/dist/core/retry.js.map +1 -1
- package/dist/core/storages/memory.d.ts.map +1 -1
- package/dist/core/storages/memory.js +2 -0
- package/dist/core/storages/memory.js.map +1 -1
- package/dist/core/storages/withTimeout.d.ts +6 -6
- package/dist/core/storages/withTimeout.d.ts.map +1 -1
- package/dist/core/storages/withTimeout.js +2 -13
- package/dist/core/storages/withTimeout.js.map +1 -1
- package/dist/core/store.d.ts +7 -7
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/stores/local.d.ts +16 -13
- package/dist/core/stores/local.d.ts.map +1 -1
- package/dist/core/stores/local.js +15 -11
- package/dist/core/stores/local.js.map +1 -1
- package/dist/core/stores/remote.d.ts +27 -24
- package/dist/core/stores/remote.d.ts.map +1 -1
- package/dist/core/stores/remote.js +162 -158
- package/dist/core/stores/remote.js.map +1 -1
- package/dist/core/utils.d.ts +27 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +37 -1
- package/dist/core/utils.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -7
- package/dist/index.js.map +1 -1
- package/dist/resonate.d.ts +12 -16
- package/dist/resonate.d.ts.map +1 -1
- package/dist/resonate.js +85 -47
- package/dist/resonate.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/retries/retry.d.ts +0 -20
- package/dist/core/retries/retry.d.ts.map +0 -1
- package/dist/core/retries/retry.js +0 -41
- package/dist/core/retries/retry.js.map +0 -1
- package/dist/generator.d.ts +0 -208
- package/dist/generator.d.ts.map +0 -1
- package/dist/generator.js +0 -427
- package/dist/generator.js.map +0 -1
package/dist/generator.d.ts
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { Future, ResonatePromise } from "./core/future";
|
|
2
|
-
import { Invocation } from "./core/invocation";
|
|
3
|
-
import { ResonateOptions, Options, PartialOptions } from "./core/options";
|
|
4
|
-
import { DurablePromise } from "./core/promises/promises";
|
|
5
|
-
import * as schedules from "./core/schedules/schedules";
|
|
6
|
-
import { ResonateBase } from "./resonate";
|
|
7
|
-
export type GFunc = (ctx: Context, ...args: any[]) => Generator<Yieldable>;
|
|
8
|
-
export type IFunc = (info: Info, ...args: any[]) => any;
|
|
9
|
-
export type Params<F> = F extends (ctx: any, ...args: infer P) => any ? P : never;
|
|
10
|
-
export type Return<F> = F extends (...args: any[]) => Generator<any, infer T> ? T : never;
|
|
11
|
-
export type Yieldable = Call | Future<any>;
|
|
12
|
-
export type Call = {
|
|
13
|
-
kind: "call";
|
|
14
|
-
value: ResonateFunction | OrdinaryFunction | DeferredFunction;
|
|
15
|
-
yieldFuture: boolean;
|
|
16
|
-
};
|
|
17
|
-
type ResonateFunction = {
|
|
18
|
-
kind: "resonate";
|
|
19
|
-
func: GFunc;
|
|
20
|
-
args: any[];
|
|
21
|
-
opts: Options;
|
|
22
|
-
};
|
|
23
|
-
type OrdinaryFunction = {
|
|
24
|
-
kind: "ordinary";
|
|
25
|
-
func: IFunc;
|
|
26
|
-
args: any[];
|
|
27
|
-
opts: Options;
|
|
28
|
-
};
|
|
29
|
-
type DeferredFunction = {
|
|
30
|
-
kind: "deferred";
|
|
31
|
-
func: string;
|
|
32
|
-
args: any;
|
|
33
|
-
opts: Options;
|
|
34
|
-
};
|
|
35
|
-
export declare class Resonate extends ResonateBase {
|
|
36
|
-
private scheduler;
|
|
37
|
-
/**
|
|
38
|
-
* Creates a Resonate instance. This is the starting point for using Resonate.
|
|
39
|
-
*
|
|
40
|
-
* @constructor
|
|
41
|
-
* @param opts - A partial {@link ResonateOptions} object.
|
|
42
|
-
*/
|
|
43
|
-
constructor(opts?: Partial<ResonateOptions>);
|
|
44
|
-
protected execute<F extends GFunc>(name: string, id: string, func: F, args: Params<F>, opts: Options, defaults: Options, durablePromise?: DurablePromise<any>): ResonatePromise<Return<F>>;
|
|
45
|
-
/**
|
|
46
|
-
* Register a function with Resonate. Registered functions can be invoked by calling {@link run}, or by the returned function.
|
|
47
|
-
*
|
|
48
|
-
* @template F The type of the generator function.
|
|
49
|
-
* @param name A unique name to identify the function.
|
|
50
|
-
* @param func The generator function to register with Resonate.
|
|
51
|
-
* @param opts Resonate options, can be constructed by calling {@link options}.
|
|
52
|
-
* @returns Resonate function
|
|
53
|
-
*/
|
|
54
|
-
register<F extends GFunc>(name: string, func: F, opts?: Partial<Options>): (id: string, ...args: Params<F>) => ResonatePromise<Return<F>>;
|
|
55
|
-
/**
|
|
56
|
-
* Register a module with Resonate. Registered functions can be invoked by calling {@link run}.
|
|
57
|
-
*
|
|
58
|
-
* @template F The type of the generator function.
|
|
59
|
-
* @param module The module to register with Resonate.
|
|
60
|
-
* @param opts Resonate options, can be constructed by calling {@link options}.
|
|
61
|
-
* @returns Resonate function
|
|
62
|
-
*/
|
|
63
|
-
registerModule<F extends GFunc>(module: Record<string, F>, opts?: Partial<Options>): void;
|
|
64
|
-
/**
|
|
65
|
-
* Schedule a resonate function.
|
|
66
|
-
*
|
|
67
|
-
* @param name The schedule name.
|
|
68
|
-
* @param cron The schedule cron expression.
|
|
69
|
-
* @param func The function to schedule.
|
|
70
|
-
* @param args The function arguments.
|
|
71
|
-
* @returns The schedule object.
|
|
72
|
-
*/
|
|
73
|
-
schedule<F extends GFunc>(name: string, cron: string, func: F, ...args: [...Params<F>, PartialOptions?]): Promise<schedules.Schedule>;
|
|
74
|
-
/**
|
|
75
|
-
* Schedule a resonate function that is already registered.
|
|
76
|
-
*
|
|
77
|
-
* @param name The schedule name.
|
|
78
|
-
* @param cron The schedule cron expression.
|
|
79
|
-
* @param func The registered function name.
|
|
80
|
-
* @param args The function arguments.
|
|
81
|
-
* @returns The schedule object.
|
|
82
|
-
*/
|
|
83
|
-
schedule(name: string, cron: string, func: string, ...args: [...any, PartialOptions?]): Promise<schedules.Schedule>;
|
|
84
|
-
}
|
|
85
|
-
export declare class Info {
|
|
86
|
-
private invocation;
|
|
87
|
-
constructor(invocation: Invocation<any>);
|
|
88
|
-
/**
|
|
89
|
-
* The running count of function execution attempts.
|
|
90
|
-
*/
|
|
91
|
-
get attempt(): number;
|
|
92
|
-
/**
|
|
93
|
-
* Uniquely identifies the function invocation.
|
|
94
|
-
*/
|
|
95
|
-
get id(): string;
|
|
96
|
-
/**
|
|
97
|
-
* Deduplicates function invocations with the same id.
|
|
98
|
-
*/
|
|
99
|
-
get idempotencyKey(): string;
|
|
100
|
-
/**
|
|
101
|
-
* All configured options for this info.
|
|
102
|
-
*/
|
|
103
|
-
get opts(): Options;
|
|
104
|
-
/**
|
|
105
|
-
* The timestamp in ms, once this time elapses the function invocation will timeout.
|
|
106
|
-
*/
|
|
107
|
-
get timeout(): number;
|
|
108
|
-
/**
|
|
109
|
-
* The resonate function version.
|
|
110
|
-
*/
|
|
111
|
-
get version(): number;
|
|
112
|
-
}
|
|
113
|
-
export declare class Context {
|
|
114
|
-
private invocation;
|
|
115
|
-
constructor(invocation: Invocation<any>);
|
|
116
|
-
/**
|
|
117
|
-
* The running count of child function invocations.
|
|
118
|
-
*/
|
|
119
|
-
get counter(): number;
|
|
120
|
-
/**
|
|
121
|
-
* The time the invocation was created. Will use the durable promise creation time if available.
|
|
122
|
-
*/
|
|
123
|
-
get createdOn(): number;
|
|
124
|
-
/**
|
|
125
|
-
* Uniquely identifies the function invocation.
|
|
126
|
-
*/
|
|
127
|
-
get id(): string;
|
|
128
|
-
/**
|
|
129
|
-
* Deduplicates function invocations with the same id.
|
|
130
|
-
*/
|
|
131
|
-
get idempotencyKey(): string;
|
|
132
|
-
/**
|
|
133
|
-
* All configured options for this context.
|
|
134
|
-
*/
|
|
135
|
-
get opts(): Options;
|
|
136
|
-
/**
|
|
137
|
-
* The timestamp in ms, once this time elapses the function invocation will timeout.
|
|
138
|
-
*/
|
|
139
|
-
get timeout(): number;
|
|
140
|
-
/**
|
|
141
|
-
* The resonate function version.
|
|
142
|
-
*/
|
|
143
|
-
get version(): number;
|
|
144
|
-
/**
|
|
145
|
-
* Invoke a generator function.
|
|
146
|
-
*
|
|
147
|
-
* @template F The type of the generator function.
|
|
148
|
-
* @param func The function to invoke.
|
|
149
|
-
* @param args The function arguments, optionally followed by {@link options}.
|
|
150
|
-
* @returns A {@link Call} that can be yielded for a value.
|
|
151
|
-
*/
|
|
152
|
-
run<F extends GFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
|
|
153
|
-
/**
|
|
154
|
-
* Invoke a function.
|
|
155
|
-
*
|
|
156
|
-
* @template F The type of the function.
|
|
157
|
-
* @param func The function to invoke.
|
|
158
|
-
* @param args The function arguments, optionally followed by {@link options}.
|
|
159
|
-
* @returns A {@link Call} that can be yielded for a value.
|
|
160
|
-
*/
|
|
161
|
-
run<F extends IFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
|
|
162
|
-
/**
|
|
163
|
-
* Invoke a remote function.
|
|
164
|
-
*
|
|
165
|
-
* @param func The id of the remote function.
|
|
166
|
-
* @param args The arguments to pass to the remote function.
|
|
167
|
-
* @param opts Optional {@link options}.
|
|
168
|
-
* @returns A {@link Call} that can be yielded for a value.
|
|
169
|
-
*/
|
|
170
|
-
run(func: string, args?: any, opts?: PartialOptions): Call;
|
|
171
|
-
/**
|
|
172
|
-
* Invoke a generator function.
|
|
173
|
-
*
|
|
174
|
-
* @template F The type of the generator function.
|
|
175
|
-
* @param func The function to invoke.
|
|
176
|
-
* @param args The function arguments, optionally followed by {@link options}.
|
|
177
|
-
* @returns A {@link Call} that can be yielded for a {@link Future}.
|
|
178
|
-
*/
|
|
179
|
-
call<F extends GFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
|
|
180
|
-
/**
|
|
181
|
-
* Invoke a function.
|
|
182
|
-
*
|
|
183
|
-
* @template F The type of the function.
|
|
184
|
-
* @param func The function to invoke.
|
|
185
|
-
* @param args The function arguments, optionally followed by {@link options}.
|
|
186
|
-
* @returns A {@link Call} that can be yielded for a {@link Future}.
|
|
187
|
-
*/
|
|
188
|
-
call<F extends IFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
|
|
189
|
-
/**
|
|
190
|
-
* Invoke a remote function.
|
|
191
|
-
*
|
|
192
|
-
* @param func The id of the remote function.
|
|
193
|
-
* @param args The arguments to pass to the remote function.
|
|
194
|
-
* @param opts Optional {@link options}.
|
|
195
|
-
* @returns A {@link Call} that can be yielded for a {@link Future}.
|
|
196
|
-
*/
|
|
197
|
-
call(func: string, args?: any, opts?: PartialOptions): Call;
|
|
198
|
-
private _call;
|
|
199
|
-
/**
|
|
200
|
-
* Construct options.
|
|
201
|
-
*
|
|
202
|
-
* @param opts A partial {@link Options} object.
|
|
203
|
-
* @returns Options with the __resonate flag set.
|
|
204
|
-
*/
|
|
205
|
-
options(opts?: Partial<Options>): PartialOptions;
|
|
206
|
-
}
|
|
207
|
-
export {};
|
|
208
|
-
//# sourceMappingURL=generator.d.ts.map
|
package/dist/generator.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../lib/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/generator.js
DELETED
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Context = exports.Info = exports.Resonate = void 0;
|
|
4
|
-
const execution_1 = require("./core/execution");
|
|
5
|
-
const future_1 = require("./core/future");
|
|
6
|
-
const invocation_1 = require("./core/invocation");
|
|
7
|
-
const resonate_1 = require("./resonate");
|
|
8
|
-
/////////////////////////////////////////////////////////////////////
|
|
9
|
-
// Resonate
|
|
10
|
-
/////////////////////////////////////////////////////////////////////
|
|
11
|
-
class Resonate extends resonate_1.ResonateBase {
|
|
12
|
-
scheduler;
|
|
13
|
-
/**
|
|
14
|
-
* Creates a Resonate instance. This is the starting point for using Resonate.
|
|
15
|
-
*
|
|
16
|
-
* @constructor
|
|
17
|
-
* @param opts - A partial {@link ResonateOptions} object.
|
|
18
|
-
*/
|
|
19
|
-
constructor(opts = {}) {
|
|
20
|
-
super(opts);
|
|
21
|
-
this.scheduler = new Scheduler(this);
|
|
22
|
-
}
|
|
23
|
-
execute(name, id, func, args, opts, defaults, durablePromise) {
|
|
24
|
-
return this.scheduler.add(name, id, func, args, opts, defaults, durablePromise);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Register a function with Resonate. Registered functions can be invoked by calling {@link run}, or by the returned function.
|
|
28
|
-
*
|
|
29
|
-
* @template F The type of the generator function.
|
|
30
|
-
* @param name A unique name to identify the function.
|
|
31
|
-
* @param func The generator function to register with Resonate.
|
|
32
|
-
* @param opts Resonate options, can be constructed by calling {@link options}.
|
|
33
|
-
* @returns Resonate function
|
|
34
|
-
*/
|
|
35
|
-
register(name, func, opts) {
|
|
36
|
-
return super.register(name, func, opts);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Register a module with Resonate. Registered functions can be invoked by calling {@link run}.
|
|
40
|
-
*
|
|
41
|
-
* @template F The type of the generator function.
|
|
42
|
-
* @param module The module to register with Resonate.
|
|
43
|
-
* @param opts Resonate options, can be constructed by calling {@link options}.
|
|
44
|
-
* @returns Resonate function
|
|
45
|
-
*/
|
|
46
|
-
registerModule(module, opts = {}) {
|
|
47
|
-
super.registerModule(module, opts);
|
|
48
|
-
}
|
|
49
|
-
schedule(name, cron, func, ...args) {
|
|
50
|
-
return super.schedule(name, cron, func, ...args);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.Resonate = Resonate;
|
|
54
|
-
/////////////////////////////////////////////////////////////////////
|
|
55
|
-
// Context
|
|
56
|
-
/////////////////////////////////////////////////////////////////////
|
|
57
|
-
class Info {
|
|
58
|
-
invocation;
|
|
59
|
-
constructor(invocation) {
|
|
60
|
-
this.invocation = invocation;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* The running count of function execution attempts.
|
|
64
|
-
*/
|
|
65
|
-
get attempt() {
|
|
66
|
-
return this.invocation.attempt;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Uniquely identifies the function invocation.
|
|
70
|
-
*/
|
|
71
|
-
get id() {
|
|
72
|
-
return this.invocation.id;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Deduplicates function invocations with the same id.
|
|
76
|
-
*/
|
|
77
|
-
get idempotencyKey() {
|
|
78
|
-
return this.invocation.idempotencyKey;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* All configured options for this info.
|
|
82
|
-
*/
|
|
83
|
-
get opts() {
|
|
84
|
-
return this.invocation.opts;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* The timestamp in ms, once this time elapses the function invocation will timeout.
|
|
88
|
-
*/
|
|
89
|
-
get timeout() {
|
|
90
|
-
return this.invocation.timeout;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* The resonate function version.
|
|
94
|
-
*/
|
|
95
|
-
get version() {
|
|
96
|
-
return this.invocation.root.opts.version;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
exports.Info = Info;
|
|
100
|
-
class Context {
|
|
101
|
-
invocation;
|
|
102
|
-
constructor(invocation) {
|
|
103
|
-
this.invocation = invocation;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* The running count of child function invocations.
|
|
107
|
-
*/
|
|
108
|
-
get counter() {
|
|
109
|
-
return this.invocation.counter;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* The time the invocation was created. Will use the durable promise creation time if available.
|
|
113
|
-
*/
|
|
114
|
-
get createdOn() {
|
|
115
|
-
return this.invocation.createdOn;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Uniquely identifies the function invocation.
|
|
119
|
-
*/
|
|
120
|
-
get id() {
|
|
121
|
-
return this.invocation.id;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Deduplicates function invocations with the same id.
|
|
125
|
-
*/
|
|
126
|
-
get idempotencyKey() {
|
|
127
|
-
return this.invocation.idempotencyKey;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* All configured options for this context.
|
|
131
|
-
*/
|
|
132
|
-
get opts() {
|
|
133
|
-
return this.invocation.opts;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* The timestamp in ms, once this time elapses the function invocation will timeout.
|
|
137
|
-
*/
|
|
138
|
-
get timeout() {
|
|
139
|
-
return this.invocation.timeout;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* The resonate function version.
|
|
143
|
-
*/
|
|
144
|
-
get version() {
|
|
145
|
-
return this.invocation.root.opts.version;
|
|
146
|
-
}
|
|
147
|
-
run(func, ...args) {
|
|
148
|
-
return this._call(func, args, false);
|
|
149
|
-
}
|
|
150
|
-
call(func, ...args) {
|
|
151
|
-
return this._call(func, args, true);
|
|
152
|
-
}
|
|
153
|
-
_call(func, argsWithOpts, yieldFuture) {
|
|
154
|
-
const { args, opts } = this.invocation.split(argsWithOpts);
|
|
155
|
-
if (typeof func === "string") {
|
|
156
|
-
return { kind: "call", value: { kind: "deferred", func, args, opts }, yieldFuture };
|
|
157
|
-
}
|
|
158
|
-
else if (func.constructor.name === "GeneratorFunction") {
|
|
159
|
-
return { kind: "call", value: { kind: "resonate", func, args, opts }, yieldFuture };
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
return { kind: "call", value: { kind: "ordinary", func, args, opts }, yieldFuture };
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Construct options.
|
|
167
|
-
*
|
|
168
|
-
* @param opts A partial {@link Options} object.
|
|
169
|
-
* @returns Options with the __resonate flag set.
|
|
170
|
-
*/
|
|
171
|
-
options(opts = {}) {
|
|
172
|
-
return { ...opts, __resonate: true };
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
exports.Context = Context;
|
|
176
|
-
/////////////////////////////////////////////////////////////////////
|
|
177
|
-
// Scheduler
|
|
178
|
-
/////////////////////////////////////////////////////////////////////
|
|
179
|
-
class Scheduler {
|
|
180
|
-
resonate;
|
|
181
|
-
// tick is mutually exclusive
|
|
182
|
-
running = false;
|
|
183
|
-
// all top level executions
|
|
184
|
-
cache = {};
|
|
185
|
-
// executions ready to be run
|
|
186
|
-
runnable = [];
|
|
187
|
-
// executions that are awaiting another execution
|
|
188
|
-
awaiting = [];
|
|
189
|
-
// all executions
|
|
190
|
-
executions = [];
|
|
191
|
-
// executions that have been killed
|
|
192
|
-
killed = [];
|
|
193
|
-
constructor(resonate) {
|
|
194
|
-
this.resonate = resonate;
|
|
195
|
-
}
|
|
196
|
-
add(name, id, func, args, opts, defaults, durablePromise) {
|
|
197
|
-
// if the execution is already running, and not killed,
|
|
198
|
-
// return the promise
|
|
199
|
-
if (opts.durable && this.cache[id] && !this.cache[id].killed) {
|
|
200
|
-
return this.cache[id].execute();
|
|
201
|
-
}
|
|
202
|
-
// params, used for recovery
|
|
203
|
-
const param = {
|
|
204
|
-
func: name,
|
|
205
|
-
version: opts.version,
|
|
206
|
-
args,
|
|
207
|
-
};
|
|
208
|
-
// create a new invocation
|
|
209
|
-
const invocation = new invocation_1.Invocation(name, id, undefined, param, opts, defaults);
|
|
210
|
-
// create a new execution
|
|
211
|
-
const generator = func(new Context(invocation), ...args);
|
|
212
|
-
const execution = new execution_1.GeneratorExecution(this.resonate, invocation, generator, durablePromise);
|
|
213
|
-
// once the durable promise has been created,
|
|
214
|
-
// add the execution to runnable if the future is pending
|
|
215
|
-
execution.create().then(() => {
|
|
216
|
-
if (invocation.future.pending) {
|
|
217
|
-
this.runnable.push({ execution, next: { kind: "init" } });
|
|
218
|
-
this.tick();
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
// store the invocation and execution,
|
|
222
|
-
// will be used if run is called again with the same id
|
|
223
|
-
this.cache[id] = execution;
|
|
224
|
-
this.executions.push(execution);
|
|
225
|
-
return execution.execute();
|
|
226
|
-
}
|
|
227
|
-
async tick() {
|
|
228
|
-
// need to ensure that tick is mutually exclusive,
|
|
229
|
-
// if tick is already running all continuations will be picked up in the while loop
|
|
230
|
-
if (this.running)
|
|
231
|
-
return;
|
|
232
|
-
this.running = true;
|
|
233
|
-
while (this.runnable.length > 0) {
|
|
234
|
-
// grab the next continuation
|
|
235
|
-
const continuation = this.runnable.shift();
|
|
236
|
-
// step through the generator if in debug mode
|
|
237
|
-
if (this.resonate.logger.level === "debug" && (await this.keypress()) === "\u001b") {
|
|
238
|
-
// kill when escape key is pressed
|
|
239
|
-
continuation?.execution.kill("manual kill");
|
|
240
|
-
}
|
|
241
|
-
if (continuation && !continuation.execution.killed) {
|
|
242
|
-
try {
|
|
243
|
-
// apply the next value to the generator
|
|
244
|
-
const result = this.next(continuation);
|
|
245
|
-
// if done, we can resolve the execution
|
|
246
|
-
if (result.done) {
|
|
247
|
-
// need to handle the special case where a generator returns a future
|
|
248
|
-
if (result.value instanceof future_1.Future) {
|
|
249
|
-
result.value.promise.then((v) => continuation.execution.resolve(v), (e) => continuation.execution.reject(e));
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
// resolve the durable promise
|
|
253
|
-
await continuation.execution.resolve(result.value);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
// apply the yielded value to the generator
|
|
258
|
-
await this.apply(continuation, result.value);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
catch (error) {
|
|
262
|
-
// if anything goes wrong, reject the durable promise
|
|
263
|
-
await continuation.execution.reject(error);
|
|
264
|
-
}
|
|
265
|
-
// housekeeping
|
|
266
|
-
if (continuation.execution.killed) {
|
|
267
|
-
this.kill(continuation.execution);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
// print all invocations if in debug mode
|
|
271
|
-
this.print();
|
|
272
|
-
}
|
|
273
|
-
// TODO: suspend
|
|
274
|
-
// set running back to false
|
|
275
|
-
this.running = false;
|
|
276
|
-
}
|
|
277
|
-
next({ execution, next }) {
|
|
278
|
-
// apply the next value to the generator
|
|
279
|
-
switch (next.kind) {
|
|
280
|
-
case "init":
|
|
281
|
-
return execution.generator.next();
|
|
282
|
-
case "value":
|
|
283
|
-
return execution.generator.next(next.value);
|
|
284
|
-
case "error":
|
|
285
|
-
return execution.generator.throw(next.error);
|
|
286
|
-
default:
|
|
287
|
-
this.yeet(`permitted continuation values are (init, value, error), received ${next}`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
async apply(continuation, yielded) {
|
|
291
|
-
// apply the yielded value to the generator
|
|
292
|
-
switch (yielded.kind) {
|
|
293
|
-
case "call":
|
|
294
|
-
await this.applyCall(continuation, yielded);
|
|
295
|
-
break;
|
|
296
|
-
case "future":
|
|
297
|
-
this.applyFuture(continuation, yielded);
|
|
298
|
-
break;
|
|
299
|
-
default:
|
|
300
|
-
this.yeet(`permitted yielded values are (call, future), received ${yielded}`);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
async applyCall(continuation, { value, yieldFuture }) {
|
|
304
|
-
// the parent is the current invocation
|
|
305
|
-
const parent = continuation.execution.invocation;
|
|
306
|
-
// the id is either:
|
|
307
|
-
// 1. a provided string in the case of a deferred execution
|
|
308
|
-
// 2. a generated string in the case of an ordinary execution
|
|
309
|
-
const id = value.kind === "deferred" ? value.func : `${parent.id}.${parent.counter}`;
|
|
310
|
-
// human readable name of the function
|
|
311
|
-
const name = value.kind === "deferred" ? value.func : value.func.name;
|
|
312
|
-
// default opts never change
|
|
313
|
-
const defaults = parent.defaults;
|
|
314
|
-
// param is only required for deferred executions
|
|
315
|
-
const param = value.kind === "deferred" ? value.args[0] : undefined;
|
|
316
|
-
// create a new invocation
|
|
317
|
-
const invocation = new invocation_1.Invocation(name, id, undefined, param, value.opts, defaults, parent);
|
|
318
|
-
// add child and increment counter
|
|
319
|
-
parent.addChild(invocation);
|
|
320
|
-
parent.counter++;
|
|
321
|
-
let execution;
|
|
322
|
-
if (value.kind === "resonate") {
|
|
323
|
-
// create a generator execution
|
|
324
|
-
const ctx = new Context(invocation);
|
|
325
|
-
execution = new execution_1.GeneratorExecution(this.resonate, invocation, value.func(ctx, ...value.args));
|
|
326
|
-
await execution.create();
|
|
327
|
-
// if the future is pending, add to runnable
|
|
328
|
-
if (invocation.future.pending) {
|
|
329
|
-
this.runnable.push({ execution, next: { kind: "init" } });
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
else if (value.kind === "ordinary") {
|
|
333
|
-
// create an ordinary execution
|
|
334
|
-
const info = new Info(invocation);
|
|
335
|
-
execution = new execution_1.OrdinaryExecution(this.resonate, invocation, () => value.func(info, ...value.args));
|
|
336
|
-
execution.execute().catch(() => { });
|
|
337
|
-
}
|
|
338
|
-
else if (value.kind === "deferred") {
|
|
339
|
-
// create a deferred execution
|
|
340
|
-
execution = new execution_1.DeferredExecution(this.resonate, invocation);
|
|
341
|
-
execution.execute().catch(() => { });
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
this.yeet(`permitted call values are (resonate, ordinary, deferred), received ${value}`);
|
|
345
|
-
}
|
|
346
|
-
// add to all executions
|
|
347
|
-
this.executions.push(execution);
|
|
348
|
-
if (yieldFuture) {
|
|
349
|
-
// if the call is expected to yield a future, add the future to runnable
|
|
350
|
-
this.runnable.push({
|
|
351
|
-
execution: continuation.execution,
|
|
352
|
-
next: { kind: "value", value: invocation.future },
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
// otherwise, skip ahead to apply future
|
|
357
|
-
this.applyFuture(continuation, invocation.future);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
applyFuture({ execution }, future) {
|
|
361
|
-
if (execution.invocation.future.root !== future.root) {
|
|
362
|
-
this.yeet(`yielded future originates from ${future.root.id}, but this execution originates from ${execution.invocation.future.root.id}`);
|
|
363
|
-
}
|
|
364
|
-
// add to awaiting
|
|
365
|
-
this.awaiting.push(execution);
|
|
366
|
-
execution.invocation.await(future);
|
|
367
|
-
execution.invocation.block(future);
|
|
368
|
-
const apply = (next) => {
|
|
369
|
-
// unblock
|
|
370
|
-
execution.invocation.unblock();
|
|
371
|
-
// remove from awaiting
|
|
372
|
-
this.awaiting = this.awaiting.filter((e) => e !== execution);
|
|
373
|
-
// add to runnable
|
|
374
|
-
this.runnable.push({ execution, next });
|
|
375
|
-
// tick again
|
|
376
|
-
this.tick();
|
|
377
|
-
};
|
|
378
|
-
// add the next value to runnable when the future fulfills
|
|
379
|
-
future.promise.then((value) => apply({ kind: "value", value }), (error) => apply({ kind: "error", error }));
|
|
380
|
-
}
|
|
381
|
-
kill(execution) {
|
|
382
|
-
// add to killed
|
|
383
|
-
const killed = this.executions.filter((e) => e.invocation.root === execution.invocation.root);
|
|
384
|
-
this.killed = this.killed.concat(killed);
|
|
385
|
-
// remove from awaiting and runnable
|
|
386
|
-
this.runnable = this.runnable.filter((c) => c.execution.invocation.root !== execution.invocation.root);
|
|
387
|
-
this.awaiting = this.awaiting.filter((e) => e.invocation.root !== execution.invocation.root);
|
|
388
|
-
}
|
|
389
|
-
async keypress() {
|
|
390
|
-
this.resonate.logger.debug("Press any key to continue...");
|
|
391
|
-
return new Promise((resolve) => {
|
|
392
|
-
const onData = (data) => {
|
|
393
|
-
process.stdin.removeListener("data", onData);
|
|
394
|
-
process.stdin.setRawMode(false);
|
|
395
|
-
process.stdin.pause();
|
|
396
|
-
const c = data.toString();
|
|
397
|
-
if (c === "\u0003") {
|
|
398
|
-
this.resonate.logger.debug("^C");
|
|
399
|
-
process.exit(1);
|
|
400
|
-
}
|
|
401
|
-
resolve(c);
|
|
402
|
-
};
|
|
403
|
-
process.stdin.resume();
|
|
404
|
-
process.stdin.setRawMode(true);
|
|
405
|
-
process.stdin.once("data", onData);
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
print() {
|
|
409
|
-
this.resonate.logger.debug("Executions");
|
|
410
|
-
this.resonate.logger.table(this.executions.map((e) => ({
|
|
411
|
-
name: e.invocation.name,
|
|
412
|
-
id: e.invocation.id,
|
|
413
|
-
idempotencyKey: e.invocation.idempotencyKey,
|
|
414
|
-
parent: e.invocation.parent ? e.invocation.parent.id : undefined,
|
|
415
|
-
killed: e.killed,
|
|
416
|
-
pending: e.invocation.future.value.kind === "pending",
|
|
417
|
-
awaited: e.invocation.awaited.map((f) => f.id).join(","),
|
|
418
|
-
blocked: e.invocation.blocked?.id,
|
|
419
|
-
})));
|
|
420
|
-
}
|
|
421
|
-
yeet(msg) {
|
|
422
|
-
// an unrecoverable error has occurred, log and exit
|
|
423
|
-
this.resonate.logger.error(msg);
|
|
424
|
-
process.exit(1);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
//# sourceMappingURL=generator.js.map
|
package/dist/generator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../lib/generator.ts"],"names":[],"mappings":"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"}
|