atomservices 0.13.0 → 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 CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var I=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var g=(r,e)=>{for(var o in e)I(r,o,{get:e[o],enumerable:!0})},u=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!x.call(r,t)&&t!==o&&I(r,t,{get:()=>e[t],enumerable:!(n=H(e,t))||n.enumerable});return r};var y=r=>u(I({},"__esModule",{value:!0}),r);var w={};g(w,{createService:()=>p,reduceHandlers:()=>m});module.exports=y(w);var E=(...r)=>{let e=r.reduce((n,t)=>{let{name:c}=t;return n[c]===void 0&&(n[c]=t),n},{});return{resolve:n=>e[n.name]}};var p=r=>{let{Identifiers:e,EventStore:o,EventHandlers:n}=r,t,c=async()=>{await o.init()},f=E(...n);return{identifiers:()=>({AggregateID:()=>e.AggregateID(),EventID:()=>e.EventID()}),async dispatch(d,i){t||(t=c()),await t;try{await o.append(d);let a=f.resolve(d);a?a.handle(d).then(()=>{i&&i()}).catch(s=>{let l=s instanceof Error?s:new Error(String(s));i&&i(l)}):i&&i()}catch(a){let s=a instanceof Error?a:new Error(String(a));throw i&&i(s),s}}}};var m=(...r)=>r.flatMap(e=>Object.values(e));0&&(module.exports={createService,reduceHandlers});
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
@@ -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 identifiers: () => ({\r\n AggregateID: () => Identifiers.AggregateID(),\r\n EventID: () => Identifiers.EventID(),\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,YAAa,KAAO,CAClB,YAAa,IAAMF,EAAY,YAAY,EAC3C,QAAS,IAAMA,EAAY,QAAQ,CACrC,GACA,MAAM,SAASO,EAAeC,EAAmD,CAC1EL,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOM,CAAK,EAE7B,IAAME,EAAUJ,EAAe,QAAQE,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,ECjEO,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","event","notified","handler","error","wrappedError","reduceHandlers","objs","obj"]}
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
@@ -43,14 +43,25 @@ interface IReducer<T> {
43
43
  * If the handler failed, the error is passed as the first argument.
44
44
  */
45
45
  type DispatchCallback = (error?: Error) => void;
46
- /**
47
- * Persists an event to the Store and triggers the handler in the background.
48
- * * @param event The event to dispatch.
49
- * @param afterHandler Optional callback triggered after background processing is complete.
50
- * @returns A promise that resolves as soon as the event is successfully stored.
51
- */
52
46
  interface IService {
53
- identifiers: () => IIdentifiers;
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
+ */
54
65
  dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
55
66
  }
56
67
 
package/dist/index.d.ts CHANGED
@@ -43,14 +43,25 @@ interface IReducer<T> {
43
43
  * If the handler failed, the error is passed as the first argument.
44
44
  */
45
45
  type DispatchCallback = (error?: Error) => void;
46
- /**
47
- * Persists an event to the Store and triggers the handler in the background.
48
- * * @param event The event to dispatch.
49
- * @param afterHandler Optional callback triggered after background processing is complete.
50
- * @returns A promise that resolves as soon as the event is successfully stored.
51
- */
52
46
  interface IService {
53
- identifiers: () => IIdentifiers;
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
+ */
54
65
  dispatch: (event: IEvent, afterHandler?: DispatchCallback) => Promise<void>;
55
66
  }
56
67
 
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var E=(...a)=>{let t=a.reduce((r,n)=>{let{name:s}=n;return r[s]===void 0&&(r[s]=n),r},{});return{resolve:r=>t[r.name]}};var f=a=>{let{Identifiers:t,EventStore:c,EventHandlers:r}=a,n,s=async()=>{await c.init()},p=E(...r);return{identifiers:()=>({AggregateID:()=>t.AggregateID(),EventID:()=>t.EventID()}),async dispatch(d,e){n||(n=s()),await n;try{await c.append(d);let o=p.resolve(d);o?o.handle(d).then(()=>{e&&e()}).catch(i=>{let m=i instanceof Error?i:new Error(String(i));e&&e(m)}):e&&e()}catch(o){let i=o instanceof Error?o:new Error(String(o));throw e&&e(i),i}}}};var l=(...a)=>a.flatMap(t=>Object.values(t));export{f as createService,l as reduceHandlers};
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/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 identifiers: () => ({\r\n AggregateID: () => Identifiers.AggregateID(),\r\n EventID: () => Identifiers.EventID(),\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,YAAa,KAAO,CAClB,YAAa,IAAMF,EAAY,YAAY,EAC3C,QAAS,IAAMA,EAAY,QAAQ,CACrC,GACA,MAAM,SAASO,EAAeC,EAAmD,CAC1EL,IACHA,EAAeC,EAAW,GAG5B,MAAMD,EAEN,GAAI,CACF,MAAMF,EAAW,OAAOM,CAAK,EAE7B,IAAME,EAAUJ,EAAe,QAAQE,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,ECjEO,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","event","notified","handler","error","wrappedError","reduceHandlers","objs","obj"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atomservices",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",