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 CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var r in e)d(t,r,{get:e[r],enumerable:!0})},y=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of u(e))!h.call(t,n)&&n!==r&&d(t,n,{get:()=>e[n],enumerable:!(a=f(e,n))||a.enumerable});return t};var S=t=>y(d({},"__esModule",{value:!0}),t);var H={};x(H,{EventBuilder:()=>E,InstantEventBus:()=>p,createService:()=>I,generateUUID:()=>m,reduceHandlers:()=>g});module.exports=S(H);var I=t=>{let{EventStore:e,EventHandlers:r,EventBus:a}=t,n,c=async()=>(await e.init(),r.forEach(o=>a.subscribe(o)),{async dispatch(o,i){await e.append(o),a.publish(o).then(()=>{i&&i()}).catch(v=>{let l=v instanceof Error?v:new Error(String(v));i&&i(l)})}});return{async dispatch(o,i){return n||(n=c()),(await n).dispatch(o,i)}}};var m=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36).substring(2);var E=t=>{let{EventName:e,AggregateType:r,EventIdentifier:a=m,AggregateIdentifier:n=m}=t;return({aggregateID:c,_metadata:o,...i})=>({...i,_id:a(),name:e,aggregateType:r,aggregateID:c??n(),_metadata:o??{},_createdAt:new Date})};var p=class{handlers=new Map;async connect(){console.log("## Instant Event Bus (using local memory) Connected ##")}subscribe(e){let r=this.handlers.get(e.name)||[];r.push(e),this.handlers.set(e.name,r)}async publish(e){let r=this.handlers.get(e.name)||[];r.length>0&&await Promise.all(r.map(a=>a.handle(e)))}};var g=(...t)=>t.flatMap(e=>Object.values(e));0&&(module.exports={EventBuilder,InstantEventBus,createService,generateUUID,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/createService.ts","../src/generateUUID.ts","../src/EventBuilder.ts","../src/InstantEventBus.ts","../src/reduceHandlers.ts"],"sourcesContent":["export type { IEvent } from \"./IEvent\";\r\nexport type { IEventBus } from \"./IEventBus\";\r\nexport type { IEventHandler } from \"./IEventHandler\";\r\nexport type { IService } from \"./IService\";\r\nexport type { IEventStore } from \"./IEventStore\";\r\nexport type { IReducer } from \"./IReducer\";\r\n\r\nexport { createService } from \"./createService\";\r\nexport { EventBuilder } from \"./EventBuilder\";\r\nexport { InstantEventBus } from \"./InstantEventBus\";\r\nexport { generateUUID } from \"./generateUUID\";\r\nexport { reduceHandlers } from \"./reduceHandlers\";\r\n","// src/createService.ts\r\n\r\nimport { IEvent } from \"./IEvent\";\r\nimport { IEventBus } from \"./IEventBus\";\r\nimport { IEventHandler } from \"./IEventHandler\";\r\nimport { IService } from \"./IService\";\r\nimport { IEventStore } from \"./IEventStore\";\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n EventBus: IEventBus;\r\n}): IService => {\r\n const { EventStore, EventHandlers, EventBus } = definition;\r\n\r\n let _initPromise: Promise<IService> | undefined = undefined;\r\n\r\n const init = async (): Promise<IService> => {\r\n await EventStore.init();\r\n\r\n EventHandlers.forEach((handler) => EventBus.subscribe(handler));\r\n\r\n return {\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n await EventStore.append(event);\r\n\r\n EventBus.publish(event)\r\n .then(() => {\r\n if (notified) notified();\r\n })\r\n .catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n if (notified) notified(wrappedError);\r\n });\r\n },\r\n };\r\n };\r\n\r\n return {\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n if (!_initPromise) {\r\n _initPromise = init();\r\n }\r\n\r\n const service = await _initPromise;\r\n\r\n return service.dispatch(event, notified);\r\n },\r\n };\r\n};\r\n","export const generateUUID = (): string => globalThis.crypto?.randomUUID?.() || Math.random().toString(36).substring(2);\r\n","// src/EventBuilder.ts\r\n\r\nimport { IEvent } from \"./IEvent\";\r\nimport { generateUUID } from \"./generateUUID\";\r\n\r\nexport const 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 = generateUUID,\r\n AggregateIdentifier = generateUUID,\r\n } = definition;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\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 } as T);\r\n}\r\n","// src/InstantEventBus.ts\r\n\r\nimport { IEventBus } from \"./IEventBus\";\r\nimport { IEventHandler } from \"./IEventHandler\";\r\nimport { IEvent } from \"./IEvent\";\r\n\r\nexport class InstantEventBus implements IEventBus {\r\n private handlers = new Map<string, IEventHandler[]>();\r\n\r\n async connect() {\r\n console.log(\"## Instant Event Bus (using local memory) Connected ##\");\r\n }\r\n\r\n subscribe(handler: IEventHandler) {\r\n const list = this.handlers.get(handler.name) || [];\r\n list.push(handler);\r\n this.handlers.set(handler.name, list);\r\n }\r\n\r\n async publish(event: IEvent) {\r\n const list = this.handlers.get(event.name) || [];\r\n\r\n if (list.length > 0) {\r\n await Promise.all(list.map(h => h.handle(event)));\r\n }\r\n }\r\n}\r\n","import { IEventHandler } from \"./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,kBAAAE,EAAA,oBAAAC,EAAA,kBAAAC,EAAA,iBAAAC,EAAA,mBAAAC,IAAA,eAAAC,EAAAP,GCQO,IAAMQ,EAAiBC,GAId,CACd,GAAM,CAAE,WAAAC,EAAY,cAAAC,EAAe,SAAAC,CAAS,EAAIH,EAE5CI,EAEEC,EAAO,UACX,MAAMJ,EAAW,KAAK,EAEtBC,EAAc,QAASI,GAAYH,EAAS,UAAUG,CAAO,CAAC,EAEvD,CACL,MAAM,SAASC,EAAeC,EAAmD,CAC/E,MAAMP,EAAW,OAAOM,CAAK,EAE7BJ,EAAS,QAAQI,CAAK,EACnB,KAAK,IAAM,CACNC,GAAUA,EAAS,CACzB,CAAC,EACA,MAAOC,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EACzED,GAAUA,EAASE,CAAY,CACrC,CAAC,CACL,CACF,GAGF,MAAO,CACL,MAAM,SAASH,EAAeC,EAAmD,CAC/E,OAAKJ,IACHA,EAAeC,EAAK,IAGN,MAAMD,GAEP,SAASG,EAAOC,CAAQ,CACzC,CACF,CACF,ECjDO,IAAMG,EAAe,IAAc,WAAW,QAAQ,aAAa,GAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,ECK9G,IAAMC,EAAkCC,GAKzC,CACJ,GAAM,CACJ,UAAAC,EACA,cAAAC,EACA,gBAAAC,EAAkBC,EAClB,oBAAAC,EAAsBD,CACxB,EAAIJ,EAEJ,MAAO,CAAC,CACN,YAAAM,EACA,UAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKL,EAAgB,EACrB,KAAMF,EACN,cAAeC,EACf,YAAaI,GAAeD,EAAoB,EAChD,UAAWE,GAAc,CAAC,EAC1B,WAAY,IAAI,IAClB,EACF,EC5BO,IAAME,EAAN,KAA2C,CACxC,SAAW,IAAI,IAEvB,MAAM,SAAU,CACd,QAAQ,IAAI,wDAAwD,CACtE,CAEA,UAAUC,EAAwB,CAChC,IAAMC,EAAO,KAAK,SAAS,IAAID,EAAQ,IAAI,GAAK,CAAC,EACjDC,EAAK,KAAKD,CAAO,EACjB,KAAK,SAAS,IAAIA,EAAQ,KAAMC,CAAI,CACtC,CAEA,MAAM,QAAQC,EAAe,CAC3B,IAAMD,EAAO,KAAK,SAAS,IAAIC,EAAM,IAAI,GAAK,CAAC,EAE3CD,EAAK,OAAS,GAChB,MAAM,QAAQ,IAAIA,EAAK,IAAIE,GAAKA,EAAE,OAAOD,CAAK,CAAC,CAAC,CAEpD,CACF,ECxBO,IAAME,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["index_exports","__export","EventBuilder","InstantEventBus","createService","generateUUID","reduceHandlers","__toCommonJS","createService","definition","EventStore","EventHandlers","EventBus","_initPromise","init","handler","event","notified","error","wrappedError","generateUUID","EventBuilder","definition","EventName","AggregateType","EventIdentifier","generateUUID","AggregateIdentifier","aggregateID","_metadata","props","InstantEventBus","handler","list","event","h","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
@@ -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): Promise<void>;
15
+ handle: (event: E) => Promise<void>;
16
16
  }
17
17
 
18
- interface IEventBus {
19
- connect(): Promise<void>;
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 IService {
25
- dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void>;
22
+ interface IEventStore {
23
+ init: () => Promise<void>;
24
+ append: (event: IEvent) => Promise<void>;
26
25
  }
27
26
 
28
- interface IEventStore {
29
- init(): Promise<void>;
30
- append(event: IEvent): Promise<void>;
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 { EventBuilder, type IEvent, type IEventBus, type IEventHandler, type IEventStore, type IReducer, type IService, InstantEventBus, createService, generateUUID, reduceHandlers };
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): Promise<void>;
15
+ handle: (event: E) => Promise<void>;
16
16
  }
17
17
 
18
- interface IEventBus {
19
- connect(): Promise<void>;
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 IService {
25
- dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void>;
22
+ interface IEventStore {
23
+ init: () => Promise<void>;
24
+ append: (event: IEvent) => Promise<void>;
26
25
  }
27
26
 
28
- interface IEventStore {
29
- init(): Promise<void>;
30
- append(event: IEvent): Promise<void>;
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 { EventBuilder, type IEvent, type IEventBus, type IEventHandler, type IEventStore, type IReducer, type IService, InstantEventBus, createService, generateUUID, reduceHandlers };
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 E=a=>{let{EventStore:e,EventHandlers:t,EventBus:o}=a,i,c=async()=>(await e.init(),t.forEach(r=>o.subscribe(r)),{async dispatch(r,n){await e.append(r),o.publish(r).then(()=>{n&&n()}).catch(v=>{let I=v instanceof Error?v:new Error(String(v));n&&n(I)})}});return{async dispatch(r,n){return i||(i=c()),(await i).dispatch(r,n)}}};var p=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36).substring(2);var g=a=>{let{EventName:e,AggregateType:t,EventIdentifier:o=p,AggregateIdentifier:i=p}=a;return({aggregateID:c,_metadata:r,...n})=>({...n,_id:o(),name:e,aggregateType:t,aggregateID:c??i(),_metadata:r??{},_createdAt:new Date})};var d=class{handlers=new Map;async connect(){console.log("## Instant Event Bus (using local memory) Connected ##")}subscribe(e){let t=this.handlers.get(e.name)||[];t.push(e),this.handlers.set(e.name,t)}async publish(e){let t=this.handlers.get(e.name)||[];t.length>0&&await Promise.all(t.map(o=>o.handle(e)))}};var l=(...a)=>a.flatMap(e=>Object.values(e));export{g as EventBuilder,d as InstantEventBus,E as createService,p as generateUUID,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/createService.ts","../src/generateUUID.ts","../src/EventBuilder.ts","../src/InstantEventBus.ts","../src/reduceHandlers.ts"],"sourcesContent":["// src/createService.ts\r\n\r\nimport { IEvent } from \"./IEvent\";\r\nimport { IEventBus } from \"./IEventBus\";\r\nimport { IEventHandler } from \"./IEventHandler\";\r\nimport { IService } from \"./IService\";\r\nimport { IEventStore } from \"./IEventStore\";\r\n\r\nexport const createService = (definition: {\r\n EventStore: IEventStore;\r\n EventHandlers: IEventHandler[];\r\n EventBus: IEventBus;\r\n}): IService => {\r\n const { EventStore, EventHandlers, EventBus } = definition;\r\n\r\n let _initPromise: Promise<IService> | undefined = undefined;\r\n\r\n const init = async (): Promise<IService> => {\r\n await EventStore.init();\r\n\r\n EventHandlers.forEach((handler) => EventBus.subscribe(handler));\r\n\r\n return {\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n await EventStore.append(event);\r\n\r\n EventBus.publish(event)\r\n .then(() => {\r\n if (notified) notified();\r\n })\r\n .catch((error) => {\r\n const wrappedError = error instanceof Error ? error : new Error(String(error));\r\n if (notified) notified(wrappedError);\r\n });\r\n },\r\n };\r\n };\r\n\r\n return {\r\n async dispatch(event: IEvent, notified?: (error?: Error) => void): Promise<void> {\r\n if (!_initPromise) {\r\n _initPromise = init();\r\n }\r\n\r\n const service = await _initPromise;\r\n\r\n return service.dispatch(event, notified);\r\n },\r\n };\r\n};\r\n","export const generateUUID = (): string => globalThis.crypto?.randomUUID?.() || Math.random().toString(36).substring(2);\r\n","// src/EventBuilder.ts\r\n\r\nimport { IEvent } from \"./IEvent\";\r\nimport { generateUUID } from \"./generateUUID\";\r\n\r\nexport const 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 = generateUUID,\r\n AggregateIdentifier = generateUUID,\r\n } = definition;\r\n\r\n return ({\r\n aggregateID,\r\n _metadata,\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 } as T);\r\n}\r\n","// src/InstantEventBus.ts\r\n\r\nimport { IEventBus } from \"./IEventBus\";\r\nimport { IEventHandler } from \"./IEventHandler\";\r\nimport { IEvent } from \"./IEvent\";\r\n\r\nexport class InstantEventBus implements IEventBus {\r\n private handlers = new Map<string, IEventHandler[]>();\r\n\r\n async connect() {\r\n console.log(\"## Instant Event Bus (using local memory) Connected ##\");\r\n }\r\n\r\n subscribe(handler: IEventHandler) {\r\n const list = this.handlers.get(handler.name) || [];\r\n list.push(handler);\r\n this.handlers.set(handler.name, list);\r\n }\r\n\r\n async publish(event: IEvent) {\r\n const list = this.handlers.get(event.name) || [];\r\n\r\n if (list.length > 0) {\r\n await Promise.all(list.map(h => h.handle(event)));\r\n }\r\n }\r\n}\r\n","import { IEventHandler } from \"./IEventHandler\";\r\n\r\nexport const reduceHandlers = (...objs: Record<string, IEventHandler>[]): IEventHandler[] =>\r\n objs.flatMap(obj => Object.values(obj));\r\n"],"mappings":"AAQO,IAAMA,EAAiBC,GAId,CACd,GAAM,CAAE,WAAAC,EAAY,cAAAC,EAAe,SAAAC,CAAS,EAAIH,EAE5CI,EAEEC,EAAO,UACX,MAAMJ,EAAW,KAAK,EAEtBC,EAAc,QAASI,GAAYH,EAAS,UAAUG,CAAO,CAAC,EAEvD,CACL,MAAM,SAASC,EAAeC,EAAmD,CAC/E,MAAMP,EAAW,OAAOM,CAAK,EAE7BJ,EAAS,QAAQI,CAAK,EACnB,KAAK,IAAM,CACNC,GAAUA,EAAS,CACzB,CAAC,EACA,MAAOC,GAAU,CAChB,IAAMC,EAAeD,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EACzED,GAAUA,EAASE,CAAY,CACrC,CAAC,CACL,CACF,GAGF,MAAO,CACL,MAAM,SAASH,EAAeC,EAAmD,CAC/E,OAAKJ,IACHA,EAAeC,EAAK,IAGN,MAAMD,GAEP,SAASG,EAAOC,CAAQ,CACzC,CACF,CACF,ECjDO,IAAMG,EAAe,IAAc,WAAW,QAAQ,aAAa,GAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,ECK9G,IAAMC,EAAkCC,GAKzC,CACJ,GAAM,CACJ,UAAAC,EACA,cAAAC,EACA,gBAAAC,EAAkBC,EAClB,oBAAAC,EAAsBD,CACxB,EAAIJ,EAEJ,MAAO,CAAC,CACN,YAAAM,EACA,UAAAC,EACA,GAAGC,CACL,KAGU,CACR,GAAGA,EACH,IAAKL,EAAgB,EACrB,KAAMF,EACN,cAAeC,EACf,YAAaI,GAAeD,EAAoB,EAChD,UAAWE,GAAc,CAAC,EAC1B,WAAY,IAAI,IAClB,EACF,EC5BO,IAAME,EAAN,KAA2C,CACxC,SAAW,IAAI,IAEvB,MAAM,SAAU,CACd,QAAQ,IAAI,wDAAwD,CACtE,CAEA,UAAUC,EAAwB,CAChC,IAAMC,EAAO,KAAK,SAAS,IAAID,EAAQ,IAAI,GAAK,CAAC,EACjDC,EAAK,KAAKD,CAAO,EACjB,KAAK,SAAS,IAAIA,EAAQ,KAAMC,CAAI,CACtC,CAEA,MAAM,QAAQC,EAAe,CAC3B,IAAMD,EAAO,KAAK,SAAS,IAAIC,EAAM,IAAI,GAAK,CAAC,EAE3CD,EAAK,OAAS,GAChB,MAAM,QAAQ,IAAIA,EAAK,IAAIE,GAAKA,EAAE,OAAOD,CAAK,CAAC,CAAC,CAEpD,CACF,ECxBO,IAAME,EAAiB,IAAIC,IAChCA,EAAK,QAAQC,GAAO,OAAO,OAAOA,CAAG,CAAC","names":["createService","definition","EventStore","EventHandlers","EventBus","_initPromise","init","handler","event","notified","error","wrappedError","generateUUID","EventBuilder","definition","EventName","AggregateType","EventIdentifier","generateUUID","AggregateIdentifier","aggregateID","_metadata","props","InstantEventBus","handler","list","event","h","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.12.3",
3
+ "version": "0.13.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",