@adonis-agora/durable 0.54.3 → 0.55.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.
- package/CHANGELOG.md +29 -0
- package/dist/commands/durable_worker.d.ts.map +1 -1
- package/dist/commands/durable_worker.js +3 -1
- package/dist/commands/durable_worker.js.map +1 -1
- package/dist/providers/durable_provider.d.ts.map +1 -1
- package/dist/providers/durable_provider.js +5 -2
- package/dist/providers/durable_provider.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +1 -1
- package/dist/src/dashboard/index.js +1 -1
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +22 -13
- package/dist/src/engine.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/step-discovery.d.ts +25 -4
- package/dist/src/step-discovery.d.ts.map +1 -1
- package/dist/src/step-discovery.js +103 -36
- package/dist/src/step-discovery.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +6 -0
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +48 -29
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/worker-runtime/index.d.ts +1 -1
- package/dist/src/worker-runtime/index.d.ts.map +1 -1
- package/dist/src/worker-runtime/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/durable-workflows/SKILL.md +11 -6
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export declare const VERSION = "0.
|
|
2
|
+
export declare const VERSION = "0.55.1";
|
|
3
3
|
export { configure } from '../configure.js';
|
|
4
4
|
export * from './admission.js';
|
|
5
5
|
export type { AdmissionContext, AdmissionFactory, RedisAdmissionConfig, } from './admissions/factory.js';
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export const VERSION = '0.
|
|
2
|
+
export const VERSION = '0.55.1';
|
|
3
3
|
// Re-export the configure hook from the package root so `node ace configure` finds it.
|
|
4
4
|
// AdonisJS imports the package MAIN and reads `configure` off the module namespace —
|
|
5
5
|
// the `./configure` subpath alone is never consulted.
|
|
@@ -18,11 +18,26 @@ export interface DiscoveredStep {
|
|
|
18
18
|
* is the convention the `app/steps` discovery builds on.
|
|
19
19
|
*/
|
|
20
20
|
export declare function registerStep(server: StepServer, step: DiscoveredStep): void;
|
|
21
|
+
/**
|
|
22
|
+
* A factory that instantiates a class carrying `@Step` methods, called **on every handler
|
|
23
|
+
* invocation**: each step execution runs on a fresh instance, like an `@adonisjs/queue` job. The
|
|
24
|
+
* AdonisJS provider passes `(Ctor) => app.container.make(Ctor)`, so constructor dependency injection
|
|
25
|
+
* (`@inject()`) works for step classes and a `container.swap(Service, ...)` made after boot is seen by
|
|
26
|
+
* the next execution. May return the instance or a Promise (the container's `make` is async). Never
|
|
27
|
+
* called for a `defineStep(...)` function — there is nothing to build. Without a factory, discovery
|
|
28
|
+
* keeps the old behaviour: one `new Ctor()` at registration, reused for every call.
|
|
29
|
+
*/
|
|
30
|
+
export type StepClassFactory = (ctor: new () => object) => object | Promise<object>;
|
|
21
31
|
/**
|
|
22
32
|
* Collect every `@Step`/`defineStep` handler reachable from an exported value:
|
|
23
33
|
* - a `defineStep(...)` function (stamped directly) → one handler, bound as-is.
|
|
24
|
-
* - a class with `@Step`-decorated methods → instantiate once and bind each stamped
|
|
34
|
+
* - a class with `@Step`-decorated methods → instantiate once with `new Ctor()` and bind each stamped
|
|
35
|
+
* method.
|
|
25
36
|
* Anything else is ignored. So a module can `export` either style (or both) and be discovered.
|
|
37
|
+
*
|
|
38
|
+
* Synchronous, so it can only build a class with `new Ctor()` (no constructor dependencies). The
|
|
39
|
+
* directory/barrel discovery ({@link registerStepsFromDir}, {@link registerStepsFromBarrel}) takes a
|
|
40
|
+
* {@link StepClassFactory} instead, which is how the AdonisJS provider injects dependencies.
|
|
26
41
|
*/
|
|
27
42
|
export declare function collectSteps(exported: unknown): DiscoveredStep[];
|
|
28
43
|
/** Discover + register every `@Step`/`defineStep` reachable from `exports` (e.g. a module's exports)
|
|
@@ -39,8 +54,13 @@ export declare function registerSteps(server: StepServer, exports: Iterable<unkn
|
|
|
39
54
|
* `server` is anything with `handle(name, fn)`: a transport, the store-less `WorkerRuntime`, or the
|
|
40
55
|
* `WorkflowEngine` itself (it forwards to its primary transport) — the latter is how app code
|
|
41
56
|
* serves an extra directory from a preload: `await registerStepsFromDir(engine, dir)`.
|
|
57
|
+
*
|
|
58
|
+
* `factory` builds each class that carries `@Step` methods, once per handler call (see
|
|
59
|
+
* {@link StepClassFactory}); omitted, each class is built once with `new Ctor()` at registration.
|
|
60
|
+
* Pass `(Ctor) => app.container.make(Ctor)` for constructor injection — the provider does.
|
|
61
|
+
* `defineStep(...)` functions are served as-is either way.
|
|
42
62
|
*/
|
|
43
|
-
export declare function registerStepsFromDir(server: StepServer, dir: string | readonly string[]): Promise<DurableStepMeta[]>;
|
|
63
|
+
export declare function registerStepsFromDir(server: StepServer, dir: string | readonly string[], factory?: StepClassFactory): Promise<DurableStepMeta[]>;
|
|
44
64
|
/** The build-time barrel shape the Assembler `init` hook generates for `app/steps` (key → lazy
|
|
45
65
|
* module import, nested per sub-directory), mirroring
|
|
46
66
|
* {@link import('./workflow-discovery.js').WorkflowsBarrel}. A multi-root hook writes a
|
|
@@ -48,6 +68,7 @@ export declare function registerStepsFromDir(server: StepServer, dir: string | r
|
|
|
48
68
|
export type StepsBarrel = BarrelTree;
|
|
49
69
|
/** Register every `@Step`/`defineStep` reachable from a generated {@link StepsBarrel} (or a
|
|
50
70
|
* multi-root {@link RootedBarrel} array) onto `server` — the build-time equivalent of
|
|
51
|
-
* {@link registerStepsFromDir} with no runtime `readdir`, same cross-root duplicate rule
|
|
52
|
-
|
|
71
|
+
* {@link registerStepsFromDir} with no runtime `readdir`, same cross-root duplicate rule and the
|
|
72
|
+
* same optional {@link StepClassFactory}. */
|
|
73
|
+
export declare function registerStepsFromBarrel(server: StepServer, barrel: StepsBarrel | readonly RootedBarrel[], factory?: StepClassFactory): Promise<DurableStepMeta[]>;
|
|
53
74
|
//# sourceMappingURL=step-discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-discovery.d.ts","sourceRoot":"","sources":["../../src/step-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EAIf,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,eAAe,CAAC;AAEjE;uFACuF;AACvF,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7C;AAED,+FAA+F;AAC/F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAoBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAE3E;AAED
|
|
1
|
+
{"version":3,"file":"step-discovery.d.ts","sourceRoot":"","sources":["../../src/step-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EAIf,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,eAAe,CAAC;AAEjE;uFACuF;AACvF,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7C;AAED,+FAA+F;AAC/F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAoBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAE3E;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,UAAU,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAiCpF;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,cAAc,EAAE,CAMhE;AA6BD;iGACiG;AACjG,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,eAAe,EAAE,CAY/F;AAsFD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAC/B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAM5B;AAED;;;0CAG0C;AAC1C,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC;AAErC;;;8CAG8C;AAC9C,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,WAAW,GAAG,SAAS,YAAY,EAAE,EAC7C,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAE5B"}
|
|
@@ -28,39 +28,81 @@ function validating(step) {
|
|
|
28
28
|
export function registerStep(server, step) {
|
|
29
29
|
server.handle(step.meta.name, validating(step));
|
|
30
30
|
}
|
|
31
|
+
function defaultStepClassFactory(ctor) {
|
|
32
|
+
return new ctor();
|
|
33
|
+
}
|
|
34
|
+
/** The `@Step`-stamped method keys on a class's prototype; empty for anything that is not a class
|
|
35
|
+
* with stamped methods. */
|
|
36
|
+
function stampedStepKeys(exported) {
|
|
37
|
+
if (typeof exported !== 'function' || !exported.prototype)
|
|
38
|
+
return [];
|
|
39
|
+
const proto = exported.prototype;
|
|
40
|
+
return Object.getOwnPropertyNames(proto).filter((key) => {
|
|
41
|
+
const value = proto[key];
|
|
42
|
+
return (typeof value === 'function' &&
|
|
43
|
+
typeof value[DURABLE_STEP_NAME] === 'string');
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Bind each stamped method of `exported` (a class) to `instance`. */
|
|
47
|
+
function bindStepMethods(exported, instance, keys) {
|
|
48
|
+
const proto = exported.prototype;
|
|
49
|
+
const target = instance;
|
|
50
|
+
const found = [];
|
|
51
|
+
for (const key of keys) {
|
|
52
|
+
const meta = stepMetaOf(proto[key]);
|
|
53
|
+
if (!meta)
|
|
54
|
+
continue;
|
|
55
|
+
found.push({ meta, handler: target[key].bind(instance) });
|
|
56
|
+
}
|
|
57
|
+
return found;
|
|
58
|
+
}
|
|
31
59
|
/**
|
|
32
60
|
* Collect every `@Step`/`defineStep` handler reachable from an exported value:
|
|
33
61
|
* - a `defineStep(...)` function (stamped directly) → one handler, bound as-is.
|
|
34
|
-
* - a class with `@Step`-decorated methods → instantiate once and bind each stamped
|
|
62
|
+
* - a class with `@Step`-decorated methods → instantiate once with `new Ctor()` and bind each stamped
|
|
63
|
+
* method.
|
|
35
64
|
* Anything else is ignored. So a module can `export` either style (or both) and be discovered.
|
|
65
|
+
*
|
|
66
|
+
* Synchronous, so it can only build a class with `new Ctor()` (no constructor dependencies). The
|
|
67
|
+
* directory/barrel discovery ({@link registerStepsFromDir}, {@link registerStepsFromBarrel}) takes a
|
|
68
|
+
* {@link StepClassFactory} instead, which is how the AdonisJS provider injects dependencies.
|
|
36
69
|
*/
|
|
37
70
|
export function collectSteps(exported) {
|
|
38
|
-
const found = [];
|
|
39
|
-
// A `defineStep(...)` handler: the function itself carries the stamp.
|
|
40
71
|
const directMeta = stepMetaOf(exported);
|
|
41
|
-
if (directMeta)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
72
|
+
if (directMeta)
|
|
73
|
+
return [{ meta: directMeta, handler: exported }];
|
|
74
|
+
const keys = stampedStepKeys(exported);
|
|
75
|
+
if (keys.length === 0)
|
|
76
|
+
return [];
|
|
77
|
+
return bindStepMethods(exported, defaultStepClassFactory(exported), keys);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* {@link collectSteps}, but with `factory` each handler resolves its instance through it on every
|
|
81
|
+
* call (and calls the method on that instance). Without `factory` this IS {@link collectSteps}.
|
|
82
|
+
*/
|
|
83
|
+
function collectStepsWith(exported, factory) {
|
|
84
|
+
if (!factory)
|
|
85
|
+
return collectSteps(exported);
|
|
86
|
+
const directMeta = stepMetaOf(exported);
|
|
87
|
+
if (directMeta)
|
|
88
|
+
return [{ meta: directMeta, handler: exported }];
|
|
89
|
+
const keys = stampedStepKeys(exported);
|
|
90
|
+
if (keys.length === 0)
|
|
91
|
+
return [];
|
|
92
|
+
const Ctor = exported;
|
|
93
|
+
const proto = Ctor.prototype;
|
|
94
|
+
const found = [];
|
|
95
|
+
for (const key of keys) {
|
|
96
|
+
const meta = stepMetaOf(proto[key]);
|
|
97
|
+
if (!meta)
|
|
98
|
+
continue;
|
|
99
|
+
found.push({
|
|
100
|
+
meta,
|
|
101
|
+
handler: async (input, log) => {
|
|
102
|
+
const instance = (await factory(Ctor));
|
|
103
|
+
return instance[key].call(instance, input, log);
|
|
104
|
+
},
|
|
52
105
|
});
|
|
53
|
-
if (stamped.length > 0) {
|
|
54
|
-
const Ctor = exported;
|
|
55
|
-
const instance = new Ctor();
|
|
56
|
-
for (const key of stamped) {
|
|
57
|
-
const method = proto[key];
|
|
58
|
-
const meta = stepMetaOf(method);
|
|
59
|
-
if (!meta)
|
|
60
|
-
continue;
|
|
61
|
-
found.push({ meta, handler: instance[key].bind(instance) });
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
106
|
}
|
|
65
107
|
return found;
|
|
66
108
|
}
|
|
@@ -109,7 +151,7 @@ function stepNamesOf(exported) {
|
|
|
109
151
|
* registered, so a clash never leaves a half-served transport. The same export reachable from two
|
|
110
152
|
* roots (a re-export, or overlapping roots) is served once.
|
|
111
153
|
*/
|
|
112
|
-
async function registerStepModules(server, modules) {
|
|
154
|
+
async function registerStepModules(server, modules, factory) {
|
|
113
155
|
const owners = new Map();
|
|
114
156
|
const plan = [];
|
|
115
157
|
for (const { root, file, load } of modules) {
|
|
@@ -135,14 +177,33 @@ async function registerStepModules(server, modules) {
|
|
|
135
177
|
}
|
|
136
178
|
plan.push(exports);
|
|
137
179
|
}
|
|
180
|
+
// Collect every module's handlers BEFORE serving any, so a class whose `new Ctor()` throws (no
|
|
181
|
+
// factory) fails discovery without leaving a half-served transport. With a factory nothing is
|
|
182
|
+
// built here: each handler resolves its instance when it runs.
|
|
183
|
+
const collected = [];
|
|
184
|
+
for (const exports of plan) {
|
|
185
|
+
// Per module, exactly `registerSteps`: de-duplicated by routing name, first export wins.
|
|
186
|
+
const steps = [];
|
|
187
|
+
const inModule = new Set();
|
|
188
|
+
for (const exported of exports) {
|
|
189
|
+
for (const step of collectStepsWith(exported, factory)) {
|
|
190
|
+
if (inModule.has(step.meta.name))
|
|
191
|
+
continue;
|
|
192
|
+
inModule.add(step.meta.name);
|
|
193
|
+
steps.push(step);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
collected.push(steps);
|
|
197
|
+
}
|
|
138
198
|
const registered = [];
|
|
139
199
|
const seen = new Set();
|
|
140
|
-
for (const
|
|
141
|
-
for (const
|
|
142
|
-
|
|
200
|
+
for (const steps of collected) {
|
|
201
|
+
for (const step of steps) {
|
|
202
|
+
registerStep(server, step);
|
|
203
|
+
if (seen.has(step.meta.name))
|
|
143
204
|
continue;
|
|
144
|
-
seen.add(meta.name);
|
|
145
|
-
registered.push(meta);
|
|
205
|
+
seen.add(step.meta.name);
|
|
206
|
+
registered.push(step.meta);
|
|
146
207
|
}
|
|
147
208
|
}
|
|
148
209
|
return registered;
|
|
@@ -158,14 +219,20 @@ async function registerStepModules(server, modules) {
|
|
|
158
219
|
* `server` is anything with `handle(name, fn)`: a transport, the store-less `WorkerRuntime`, or the
|
|
159
220
|
* `WorkflowEngine` itself (it forwards to its primary transport) — the latter is how app code
|
|
160
221
|
* serves an extra directory from a preload: `await registerStepsFromDir(engine, dir)`.
|
|
222
|
+
*
|
|
223
|
+
* `factory` builds each class that carries `@Step` methods, once per handler call (see
|
|
224
|
+
* {@link StepClassFactory}); omitted, each class is built once with `new Ctor()` at registration.
|
|
225
|
+
* Pass `(Ctor) => app.container.make(Ctor)` for constructor injection — the provider does.
|
|
226
|
+
* `defineStep(...)` functions are served as-is either way.
|
|
161
227
|
*/
|
|
162
|
-
export async function registerStepsFromDir(server, dir) {
|
|
163
|
-
return registerStepModules(server, await scanDirsModules(typeof dir === 'string' ? [dir] : dir));
|
|
228
|
+
export async function registerStepsFromDir(server, dir, factory) {
|
|
229
|
+
return registerStepModules(server, await scanDirsModules(typeof dir === 'string' ? [dir] : dir), factory);
|
|
164
230
|
}
|
|
165
231
|
/** Register every `@Step`/`defineStep` reachable from a generated {@link StepsBarrel} (or a
|
|
166
232
|
* multi-root {@link RootedBarrel} array) onto `server` — the build-time equivalent of
|
|
167
|
-
* {@link registerStepsFromDir} with no runtime `readdir`, same cross-root duplicate rule
|
|
168
|
-
|
|
169
|
-
|
|
233
|
+
* {@link registerStepsFromDir} with no runtime `readdir`, same cross-root duplicate rule and the
|
|
234
|
+
* same optional {@link StepClassFactory}. */
|
|
235
|
+
export async function registerStepsFromBarrel(server, barrel, factory) {
|
|
236
|
+
return registerStepModules(server, barrelModules(barrel), factory);
|
|
170
237
|
}
|
|
171
238
|
//# sourceMappingURL=step-discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-discovery.js","sourceRoot":"","sources":["../../src/step-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEb,uBAAuB,EAEvB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAwB,UAAU,EAAE,MAAM,eAAe,CAAC;AAcjE;;;wGAGwG;AACxG,SAAS,UAAU,CAAC,IAAoB;IACtC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,KAAK,EAAE,KAAc,EAAE,GAAe,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,SAAS,EAAE,eAAe,CAAC;YACzF,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM;YAChB,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,IAAI,UAAU,EAAE,gBAAgB,CAAC;YACvF,CAAC,CAAC,MAAM,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,IAAoB;IACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"step-discovery.js","sourceRoot":"","sources":["../../src/step-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,12 @@ export declare class LucidStateStore implements StateStore {
|
|
|
53
53
|
/** Idempotently provision the durable tables (called on boot when `autoSchema` is on). */
|
|
54
54
|
ensureSchema(): Promise<void>;
|
|
55
55
|
createRun(run: WorkflowRun): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Run `write` in a transaction only when `patch` needs one: a terminal settle reads the run's tags
|
|
58
|
+
* under a row lock to release its singleton slot, and new search attributes rewrite their rows
|
|
59
|
+
* with the run's. Any other patch is one UPDATE, which needs no transaction around it.
|
|
60
|
+
*/
|
|
61
|
+
private writeRun;
|
|
56
62
|
updateRun(runId: string, patch: Partial<WorkflowRun>): Promise<void>;
|
|
57
63
|
updateRunIf(runId: string, expectedStatuses: RunStatus[], patch: Partial<WorkflowRun>): Promise<boolean>;
|
|
58
64
|
/** Whether the runs table has `awaiting_decision_task_id`, probed once per store and cached. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,KAAK,EAEV,iBAAiB,EAEjB,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAoD1B,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,sBAA2B,EAK7D;IAED;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,eAAe,CAEpE;IAED,kFAAkF;IAClF,OAAO,CAAC,MAAM;IAOd,oGAAoG;IACpG,OAAO,CAAC,MAAM;IAId,0FAA0F;IACpF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlC;IAIK,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"lucid.d.ts","sourceRoot":"","sources":["../../../src/stores/lucid.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stores/lucid.js
CHANGED
|
@@ -53,13 +53,31 @@ export class LucidStateStore {
|
|
|
53
53
|
}
|
|
54
54
|
// --- runs ---------------------------------------------------------------
|
|
55
55
|
async createRun(run) {
|
|
56
|
+
if (normalizeAttributeRows(run.id, run.searchAttributes).length === 0) {
|
|
57
|
+
// Nothing to index: the insert, then clear any attribute rows a deleted run of this id left,
|
|
58
|
+
// as two statements. The insert goes first, so a run that already exists keeps its rows.
|
|
59
|
+
const client = this.client();
|
|
60
|
+
await client.table(DURABLE_TABLES.runs).insert(runToRow(run));
|
|
61
|
+
await client.from(DURABLE_TABLES.attributes).where('run_id', run.id).delete();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
56
64
|
await this.client().transaction(async (trx) => {
|
|
57
65
|
await trx.table(DURABLE_TABLES.runs).insert(runToRow(run));
|
|
58
66
|
await this.reindexAttributes(trx, run.id, run.searchAttributes);
|
|
59
67
|
});
|
|
60
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Run `write` in a transaction only when `patch` needs one: a terminal settle reads the run's tags
|
|
71
|
+
* under a row lock to release its singleton slot, and new search attributes rewrite their rows
|
|
72
|
+
* with the run's. Any other patch is one UPDATE, which needs no transaction around it.
|
|
73
|
+
*/
|
|
74
|
+
writeRun(patch, write) {
|
|
75
|
+
if (!settlesTerminally(patch) && !('searchAttributes' in patch))
|
|
76
|
+
return write(this.client());
|
|
77
|
+
return this.client().transaction((trx) => write(trx));
|
|
78
|
+
}
|
|
61
79
|
async updateRun(runId, patch) {
|
|
62
|
-
await this.
|
|
80
|
+
await this.writeRun(patch, async (trx) => {
|
|
63
81
|
const row = await this.releaseSlot(trx, runId, patch);
|
|
64
82
|
// Knex throws on an empty `.update({})`; skip the UPDATE when no mapped column changed.
|
|
65
83
|
if (Object.keys(row).length) {
|
|
@@ -71,7 +89,7 @@ export class LucidStateStore {
|
|
|
71
89
|
});
|
|
72
90
|
}
|
|
73
91
|
async updateRunIf(runId, expectedStatuses, patch) {
|
|
74
|
-
return this.
|
|
92
|
+
return this.writeRun(patch, async (trx) => {
|
|
75
93
|
const row = await this.releaseSlot(trx, runId, patch);
|
|
76
94
|
let applied;
|
|
77
95
|
if (Object.keys(row).length) {
|
|
@@ -536,17 +554,17 @@ export class LucidStateStore {
|
|
|
536
554
|
.merge();
|
|
537
555
|
}
|
|
538
556
|
async takeSignalWaiter(token) {
|
|
539
|
-
//
|
|
540
|
-
//
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
return
|
|
549
|
-
|
|
557
|
+
// Take-and-remove: the row is ours only if our DELETE removed it, so a concurrent take can't hand
|
|
558
|
+
// the same waiter to two callers. The DELETE arbitrates, so no transaction is needed around it,
|
|
559
|
+
// and a token with no waiter (the common case) costs one read.
|
|
560
|
+
const client = this.client();
|
|
561
|
+
const row = await client.from(DURABLE_TABLES.signalWaiters).where('token', token).first();
|
|
562
|
+
if (!row)
|
|
563
|
+
return null;
|
|
564
|
+
const deleted = await client.from(DURABLE_TABLES.signalWaiters).where('token', token).delete();
|
|
565
|
+
if (rowsAffected(deleted) !== 1)
|
|
566
|
+
return null;
|
|
567
|
+
return rowToSignalWaiter(row);
|
|
550
568
|
}
|
|
551
569
|
async listSignalWaiters(prefix) {
|
|
552
570
|
// The prefix embeds caller-supplied names (event names via eventPrefix) — escape their LIKE
|
|
@@ -672,22 +690,23 @@ export class LucidStateStore {
|
|
|
672
690
|
}
|
|
673
691
|
}
|
|
674
692
|
async takeBufferedSignal(token) {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
693
|
+
// The oldest signal is ours only if our DELETE removed it, so two takers never get the same one;
|
|
694
|
+
// that needs no transaction, and a token with nothing buffered (the common case) costs one read.
|
|
695
|
+
const client = this.client();
|
|
696
|
+
const row = await client
|
|
697
|
+
.from(DURABLE_TABLES.bufferedSignals)
|
|
698
|
+
.where('token', token)
|
|
699
|
+
.orderBy('id', 'asc')
|
|
700
|
+
.first();
|
|
701
|
+
if (!row)
|
|
702
|
+
return null;
|
|
703
|
+
const r = row;
|
|
704
|
+
const deleted = await client.from(DURABLE_TABLES.bufferedSignals).where('id', r.id).delete();
|
|
705
|
+
if (rowsAffected(deleted) !== 1)
|
|
706
|
+
return null;
|
|
707
|
+
return {
|
|
708
|
+
payload: parseJsonColumn(r.payload, `${DURABLE_TABLES.bufferedSignals}.payload`, String(r.id)),
|
|
709
|
+
};
|
|
691
710
|
}
|
|
692
711
|
// --- buffered events (name-keyed, match-based consumption) ---------------
|
|
693
712
|
async bufferEvent(input) {
|