@kronos-ts/eventsourcing 0.2.0 → 0.2.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/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +17 -1
- package/dist/schedule.js.map +1 -1
- package/package.json +4 -4
- package/src/schedule.ts +19 -2
package/dist/schedule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpG,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAA;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,cAAc,CAAiC,CAAA;AAE7F,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACvG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,IAAI,EACR,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpG,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAA;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,cAAc,CAAiC,CAAA;AAE7F,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACvG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,EAAE,EAAE,IAAI,EACR,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,EAAE,gBA6BD,CAAA;AAEtB,uEAAuE;AACvE,MAAM,WAAW,qBAAqB;IACpC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC9G,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAAA;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,qBAaD,CAAA;AAE3B;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,OAAO,aAAa,KAAG,OAAO,CAAC,YAAY,CAK/E,CAAA"}
|
package/dist/schedule.js
CHANGED
|
@@ -29,6 +29,14 @@ export const schedule = (async (event, payload, at, metadata) => {
|
|
|
29
29
|
const scheduler = state.resources.get(EVENT_SCHEDULER_KEY.symbol);
|
|
30
30
|
if (!scheduler)
|
|
31
31
|
throw new Error("No event scheduler configured");
|
|
32
|
+
// Reject malformed fire times. A past-but-valid `at` is allowed — it fires
|
|
33
|
+
// ASAP, which is the intended deadline semantic — but an Invalid Date is a
|
|
34
|
+
// caller bug that otherwise behaves inconsistently across schedulers (the
|
|
35
|
+
// in-memory one fires immediately; the postgres one throws on toISOString at
|
|
36
|
+
// insert time). Fail fast and uniformly here instead.
|
|
37
|
+
if (!(at instanceof Date) || Number.isNaN(at.getTime())) {
|
|
38
|
+
throw new Error(`schedule: \`at\` must be a valid Date, received ${String(at)}`);
|
|
39
|
+
}
|
|
32
40
|
const eventMessage = {
|
|
33
41
|
identifier: generateIdentifier(),
|
|
34
42
|
name: event.name,
|
|
@@ -44,7 +52,15 @@ export const schedule = (async (event, payload, at, metadata) => {
|
|
|
44
52
|
* Convenience wrapper over {@link schedule}: fire `delayMs` milliseconds from
|
|
45
53
|
* now instead of at an absolute {@link Date}.
|
|
46
54
|
*/
|
|
47
|
-
export const scheduleAfter = ((event, payload, delayMs, metadata) =>
|
|
55
|
+
export const scheduleAfter = (async (event, payload, delayMs, metadata) => {
|
|
56
|
+
// A non-finite delay (NaN/Infinity) would produce an Invalid Date; reject it
|
|
57
|
+
// here so the error names the actual offending argument. A negative delay is
|
|
58
|
+
// allowed — it resolves to a past time and fires ASAP.
|
|
59
|
+
if (!Number.isFinite(delayMs)) {
|
|
60
|
+
throw new Error(`scheduleAfter: \`delayMs\` must be a finite number, received ${String(delayMs)}`);
|
|
61
|
+
}
|
|
62
|
+
return schedule(event, payload, new Date(Date.now() + delayMs), metadata);
|
|
63
|
+
});
|
|
48
64
|
/**
|
|
49
65
|
* Attempt to cancel a previously {@link schedule}d event from inside a handler.
|
|
50
66
|
* UoW-aware: joins the active transaction, so cancelling then throwing does not
|
package/dist/schedule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,WAAW,EAAoB,MAAM,mBAAmB,CAAA;AACpG,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAU9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC,WAAW,CAAC,gBAAgB,CAAC,CAAA;AAa7F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqB,CAAC,KAAK,EAC9C,KAAyB,EACzB,OAAmB,EACnB,EAAQ,EACR,QAAmB,EACK,EAAE;IAC1B,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAA,CAAC,qBAAqB;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAA+B,CAAA;IAC/F,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAEhE,MAAM,YAAY,GAAiB;QACjC,UAAU,EAAE,kBAAkB,EAAE;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO;QACP,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;QACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;KAC5C,CAAA;IACD,OAAO,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC,CAAqB,CAAA;AAatB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,WAAW,EAAoB,MAAM,mBAAmB,CAAA;AACpG,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAU9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC,WAAW,CAAC,gBAAgB,CAAC,CAAA;AAa7F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqB,CAAC,KAAK,EAC9C,KAAyB,EACzB,OAAmB,EACnB,EAAQ,EACR,QAAmB,EACK,EAAE;IAC1B,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAA,CAAC,qBAAqB;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAA+B,CAAA;IAC/F,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAEhE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,sDAAsD;IACtD,IAAI,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,mDAAmD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,YAAY,GAAiB;QACjC,UAAU,EAAE,kBAAkB,EAAE;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO;QACP,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;QACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;KAC5C,CAAA;IACD,OAAO,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC,CAAqB,CAAA;AAatB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA0B,CAAC,KAAK,EACxD,KAA2B,EAC3B,OAAgB,EAChB,OAAe,EACf,QAAmB,EACnB,EAAE;IACF,6EAA6E;IAC7E,6EAA6E;IAC7E,uDAAuD;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,gEAAgE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACpG,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,QAAoB,CAAC,CAAA;AACvF,CAAC,CAA0B,CAAA;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,KAAoB,EAAyB,EAAE;IAClF,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAA,CAAC,qBAAqB;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAA+B,CAAA;IAC/F,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kronos-ts/eventsourcing",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Event sourcing for Kronos — dynamic-consistency-boundary event store with load/append.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -48,11 +48,11 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@kronos-ts/common": "0.1.1",
|
|
51
|
-
"@kronos-ts/messaging": "0.5.
|
|
52
|
-
"@kronos-ts/modelling": "0.2.
|
|
51
|
+
"@kronos-ts/messaging": "0.5.1",
|
|
52
|
+
"@kronos-ts/modelling": "0.2.4",
|
|
53
53
|
"zod": "^4.3.6"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@kronos-ts/app": "0.3.
|
|
56
|
+
"@kronos-ts/app": "0.3.4"
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/schedule.ts
CHANGED
|
@@ -55,6 +55,15 @@ export const schedule: ScheduleFunction = (async <P extends z.ZodType>(
|
|
|
55
55
|
const scheduler = state.resources.get(EVENT_SCHEDULER_KEY.symbol) as EventScheduler | undefined
|
|
56
56
|
if (!scheduler) throw new Error("No event scheduler configured")
|
|
57
57
|
|
|
58
|
+
// Reject malformed fire times. A past-but-valid `at` is allowed — it fires
|
|
59
|
+
// ASAP, which is the intended deadline semantic — but an Invalid Date is a
|
|
60
|
+
// caller bug that otherwise behaves inconsistently across schedulers (the
|
|
61
|
+
// in-memory one fires immediately; the postgres one throws on toISOString at
|
|
62
|
+
// insert time). Fail fast and uniformly here instead.
|
|
63
|
+
if (!(at instanceof Date) || Number.isNaN(at.getTime())) {
|
|
64
|
+
throw new Error(`schedule: \`at\` must be a valid Date, received ${String(at)}`)
|
|
65
|
+
}
|
|
66
|
+
|
|
58
67
|
const eventMessage: EventMessage = {
|
|
59
68
|
identifier: generateIdentifier(),
|
|
60
69
|
name: event.name,
|
|
@@ -82,12 +91,20 @@ export interface ScheduleAfterFunction {
|
|
|
82
91
|
* Convenience wrapper over {@link schedule}: fire `delayMs` milliseconds from
|
|
83
92
|
* now instead of at an absolute {@link Date}.
|
|
84
93
|
*/
|
|
85
|
-
export const scheduleAfter: ScheduleAfterFunction = ((
|
|
94
|
+
export const scheduleAfter: ScheduleAfterFunction = (async (
|
|
86
95
|
event: EventDescriptor<any>,
|
|
87
96
|
payload: unknown,
|
|
88
97
|
delayMs: number,
|
|
89
98
|
metadata?: Metadata,
|
|
90
|
-
) =>
|
|
99
|
+
) => {
|
|
100
|
+
// A non-finite delay (NaN/Infinity) would produce an Invalid Date; reject it
|
|
101
|
+
// here so the error names the actual offending argument. A negative delay is
|
|
102
|
+
// allowed — it resolves to a past time and fires ASAP.
|
|
103
|
+
if (!Number.isFinite(delayMs)) {
|
|
104
|
+
throw new Error(`scheduleAfter: \`delayMs\` must be a finite number, received ${String(delayMs)}`)
|
|
105
|
+
}
|
|
106
|
+
return schedule(event, payload, new Date(Date.now() + delayMs), metadata as Metadata)
|
|
107
|
+
}) as ScheduleAfterFunction
|
|
91
108
|
|
|
92
109
|
/**
|
|
93
110
|
* Attempt to cancel a previously {@link schedule}d event from inside a handler.
|