atomservices 0.13.1 → 0.13.2

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 CHANGED
@@ -1,2 +1,2 @@
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});
1
+ "use strict";var v=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var S=(r,e)=>{for(var o in e)v(r,o,{get:e[o],enumerable:!0})},u=(r,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of l(e))!H.call(r,n)&&n!==o&&v(r,n,{get:()=>e[n],enumerable:!(t=f(e,n))||t.enumerable});return r};var x=r=>u(v({},"__esModule",{value:!0}),r);var _={};S(_,{composeEventBuilder:()=>I,createService:()=>m,reduceHandlers:()=>p});module.exports=x(_);var I=r=>e=>{let{AggregateType:o,EventName:t,AggregateIdentifier:n=()=>r.AggregateID(),EventIdentifier:d=()=>r.EventID()}=e;return({aggregateID:c,_metadata:a,...i})=>({...i,_id:d(),name:t,aggregateType:o,aggregateID:c??n(),_metadata:a??{},_createdAt:new Date})};var y=(...r)=>{let e=r.reduce((t,n)=>{let{name:d}=n;return t[d]===void 0&&(t[d]=n),t},{});return{resolve:t=>e[t.name]}},m=r=>{let{EventStore:e,EventHandlers:o}=r,t,n=async()=>{await e.init()},d=y(...o);return{async dispatch(c,a){t||(t=n()),await t;try{await e.append(c);let i=d.resolve(c);i?i.handle(c).then(()=>{a&&a()}).catch(s=>{let g=s instanceof Error?s:new Error(String(s));a&&a(g)}):a&&a()}catch(i){let s=i instanceof Error?i:new Error(String(i));throw a&&a(s),s}}}};var p=(...r)=>r.flatMap(e=>Object.values(e));0&&(module.exports={composeEventBuilder,createService,reduceHandlers});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/composeEventBuilder.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\nexport type { IService } from \"./IService\";\r\n\r\nexport { composeEventBuilder } from \"./composeEventBuilder\";\r\nexport { createService } from \"./createService\";\r\nexport { reduceHandlers } from \"./reduceHandlers\";\r\n","import { IEvent } from \"./core/IEvent\";\r\nimport { IIdentifiers } from \"./core/IIdentifiers\";\r\n\r\nexport const composeEventBuilder = (identifiers: IIdentifiers) =>\r\n <T extends IEvent>(definitions: {\r\n EventName: string;\r\n AggregateType: string;\r\n AggregateIdentifier?: () => string;\r\n EventIdentifier?: () => string;\r\n }) => {\r\n const {\r\n AggregateType,\r\n EventName,\r\n AggregateIdentifier = () => identifiers.AggregateID(),\r\n EventIdentifier = () => identifiers.EventID(),\r\n } = definitions;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\r\n ...others\r\n }: Omit<T, \"_id\" | \"name\" | \"aggregateID\" | \"aggregateType\" | \"_createdAt\" | \"_metadata\"> & {\r\n aggregateID?: string;\r\n _metadata?: T[\"_metadata\"];\r\n }): T => ({\r\n ...others,\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 } as T);\r\n };\r\n","// src/createService.ts\r\n\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IEventHandlers } from \"./core/IEventHandlers\";\r\nimport { IService } from \"./IService\";\r\n\r\nconst reduceEventHandlers = (...handlers: IEventHandler[]): IEventHandlers => {\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\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n}): IService => {\r\n const { 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 = reduceEventHandlers(...EventHandlers);\r\n\r\n return {\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,yBAAAE,EAAA,kBAAAC,EAAA,mBAAAC,IAAA,eAAAC,EAAAL,GCGO,IAAMM,EAAuBC,GACfC,GAKb,CACJ,GAAM,CACJ,cAAAC,EACA,UAAAC,EACA,oBAAAC,EAAsB,IAAMJ,EAAY,YAAY,EACpD,gBAAAK,EAAkB,IAAML,EAAY,QAAQ,CAC9C,EAAIC,EAEJ,MAAO,CAAC,CACN,YAAAK,EACA,UAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKH,EAAgB,EACrB,KAAMF,EACN,cAAeD,EACf,YAAaI,GAAeF,EAAoB,EAChD,UAAWG,GAAc,CAAC,EAC1B,WAAY,IAAI,IAClB,EACF,ECzBF,IAAME,EAAsB,IAAIC,IAA8C,CAC5E,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,EAGaC,EAAiBC,GAGd,CACd,GAAM,CAAE,WAAAC,EAAY,cAAAC,CAAc,EAAIF,EAElCG,EAEEC,EAAa,SAA2B,CAC5C,MAAMH,EAAW,KAAK,CACxB,EAEMI,EAAiBb,EAAoB,GAAGU,CAAa,EAE3D,MAAO,CACL,MAAM,SAASJ,EAAeQ,EAAmD,CAC1EH,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOH,CAAK,EAE7B,IAAMF,EAAUS,EAAe,QAAQP,CAAK,EAExCF,EACFA,EAAQ,OAAOE,CAAK,EACjB,KAAK,IAAM,CACNQ,GACFA,EAAS,CACb,CAAC,EACA,MAAOC,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAEzED,GACFA,EAASE,CAAY,CACzB,CAAC,EAECF,GACFA,EAAS,CAEf,OAASC,EAAO,CACd,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAE7E,MAAID,GACFA,EAASE,CAAY,EAEjBA,CACR,CACF,CACF,CACF,ECjFO,IAAMC,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["index_exports","__export","composeEventBuilder","createService","reduceHandlers","__toCommonJS","composeEventBuilder","identifiers","definitions","AggregateType","EventName","AggregateIdentifier","EventIdentifier","aggregateID","_metadata","others","reduceEventHandlers","handlers","HANDLERS_MAP","result","handler","name","event","createService","definition","EventStore","EventHandlers","_initPromise","initialize","EVENT_HANDLERS","notified","error","wrappedError","reduceHandlers","objs","obj"]}
package/dist/index.d.cts CHANGED
@@ -38,39 +38,31 @@ interface IReducer<T> {
38
38
  (state: T, event: IEvent): T;
39
39
  }
40
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
41
  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
42
  /**
60
43
  * Persists an event to the Store and triggers the handler in the background.
61
44
  * * @param event The event to dispatch.
62
45
  * @param afterHandler Optional callback triggered after background processing is complete.
63
46
  * @returns A promise that resolves as soon as the event is successfully stored.
64
47
  */
65
- dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
48
+ dispatch: (event: IEvent, afterHandler?: (error?: Error) => void) => Promise<void>;
66
49
  }
67
50
 
51
+ declare const composeEventBuilder: (identifiers: IIdentifiers) => <T extends IEvent>(definitions: {
52
+ EventName: string;
53
+ AggregateType: string;
54
+ AggregateIdentifier?: () => string;
55
+ EventIdentifier?: () => string;
56
+ }) => ({ aggregateID, _metadata, ...others }: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
57
+ aggregateID?: string;
58
+ _metadata?: T["_metadata"];
59
+ }) => T;
60
+
68
61
  declare const createService: (definition: {
69
- Identifiers: IIdentifiers;
70
62
  EventStore: IEventStore;
71
63
  EventHandlers: IEventHandler[];
72
64
  }) => IService;
73
65
 
74
66
  declare const reduceHandlers: (...objs: Record<string, IEventHandler>[]) => IEventHandler[];
75
67
 
76
- export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, createService, reduceHandlers };
68
+ export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, composeEventBuilder, createService, reduceHandlers };
package/dist/index.d.ts CHANGED
@@ -38,39 +38,31 @@ interface IReducer<T> {
38
38
  (state: T, event: IEvent): T;
39
39
  }
40
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
41
  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
42
  /**
60
43
  * Persists an event to the Store and triggers the handler in the background.
61
44
  * * @param event The event to dispatch.
62
45
  * @param afterHandler Optional callback triggered after background processing is complete.
63
46
  * @returns A promise that resolves as soon as the event is successfully stored.
64
47
  */
65
- dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
48
+ dispatch: (event: IEvent, afterHandler?: (error?: Error) => void) => Promise<void>;
66
49
  }
67
50
 
51
+ declare const composeEventBuilder: (identifiers: IIdentifiers) => <T extends IEvent>(definitions: {
52
+ EventName: string;
53
+ AggregateType: string;
54
+ AggregateIdentifier?: () => string;
55
+ EventIdentifier?: () => string;
56
+ }) => ({ aggregateID, _metadata, ...others }: Omit<T, "_id" | "name" | "aggregateID" | "aggregateType" | "_createdAt" | "_metadata"> & {
57
+ aggregateID?: string;
58
+ _metadata?: T["_metadata"];
59
+ }) => T;
60
+
68
61
  declare const createService: (definition: {
69
- Identifiers: IIdentifiers;
70
62
  EventStore: IEventStore;
71
63
  EventHandlers: IEventHandler[];
72
64
  }) => IService;
73
65
 
74
66
  declare const reduceHandlers: (...objs: Record<string, IEventHandler>[]) => IEventHandler[];
75
67
 
76
- export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, createService, reduceHandlers };
68
+ export { type IEvent, type IEventHandler, type IEventHandlers, type IEventStore, type IIdentifiers, type IReducer, type IService, composeEventBuilder, createService, reduceHandlers };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
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};
1
+ var m=t=>n=>{let{AggregateType:c,EventName:e,AggregateIdentifier:o=()=>t.AggregateID(),EventIdentifier:i=()=>t.EventID()}=n;return({aggregateID:s,_metadata:r,...a})=>({...a,_id:i(),name:e,aggregateType:c,aggregateID:s??o(),_metadata:r??{},_createdAt:new Date})};var p=(...t)=>{let n=t.reduce((e,o)=>{let{name:i}=o;return e[i]===void 0&&(e[i]=o),e},{});return{resolve:e=>n[e.name]}},g=t=>{let{EventStore:n,EventHandlers:c}=t,e,o=async()=>{await n.init()},i=p(...c);return{async dispatch(s,r){e||(e=o()),await e;try{await n.append(s);let a=i.resolve(s);a?a.handle(s).then(()=>{r&&r()}).catch(d=>{let I=d instanceof Error?d:new Error(String(d));r&&r(I)}):r&&r()}catch(a){let d=a instanceof Error?a:new Error(String(a));throw r&&r(d),d}}}};var f=(...t)=>t.flatMap(n=>Object.values(n));export{m as composeEventBuilder,g as createService,f as reduceHandlers};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../src/composeEventBuilder.ts","../src/createService.ts","../src/reduceHandlers.ts"],"sourcesContent":["import { IEvent } from \"./core/IEvent\";\r\nimport { IIdentifiers } from \"./core/IIdentifiers\";\r\n\r\nexport const composeEventBuilder = (identifiers: IIdentifiers) =>\r\n <T extends IEvent>(definitions: {\r\n EventName: string;\r\n AggregateType: string;\r\n AggregateIdentifier?: () => string;\r\n EventIdentifier?: () => string;\r\n }) => {\r\n const {\r\n AggregateType,\r\n EventName,\r\n AggregateIdentifier = () => identifiers.AggregateID(),\r\n EventIdentifier = () => identifiers.EventID(),\r\n } = definitions;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\r\n ...others\r\n }: Omit<T, \"_id\" | \"name\" | \"aggregateID\" | \"aggregateType\" | \"_createdAt\" | \"_metadata\"> & {\r\n aggregateID?: string;\r\n _metadata?: T[\"_metadata\"];\r\n }): T => ({\r\n ...others,\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 } as T);\r\n };\r\n","// src/createService.ts\r\n\r\nimport { IEvent } from \"./core/IEvent\";\r\nimport { IEventStore } from \"./core/IEventStore\";\r\nimport { IEventHandler } from \"./core/IEventHandler\";\r\nimport { IEventHandlers } from \"./core/IEventHandlers\";\r\nimport { IService } from \"./IService\";\r\n\r\nconst reduceEventHandlers = (...handlers: IEventHandler[]): IEventHandlers => {\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\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n}): IService => {\r\n const { 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 = reduceEventHandlers(...EventHandlers);\r\n\r\n return {\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,EAAuBC,GACfC,GAKb,CACJ,GAAM,CACJ,cAAAC,EACA,UAAAC,EACA,oBAAAC,EAAsB,IAAMJ,EAAY,YAAY,EACpD,gBAAAK,EAAkB,IAAML,EAAY,QAAQ,CAC9C,EAAIC,EAEJ,MAAO,CAAC,CACN,YAAAK,EACA,UAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKH,EAAgB,EACrB,KAAMF,EACN,cAAeD,EACf,YAAaI,GAAeF,EAAoB,EAChD,UAAWG,GAAc,CAAC,EAC1B,WAAY,IAAI,IAClB,EACF,ECzBF,IAAME,EAAsB,IAAIC,IAA8C,CAC5E,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,EAGaC,EAAiBC,GAGd,CACd,GAAM,CAAE,WAAAC,EAAY,cAAAC,CAAc,EAAIF,EAElCG,EAEEC,EAAa,SAA2B,CAC5C,MAAMH,EAAW,KAAK,CACxB,EAEMI,EAAiBb,EAAoB,GAAGU,CAAa,EAE3D,MAAO,CACL,MAAM,SAASJ,EAAeQ,EAAmD,CAC1EH,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOH,CAAK,EAE7B,IAAMF,EAAUS,EAAe,QAAQP,CAAK,EAExCF,EACFA,EAAQ,OAAOE,CAAK,EACjB,KAAK,IAAM,CACNQ,GACFA,EAAS,CACb,CAAC,EACA,MAAOC,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAEzED,GACFA,EAASE,CAAY,CACzB,CAAC,EAECF,GACFA,EAAS,CAEf,OAASC,EAAO,CACd,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAE7E,MAAID,GACFA,EAASE,CAAY,EAEjBA,CACR,CACF,CACF,CACF,ECjFO,IAAMC,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["composeEventBuilder","identifiers","definitions","AggregateType","EventName","AggregateIdentifier","EventIdentifier","aggregateID","_metadata","others","reduceEventHandlers","handlers","HANDLERS_MAP","result","handler","name","event","createService","definition","EventStore","EventHandlers","_initPromise","initialize","EVENT_HANDLERS","notified","error","wrappedError","reduceHandlers","objs","obj"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atomservices",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",