atomservices 0.12.3 → 0.13.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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -31
- package/dist/index.d.ts +38 -31
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var v=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var _=(r,e)=>{for(var o in e)v(r,o,{get:e[o],enumerable:!0})},T=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of A(e))!D.call(r,t)&&t!==o&&v(r,t,{get:()=>e[t],enumerable:!(n=u(e,t))||n.enumerable});return r};var w=r=>T(v({},"__esModule",{value:!0}),r);var h={};_(h,{createService:()=>m,reduceHandlers:()=>p});module.exports=w(h);var g=(...r)=>{let e=r.reduce((n,t)=>{let{name:I}=t;return n[I]===void 0&&(n[I]=t),n},{});return{resolve:n=>e[n.name]}};var m=r=>{let{Identifiers:e,EventStore:o,EventHandlers:n}=r,t,I=async()=>{await o.init()},f=g(...n);return{to:{Identifiers:()=>({AggregateID:()=>e.AggregateID(),EventID:()=>e.EventID()}),EventBuilder:s=>{let{EventName:a,AggregateType:i,EventIdentifier:d=()=>e.EventID(),AggregateIdentifier:c=()=>e.AggregateID()}=s;return({aggregateID:l,_metadata:H,_createdBy:S,_version:y,...x})=>({...x,_id:d(),name:a,aggregateType:i,aggregateID:l??c(),_metadata:H??{},_createdAt:new Date,_createdBy:S,_version:y})}},async dispatch(s,a){t||(t=I()),await t;try{await o.append(s);let i=f.resolve(s);i?i.handle(s).then(()=>{a&&a()}).catch(d=>{let c=d instanceof Error?d:new Error(String(d));a&&a(c)}):a&&a()}catch(i){let d=i instanceof Error?i:new Error(String(i));throw a&&a(d),d}}}};var p=(...r)=>r.flatMap(e=>Object.values(e));0&&(module.exports={createService,reduceHandlers});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/composeEventHandlers.ts","../src/createService.ts","../src/reduceHandlers.ts"],"sourcesContent":["export type { IEvent } from \"./core/IEvent\";\r\nexport type { IEventHandler } from \"./core/IEventHandler\";\r\nexport type { IEventHandlers } from \"./core/IEventHandlers\";\r\nexport type { IEventStore } from \"./core/IEventStore\";\r\nexport type { IIdentifiers } from \"./core/IIdentifiers\";\r\nexport type { IReducer } from \"./core/IReducer\";\r\n\r\nexport type { IService } from \"./IService\";\r\n\r\nexport { createService } from \"./createService\";\r\nexport { reduceHandlers } from \"./reduceHandlers\";\r\n","import { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IEventHandlers } from \"./core/IEventHandlers\";\r\n\r\nexport const composeEventHandlers = (...handlers: IEventHandler[]) => {\r\n const HANDLERS_MAP = handlers.reduce((result, handler) => {\r\n const { name } = handler;\r\n\r\n if (result[name] === undefined) {\r\n result[name] = handler;\r\n } else {\r\n\r\n }\r\n\r\n return result;\r\n }, {} as Record<string, IEventHandler>);\r\n\r\n const Handlers: IEventHandlers = {\r\n resolve: (event) =>\r\n HANDLERS_MAP[event.name],\r\n };\r\n\r\n return Handlers;\r\n};\r\n","// src/createService.ts\r\n\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IIdentifiers } from \"./core/IIdentifiers\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IService } from \"./IService\";\r\nimport { composeEventHandlers } from \"./composeEventHandlers\";\r\n\r\nexport const createService = (definition: {\r\n Identifiers: IIdentifiers;\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n}): IService => {\r\n const { Identifiers, EventStore, EventHandlers } = definition;\r\n\r\n let _initPromise: Promise<void> | undefined = undefined;\r\n\r\n const initialize = async (): Promise<void> => {\r\n await EventStore.init();\r\n };\r\n\r\n const EVENT_HANDLERS = composeEventHandlers(...EventHandlers);\r\n\r\n return {\r\n to: {\r\n Identifiers: () => ({\r\n AggregateID: () => Identifiers.AggregateID(),\r\n EventID: () => Identifiers.EventID(),\r\n }),\r\n EventBuilder: <T extends IEvent>(definition: {\r\n EventName: string;\r\n AggregateType: string;\r\n AggregateIdentifier?: () => string;\r\n EventIdentifier?: () => string;\r\n }) => {\r\n const {\r\n EventName,\r\n AggregateType,\r\n EventIdentifier = () => Identifiers.EventID(),\r\n AggregateIdentifier = () => Identifiers.AggregateID(),\r\n } = definition;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\r\n _createdBy,\r\n _version,\r\n ...props\r\n }: Omit<T, \"_id\" | \"name\" | \"aggregateID\" | \"aggregateType\" | \"_createdAt\" | \"_metadata\"> & {\r\n aggregateID?: string;\r\n _metadata?: T[\"_metadata\"];\r\n }): T => ({\r\n ...props,\r\n _id: EventIdentifier(),\r\n name: EventName,\r\n aggregateType: AggregateType,\r\n aggregateID: aggregateID ?? AggregateIdentifier(),\r\n _metadata: _metadata ?? ({} as T[\"_metadata\"]),\r\n _createdAt: new Date(),\r\n _createdBy,\r\n _version,\r\n } as T);\r\n },\r\n },\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n if (!_initPromise) {\r\n _initPromise = initialize();\r\n }\r\n\r\n await _initPromise;\r\n\r\n try {\r\n await EventStore.append(event);\r\n\r\n const handler = EVENT_HANDLERS.resolve(event);\r\n\r\n if (handler) {\r\n handler.handle(event)\r\n .then(() => {\r\n if (notified)\r\n notified();\r\n })\r\n .catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n\r\n if (notified)\r\n notified(wrappedError);\r\n });\r\n } else {\r\n if (notified)\r\n notified();\r\n }\r\n } catch (error) {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n\r\n if (notified)\r\n notified(wrappedError);\r\n\r\n throw wrappedError;\r\n }\r\n },\r\n };\r\n};\r\n","import { IEventHandler } from \"./core/IEventHandler\";\r\n\r\nexport const reduceHandlers = (...objs: Record<string, IEventHandler>[]): IEventHandler[] =>\r\n objs.flatMap(obj => Object.values(obj));\r\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,mBAAAC,IAAA,eAAAC,EAAAJ,GCGO,IAAMK,EAAuB,IAAIC,IAA8B,CACpE,IAAMC,EAAeD,EAAS,OAAO,CAACE,EAAQC,IAAY,CACxD,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEjB,OAAID,EAAOE,CAAI,IAAM,SACnBF,EAAOE,CAAI,EAAID,GAKVD,CACT,EAAG,CAAC,CAAkC,EAOtC,MALiC,CAC/B,QAAUG,GACRJ,EAAaI,EAAM,IAAI,CAC3B,CAGF,ECbO,IAAMC,EAAiBC,GAId,CACd,GAAM,CAAE,YAAAC,EAAa,WAAAC,EAAY,cAAAC,CAAc,EAAIH,EAE/CI,EAEEC,EAAa,SAA2B,CAC5C,MAAMH,EAAW,KAAK,CACxB,EAEMI,EAAiBC,EAAqB,GAAGJ,CAAa,EAE5D,MAAO,CACL,GAAI,CACF,YAAa,KAAO,CAClB,YAAa,IAAMF,EAAY,YAAY,EAC3C,QAAS,IAAMA,EAAY,QAAQ,CACrC,GACA,aAAiCD,GAK3B,CACJ,GAAM,CACJ,UAAAQ,EACA,cAAAC,EACA,gBAAAC,EAAkB,IAAMT,EAAY,QAAQ,EAC5C,oBAAAU,EAAsB,IAAMV,EAAY,YAAY,CACtD,EAAID,EAEJ,MAAO,CAAC,CACN,YAAAY,EACA,UAAAC,EACA,WAAAC,EACA,SAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKN,EAAgB,EACrB,KAAMF,EACN,cAAeC,EACf,YAAaG,GAAeD,EAAoB,EAChD,UAAWE,GAAc,CAAC,EAC1B,WAAY,IAAI,KAChB,WAAAC,EACA,SAAAC,CACF,EACF,CACF,EACA,MAAM,SAASE,EAAeC,EAAmD,CAC1Ed,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOe,CAAK,EAE7B,IAAME,EAAUb,EAAe,QAAQW,CAAK,EAExCE,EACFA,EAAQ,OAAOF,CAAK,EACjB,KAAK,IAAM,CACNC,GACFA,EAAS,CACb,CAAC,EACA,MAAOE,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAEzEF,GACFA,EAASG,CAAY,CACzB,CAAC,EAECH,GACFA,EAAS,CAEf,OAASE,EAAO,CACd,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAE7E,MAAIF,GACFA,EAASG,CAAY,EAEjBA,CACR,CACF,CACF,CACF,ECrGO,IAAMC,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["index_exports","__export","createService","reduceHandlers","__toCommonJS","composeEventHandlers","handlers","HANDLERS_MAP","result","handler","name","event","createService","definition","Identifiers","EventStore","EventHandlers","_initPromise","initialize","EVENT_HANDLERS","composeEventHandlers","EventName","AggregateType","EventIdentifier","AggregateIdentifier","aggregateID","_metadata","_createdBy","_version","props","event","notified","handler","error","wrappedError","reduceHandlers","objs","obj"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -12,22 +12,21 @@ interface IEvent<Payloads = any, Metadata extends Record<string, unknown> = {}>
|
|
|
12
12
|
|
|
13
13
|
interface IEventHandler<E extends IEvent = IEvent> {
|
|
14
14
|
name: string;
|
|
15
|
-
handle(event: E)
|
|
15
|
+
handle: (event: E) => Promise<void>;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
interface
|
|
19
|
-
|
|
20
|
-
publish(event: IEvent): Promise<void>;
|
|
21
|
-
subscribe(handler: IEventHandler): void;
|
|
18
|
+
interface IEventHandlers {
|
|
19
|
+
resolve: (event: IEvent) => IEventHandler;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
interface
|
|
25
|
-
|
|
22
|
+
interface IEventStore {
|
|
23
|
+
init: () => Promise<void>;
|
|
24
|
+
append: (event: IEvent) => Promise<void>;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
interface
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
interface IIdentifiers {
|
|
28
|
+
AggregateID: () => string;
|
|
29
|
+
EventID: () => string;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
/**
|
|
@@ -39,31 +38,39 @@ interface IReducer<T> {
|
|
|
39
38
|
(state: T, event: IEvent): T;
|
|
40
39
|
}
|
|
41
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Callback triggered after the background handler finishes execution.
|
|
43
|
+
* If the handler failed, the error is passed as the first argument.
|
|
44
|
+
*/
|
|
45
|
+
type DispatchCallback = (error?: Error) => void;
|
|
46
|
+
interface IService {
|
|
47
|
+
to: {
|
|
48
|
+
Identifiers: () => IIdentifiers;
|
|
49
|
+
EventBuilder: <T extends IEvent>(definition: {
|
|
50
|
+
EventName: string;
|
|
51
|
+
AggregateType: string;
|
|
52
|
+
AggregateIdentifier?: () => string;
|
|
53
|
+
EventIdentifier?: () => string;
|
|
54
|
+
}) => (props: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
|
|
55
|
+
aggregateID?: string;
|
|
56
|
+
_metadata?: T["_metadata"];
|
|
57
|
+
}) => T;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Persists an event to the Store and triggers the handler in the background.
|
|
61
|
+
* * @param event The event to dispatch.
|
|
62
|
+
* @param afterHandler Optional callback triggered after background processing is complete.
|
|
63
|
+
* @returns A promise that resolves as soon as the event is successfully stored.
|
|
64
|
+
*/
|
|
65
|
+
dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
|
|
42
68
|
declare const createService: (definition: {
|
|
69
|
+
Identifiers: IIdentifiers;
|
|
43
70
|
EventStore: IEventStore;
|
|
44
71
|
EventHandlers: IEventHandler[];
|
|
45
|
-
EventBus: IEventBus;
|
|
46
72
|
}) => IService;
|
|
47
73
|
|
|
48
|
-
declare const EventBuilder: <T extends IEvent>(definition: {
|
|
49
|
-
EventName: string;
|
|
50
|
-
AggregateType: string;
|
|
51
|
-
AggregateIdentifier?: () => string;
|
|
52
|
-
EventIdentifier?: () => string;
|
|
53
|
-
}) => ({ aggregateID, _metadata, ...props }: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
|
|
54
|
-
aggregateID?: string;
|
|
55
|
-
_metadata?: T["_metadata"];
|
|
56
|
-
}) => T;
|
|
57
|
-
|
|
58
|
-
declare class InstantEventBus implements IEventBus {
|
|
59
|
-
private handlers;
|
|
60
|
-
connect(): Promise<void>;
|
|
61
|
-
subscribe(handler: IEventHandler): void;
|
|
62
|
-
publish(event: IEvent): Promise<void>;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
declare const generateUUID: () => string;
|
|
66
|
-
|
|
67
74
|
declare const reduceHandlers: (...objs: Record<string, IEventHandler>[]) => IEventHandler[];
|
|
68
75
|
|
|
69
|
-
export {
|
|
76
|
+
export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, createService, reduceHandlers };
|
package/dist/index.d.ts
CHANGED
|
@@ -12,22 +12,21 @@ interface IEvent<Payloads = any, Metadata extends Record<string, unknown> = {}>
|
|
|
12
12
|
|
|
13
13
|
interface IEventHandler<E extends IEvent = IEvent> {
|
|
14
14
|
name: string;
|
|
15
|
-
handle(event: E)
|
|
15
|
+
handle: (event: E) => Promise<void>;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
interface
|
|
19
|
-
|
|
20
|
-
publish(event: IEvent): Promise<void>;
|
|
21
|
-
subscribe(handler: IEventHandler): void;
|
|
18
|
+
interface IEventHandlers {
|
|
19
|
+
resolve: (event: IEvent) => IEventHandler;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
interface
|
|
25
|
-
|
|
22
|
+
interface IEventStore {
|
|
23
|
+
init: () => Promise<void>;
|
|
24
|
+
append: (event: IEvent) => Promise<void>;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
interface
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
interface IIdentifiers {
|
|
28
|
+
AggregateID: () => string;
|
|
29
|
+
EventID: () => string;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
/**
|
|
@@ -39,31 +38,39 @@ interface IReducer<T> {
|
|
|
39
38
|
(state: T, event: IEvent): T;
|
|
40
39
|
}
|
|
41
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Callback triggered after the background handler finishes execution.
|
|
43
|
+
* If the handler failed, the error is passed as the first argument.
|
|
44
|
+
*/
|
|
45
|
+
type DispatchCallback = (error?: Error) => void;
|
|
46
|
+
interface IService {
|
|
47
|
+
to: {
|
|
48
|
+
Identifiers: () => IIdentifiers;
|
|
49
|
+
EventBuilder: <T extends IEvent>(definition: {
|
|
50
|
+
EventName: string;
|
|
51
|
+
AggregateType: string;
|
|
52
|
+
AggregateIdentifier?: () => string;
|
|
53
|
+
EventIdentifier?: () => string;
|
|
54
|
+
}) => (props: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
|
|
55
|
+
aggregateID?: string;
|
|
56
|
+
_metadata?: T["_metadata"];
|
|
57
|
+
}) => T;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Persists an event to the Store and triggers the handler in the background.
|
|
61
|
+
* * @param event The event to dispatch.
|
|
62
|
+
* @param afterHandler Optional callback triggered after background processing is complete.
|
|
63
|
+
* @returns A promise that resolves as soon as the event is successfully stored.
|
|
64
|
+
*/
|
|
65
|
+
dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
|
|
42
68
|
declare const createService: (definition: {
|
|
69
|
+
Identifiers: IIdentifiers;
|
|
43
70
|
EventStore: IEventStore;
|
|
44
71
|
EventHandlers: IEventHandler[];
|
|
45
|
-
EventBus: IEventBus;
|
|
46
72
|
}) => IService;
|
|
47
73
|
|
|
48
|
-
declare const EventBuilder: <T extends IEvent>(definition: {
|
|
49
|
-
EventName: string;
|
|
50
|
-
AggregateType: string;
|
|
51
|
-
AggregateIdentifier?: () => string;
|
|
52
|
-
EventIdentifier?: () => string;
|
|
53
|
-
}) => ({ aggregateID, _metadata, ...props }: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
|
|
54
|
-
aggregateID?: string;
|
|
55
|
-
_metadata?: T["_metadata"];
|
|
56
|
-
}) => T;
|
|
57
|
-
|
|
58
|
-
declare class InstantEventBus implements IEventBus {
|
|
59
|
-
private handlers;
|
|
60
|
-
connect(): Promise<void>;
|
|
61
|
-
subscribe(handler: IEventHandler): void;
|
|
62
|
-
publish(event: IEvent): Promise<void>;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
declare const generateUUID: () => string;
|
|
66
|
-
|
|
67
74
|
declare const reduceHandlers: (...objs: Record<string, IEventHandler>[]) => IEventHandler[];
|
|
68
75
|
|
|
69
|
-
export {
|
|
76
|
+
export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, createService, reduceHandlers };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var g=(...i)=>{let r=i.reduce((a,o)=>{let{name:s}=o;return a[s]===void 0&&(a[s]=o),a},{});return{resolve:a=>r[a.name]}};var y=i=>{let{Identifiers:r,EventStore:I,EventHandlers:a}=i,o,s=async()=>{await I.init()},m=g(...a);return{to:{Identifiers:()=>({AggregateID:()=>r.AggregateID(),EventID:()=>r.EventID()}),EventBuilder:d=>{let{EventName:e,AggregateType:t,EventIdentifier:n=()=>r.EventID(),AggregateIdentifier:c=()=>r.AggregateID()}=d;return({aggregateID:p,_metadata:f,_createdBy:l,_version:H,...S})=>({...S,_id:n(),name:e,aggregateType:t,aggregateID:p??c(),_metadata:f??{},_createdAt:new Date,_createdBy:l,_version:H})}},async dispatch(d,e){o||(o=s()),await o;try{await I.append(d);let t=m.resolve(d);t?t.handle(d).then(()=>{e&&e()}).catch(n=>{let c=n instanceof Error?n:new Error(String(n));e&&e(c)}):e&&e()}catch(t){let n=t instanceof Error?t:new Error(String(t));throw e&&e(n),n}}}};var x=(...i)=>i.flatMap(r=>Object.values(r));export{y as createService,x as reduceHandlers};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/composeEventHandlers.ts","../src/createService.ts","../src/reduceHandlers.ts"],"sourcesContent":["import { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IEventHandlers } from \"./core/IEventHandlers\";\r\n\r\nexport const composeEventHandlers = (...handlers: IEventHandler[]) => {\r\n const HANDLERS_MAP = handlers.reduce((result, handler) => {\r\n const { name } = handler;\r\n\r\n if (result[name] === undefined) {\r\n result[name] = handler;\r\n } else {\r\n\r\n }\r\n\r\n return result;\r\n }, {} as Record<string, IEventHandler>);\r\n\r\n const Handlers: IEventHandlers = {\r\n resolve: (event) =>\r\n HANDLERS_MAP[event.name],\r\n };\r\n\r\n return Handlers;\r\n};\r\n","// src/createService.ts\r\n\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IIdentifiers } from \"./core/IIdentifiers\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IService } from \"./IService\";\r\nimport { composeEventHandlers } from \"./composeEventHandlers\";\r\n\r\nexport const createService = (definition: {\r\n Identifiers: IIdentifiers;\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n}): IService => {\r\n const { Identifiers, EventStore, EventHandlers } = definition;\r\n\r\n let _initPromise: Promise<void> | undefined = undefined;\r\n\r\n const initialize = async (): Promise<void> => {\r\n await EventStore.init();\r\n };\r\n\r\n const EVENT_HANDLERS = composeEventHandlers(...EventHandlers);\r\n\r\n return {\r\n to: {\r\n Identifiers: () => ({\r\n AggregateID: () => Identifiers.AggregateID(),\r\n EventID: () => Identifiers.EventID(),\r\n }),\r\n EventBuilder: <T extends IEvent>(definition: {\r\n EventName: string;\r\n AggregateType: string;\r\n AggregateIdentifier?: () => string;\r\n EventIdentifier?: () => string;\r\n }) => {\r\n const {\r\n EventName,\r\n AggregateType,\r\n EventIdentifier = () => Identifiers.EventID(),\r\n AggregateIdentifier = () => Identifiers.AggregateID(),\r\n } = definition;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\r\n _createdBy,\r\n _version,\r\n ...props\r\n }: Omit<T, \"_id\" | \"name\" | \"aggregateID\" | \"aggregateType\" | \"_createdAt\" | \"_metadata\"> & {\r\n aggregateID?: string;\r\n _metadata?: T[\"_metadata\"];\r\n }): T => ({\r\n ...props,\r\n _id: EventIdentifier(),\r\n name: EventName,\r\n aggregateType: AggregateType,\r\n aggregateID: aggregateID ?? AggregateIdentifier(),\r\n _metadata: _metadata ?? ({} as T[\"_metadata\"]),\r\n _createdAt: new Date(),\r\n _createdBy,\r\n _version,\r\n } as T);\r\n },\r\n },\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n if (!_initPromise) {\r\n _initPromise = initialize();\r\n }\r\n\r\n await _initPromise;\r\n\r\n try {\r\n await EventStore.append(event);\r\n\r\n const handler = EVENT_HANDLERS.resolve(event);\r\n\r\n if (handler) {\r\n handler.handle(event)\r\n .then(() => {\r\n if (notified)\r\n notified();\r\n })\r\n .catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n\r\n if (notified)\r\n notified(wrappedError);\r\n });\r\n } else {\r\n if (notified)\r\n notified();\r\n }\r\n } catch (error) {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n\r\n if (notified)\r\n notified(wrappedError);\r\n\r\n throw wrappedError;\r\n }\r\n },\r\n };\r\n};\r\n","import { IEventHandler } from \"./core/IEventHandler\";\r\n\r\nexport const reduceHandlers = (...objs: Record<string, IEventHandler>[]): IEventHandler[] =>\r\n objs.flatMap(obj => Object.values(obj));\r\n"],"mappings":"AAGO,IAAMA,EAAuB,IAAIC,IAA8B,CACpE,IAAMC,EAAeD,EAAS,OAAO,CAACE,EAAQC,IAAY,CACxD,GAAM,CAAE,KAAAC,CAAK,EAAID,EAEjB,OAAID,EAAOE,CAAI,IAAM,SACnBF,EAAOE,CAAI,EAAID,GAKVD,CACT,EAAG,CAAC,CAAkC,EAOtC,MALiC,CAC/B,QAAUG,GACRJ,EAAaI,EAAM,IAAI,CAC3B,CAGF,ECbO,IAAMC,EAAiBC,GAId,CACd,GAAM,CAAE,YAAAC,EAAa,WAAAC,EAAY,cAAAC,CAAc,EAAIH,EAE/CI,EAEEC,EAAa,SAA2B,CAC5C,MAAMH,EAAW,KAAK,CACxB,EAEMI,EAAiBC,EAAqB,GAAGJ,CAAa,EAE5D,MAAO,CACL,GAAI,CACF,YAAa,KAAO,CAClB,YAAa,IAAMF,EAAY,YAAY,EAC3C,QAAS,IAAMA,EAAY,QAAQ,CACrC,GACA,aAAiCD,GAK3B,CACJ,GAAM,CACJ,UAAAQ,EACA,cAAAC,EACA,gBAAAC,EAAkB,IAAMT,EAAY,QAAQ,EAC5C,oBAAAU,EAAsB,IAAMV,EAAY,YAAY,CACtD,EAAID,EAEJ,MAAO,CAAC,CACN,YAAAY,EACA,UAAAC,EACA,WAAAC,EACA,SAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKN,EAAgB,EACrB,KAAMF,EACN,cAAeC,EACf,YAAaG,GAAeD,EAAoB,EAChD,UAAWE,GAAc,CAAC,EAC1B,WAAY,IAAI,KAChB,WAAAC,EACA,SAAAC,CACF,EACF,CACF,EACA,MAAM,SAASE,EAAeC,EAAmD,CAC1Ed,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOe,CAAK,EAE7B,IAAME,EAAUb,EAAe,QAAQW,CAAK,EAExCE,EACFA,EAAQ,OAAOF,CAAK,EACjB,KAAK,IAAM,CACNC,GACFA,EAAS,CACb,CAAC,EACA,MAAOE,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAEzEF,GACFA,EAASG,CAAY,CACzB,CAAC,EAECH,GACFA,EAAS,CAEf,OAASE,EAAO,CACd,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAE7E,MAAIF,GACFA,EAASG,CAAY,EAEjBA,CACR,CACF,CACF,CACF,ECrGO,IAAMC,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["composeEventHandlers","handlers","HANDLERS_MAP","result","handler","name","event","createService","definition","Identifiers","EventStore","EventHandlers","_initPromise","initialize","EVENT_HANDLERS","composeEventHandlers","EventName","AggregateType","EventIdentifier","AggregateIdentifier","aggregateID","_metadata","_createdBy","_version","props","event","notified","handler","error","wrappedError","reduceHandlers","objs","obj"]}
|