@robinmalfait/event-source 0.0.8 → 0.0.9

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.d.mts CHANGED
@@ -91,7 +91,7 @@ type EventMapper$1 = Record<string, (event: EventType, es: EventSource) => void>
91
91
  declare function createEventMapper(mapper: EventMapper$1): (event: EventType, es: EventSource) => void;
92
92
 
93
93
  type EventMapper<Ctx> = Record<string, (event: EventType, ctx?: Ctx) => void>;
94
- declare function createProjector<Ctx>(name: string, mapper: EventMapper<Ctx>, initializer?: (ctx?: Ctx) => Promise<void> | void, createContext?: () => Ctx): Projector;
94
+ declare function createProjector<Ctx>(name: string, mapper: EventMapper<Ctx>, initializer?: (ctx: Ctx) => Promise<void> | void, createContext?: () => Ctx): Projector;
95
95
 
96
96
  declare function createTestEventStore(commandHandlers: Record<string, CommandHandler>, projectors?: Projector[]): {
97
97
  ___: any;
package/dist/index.d.ts CHANGED
@@ -91,7 +91,7 @@ type EventMapper$1 = Record<string, (event: EventType, es: EventSource) => void>
91
91
  declare function createEventMapper(mapper: EventMapper$1): (event: EventType, es: EventSource) => void;
92
92
 
93
93
  type EventMapper<Ctx> = Record<string, (event: EventType, ctx?: Ctx) => void>;
94
- declare function createProjector<Ctx>(name: string, mapper: EventMapper<Ctx>, initializer?: (ctx?: Ctx) => Promise<void> | void, createContext?: () => Ctx): Projector;
94
+ declare function createProjector<Ctx>(name: string, mapper: EventMapper<Ctx>, initializer?: (ctx: Ctx) => Promise<void> | void, createContext?: () => Ctx): Projector;
95
95
 
96
96
  declare function createTestEventStore(commandHandlers: Record<string, CommandHandler>, projectors?: Projector[]): {
97
97
  ___: any;
package/dist/index.js CHANGED
@@ -21,10 +21,10 @@ apply = {
21
21
  `).map(i=>` ${i}`).join(`
22
22
  `)),s}})),await Promise.all(this.eventHandlers.map(async o=>{try{await o(n,this)}catch(s){throw s instanceof Error&&console.error(`An error occurred in one of your event handlers: ${o.name}, given an event`,s.stack?.split(`
23
23
  `).map(i=>` ${i}`).join(`
24
- `)),s}}))}async loadPersist(e,t,n){return await this.load(e,t),await n(e),this.persist(e)}},S=class{constructor(e){this.store=e}commandHandlers=new Map;projectors=[];eventHandlers=[];build(){return u.new(this.store,this.commandHandlers,this.projectors,this.eventHandlers)}addCommandHandler(e,t){return this.commandHandlers.has(e)&&c(`A command handler for the "${e}" command already exists`),this.commandHandlers.set(e,t),this}addProjector(e){return this.projectors.push(e),this}addEventHandler(e){return this.eventHandlers.push(e),this}};function I(r){return(e,t)=>r[e.eventName]?.(e,t)}var h=new WeakMap;function T(r,e){if(h.has(r)){let t=h.get(r);for(let n in e)t[n]=e[n]}else h.set(r,e)}function g(r){return h.get(r)}var x=class{constructor(){T(this,{jobs:[],state:0})}get length(){return g(this).jobs.length}async start(){let{state:e,jobs:t}=g(this);if(!(e===1||t.length<=0)){for(T(this,{state:1});t.length>0;){let n=t.shift();await Promise.resolve().then(n.handle).then(n.resolve,n.reject)}T(this,{state:0})}}push(e){return new Promise((t,n)=>{let{jobs:o}=g(this);o.push({handle:e,resolve:t,reject:n}),setImmediate(()=>this.start())})}};function B(){}function $(r,e,t=B,n){let o=new x,s=n?.();return{name:r,async init(i){await o.push(()=>t(s));let a=await i.loadEvents();await Promise.all(a.map(p=>this.update(p)))},update(i){return o.push(()=>e[i.eventName]?.(i,s))}}}var H=Symbol("__placeholder__"),v={usedTestEventStoreInTest:!1,calledThenHandler:!1};process.env.NODE_ENV==="test"&&(beforeEach(()=>{v.usedTestEventStoreInTest=!1,v.calledThenHandler=!1}),afterEach(()=>{v.usedTestEventStoreInTest&&!v.calledThenHandler&&c("It seems like you used `createTestEventStore()`\nwithout using the `await then([expected, events, go, here, ...])`")}));function D(r,e){try{return r()}catch(t){throw Error.captureStackTrace&&t instanceof Error&&Error.captureStackTrace(t,e),t}}var A=class{constructor(e=[],t=[]){this.db=e;this.producedEvents=t}name="test-recording-projector";init(){this.db.splice(0)}update(e){this.producedEvents.push(e)}};function G(r,e=[]){v.usedTestEventStoreInTest=!0;let t=new A,n=u.builder({load(a){return t.db.filter(p=>p.aggregateId===a)},loadEvents(){return t.db},persist(a){t.db.push(...a)}});for(let a of e)n.addProjector(a);n.addProjector(t);for(let[a,p]of Object.entries(r))n.addCommandHandler(a,p);let o=n.build(),s,i={___:H,async given(a=[]){t.db.push(...a)},async when(a){try{return await o.dispatch(typeof a=="function"?a():a)}catch(p){return p instanceof Error&&(s=p),p}},async then(a){if(v.calledThenHandler=!0,a instanceof Error){let b=a;D(()=>expect(s).toEqual(b),i.then);return}let p=a;if(s)throw Object.keys(s).length>0&&(s.message=["With properties:",`
24
+ `)),s}}))}async loadPersist(e,t,n){return await this.load(e,t),await n(e),this.persist(e)}},S=class{constructor(e){this.store=e}commandHandlers=new Map;projectors=[];eventHandlers=[];build(){return u.new(this.store,this.commandHandlers,this.projectors,this.eventHandlers)}addCommandHandler(e,t){return this.commandHandlers.has(e)&&c(`A command handler for the "${e}" command already exists`),this.commandHandlers.set(e,t),this}addProjector(e){return this.projectors.push(e),this}addEventHandler(e){return this.eventHandlers.push(e),this}};function I(r){return(e,t)=>r[e.eventName]?.(e,t)}var h=new WeakMap;function T(r,e){if(h.has(r)){let t=h.get(r);for(let n in e)t[n]=e[n]}else h.set(r,e)}function g(r){return h.get(r)}var x=class{constructor(){T(this,{jobs:[],state:0})}get length(){return g(this).jobs.length}async start(){let{state:e,jobs:t}=g(this);if(!(e===1||t.length<=0)){for(T(this,{state:1});t.length>0;){let n=t.shift();await Promise.resolve().then(n.handle).then(n.resolve,n.reject)}T(this,{state:0})}}push(e){return new Promise((t,n)=>{let{jobs:o}=g(this);o.push({handle:e,resolve:t,reject:n}),setImmediate(()=>this.start())})}};function B(){}function $(r,e,t=B,n){let o=new x,s=n?.()??{};return{name:r,async init(i){await o.push(()=>t(s));let a=await i.loadEvents();await Promise.all(a.map(p=>this.update(p)))},update(i){return o.push(()=>e[i.eventName]?.(i,s))}}}var H=Symbol("__placeholder__"),v={usedTestEventStoreInTest:!1,calledThenHandler:!1};process.env.NODE_ENV==="test"&&(beforeEach(()=>{v.usedTestEventStoreInTest=!1,v.calledThenHandler=!1}),afterEach(()=>{v.usedTestEventStoreInTest&&!v.calledThenHandler&&c("It seems like you used `createTestEventStore()`\nwithout using the `await then([expected, events, go, here, ...])`")}));function D(r,e){try{return r()}catch(t){throw Error.captureStackTrace&&t instanceof Error&&Error.captureStackTrace(t,e),t}}var C=class{constructor(e=[],t=[]){this.db=e;this.producedEvents=t}name="test-recording-projector";init(){this.db.splice(0)}update(e){this.producedEvents.push(e)}};function G(r,e=[]){v.usedTestEventStoreInTest=!0;let t=new C,n=u.builder({load(a){return t.db.filter(p=>p.aggregateId===a)},loadEvents(){return t.db},persist(a){t.db.push(...a)}});for(let a of e)n.addProjector(a);n.addProjector(t);for(let[a,p]of Object.entries(r))n.addCommandHandler(a,p);let o=n.build(),s,i={___:H,async given(a=[]){t.db.push(...a)},async when(a){try{return await o.dispatch(typeof a=="function"?a():a)}catch(p){return p instanceof Error&&(s=p),p}},async then(a){if(v.calledThenHandler=!0,a instanceof Error){let b=a;D(()=>expect(s).toEqual(b),i.then);return}let p=a;if(s)throw Object.keys(s).length>0&&(s.message=["With properties:",`
25
25
  ${f(s)}
26
26
 
27
27
  ---
28
28
 
29
29
  `].join(`
30
- `)),s;D(()=>{expect(p).toHaveLength(t.producedEvents.length);for(let[b,l]of p.entries()){let{aggregateId:O,eventName:_,payload:m}=t.producedEvents[b];if(l.aggregateId===H)throw new Error("Expected an `aggregateId`, but got `___` instead.");expect(l.aggregateId).toEqual(O),expect(l.eventName).toEqual(_),(l.payload===null||l.payload===void 0)&&expect(l.payload).toEqual(m);for(let E in l.payload){let C=l.payload[E];C===H?(expect(m).toHaveProperty(E),expect(m[E]).toBeDefined()):expect(m[E]).toEqual(C)}}},i.then)}};return i}0&&(module.exports={Aggregate,Command,Event,EventSource,abort,createEventMapper,createProjector,createTestEventStore,objectToYaml});
30
+ `)),s;D(()=>{expect(p).toHaveLength(t.producedEvents.length);for(let[b,l]of p.entries()){let{aggregateId:O,eventName:_,payload:m}=t.producedEvents[b];if(l.aggregateId===H)throw new Error("Expected an `aggregateId`, but got `___` instead.");expect(l.aggregateId).toEqual(O),expect(l.eventName).toEqual(_),(l.payload===null||l.payload===void 0)&&expect(l.payload).toEqual(m);for(let E in l.payload){let A=l.payload[E];A===H?(expect(m).toHaveProperty(E),expect(m[E]).toBeDefined()):expect(m[E]).toEqual(A)}}},i.then)}};return i}0&&(module.exports={Aggregate,Command,Event,EventSource,abort,createEventMapper,createProjector,createTestEventStore,objectToYaml});
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- function x(r,e){let t=Object.assign(new Error(r),e);return t.stack,Error.captureStackTrace&&Error.captureStackTrace(t,x),t}function c(r,e){let t=x(r,e);throw Error.captureStackTrace&&Error.captureStackTrace(t,c),t}function b(r){Object.freeze(r);for(let e of Object.getOwnPropertyNames(r))r.hasOwnProperty(e)&&r[e]!==null&&(typeof r[e]=="object"||typeof r[e]=="function")&&!Object.isFrozen(r[e])&&b(r[e]);return r}var k={NODE_ENV:process.env.NODE_ENV},A=class{#e=0;#t=[];replayEvents(e=[]){for(let t of e)this.applyAnEvent(t);return this}applyAnEvent(e){k.NODE_ENV==="test"&&b(e);let t=this.apply[e.eventName];t==null&&(e.eventName.match(/^[$A-Z_][0-9A-Z_$]*$/i)?c(`Aggregate "${this.constructor.name}" has no method:
1
+ function x(r,e){let t=Object.assign(new Error(r),e);return t.stack,Error.captureStackTrace&&Error.captureStackTrace(t,x),t}function c(r,e){let t=x(r,e);throw Error.captureStackTrace&&Error.captureStackTrace(t,c),t}function b(r){Object.freeze(r);for(let e of Object.getOwnPropertyNames(r))r.hasOwnProperty(e)&&r[e]!==null&&(typeof r[e]=="object"||typeof r[e]=="function")&&!Object.isFrozen(r[e])&&b(r[e]);return r}var k={NODE_ENV:process.env.NODE_ENV},C=class{#e=0;#t=[];replayEvents(e=[]){for(let t of e)this.applyAnEvent(t);return this}applyAnEvent(e){k.NODE_ENV==="test"&&b(e);let t=this.apply[e.eventName];t==null&&(e.eventName.match(/^[$A-Z_][0-9A-Z_$]*$/i)?c(`Aggregate "${this.constructor.name}" has no method:
2
2
 
3
3
  apply = {
4
4
  ${e.eventName}(event) {
@@ -21,10 +21,10 @@ apply = {
21
21
  `).map(i=>` ${i}`).join(`
22
22
  `)),s}})),await Promise.all(this.eventHandlers.map(async a=>{try{await a(n,this)}catch(s){throw s instanceof Error&&console.error(`An error occurred in one of your event handlers: ${a.name}, given an event`,s.stack?.split(`
23
23
  `).map(i=>` ${i}`).join(`
24
- `)),s}}))}async loadPersist(e,t,n){return await this.load(e,t),await n(e),this.persist(e)}},w=class{constructor(e){this.store=e}commandHandlers=new Map;projectors=[];eventHandlers=[];build(){return v.new(this.store,this.commandHandlers,this.projectors,this.eventHandlers)}addCommandHandler(e,t){return this.commandHandlers.has(e)&&c(`A command handler for the "${e}" command already exists`),this.commandHandlers.set(e,t),this}addProjector(e){return this.projectors.push(e),this}addEventHandler(e){return this.eventHandlers.push(e),this}};function O(r){return(e,t)=>r[e.eventName]?.(e,t)}var y=new WeakMap;function f(r,e){if(y.has(r)){let t=y.get(r);for(let n in e)t[n]=e[n]}else y.set(r,e)}function h(r){return y.get(r)}var T=class{constructor(){f(this,{jobs:[],state:0})}get length(){return h(this).jobs.length}async start(){let{state:e,jobs:t}=h(this);if(!(e===1||t.length<=0)){for(f(this,{state:1});t.length>0;){let n=t.shift();await Promise.resolve().then(n.handle).then(n.resolve,n.reject)}f(this,{state:0})}}push(e){return new Promise((t,n)=>{let{jobs:a}=h(this);a.push({handle:e,resolve:t,reject:n}),setImmediate(()=>this.start())})}};function _(){}function L(r,e,t=_,n){let a=new T,s=n?.();return{name:r,async init(i){await a.push(()=>t(s));let o=await i.loadEvents();await Promise.all(o.map(p=>this.update(p)))},update(i){return a.push(()=>e[i.eventName]?.(i,s))}}}var j=Symbol("__placeholder__"),u={usedTestEventStoreInTest:!1,calledThenHandler:!1};process.env.NODE_ENV==="test"&&(beforeEach(()=>{u.usedTestEventStoreInTest=!1,u.calledThenHandler=!1}),afterEach(()=>{u.usedTestEventStoreInTest&&!u.calledThenHandler&&c("It seems like you used `createTestEventStore()`\nwithout using the `await then([expected, events, go, here, ...])`")}));function C(r,e){try{return r()}catch(t){throw Error.captureStackTrace&&t instanceof Error&&Error.captureStackTrace(t,e),t}}var S=class{constructor(e=[],t=[]){this.db=e;this.producedEvents=t}name="test-recording-projector";init(){this.db.splice(0)}update(e){this.producedEvents.push(e)}};function ue(r,e=[]){u.usedTestEventStoreInTest=!0;let t=new S,n=v.builder({load(o){return t.db.filter(p=>p.aggregateId===o)},loadEvents(){return t.db},persist(o){t.db.push(...o)}});for(let o of e)n.addProjector(o);n.addProjector(t);for(let[o,p]of Object.entries(r))n.addCommandHandler(o,p);let a=n.build(),s,i={___:j,async given(o=[]){t.db.push(...o)},async when(o){try{return await a.dispatch(typeof o=="function"?o():o)}catch(p){return p instanceof Error&&(s=p),p}},async then(o){if(u.calledThenHandler=!0,o instanceof Error){let g=o;C(()=>expect(s).toEqual(g),i.then);return}let p=o;if(s)throw Object.keys(s).length>0&&(s.message=["With properties:",`
24
+ `)),s}}))}async loadPersist(e,t,n){return await this.load(e,t),await n(e),this.persist(e)}},w=class{constructor(e){this.store=e}commandHandlers=new Map;projectors=[];eventHandlers=[];build(){return v.new(this.store,this.commandHandlers,this.projectors,this.eventHandlers)}addCommandHandler(e,t){return this.commandHandlers.has(e)&&c(`A command handler for the "${e}" command already exists`),this.commandHandlers.set(e,t),this}addProjector(e){return this.projectors.push(e),this}addEventHandler(e){return this.eventHandlers.push(e),this}};function O(r){return(e,t)=>r[e.eventName]?.(e,t)}var y=new WeakMap;function f(r,e){if(y.has(r)){let t=y.get(r);for(let n in e)t[n]=e[n]}else y.set(r,e)}function h(r){return y.get(r)}var T=class{constructor(){f(this,{jobs:[],state:0})}get length(){return h(this).jobs.length}async start(){let{state:e,jobs:t}=h(this);if(!(e===1||t.length<=0)){for(f(this,{state:1});t.length>0;){let n=t.shift();await Promise.resolve().then(n.handle).then(n.resolve,n.reject)}f(this,{state:0})}}push(e){return new Promise((t,n)=>{let{jobs:a}=h(this);a.push({handle:e,resolve:t,reject:n}),setImmediate(()=>this.start())})}};function _(){}function L(r,e,t=_,n){let a=new T,s=n?.()??{};return{name:r,async init(i){await a.push(()=>t(s));let o=await i.loadEvents();await Promise.all(o.map(p=>this.update(p)))},update(i){return a.push(()=>e[i.eventName]?.(i,s))}}}var j=Symbol("__placeholder__"),u={usedTestEventStoreInTest:!1,calledThenHandler:!1};process.env.NODE_ENV==="test"&&(beforeEach(()=>{u.usedTestEventStoreInTest=!1,u.calledThenHandler=!1}),afterEach(()=>{u.usedTestEventStoreInTest&&!u.calledThenHandler&&c("It seems like you used `createTestEventStore()`\nwithout using the `await then([expected, events, go, here, ...])`")}));function A(r,e){try{return r()}catch(t){throw Error.captureStackTrace&&t instanceof Error&&Error.captureStackTrace(t,e),t}}var S=class{constructor(e=[],t=[]){this.db=e;this.producedEvents=t}name="test-recording-projector";init(){this.db.splice(0)}update(e){this.producedEvents.push(e)}};function ue(r,e=[]){u.usedTestEventStoreInTest=!0;let t=new S,n=v.builder({load(o){return t.db.filter(p=>p.aggregateId===o)},loadEvents(){return t.db},persist(o){t.db.push(...o)}});for(let o of e)n.addProjector(o);n.addProjector(t);for(let[o,p]of Object.entries(r))n.addCommandHandler(o,p);let a=n.build(),s,i={___:j,async given(o=[]){t.db.push(...o)},async when(o){try{return await a.dispatch(typeof o=="function"?o():o)}catch(p){return p instanceof Error&&(s=p),p}},async then(o){if(u.calledThenHandler=!0,o instanceof Error){let g=o;A(()=>expect(s).toEqual(g),i.then);return}let p=o;if(s)throw Object.keys(s).length>0&&(s.message=["With properties:",`
25
25
  ${P(s)}
26
26
 
27
27
  ---
28
28
 
29
29
  `].join(`
30
- `)),s;C(()=>{expect(p).toHaveLength(t.producedEvents.length);for(let[g,l]of p.entries()){let{aggregateId:N,eventName:M,payload:m}=t.producedEvents[g];if(l.aggregateId===j)throw new Error("Expected an `aggregateId`, but got `___` instead.");expect(l.aggregateId).toEqual(N),expect(l.eventName).toEqual(M),(l.payload===null||l.payload===void 0)&&expect(l.payload).toEqual(m);for(let E in l.payload){let H=l.payload[E];H===j?(expect(m).toHaveProperty(E),expect(m[E]).toBeDefined()):expect(m[E]).toEqual(H)}}},i.then)}};return i}export{A as Aggregate,J as Command,Z as Event,v as EventSource,c as abort,O as createEventMapper,L as createProjector,ue as createTestEventStore,P as objectToYaml};
30
+ `)),s;A(()=>{expect(p).toHaveLength(t.producedEvents.length);for(let[g,l]of p.entries()){let{aggregateId:N,eventName:M,payload:m}=t.producedEvents[g];if(l.aggregateId===j)throw new Error("Expected an `aggregateId`, but got `___` instead.");expect(l.aggregateId).toEqual(N),expect(l.eventName).toEqual(M),(l.payload===null||l.payload===void 0)&&expect(l.payload).toEqual(m);for(let E in l.payload){let H=l.payload[E];H===j?(expect(m).toHaveProperty(E),expect(m[E]).toBeDefined()):expect(m[E]).toEqual(H)}}},i.then)}};return i}export{C as Aggregate,J as Command,Z as Event,v as EventSource,c as abort,O as createEventMapper,L as createProjector,ue as createTestEventStore,P as objectToYaml};
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.8",
2
+ "version": "0.0.9",
3
3
  "name": "@robinmalfait/event-source",
4
4
  "publishConfig": {
5
5
  "access": "public"