atomservices 0.15.3 → 0.15.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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -12
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +23 -12
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("uuidv7");const t=t=>{let{name:n,aggregateType:r}=t,i=({aggregateID:t,payloads:i,_version:a,_createdBy:o,_metadata:s})=>({name:n,aggregateID:t??(0,e.uuidv7)(),aggregateType:r,payloads:i,_version:a,_createdBy:o,_metadata:s??{}});return{transform:e=>({action:i,handler:{name:n,aggregateType:r,transform:e}})}},n=e=>{let t={};return e.forEach(e=>{let{aggregateType:n,name:r}=e;t[n]||(t[n]={}),t[n][r]||(t[n][r]=[]),t[n][r].push(e)}),{resolve:(e,n)=>t[e]?.[n]||[]}},r=e=>{let t={};return e.forEach(e=>{if(t[e.aggregateType]||(t[e.aggregateType]={}),t[e.aggregateType][e.name])throw Error(`Duplicate command handler for ${e.aggregateType} and ${e.name}`);t[e.aggregateType][e.name]=e}),{transform:e=>{let n=t[e.aggregateType]?.[e.name];if(!n)throw Error(`No command handler found for ${e.aggregateType} and ${e.name}`);return n.transform(e)}}},i=t=>({...t,_id:(0,e.uuidv7)(),_createdAt:new Date}),a=e=>{let{EventStore:t,ServiceContainers:a,onReactionError:o}=e,s=a.flatMap(e=>e.CommandHandlers),c=a.flatMap(e=>e.Projections),l=a.flatMap(e=>e.Reactions),u=n(c),d=n(l),f=r(s);return{dispatch:async(e,n)=>{try{let r={},a=f.transform(i(e));await t.append(a);let s=u.resolve(a.aggregateType,a.name);return await Promise.all(s.map(async e=>{r[e.stateType]=await e.project(a)})),d.resolve(a.aggregateType,a.name).forEach(e=>{e.on(a).catch(t=>{let n=t instanceof Error?t:Error(String(t));o&&o({reactionName:e.name,eventName:a.name,eventID:a._id,error:n})})}),n?.(r,void 0),a}catch(e){let t=e instanceof Error?e:Error(String(e));throw n?.({},t),t}},async getVersion(e){return{aggregateID:e,_version:await t.getVersion(e)}}}},o=(...e)=>e.flatMap(e=>Object.values(e)),s=()=>(0,e.uuidv7)();exports.createService=a,exports.defineCommand=t,exports.generateID=s,exports.remap=o;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/defineCommand.ts","../src/common/composeMapper.ts","../src/common/composeCommandHandlers.ts","../src/createService.ts","../src/util.ts"],"sourcesContent":["// src/defineCommand.ts\r\n\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"./core/ICommand\";\r\nimport { IEvent } from \"./core/IEvent\";\r\n\r\nexport const defineCommand = <C extends ICommand, E extends IEvent>(definitions: {\r\n name:
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/defineCommand.ts","../src/common/composeMapper.ts","../src/common/composeCommandHandlers.ts","../src/common/toManagedCommand.ts","../src/createService.ts","../src/util.ts"],"sourcesContent":["// src/defineCommand.ts\r\n\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"./core/ICommand\";\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IManagedCommand } from \"./core/IManagedCommand\";\r\n\r\nexport const defineCommand = <C extends ICommand, E extends IEvent>(definitions: {\r\n name: C[\"name\"];\r\n aggregateType: C[\"aggregateType\"];\r\n}) => {\r\n const { name, aggregateType } = definitions;\r\n\r\n const action = ({\r\n aggregateID,\r\n payloads,\r\n _version,\r\n _createdBy,\r\n _metadata,\r\n }: {\r\n aggregateID?: C[\"aggregateID\"];\r\n payloads: C[\"payloads\"];\r\n _version: C[\"_version\"];\r\n _createdBy: C[\"_createdBy\"];\r\n _metadata?: C[\"_metadata\"];\r\n }): C => ({\r\n name,\r\n aggregateID: aggregateID ?? uuidv7(),\r\n aggregateType,\r\n payloads,\r\n _version,\r\n _createdBy,\r\n _metadata: _metadata ?? ({} as C[\"_metadata\"]),\r\n } as C);\r\n\r\n return {\r\n transform: (fn: (command: IManagedCommand<C>) => E) => ({\r\n action,\r\n handler: {\r\n name,\r\n aggregateType,\r\n transform: fn,\r\n },\r\n })\r\n };\r\n};\r\n","// src/common/composeMapper.ts\r\n\r\n// A generic utility to compose Mappers for Projections and Reactions based on aggregateType and name\r\nexport const composeMapper = <T extends { aggregateType: string; name: string; }>(components: T[]): {\r\n resolve: (aggregateType: string, name: string) => T[];\r\n} => {\r\n const Registry = {} as Record<string, Record<string, T[]>>;\r\n\r\n components.forEach((component) => {\r\n const { aggregateType, name } = component;\r\n if (!Registry[aggregateType]) {\r\n Registry[aggregateType] = {};\r\n }\r\n\r\n if (!Registry[aggregateType][name]) {\r\n Registry[aggregateType][name] = [];\r\n }\r\n\r\n Registry[aggregateType][name].push(component);\r\n });\r\n\r\n return {\r\n // Resolve returns an array of components matching the aggregateType and name, or an empty array if none found\r\n resolve: (aggregateType: string, name: string): T[] =>\r\n Registry[aggregateType]?.[name] || [],\r\n };\r\n};\r\n","// src/common/composeCommandHandlers.ts\r\n\r\nimport { ICommand } from \"../core/ICommand\";\r\nimport { ICommandHandler } from \"../core/ICommandHandler\";\r\nimport { IManagedCommand } from \"../core/IManagedCommand\";\r\n\r\nexport const composeCommandHandlers = (handlers: ICommandHandler[]) => {\r\n const Registry = {} as Record<string, Record<string, ICommandHandler>>;\r\n\r\n handlers.forEach(handler => {\r\n if (!Registry[handler.aggregateType]) {\r\n Registry[handler.aggregateType] = {};\r\n }\r\n\r\n if (Registry[handler.aggregateType][handler.name]) {\r\n throw new Error(`Duplicate command handler for ${handler.aggregateType} and ${handler.name}`);\r\n }\r\n\r\n Registry[handler.aggregateType][handler.name] = handler;\r\n });\r\n\r\n return {\r\n transform: (command: IManagedCommand<ICommand>) => {\r\n const handler = Registry[command.aggregateType]?.[command.name];\r\n\r\n if (!handler) {\r\n throw new Error(`No command handler found for ${command.aggregateType} and ${command.name}`);\r\n }\r\n\r\n return handler.transform(command);\r\n },\r\n };\r\n};\r\n","import { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"../core/ICommand\";\r\nimport { IManagedCommand } from \"../core/IManagedCommand\";\r\n\r\nexport const toManagedCommand = <C extends ICommand>(command: C): IManagedCommand<C> => ({\r\n ...command,\r\n _id: uuidv7(),\r\n _createdAt: new Date(),\r\n});\r\n","// src/createService.ts\r\n\r\nimport { composeMapper } from \"./common/composeMapper\";\r\nimport { composeCommandHandlers } from \"./common/composeCommandHandlers\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IProjection } from \"./core/IProjection\";\r\nimport { IReaction } from \"./core/IReaction\";\r\nimport { IReactionError } from \"./core/IReactionError\";\r\nimport { IService } from \"./core/IService\";\r\nimport { IServiceContainer } from \"./core/IServiceContainer\";\r\nimport { toManagedCommand } from \"./common/toManagedCommand\";\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n ServiceContainers: IServiceContainer[];\r\n onReactionError?: (context: IReactionError) => void;\r\n}): IService => {\r\n const { EventStore, ServiceContainers, onReactionError } = definition;\r\n\r\n // Flatten command handlers, projections, and reactions from each container\r\n const CommandHandlers = ServiceContainers.flatMap((c) => c.CommandHandlers);\r\n const Projections = ServiceContainers.flatMap((c) => c.Projections);\r\n const Reactions = ServiceContainers.flatMap((c) => c.Reactions);\r\n\r\n // Initialize Mappers\r\n const _ProjectionMapper = composeMapper<IProjection>(Projections);\r\n const _ReactionMapper = composeMapper<IReaction>(Reactions);\r\n const _CommandHandler = composeCommandHandlers(CommandHandlers);\r\n\r\n const service: IService = {\r\n dispatch: async (command, afterProjections) => {\r\n try {\r\n const results: Record<string, any> = {};\r\n\r\n const event = _CommandHandler.transform(toManagedCommand(command));\r\n await EventStore.append(event);\r\n\r\n const projections = _ProjectionMapper.resolve(event.aggregateType, event.name);\r\n await Promise.all(\r\n projections.map(async (p) => {\r\n results[p.stateType] = await p.project(event);\r\n })\r\n );\r\n\r\n const reactions = _ReactionMapper.resolve(event.aggregateType, event.name);\r\n reactions.forEach((r) => {\r\n r.on(event).catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n if (onReactionError) {\r\n onReactionError({\r\n reactionName: r.name,\r\n eventName: event.name,\r\n eventID: event._id,\r\n error: wrappedError,\r\n });\r\n }\r\n });\r\n });\r\n\r\n afterProjections?.(results, undefined);\r\n return event;\r\n } catch (error) {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n afterProjections?.({}, wrappedError);\r\n throw wrappedError;\r\n }\r\n },\r\n async getVersion(aggregateID) {\r\n const version = await EventStore.getVersion(aggregateID);\r\n return { aggregateID, _version: version };\r\n }\r\n };\r\n\r\n return service;\r\n};\r\n","import { uuidv7 } from \"uuidv7\";\r\n\r\nexport const remap = <T>(...objs: Record<string, T>[]): T[] =>\r\n objs.flatMap(obj => Object.values(obj));\r\n\r\nexport const generateID = (): string => uuidv7();\r\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -13,22 +13,33 @@ interface IEvent<Payloads extends Record<string, unknown> = {}, Metadata extends
|
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region src/core/ICommand.d.ts
|
|
15
15
|
interface ICommand<E extends IEvent = IEvent, Payloads = E["payloads"], Metadata = E["_metadata"]> {
|
|
16
|
-
_id: string;
|
|
17
16
|
name: string;
|
|
18
17
|
aggregateID: string;
|
|
19
18
|
aggregateType: string;
|
|
20
19
|
payloads: Payloads;
|
|
21
20
|
_version: number;
|
|
22
|
-
_createdAt: Date;
|
|
23
21
|
_createdBy: string;
|
|
24
22
|
_metadata: Metadata;
|
|
25
23
|
}
|
|
26
24
|
//#endregion
|
|
25
|
+
//#region src/core/IManagedCommand.d.ts
|
|
26
|
+
interface IManagedCommand<C extends ICommand> {
|
|
27
|
+
_id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
aggregateID: string;
|
|
30
|
+
aggregateType: string;
|
|
31
|
+
payloads: C["payloads"];
|
|
32
|
+
_version: number;
|
|
33
|
+
_createdAt: Date;
|
|
34
|
+
_createdBy: string;
|
|
35
|
+
_metadata: C["_metadata"];
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
27
38
|
//#region src/core/ICommandHandler.d.ts
|
|
28
39
|
interface ICommandHandler<Command extends ICommand = ICommand, Event extends IEvent = IEvent> {
|
|
29
40
|
name: string;
|
|
30
41
|
aggregateType: string;
|
|
31
|
-
transform: (command: Command) => Event;
|
|
42
|
+
transform: (command: IManagedCommand<Command>) => Event;
|
|
32
43
|
}
|
|
33
44
|
//#endregion
|
|
34
45
|
//#region src/core/IEventStore.d.ts
|
|
@@ -91,9 +102,9 @@ interface IService {
|
|
|
91
102
|
* 4. Project: Update the State Store (Read Models) via Projections.
|
|
92
103
|
* 5. React: Trigger side-effects (e.g., emails, external APIs) via Reactions.
|
|
93
104
|
* * @param command - The ICommand object representing the intent.
|
|
94
|
-
* @param
|
|
105
|
+
* @param afterProjections - Optional callback executed after the state is synchronized.
|
|
95
106
|
*/
|
|
96
|
-
dispatch: (command: ICommand,
|
|
107
|
+
dispatch: (command: ICommand, afterProjections?: (results: Record<string, any>, error?: Error) => void) => Promise<IEvent<any>>;
|
|
97
108
|
getVersion: (aggregateID: string) => Promise<{
|
|
98
109
|
aggregateID: string;
|
|
99
110
|
_version: number;
|
|
@@ -110,10 +121,10 @@ interface IServiceContainer {
|
|
|
110
121
|
//#endregion
|
|
111
122
|
//#region src/defineCommand.d.ts
|
|
112
123
|
declare const defineCommand: <C extends ICommand, E extends IEvent>(definitions: {
|
|
113
|
-
name:
|
|
114
|
-
aggregateType:
|
|
124
|
+
name: C["name"];
|
|
125
|
+
aggregateType: C["aggregateType"];
|
|
115
126
|
}) => {
|
|
116
|
-
transform: (fn: (command: C) => E) => {
|
|
127
|
+
transform: (fn: (command: IManagedCommand<C>) => E) => {
|
|
117
128
|
action: ({
|
|
118
129
|
aggregateID,
|
|
119
130
|
payloads,
|
|
@@ -121,16 +132,16 @@ declare const defineCommand: <C extends ICommand, E extends IEvent>(definitions:
|
|
|
121
132
|
_createdBy,
|
|
122
133
|
_metadata
|
|
123
134
|
}: {
|
|
124
|
-
aggregateID?:
|
|
135
|
+
aggregateID?: C["aggregateID"];
|
|
125
136
|
payloads: C["payloads"];
|
|
126
137
|
_version: C["_version"];
|
|
127
138
|
_createdBy: C["_createdBy"];
|
|
128
139
|
_metadata?: C["_metadata"];
|
|
129
140
|
}) => C;
|
|
130
141
|
handler: {
|
|
131
|
-
name:
|
|
132
|
-
aggregateType:
|
|
133
|
-
transform: (command: C) => E;
|
|
142
|
+
name: C["name"];
|
|
143
|
+
aggregateType: C["aggregateType"];
|
|
144
|
+
transform: (command: IManagedCommand<C>) => E;
|
|
134
145
|
};
|
|
135
146
|
};
|
|
136
147
|
};
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/IEvent.ts","../src/core/ICommand.ts","../src/core/ICommandHandler.ts","../src/core/IEventStore.ts","../src/core/IProjection.ts","../src/core/IReaction.ts","../src/core/IReactionError.ts","../src/core/IReducer.ts","../src/core/IService.ts","../src/core/IServiceContainer.ts","../src/defineCommand.ts","../src/createService.ts","../src/util.ts"],"mappings":";UAEiB,MAAA,kBAAwB,MAAA,yCAA+C,MAAA;EACtF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,QAAA,WAAmB,MAAA,GAAS,MAAA,aAAmB,CAAA,yBAA0B,CAAA;EACxF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/IEvent.ts","../src/core/ICommand.ts","../src/core/IManagedCommand.ts","../src/core/ICommandHandler.ts","../src/core/IEventStore.ts","../src/core/IProjection.ts","../src/core/IReaction.ts","../src/core/IReactionError.ts","../src/core/IReducer.ts","../src/core/IService.ts","../src/core/IServiceContainer.ts","../src/defineCommand.ts","../src/createService.ts","../src/util.ts"],"mappings":";UAEiB,MAAA,kBAAwB,MAAA,yCAA+C,MAAA;EACtF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,QAAA,WAAmB,MAAA,GAAS,MAAA,aAAmB,CAAA,yBAA0B,CAAA;EACxF,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,eAAA,WAA0B,QAAA;EACzC,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,CAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,CAAA;AAAA;;;UCTI,eAAA,iBAAgC,QAAA,GAAW,QAAA,gBAAwB,MAAA,GAAS,MAAA;EAC3F,IAAA;EACA,aAAA;EACA,SAAA,GAAY,OAAA,EAAS,eAAA,CAAgB,OAAA,MAAa,KAAA;AAAA;;;UCHnC,WAAA;EACf,MAAA,GAAS,KAAA,EAAO,MAAA,KAAW,OAAA;EAC3B,UAAA,GAAa,WAAA,aAAwB,OAAA;AAAA;;;AJJvC;;;;;AAAA,UKOiB,WAAA,eAA0B,MAAA,GAAS,MAAA;EAClD,IAAA;EACA,aAAA;EACA,SAAA;EACA,OAAA,GAAU,KAAA,EAAO,KAAA,KAAU,OAAA;AAAA;;;ALX7B;;;;;AAAA,UMKiB,SAAA,eAAwB,MAAA,GAAS,MAAA;EAChD,IAAA;EACA,aAAA;EACA,EAAA,GAAK,KAAA,EAAO,KAAA,KAAU,OAAA;AAAA;;;UCVP,cAAA;EACf,YAAA;EACA,SAAA;EACA,OAAA;EACA,KAAA,EAAO,KAAK;AAAA;;;APFd;;;;;AAAA,UQOiB,QAAA;EAAA,CACd,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,GAAS,KAAA;AAAA;;;UCLhB,QAAA;ETHM;;;;;;;;;;;ESerB,QAAA,GAAW,OAAA,EAAS,QAAA,EAAU,gBAAA,IAAoB,OAAA,EAAS,MAAA,eAAqB,KAAA,GAAQ,KAAA,cAAmB,OAAA,CAAQ,MAAA;EAGnH,UAAA,GAAa,WAAA,aAAwB,OAAA;IAAU,WAAA;IAAqB,QAAA;EAAA;AAAA;;;UChBrD,iBAAA;EACf,aAAA;EACA,eAAA,EAAiB,eAAA;EACjB,WAAA,EAAa,WAAA;EACb,SAAA,EAAW,SAAA;AAAA;;;cCDA,aAAA,aAA2B,QAAA,YAAoB,MAAA,EAAQ,WAAA;EAClE,IAAA,EAAM,CAAA;EACN,aAAA,EAAe,CAAA;AAAA;mBA2BI,OAAA,EAAS,eAAA,CAAgB,CAAA,MAAO,CAAA;;;;;;;;MAhBjD,WAAA,GAAc,CAAA;MACd,QAAA,EAAU,CAAA;MACV,QAAA,EAAU,CAAA;MACV,UAAA,EAAY,CAAA;MACZ,SAAA,GAAY,CAAA;IAAA,MACV,CAAA;;;;2BAWwB,eAAA,CAAgB,CAAA,MAAO,CAAA;IAAA;EAAA;AAAA;;;cCxBxC,aAAA,GAAiB,UAAA;EAC5B,UAAA,EAAY,WAAA;EACZ,iBAAA,EAAmB,iBAAA;EACnB,eAAA,IAAmB,OAAA,EAAS,cAAA;AAAA,MAC1B,QAAA;;;cCdS,KAAA,SAAe,IAAA,EAAM,MAAA,SAAe,CAAA,QAAO,CAAA;AAAA,cAG3C,UAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -13,22 +13,33 @@ interface IEvent<Payloads extends Record<string, unknown> = {}, Metadata extends
|
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region src/core/ICommand.d.ts
|
|
15
15
|
interface ICommand<E extends IEvent = IEvent, Payloads = E["payloads"], Metadata = E["_metadata"]> {
|
|
16
|
-
_id: string;
|
|
17
16
|
name: string;
|
|
18
17
|
aggregateID: string;
|
|
19
18
|
aggregateType: string;
|
|
20
19
|
payloads: Payloads;
|
|
21
20
|
_version: number;
|
|
22
|
-
_createdAt: Date;
|
|
23
21
|
_createdBy: string;
|
|
24
22
|
_metadata: Metadata;
|
|
25
23
|
}
|
|
26
24
|
//#endregion
|
|
25
|
+
//#region src/core/IManagedCommand.d.ts
|
|
26
|
+
interface IManagedCommand<C extends ICommand> {
|
|
27
|
+
_id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
aggregateID: string;
|
|
30
|
+
aggregateType: string;
|
|
31
|
+
payloads: C["payloads"];
|
|
32
|
+
_version: number;
|
|
33
|
+
_createdAt: Date;
|
|
34
|
+
_createdBy: string;
|
|
35
|
+
_metadata: C["_metadata"];
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
27
38
|
//#region src/core/ICommandHandler.d.ts
|
|
28
39
|
interface ICommandHandler<Command extends ICommand = ICommand, Event extends IEvent = IEvent> {
|
|
29
40
|
name: string;
|
|
30
41
|
aggregateType: string;
|
|
31
|
-
transform: (command: Command) => Event;
|
|
42
|
+
transform: (command: IManagedCommand<Command>) => Event;
|
|
32
43
|
}
|
|
33
44
|
//#endregion
|
|
34
45
|
//#region src/core/IEventStore.d.ts
|
|
@@ -91,9 +102,9 @@ interface IService {
|
|
|
91
102
|
* 4. Project: Update the State Store (Read Models) via Projections.
|
|
92
103
|
* 5. React: Trigger side-effects (e.g., emails, external APIs) via Reactions.
|
|
93
104
|
* * @param command - The ICommand object representing the intent.
|
|
94
|
-
* @param
|
|
105
|
+
* @param afterProjections - Optional callback executed after the state is synchronized.
|
|
95
106
|
*/
|
|
96
|
-
dispatch: (command: ICommand,
|
|
107
|
+
dispatch: (command: ICommand, afterProjections?: (results: Record<string, any>, error?: Error) => void) => Promise<IEvent<any>>;
|
|
97
108
|
getVersion: (aggregateID: string) => Promise<{
|
|
98
109
|
aggregateID: string;
|
|
99
110
|
_version: number;
|
|
@@ -110,10 +121,10 @@ interface IServiceContainer {
|
|
|
110
121
|
//#endregion
|
|
111
122
|
//#region src/defineCommand.d.ts
|
|
112
123
|
declare const defineCommand: <C extends ICommand, E extends IEvent>(definitions: {
|
|
113
|
-
name:
|
|
114
|
-
aggregateType:
|
|
124
|
+
name: C["name"];
|
|
125
|
+
aggregateType: C["aggregateType"];
|
|
115
126
|
}) => {
|
|
116
|
-
transform: (fn: (command: C) => E) => {
|
|
127
|
+
transform: (fn: (command: IManagedCommand<C>) => E) => {
|
|
117
128
|
action: ({
|
|
118
129
|
aggregateID,
|
|
119
130
|
payloads,
|
|
@@ -121,16 +132,16 @@ declare const defineCommand: <C extends ICommand, E extends IEvent>(definitions:
|
|
|
121
132
|
_createdBy,
|
|
122
133
|
_metadata
|
|
123
134
|
}: {
|
|
124
|
-
aggregateID?:
|
|
135
|
+
aggregateID?: C["aggregateID"];
|
|
125
136
|
payloads: C["payloads"];
|
|
126
137
|
_version: C["_version"];
|
|
127
138
|
_createdBy: C["_createdBy"];
|
|
128
139
|
_metadata?: C["_metadata"];
|
|
129
140
|
}) => C;
|
|
130
141
|
handler: {
|
|
131
|
-
name:
|
|
132
|
-
aggregateType:
|
|
133
|
-
transform: (command: C) => E;
|
|
142
|
+
name: C["name"];
|
|
143
|
+
aggregateType: C["aggregateType"];
|
|
144
|
+
transform: (command: IManagedCommand<C>) => E;
|
|
134
145
|
};
|
|
135
146
|
};
|
|
136
147
|
};
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/IEvent.ts","../src/core/ICommand.ts","../src/core/ICommandHandler.ts","../src/core/IEventStore.ts","../src/core/IProjection.ts","../src/core/IReaction.ts","../src/core/IReactionError.ts","../src/core/IReducer.ts","../src/core/IService.ts","../src/core/IServiceContainer.ts","../src/defineCommand.ts","../src/createService.ts","../src/util.ts"],"mappings":";UAEiB,MAAA,kBAAwB,MAAA,yCAA+C,MAAA;EACtF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,QAAA,WAAmB,MAAA,GAAS,MAAA,aAAmB,CAAA,yBAA0B,CAAA;EACxF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/IEvent.ts","../src/core/ICommand.ts","../src/core/IManagedCommand.ts","../src/core/ICommandHandler.ts","../src/core/IEventStore.ts","../src/core/IProjection.ts","../src/core/IReaction.ts","../src/core/IReactionError.ts","../src/core/IReducer.ts","../src/core/IService.ts","../src/core/IServiceContainer.ts","../src/defineCommand.ts","../src/createService.ts","../src/util.ts"],"mappings":";UAEiB,MAAA,kBAAwB,MAAA,yCAA+C,MAAA;EACtF,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,QAAA,WAAmB,MAAA,GAAS,MAAA,aAAmB,CAAA,yBAA0B,CAAA;EACxF,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,QAAA;EACV,QAAA;EACA,UAAA;EACA,SAAA,EAAW,QAAA;AAAA;;;UCPI,eAAA,WAA0B,QAAA;EACzC,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,QAAA,EAAU,CAAA;EACV,QAAA;EACA,UAAA,EAAY,IAAA;EACZ,UAAA;EACA,SAAA,EAAW,CAAA;AAAA;;;UCTI,eAAA,iBAAgC,QAAA,GAAW,QAAA,gBAAwB,MAAA,GAAS,MAAA;EAC3F,IAAA;EACA,aAAA;EACA,SAAA,GAAY,OAAA,EAAS,eAAA,CAAgB,OAAA,MAAa,KAAA;AAAA;;;UCHnC,WAAA;EACf,MAAA,GAAS,KAAA,EAAO,MAAA,KAAW,OAAA;EAC3B,UAAA,GAAa,WAAA,aAAwB,OAAA;AAAA;;;AJJvC;;;;;AAAA,UKOiB,WAAA,eAA0B,MAAA,GAAS,MAAA;EAClD,IAAA;EACA,aAAA;EACA,SAAA;EACA,OAAA,GAAU,KAAA,EAAO,KAAA,KAAU,OAAA;AAAA;;;ALX7B;;;;;AAAA,UMKiB,SAAA,eAAwB,MAAA,GAAS,MAAA;EAChD,IAAA;EACA,aAAA;EACA,EAAA,GAAK,KAAA,EAAO,KAAA,KAAU,OAAA;AAAA;;;UCVP,cAAA;EACf,YAAA;EACA,SAAA;EACA,OAAA;EACA,KAAA,EAAO,KAAK;AAAA;;;APFd;;;;;AAAA,UQOiB,QAAA;EAAA,CACd,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,GAAS,KAAA;AAAA;;;UCLhB,QAAA;ETHM;;;;;;;;;;;ESerB,QAAA,GAAW,OAAA,EAAS,QAAA,EAAU,gBAAA,IAAoB,OAAA,EAAS,MAAA,eAAqB,KAAA,GAAQ,KAAA,cAAmB,OAAA,CAAQ,MAAA;EAGnH,UAAA,GAAa,WAAA,aAAwB,OAAA;IAAU,WAAA;IAAqB,QAAA;EAAA;AAAA;;;UChBrD,iBAAA;EACf,aAAA;EACA,eAAA,EAAiB,eAAA;EACjB,WAAA,EAAa,WAAA;EACb,SAAA,EAAW,SAAA;AAAA;;;cCDA,aAAA,aAA2B,QAAA,YAAoB,MAAA,EAAQ,WAAA;EAClE,IAAA,EAAM,CAAA;EACN,aAAA,EAAe,CAAA;AAAA;mBA2BI,OAAA,EAAS,eAAA,CAAgB,CAAA,MAAO,CAAA;;;;;;;;MAhBjD,WAAA,GAAc,CAAA;MACd,QAAA,EAAU,CAAA;MACV,QAAA,EAAU,CAAA;MACV,UAAA,EAAY,CAAA;MACZ,SAAA,GAAY,CAAA;IAAA,MACV,CAAA;;;;2BAWwB,eAAA,CAAgB,CAAA,MAAO,CAAA;IAAA;EAAA;AAAA;;;cCxBxC,aAAA,GAAiB,UAAA;EAC5B,UAAA,EAAY,WAAA;EACZ,iBAAA,EAAmB,iBAAA;EACnB,eAAA,IAAmB,OAAA,EAAS,cAAA;AAAA,MAC1B,QAAA;;;cCdS,KAAA,SAAe,IAAA,EAAM,MAAA,SAAe,CAAA,QAAO,CAAA;AAAA,cAG3C,UAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{uuidv7 as e}from"uuidv7";const t=t=>{let{name:n,aggregateType:r}=t,i=({aggregateID:t,payloads:i,_version:a,_createdBy:o,_metadata:s})=>({
|
|
1
|
+
import{uuidv7 as e}from"uuidv7";const t=t=>{let{name:n,aggregateType:r}=t,i=({aggregateID:t,payloads:i,_version:a,_createdBy:o,_metadata:s})=>({name:n,aggregateID:t??e(),aggregateType:r,payloads:i,_version:a,_createdBy:o,_metadata:s??{}});return{transform:e=>({action:i,handler:{name:n,aggregateType:r,transform:e}})}},n=e=>{let t={};return e.forEach(e=>{let{aggregateType:n,name:r}=e;t[n]||(t[n]={}),t[n][r]||(t[n][r]=[]),t[n][r].push(e)}),{resolve:(e,n)=>t[e]?.[n]||[]}},r=e=>{let t={};return e.forEach(e=>{if(t[e.aggregateType]||(t[e.aggregateType]={}),t[e.aggregateType][e.name])throw Error(`Duplicate command handler for ${e.aggregateType} and ${e.name}`);t[e.aggregateType][e.name]=e}),{transform:e=>{let n=t[e.aggregateType]?.[e.name];if(!n)throw Error(`No command handler found for ${e.aggregateType} and ${e.name}`);return n.transform(e)}}},i=t=>({...t,_id:e(),_createdAt:new Date}),a=e=>{let{EventStore:t,ServiceContainers:a,onReactionError:o}=e,s=a.flatMap(e=>e.CommandHandlers),c=a.flatMap(e=>e.Projections),l=a.flatMap(e=>e.Reactions),u=n(c),d=n(l),f=r(s);return{dispatch:async(e,n)=>{try{let r={},a=f.transform(i(e));await t.append(a);let s=u.resolve(a.aggregateType,a.name);return await Promise.all(s.map(async e=>{r[e.stateType]=await e.project(a)})),d.resolve(a.aggregateType,a.name).forEach(e=>{e.on(a).catch(t=>{let n=t instanceof Error?t:Error(String(t));o&&o({reactionName:e.name,eventName:a.name,eventID:a._id,error:n})})}),n?.(r,void 0),a}catch(e){let t=e instanceof Error?e:Error(String(e));throw n?.({},t),t}},async getVersion(e){return{aggregateID:e,_version:await t.getVersion(e)}}}},o=(...e)=>e.flatMap(e=>Object.values(e)),s=()=>e();export{a as createService,t as defineCommand,s as generateID,o as remap};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/defineCommand.ts","../src/common/composeMapper.ts","../src/common/composeCommandHandlers.ts","../src/createService.ts","../src/util.ts"],"sourcesContent":["// src/defineCommand.ts\r\n\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"./core/ICommand\";\r\nimport { IEvent } from \"./core/IEvent\";\r\n\r\nexport const defineCommand = <C extends ICommand, E extends IEvent>(definitions: {\r\n name:
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/defineCommand.ts","../src/common/composeMapper.ts","../src/common/composeCommandHandlers.ts","../src/common/toManagedCommand.ts","../src/createService.ts","../src/util.ts"],"sourcesContent":["// src/defineCommand.ts\r\n\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"./core/ICommand\";\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IManagedCommand } from \"./core/IManagedCommand\";\r\n\r\nexport const defineCommand = <C extends ICommand, E extends IEvent>(definitions: {\r\n name: C[\"name\"];\r\n aggregateType: C[\"aggregateType\"];\r\n}) => {\r\n const { name, aggregateType } = definitions;\r\n\r\n const action = ({\r\n aggregateID,\r\n payloads,\r\n _version,\r\n _createdBy,\r\n _metadata,\r\n }: {\r\n aggregateID?: C[\"aggregateID\"];\r\n payloads: C[\"payloads\"];\r\n _version: C[\"_version\"];\r\n _createdBy: C[\"_createdBy\"];\r\n _metadata?: C[\"_metadata\"];\r\n }): C => ({\r\n name,\r\n aggregateID: aggregateID ?? uuidv7(),\r\n aggregateType,\r\n payloads,\r\n _version,\r\n _createdBy,\r\n _metadata: _metadata ?? ({} as C[\"_metadata\"]),\r\n } as C);\r\n\r\n return {\r\n transform: (fn: (command: IManagedCommand<C>) => E) => ({\r\n action,\r\n handler: {\r\n name,\r\n aggregateType,\r\n transform: fn,\r\n },\r\n })\r\n };\r\n};\r\n","// src/common/composeMapper.ts\r\n\r\n// A generic utility to compose Mappers for Projections and Reactions based on aggregateType and name\r\nexport const composeMapper = <T extends { aggregateType: string; name: string; }>(components: T[]): {\r\n resolve: (aggregateType: string, name: string) => T[];\r\n} => {\r\n const Registry = {} as Record<string, Record<string, T[]>>;\r\n\r\n components.forEach((component) => {\r\n const { aggregateType, name } = component;\r\n if (!Registry[aggregateType]) {\r\n Registry[aggregateType] = {};\r\n }\r\n\r\n if (!Registry[aggregateType][name]) {\r\n Registry[aggregateType][name] = [];\r\n }\r\n\r\n Registry[aggregateType][name].push(component);\r\n });\r\n\r\n return {\r\n // Resolve returns an array of components matching the aggregateType and name, or an empty array if none found\r\n resolve: (aggregateType: string, name: string): T[] =>\r\n Registry[aggregateType]?.[name] || [],\r\n };\r\n};\r\n","// src/common/composeCommandHandlers.ts\r\n\r\nimport { ICommand } from \"../core/ICommand\";\r\nimport { ICommandHandler } from \"../core/ICommandHandler\";\r\nimport { IManagedCommand } from \"../core/IManagedCommand\";\r\n\r\nexport const composeCommandHandlers = (handlers: ICommandHandler[]) => {\r\n const Registry = {} as Record<string, Record<string, ICommandHandler>>;\r\n\r\n handlers.forEach(handler => {\r\n if (!Registry[handler.aggregateType]) {\r\n Registry[handler.aggregateType] = {};\r\n }\r\n\r\n if (Registry[handler.aggregateType][handler.name]) {\r\n throw new Error(`Duplicate command handler for ${handler.aggregateType} and ${handler.name}`);\r\n }\r\n\r\n Registry[handler.aggregateType][handler.name] = handler;\r\n });\r\n\r\n return {\r\n transform: (command: IManagedCommand<ICommand>) => {\r\n const handler = Registry[command.aggregateType]?.[command.name];\r\n\r\n if (!handler) {\r\n throw new Error(`No command handler found for ${command.aggregateType} and ${command.name}`);\r\n }\r\n\r\n return handler.transform(command);\r\n },\r\n };\r\n};\r\n","import { uuidv7 } from \"uuidv7\";\r\nimport { ICommand } from \"../core/ICommand\";\r\nimport { IManagedCommand } from \"../core/IManagedCommand\";\r\n\r\nexport const toManagedCommand = <C extends ICommand>(command: C): IManagedCommand<C> => ({\r\n ...command,\r\n _id: uuidv7(),\r\n _createdAt: new Date(),\r\n});\r\n","// src/createService.ts\r\n\r\nimport { composeMapper } from \"./common/composeMapper\";\r\nimport { composeCommandHandlers } from \"./common/composeCommandHandlers\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IProjection } from \"./core/IProjection\";\r\nimport { IReaction } from \"./core/IReaction\";\r\nimport { IReactionError } from \"./core/IReactionError\";\r\nimport { IService } from \"./core/IService\";\r\nimport { IServiceContainer } from \"./core/IServiceContainer\";\r\nimport { toManagedCommand } from \"./common/toManagedCommand\";\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n ServiceContainers: IServiceContainer[];\r\n onReactionError?: (context: IReactionError) => void;\r\n}): IService => {\r\n const { EventStore, ServiceContainers, onReactionError } = definition;\r\n\r\n // Flatten command handlers, projections, and reactions from each container\r\n const CommandHandlers = ServiceContainers.flatMap((c) => c.CommandHandlers);\r\n const Projections = ServiceContainers.flatMap((c) => c.Projections);\r\n const Reactions = ServiceContainers.flatMap((c) => c.Reactions);\r\n\r\n // Initialize Mappers\r\n const _ProjectionMapper = composeMapper<IProjection>(Projections);\r\n const _ReactionMapper = composeMapper<IReaction>(Reactions);\r\n const _CommandHandler = composeCommandHandlers(CommandHandlers);\r\n\r\n const service: IService = {\r\n dispatch: async (command, afterProjections) => {\r\n try {\r\n const results: Record<string, any> = {};\r\n\r\n const event = _CommandHandler.transform(toManagedCommand(command));\r\n await EventStore.append(event);\r\n\r\n const projections = _ProjectionMapper.resolve(event.aggregateType, event.name);\r\n await Promise.all(\r\n projections.map(async (p) => {\r\n results[p.stateType] = await p.project(event);\r\n })\r\n );\r\n\r\n const reactions = _ReactionMapper.resolve(event.aggregateType, event.name);\r\n reactions.forEach((r) => {\r\n r.on(event).catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n if (onReactionError) {\r\n onReactionError({\r\n reactionName: r.name,\r\n eventName: event.name,\r\n eventID: event._id,\r\n error: wrappedError,\r\n });\r\n }\r\n });\r\n });\r\n\r\n afterProjections?.(results, undefined);\r\n return event;\r\n } catch (error) {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n afterProjections?.({}, wrappedError);\r\n throw wrappedError;\r\n }\r\n },\r\n async getVersion(aggregateID) {\r\n const version = await EventStore.getVersion(aggregateID);\r\n return { aggregateID, _version: version };\r\n }\r\n };\r\n\r\n return service;\r\n};\r\n","import { uuidv7 } from \"uuidv7\";\r\n\r\nexport const remap = <T>(...objs: Record<string, T>[]): T[] =>\r\n objs.flatMap(obj => Object.values(obj));\r\n\r\nexport const generateID = (): string => uuidv7();\r\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atomservices",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"prepublishOnly": "npm run build"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@types/node": "^
|
|
34
|
-
"tsdown": "^0.
|
|
33
|
+
"@types/node": "^26.0.1",
|
|
34
|
+
"tsdown": "^0.22.3",
|
|
35
35
|
"typescript": "^6.0.3",
|
|
36
|
-
"vitest": "^4.1.
|
|
36
|
+
"vitest": "^4.1.9"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"uuidv7": "^1.2.1"
|