@dudousxd/nestjs-durable 0.11.0 → 0.12.0
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/decorators.d.ts +21 -0
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +2 -0
- package/dist/decorators.js.map +1 -1
- package/dist/durable.module.d.ts.map +1 -1
- package/dist/durable.module.js +3 -1
- package/dist/durable.module.js.map +1 -1
- package/dist/entity.d.ts +43 -0
- package/dist/entity.d.ts.map +1 -0
- package/dist/entity.js +94 -0
- package/dist/entity.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/timer-poller.d.ts +1 -0
- package/dist/timer-poller.d.ts.map +1 -1
- package/dist/timer-poller.js +5 -0
- package/dist/timer-poller.js.map +1 -1
- package/dist/workflow.registrar.d.ts.map +1 -1
- package/dist/workflow.registrar.js +16 -0
- package/dist/workflow.registrar.js.map +1 -1
- package/dist/workflow.service.d.ts +17 -0
- package/dist/workflow.service.d.ts.map +1 -1
- package/dist/workflow.service.js +3 -0
- package/dist/workflow.service.js.map +1 -1
- package/package.json +2 -2
package/dist/decorators.d.ts
CHANGED
|
@@ -18,6 +18,13 @@ export interface WorkflowMeta {
|
|
|
18
18
|
validateInput?: (input: unknown) => void | Promise<void>;
|
|
19
19
|
/** Event names that start a fresh run of this workflow. See `WorkflowOptions`. */
|
|
20
20
|
onEvent?: string[];
|
|
21
|
+
/** Debounce `onEvent` triggers — fire once it's quiet for this long. See `WorkflowOptions`. */
|
|
22
|
+
debounce?: string | number;
|
|
23
|
+
/** Batch `onEvent` triggers — fire on size or window. See `WorkflowOptions`. */
|
|
24
|
+
batch?: {
|
|
25
|
+
maxSize: number;
|
|
26
|
+
within: string | number;
|
|
27
|
+
};
|
|
21
28
|
}
|
|
22
29
|
export interface WorkflowOptions {
|
|
23
30
|
name: string;
|
|
@@ -67,6 +74,20 @@ export interface WorkflowOptions {
|
|
|
67
74
|
* the `@OnEvent(...)` class decorator; the two are merged.
|
|
68
75
|
*/
|
|
69
76
|
onEvent?: string[];
|
|
77
|
+
/**
|
|
78
|
+
* Coalesce `onEvent` triggers by **debouncing** — start one run only once events have been quiet
|
|
79
|
+
* for this long (resets on each event), with the LAST payload. e.g. `debounce: '30s'`.
|
|
80
|
+
*/
|
|
81
|
+
debounce?: string | number;
|
|
82
|
+
/**
|
|
83
|
+
* Coalesce `onEvent` triggers by **batching** — start one run with all payloads (`{ events: [...] }`)
|
|
84
|
+
* once `maxSize` is reached or `within` elapses from the first event. e.g.
|
|
85
|
+
* `batch: { maxSize: 100, within: '10s' }`.
|
|
86
|
+
*/
|
|
87
|
+
batch?: {
|
|
88
|
+
maxSize: number;
|
|
89
|
+
within: string | number;
|
|
90
|
+
};
|
|
70
91
|
}
|
|
71
92
|
/**
|
|
72
93
|
* Marks a provider class as a durable workflow. Its `run(ctx, input)` method becomes the
|
package/dist/decorators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EAEd,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,kBAAkB,CAAC;AAE1B,eAAO,MAAM,iBAAiB,eAAoC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,qEAAqE;IACrE,WAAW,CAAC,EAAE,KACZ,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,MAAM,CAAC;IACZ,yEAAyE;IACzE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
|
package/dist/decorators.js
CHANGED
|
@@ -28,6 +28,8 @@ function Workflow(options) {
|
|
|
28
28
|
inputSchema: options.inputSchema,
|
|
29
29
|
validateInput: options.validateInput,
|
|
30
30
|
onEvent: options.onEvent,
|
|
31
|
+
debounce: options.debounce,
|
|
32
|
+
batch: options.batch,
|
|
31
33
|
};
|
|
32
34
|
Reflect.defineMetadata(exports.WORKFLOW_METADATA, meta, target);
|
|
33
35
|
// Stamp the registered name so this class can be used as a typed workflow ref (ctx.child,
|
package/dist/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable.module.d.ts","sourceRoot":"","sources":["../src/durable.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,KAAK,SAAS,EAEd,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAyB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"durable.module.d.ts","sourceRoot":"","sources":["../src/durable.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,KAAK,SAAS,EAEd,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAyB,MAAM,gBAAgB,CAAC;AAiBhG,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,oGAAoG;IACpG,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,qBACa,aAAa;IACxB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAI5D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa;IAQtE,OAAO,CAAC,MAAM,CAAC,KAAK;CA2DrB"}
|
package/dist/durable.module.js
CHANGED
|
@@ -12,6 +12,7 @@ const nestjs_durable_core_1 = require("@dudousxd/nestjs-durable-core");
|
|
|
12
12
|
const common_1 = require("@nestjs/common");
|
|
13
13
|
const core_1 = require("@nestjs/core");
|
|
14
14
|
const durable_step_registrar_1 = require("./durable-step.registrar");
|
|
15
|
+
const entity_1 = require("./entity");
|
|
15
16
|
const timer_poller_1 = require("./timer-poller");
|
|
16
17
|
const workflow_registrar_1 = require("./workflow.registrar");
|
|
17
18
|
const workflow_service_1 = require("./workflow.service");
|
|
@@ -80,11 +81,12 @@ let DurableModule = DurableModule_1 = class DurableModule {
|
|
|
80
81
|
inject: [nestjs_durable_core_1.STATE_STORE, nestjs_durable_core_1.TRANSPORT, nestjs_durable_core_1.DURABLE_OPTIONS],
|
|
81
82
|
},
|
|
82
83
|
workflow_service_1.WorkflowService,
|
|
84
|
+
entity_1.EntityService,
|
|
83
85
|
workflow_registrar_1.WorkflowRegistrar,
|
|
84
86
|
durable_step_registrar_1.DurableStepRegistrar,
|
|
85
87
|
timer_poller_1.TimerPoller,
|
|
86
88
|
],
|
|
87
|
-
exports: [workflow_service_1.WorkflowService, nestjs_durable_core_1.WorkflowEngine, nestjs_durable_core_1.STATE_STORE, nestjs_durable_core_1.TRANSPORT],
|
|
89
|
+
exports: [workflow_service_1.WorkflowService, entity_1.EntityService, nestjs_durable_core_1.WorkflowEngine, nestjs_durable_core_1.STATE_STORE, nestjs_durable_core_1.TRANSPORT],
|
|
88
90
|
};
|
|
89
91
|
}
|
|
90
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable.module.js","sourceRoot":"","sources":["../src/durable.module.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"durable.module.js","sourceRoot":"","sources":["../src/durable.module.ts"],"names":[],"mappings":"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"}
|
package/dist/entity.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type EntityHandler, WorkflowEngine } from '@dudousxd/nestjs-durable-core';
|
|
2
|
+
import 'reflect-metadata';
|
|
3
|
+
export declare const ENTITY_METADATA: unique symbol;
|
|
4
|
+
export declare const ENTITY_ON_METADATA: unique symbol;
|
|
5
|
+
/**
|
|
6
|
+
* Marks an `@Injectable()` class as a **durable entity** (a virtual object): its `@On(op)` methods run
|
|
7
|
+
* serialized per key over the instance's fields as durable state. e.g.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* @Entity({ name: 'cart' }) @Injectable()
|
|
11
|
+
* class Cart { items: Item[] = []; @On('add') add(i: Item) { this.items.push(i); } @On('list') list() { return this.items; } }
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The class must be **constructible with no arguments** (a fresh instance is the initial state per key)
|
|
15
|
+
* — keep entities pure state, no DI. Drive them with `EntityService` or `ctx.signalEntity`/`callEntity`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function Entity(options: {
|
|
18
|
+
name: string;
|
|
19
|
+
}): ClassDecorator;
|
|
20
|
+
/** Marks an entity method as the handler for operation `op`. */
|
|
21
|
+
export declare function On(op: string): MethodDecorator;
|
|
22
|
+
export declare function getEntityMeta(target: Function): {
|
|
23
|
+
name: string;
|
|
24
|
+
} | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Build the engine `EntityConfig` for a discovered `@Entity` class: a fresh instance per key, and
|
|
27
|
+
* handlers that rehydrate the class prototype onto the (serialized) state before dispatching the op,
|
|
28
|
+
* so methods work after replay.
|
|
29
|
+
*/
|
|
30
|
+
export declare function entityConfigFor(ctor: Function): {
|
|
31
|
+
initialState: () => object;
|
|
32
|
+
handlers: Record<string, EntityHandler>;
|
|
33
|
+
};
|
|
34
|
+
/** Inject this to drive durable entities from outside a workflow. */
|
|
35
|
+
export declare class EntityService {
|
|
36
|
+
private readonly engine;
|
|
37
|
+
constructor(engine: WorkflowEngine);
|
|
38
|
+
/** Send an operation to an entity (fire-and-forget; ordered + exactly-once per key). */
|
|
39
|
+
signal(name: string, key: string, op: string, arg?: unknown): Promise<void>;
|
|
40
|
+
/** Read an entity's current durable state (or undefined if it has none yet). */
|
|
41
|
+
getState<S = unknown>(name: string, key: string): Promise<S | undefined>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,kBAAkB,CAAC;AAE1B,eAAO,MAAM,eAAe,eAAkC,CAAC;AAC/D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAIhE;AAED,gEAAgE;AAChE,wBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,CAQ9C;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAE5E;AAED;;;;GAIG;AAEH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG;IAC/C,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC,CAaA;AAED,qEAAqE;AACrE,qBACa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEnD,wFAAwF;IACxF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3E,gFAAgF;IAChF,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAGzE"}
|
package/dist/entity.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EntityService = exports.ENTITY_ON_METADATA = exports.ENTITY_METADATA = void 0;
|
|
13
|
+
exports.Entity = Entity;
|
|
14
|
+
exports.On = On;
|
|
15
|
+
exports.getEntityMeta = getEntityMeta;
|
|
16
|
+
exports.entityConfigFor = entityConfigFor;
|
|
17
|
+
const nestjs_durable_core_1 = require("@dudousxd/nestjs-durable-core");
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
require("reflect-metadata");
|
|
20
|
+
exports.ENTITY_METADATA = Symbol('nestjs-durable:entity');
|
|
21
|
+
exports.ENTITY_ON_METADATA = Symbol('nestjs-durable:entity-on');
|
|
22
|
+
/**
|
|
23
|
+
* Marks an `@Injectable()` class as a **durable entity** (a virtual object): its `@On(op)` methods run
|
|
24
|
+
* serialized per key over the instance's fields as durable state. e.g.
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* @Entity({ name: 'cart' }) @Injectable()
|
|
28
|
+
* class Cart { items: Item[] = []; @On('add') add(i: Item) { this.items.push(i); } @On('list') list() { return this.items; } }
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* The class must be **constructible with no arguments** (a fresh instance is the initial state per key)
|
|
32
|
+
* — keep entities pure state, no DI. Drive them with `EntityService` or `ctx.signalEntity`/`callEntity`.
|
|
33
|
+
*/
|
|
34
|
+
function Entity(options) {
|
|
35
|
+
return (target) => {
|
|
36
|
+
Reflect.defineMetadata(exports.ENTITY_METADATA, options, target);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Marks an entity method as the handler for operation `op`. */
|
|
40
|
+
function On(op) {
|
|
41
|
+
return (target, propertyKey) => {
|
|
42
|
+
// biome-ignore lint/complexity/noBannedTypes: reflect-metadata keys on the class constructor
|
|
43
|
+
const ctor = target.constructor;
|
|
44
|
+
const ops = Reflect.getMetadata(exports.ENTITY_ON_METADATA, ctor) ?? new Map();
|
|
45
|
+
ops.set(op, propertyKey);
|
|
46
|
+
Reflect.defineMetadata(exports.ENTITY_ON_METADATA, ops, ctor);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// biome-ignore lint/complexity/noBannedTypes: matches reflect-metadata's class target type
|
|
50
|
+
function getEntityMeta(target) {
|
|
51
|
+
return Reflect.getMetadata(exports.ENTITY_METADATA, target);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the engine `EntityConfig` for a discovered `@Entity` class: a fresh instance per key, and
|
|
55
|
+
* handlers that rehydrate the class prototype onto the (serialized) state before dispatching the op,
|
|
56
|
+
* so methods work after replay.
|
|
57
|
+
*/
|
|
58
|
+
// biome-ignore lint/complexity/noBannedTypes: a class constructor
|
|
59
|
+
function entityConfigFor(ctor) {
|
|
60
|
+
const ops = Reflect.getMetadata(exports.ENTITY_ON_METADATA, ctor) ?? new Map();
|
|
61
|
+
const Cls = ctor;
|
|
62
|
+
const handlers = {};
|
|
63
|
+
for (const [op, method] of ops) {
|
|
64
|
+
handlers[op] = (state, arg) => {
|
|
65
|
+
Object.setPrototypeOf(state, Cls.prototype); // re-attach methods to the plain state
|
|
66
|
+
const fn = state[method];
|
|
67
|
+
if (typeof fn !== 'function')
|
|
68
|
+
throw new Error(`entity handler "${method}" is not a method`);
|
|
69
|
+
return fn.call(state, arg);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return { initialState: () => new Cls(), handlers };
|
|
73
|
+
}
|
|
74
|
+
/** Inject this to drive durable entities from outside a workflow. */
|
|
75
|
+
let EntityService = class EntityService {
|
|
76
|
+
engine;
|
|
77
|
+
constructor(engine) {
|
|
78
|
+
this.engine = engine;
|
|
79
|
+
}
|
|
80
|
+
/** Send an operation to an entity (fire-and-forget; ordered + exactly-once per key). */
|
|
81
|
+
signal(name, key, op, arg) {
|
|
82
|
+
return this.engine.signalEntity(name, key, op, arg);
|
|
83
|
+
}
|
|
84
|
+
/** Read an entity's current durable state (or undefined if it has none yet). */
|
|
85
|
+
getState(name, key) {
|
|
86
|
+
return this.engine.getEntityState(name, key);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
exports.EntityService = EntityService;
|
|
90
|
+
exports.EntityService = EntityService = __decorate([
|
|
91
|
+
(0, common_1.Injectable)(),
|
|
92
|
+
__metadata("design:paramtypes", [nestjs_durable_core_1.WorkflowEngine])
|
|
93
|
+
], EntityService);
|
|
94
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./decorators"), exports);
|
|
18
18
|
__exportStar(require("./durable.module"), exports);
|
|
19
|
+
__exportStar(require("./entity"), exports);
|
|
19
20
|
__exportStar(require("./step-interceptor"), exports);
|
|
20
21
|
__exportStar(require("./workflow.service"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,qDAAmC;AACnC,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,2CAAyB;AACzB,qDAAmC;AACnC,qDAAmC"}
|
package/dist/timer-poller.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class TimerPoller implements OnApplicationBootstrap, OnModuleDest
|
|
|
11
11
|
private readonly options;
|
|
12
12
|
private timer?;
|
|
13
13
|
private polling;
|
|
14
|
+
private unsubscribeEnqueued?;
|
|
14
15
|
constructor(engine: WorkflowEngine, options: DurableModuleOptions);
|
|
15
16
|
onApplicationBootstrap(): Promise<void>;
|
|
16
17
|
onModuleDestroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-poller.d.ts","sourceRoot":"","sources":["../src/timer-poller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAgB,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,qBACa,WAAY,YAAW,sBAAsB,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"timer-poller.d.ts","sourceRoot":"","sources":["../src/timer-poller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAgB,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,qBACa,WAAY,YAAW,sBAAsB,EAAE,eAAe;IAMvE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACE,OAAO,CAAC,QAAQ,CAAC,OAAO;IANnD,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAC,CAAa;gBAGtB,MAAM,EAAE,cAAc,EACG,OAAO,EAAE,oBAAoB;IAGnE,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7C,eAAe,IAAI,IAAI;YAKT,IAAI;CAmBnB"}
|
package/dist/timer-poller.js
CHANGED
|
@@ -25,6 +25,7 @@ let TimerPoller = class TimerPoller {
|
|
|
25
25
|
options;
|
|
26
26
|
timer;
|
|
27
27
|
polling = false;
|
|
28
|
+
unsubscribeEnqueued;
|
|
28
29
|
constructor(engine, options) {
|
|
29
30
|
this.engine = engine;
|
|
30
31
|
this.options = options;
|
|
@@ -34,6 +35,9 @@ let TimerPoller = class TimerPoller {
|
|
|
34
35
|
// (`worker: false`) must not resume timers — leave that to the workers.
|
|
35
36
|
if (this.options.worker === false)
|
|
36
37
|
return;
|
|
38
|
+
// Low-latency dispatch: when a run is enqueued elsewhere (e.g. an API pod), pick it up at once
|
|
39
|
+
// over the control plane instead of waiting for the next poll tick. Leasing dedups across workers.
|
|
40
|
+
this.unsubscribeEnqueued = this.engine.onEnqueued((runId) => void this.engine.runOne(runId));
|
|
37
41
|
await this.poll();
|
|
38
42
|
const intervalMs = this.options.timerPollMs ?? 1_000;
|
|
39
43
|
if (intervalMs > 0) {
|
|
@@ -44,6 +48,7 @@ let TimerPoller = class TimerPoller {
|
|
|
44
48
|
onModuleDestroy() {
|
|
45
49
|
if (this.timer)
|
|
46
50
|
clearInterval(this.timer);
|
|
51
|
+
this.unsubscribeEnqueued?.();
|
|
47
52
|
}
|
|
48
53
|
async poll() {
|
|
49
54
|
if (this.polling)
|
package/dist/timer-poller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-poller.js","sourceRoot":"","sources":["../src/timer-poller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAA8F;AAC9F,2CAKwB;AAGxB;;;;GAIG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"timer-poller.js","sourceRoot":"","sources":["../src/timer-poller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAA8F;AAC9F,2CAKwB;AAGxB;;;;GAIG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;IAMH;IACyB;IANpC,KAAK,CAAkC;IACvC,OAAO,GAAG,KAAK,CAAC;IAChB,mBAAmB,CAAc;IAEzC,YACmB,MAAsB,EACG,OAA6B;QADtD,WAAM,GAAN,MAAM,CAAgB;QACG,YAAO,GAAP,OAAO,CAAsB;IACtE,CAAC;IAEJ,KAAK,CAAC,sBAAsB;QAC1B,gFAAgF;QAChF,wEAAwE;QACxE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO;QAC1C,+FAA+F;QAC/F,mGAAmG;QACnG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7F,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QACrD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,2BAA2B;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,6FAA6F;YAC7F,+FAA+F;YAC/F,sFAAsF;YACtF,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACzC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAA,kCAAY,EAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;CACF,CAAA;AAjDY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,qCAAe,CAAC,CAAA;qCADC,oCAAc;GAN9B,WAAW,CAiDvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.registrar.d.ts","sourceRoot":"","sources":["../src/workflow.registrar.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAEf,cAAc,
|
|
1
|
+
{"version":3,"file":"workflow.registrar.d.ts","sourceRoot":"","sources":["../src/workflow.registrar.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAEf,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAW7D;;;;;GAKG;AACH,qBACa,iBACX,YAAW,YAAY,EAAE,sBAAsB,EAAE,qBAAqB;IAGpE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACF,OAAO,CAAC,QAAQ,CAAC,KAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJhC,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,cAAc,EACD,KAAK,EAAE,UAAU,EACb,OAAO,EAAE,oBAAoB;IAGnE,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7C,0FAA0F;IACpF,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwEnC,iGAAiG;IACjG,OAAO,CAAC,qBAAqB;IAW7B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;CAiBjC"}
|
|
@@ -17,6 +17,7 @@ const nestjs_durable_core_1 = require("@dudousxd/nestjs-durable-core");
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const core_1 = require("@nestjs/core");
|
|
19
19
|
const decorators_1 = require("./decorators");
|
|
20
|
+
const entity_1 = require("./entity");
|
|
20
21
|
const input_validation_1 = require("./input-validation");
|
|
21
22
|
const step_interceptor_1 = require("./step-interceptor");
|
|
22
23
|
/**
|
|
@@ -65,6 +66,11 @@ let WorkflowRegistrar = class WorkflowRegistrar {
|
|
|
65
66
|
const interceptor = instance;
|
|
66
67
|
this.engine.use((invocation, next) => interceptor.intercept(invocation, next));
|
|
67
68
|
}
|
|
69
|
+
const entityMeta = (0, entity_1.getEntityMeta)(instance.constructor);
|
|
70
|
+
if (entityMeta) {
|
|
71
|
+
this.engine.registerEntity(entityMeta.name, (0, entity_1.entityConfigFor)(instance.constructor));
|
|
72
|
+
continue; // an @Entity is not a @Workflow
|
|
73
|
+
}
|
|
68
74
|
const meta = (0, decorators_1.getWorkflowMeta)(instance.constructor);
|
|
69
75
|
if (!meta)
|
|
70
76
|
continue;
|
|
@@ -76,12 +82,22 @@ let WorkflowRegistrar = class WorkflowRegistrar {
|
|
|
76
82
|
// `inputSchema` DTO (lazy — class-validator is only required if a workflow uses inputSchema).
|
|
77
83
|
const validateInput = meta.validateInput ??
|
|
78
84
|
(meta.inputSchema ? (0, input_validation_1.classValidatorInput)(meta.inputSchema) : undefined);
|
|
85
|
+
const eventBatch = meta.debounce
|
|
86
|
+
? { mode: 'debounce', windowMs: (0, nestjs_durable_core_1.parseDuration)(meta.debounce) }
|
|
87
|
+
: meta.batch
|
|
88
|
+
? {
|
|
89
|
+
mode: 'batch',
|
|
90
|
+
maxSize: meta.batch.maxSize,
|
|
91
|
+
windowMs: (0, nestjs_durable_core_1.parseDuration)(meta.batch.within),
|
|
92
|
+
}
|
|
93
|
+
: undefined;
|
|
79
94
|
this.engine.register(meta.name, meta.version, (ctx, input) => workflow.run(ctx, input), {
|
|
80
95
|
tags: meta.tags,
|
|
81
96
|
singleton: meta.singleton,
|
|
82
97
|
executionTimeout: meta.executionTimeout,
|
|
83
98
|
validateInput,
|
|
84
99
|
onEvent: (0, decorators_1.getOnEvents)(meta, instance.constructor),
|
|
100
|
+
eventBatch,
|
|
85
101
|
});
|
|
86
102
|
const inline = this.findDeadLetterHandler(instance);
|
|
87
103
|
if (inline && meta.deadLetterWorkflow) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.registrar.js","sourceRoot":"","sources":["../src/workflow.registrar.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"workflow.registrar.js","sourceRoot":"","sources":["../src/workflow.registrar.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,23 @@ export declare class WorkflowService {
|
|
|
25
25
|
}): Promise<RunResult>;
|
|
26
26
|
/** Deliver an external signal (e.g. from a webhook) to the run waiting on `token`. */
|
|
27
27
|
signal(token: string, payload: unknown): Promise<RunResult | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Ensure a run exists for `runId`, then deliver a signal to it — race-free (the signal is buffered
|
|
30
|
+
* until the run reaches its `waitForSignal`). The durable-entity / accumulator pattern: one
|
|
31
|
+
* long-lived run per key fed events by many calls. See {@link WorkflowEngine.signalWithStart}.
|
|
32
|
+
*/
|
|
33
|
+
signalWithStart<C extends WorkflowClass>(workflow: C, input: WorkflowInputOf<C>, runId: string, signal: {
|
|
34
|
+
token: string;
|
|
35
|
+
payload?: unknown;
|
|
36
|
+
}, opts?: StartOptions): Promise<{
|
|
37
|
+
runId: string;
|
|
38
|
+
}>;
|
|
39
|
+
signalWithStart(workflow: string, input: unknown, runId: string, signal: {
|
|
40
|
+
token: string;
|
|
41
|
+
payload?: unknown;
|
|
42
|
+
}, opts?: StartOptions): Promise<{
|
|
43
|
+
runId: string;
|
|
44
|
+
}>;
|
|
28
45
|
/**
|
|
29
46
|
* Publish a named event. Resumes runs waiting on it via `ctx.waitForEvent(name, { match })` and
|
|
30
47
|
* starts a fresh run of every workflow subscribed via `@Workflow({ onEvent })` / `@OnEvent` (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.service.d.ts","sourceRoot":"","sources":["../src/workflow.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAGvC,kEAAkE;AAClE,qBACa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEnD;;;;;;;;OAQG;IACH,KAAK,CAAC,CAAC,SAAS,aAAa,EAC3B,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,SAAS,CAAC;IACrB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUhG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5E,sFAAsF;IACtF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIlE;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAGtF"}
|
|
1
|
+
{"version":3,"file":"workflow.service.d.ts","sourceRoot":"","sources":["../src/workflow.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAGvC,kEAAkE;AAClE,qBACa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEnD;;;;;;;;OAQG;IACH,KAAK,CAAC,CAAC,SAAS,aAAa,EAC3B,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,SAAS,CAAC;IACrB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUhG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5E,sFAAsF;IACtF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIlE;;;;OAIG;IACH,eAAe,CAAC,CAAC,SAAS,aAAa,EACrC,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5C,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5C,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAW7B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAGtF"}
|
package/dist/workflow.service.js
CHANGED
|
@@ -37,6 +37,9 @@ let WorkflowService = class WorkflowService {
|
|
|
37
37
|
signal(token, payload) {
|
|
38
38
|
return this.engine.signal(token, payload);
|
|
39
39
|
}
|
|
40
|
+
signalWithStart(workflow, input, runId, signal, opts) {
|
|
41
|
+
return this.engine.signalWithStart(workflow, input, runId, signal, opts);
|
|
42
|
+
}
|
|
40
43
|
/**
|
|
41
44
|
* Publish a named event. Resumes runs waiting on it via `ctx.waitForEvent(name, { match })` and
|
|
42
45
|
* starts a fresh run of every workflow subscribed via `@Workflow({ onEvent })` / `@OnEvent` (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.service.js","sourceRoot":"","sources":["../src/workflow.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAyC;AACzC,uEAMuC;AACvC,2CAA4C;AAE5C,kEAAkE;AAE3D,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAkBvD,KAAK,CACH,QAAgB,EAChB,KAAc,EACd,QAAgB,IAAA,wBAAU,GAAE,EAC5B,IAAmB;QAEnB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,KAAa,EAAE,IAA6B;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,KAAa,EAAE,OAAgB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,IAAY,EAAE,OAAgB,EAAE,IAAsB;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"workflow.service.js","sourceRoot":"","sources":["../src/workflow.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAyC;AACzC,uEAMuC;AACvC,2CAA4C;AAE5C,kEAAkE;AAE3D,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAkBvD,KAAK,CACH,QAAgB,EAChB,KAAc,EACd,QAAgB,IAAA,wBAAU,GAAE,EAC5B,IAAmB;QAEnB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,KAAa,EAAE,IAA6B;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,KAAa,EAAE,OAAgB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAqBD,eAAe,CACb,QAAgB,EAChB,KAAc,EACd,KAAa,EACb,MAA4C,EAC5C,IAAmB;QAEnB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,IAAY,EAAE,OAAgB,EAAE,IAAsB;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AApFY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAE0B,oCAAc;GADxC,eAAe,CAoF3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/nestjs-durable",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Durable workflows for NestJS — module, decorators, discovery and boot recovery",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Davide Carvalho",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"rxjs": "7.8.2",
|
|
44
44
|
"typescript": "5.9.3",
|
|
45
45
|
"zod": "3.25.76",
|
|
46
|
-
"@dudousxd/nestjs-durable-core": "^0.
|
|
46
|
+
"@dudousxd/nestjs-durable-core": "^0.17.0",
|
|
47
47
|
"@dudousxd/nestjs-durable-transport-event-emitter": "^0.4.0"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|