@event-driven-io/emmett 0.16.0 → 0.17.0

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.
@@ -1,2 +1,2 @@
1
1
  var n=(t,{type:r,data:o})=>{switch(r){case"ProductItemAdded":{let e=o.productItem;return{productItems:[...t.productItems,e],totalAmount:t.totalAmount+e.price*e.quantity}}case"DiscountApplied":return{...t,totalAmount:t.totalAmount*(1-o.percent/100)}}},u=(t,{type:r,data:o})=>{switch(r){case"ProductItemAdded":{let e=o.productItem;return{productItems:[...t.productItems,e],totalAmount:t.totalAmount+e.price*e.quantity}}case"DiscountApplied":return{...t,totalAmount:t.totalAmount*(1-o.percent/100)}}},c=()=>({productItems:[],totalAmount:0});export{n as a,u as b,c};
2
- //# sourceMappingURL=chunk-WB5PNUKG.mjs.map
2
+ //# sourceMappingURL=chunk-454AWP5L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/testing/shoppingCart.domain.ts"],"sourcesContent":["import { type Event, type ReadEvent } from '../typing';\n\nexport type PricedProductItem = {\n productId: string;\n quantity: number;\n price: number;\n};\n\nexport type ShoppingCart = {\n productItems: PricedProductItem[];\n totalAmount: number;\n};\n\nexport type ProductItemAdded = Event<\n 'ProductItemAdded',\n { productItem: PricedProductItem }\n>;\nexport type DiscountApplied = Event<\n 'DiscountApplied',\n { percent: number; couponId: string }\n>;\n\nexport type ShoppingCartEvent = ProductItemAdded | DiscountApplied;\n\nexport const evolve = (\n state: ShoppingCart,\n { type, data }: ShoppingCartEvent,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const evolveWithMetadata = (\n state: ShoppingCart,\n { type, data }: ReadEvent<ShoppingCartEvent>,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const initialState = (): ShoppingCart => {\n return { productItems: [], totalAmount: 0 };\n};\n"],"mappings":"AAwBO,IAAMA,EAAS,CACpBC,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaE,EAAqB,CAChCJ,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaG,EAAe,KACnB,CAAE,aAAc,CAAC,EAAG,YAAa,CAAE","names":["evolve","state","type","data","productItem","evolveWithMetadata","initialState"]}
@@ -1,2 +1,2 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});var n=(t,{type:r,data:o})=>{switch(r){case"ProductItemAdded":{let e=o.productItem;return{productItems:[...t.productItems,e],totalAmount:t.totalAmount+e.price*e.quantity}}case"DiscountApplied":return{...t,totalAmount:t.totalAmount*(1-o.percent/100)}}},u= exports.b =(t,{type:r,data:o})=>{switch(r){case"ProductItemAdded":{let e=o.productItem;return{productItems:[...t.productItems,e],totalAmount:t.totalAmount+e.price*e.quantity}}case"DiscountApplied":return{...t,totalAmount:t.totalAmount*(1-o.percent/100)}}},c= exports.c =()=>({productItems:[],totalAmount:0});exports.a = n; exports.b = u; exports.c = c;
2
- //# sourceMappingURL=chunk-7BR3VBVD.js.map
2
+ //# sourceMappingURL=chunk-6KOV4DVN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/testing/shoppingCart.domain.ts"],"names":["evolve","state","type","data","productItem","evolveWithMetadata","initialState"],"mappings":"AAwBO,IAAMA,EAAS,CACpBC,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaE,EAAqB,CAChCJ,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaG,EAAe,KACnB,CAAE,aAAc,CAAC,EAAG,YAAa,CAAE","sourcesContent":["import { type Event, type ReadEvent } from '../typing';\n\nexport type PricedProductItem = {\n productId: string;\n quantity: number;\n price: number;\n};\n\nexport type ShoppingCart = {\n productItems: PricedProductItem[];\n totalAmount: number;\n};\n\nexport type ProductItemAdded = Event<\n 'ProductItemAdded',\n { productItem: PricedProductItem }\n>;\nexport type DiscountApplied = Event<\n 'DiscountApplied',\n { percent: number; couponId: string }\n>;\n\nexport type ShoppingCartEvent = ProductItemAdded | DiscountApplied;\n\nexport const evolve = (\n state: ShoppingCart,\n { type, data }: ShoppingCartEvent,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const evolveWithMetadata = (\n state: ShoppingCart,\n { type, data }: ReadEvent<ShoppingCartEvent>,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const initialState = (): ShoppingCart => {\n return { productItems: [], totalAmount: 0 };\n};\n"]}
@@ -0,0 +1,2 @@
1
+ var a=e=>e,n=e=>e.map(t=>({type:"inline",projection:t})),o=e=>e.map(t=>({type:"async",projection:t})),i={inline:n,async:o};export{a,n as b,o as c,i as d};
2
+ //# sourceMappingURL=chunk-VJ2HSKBS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/projections/index.ts"],"sourcesContent":["import type {\n CanHandle,\n DefaultRecord,\n Event,\n EventMetaDataOf,\n ReadEvent,\n ReadEventMetadata,\n} from '../typing';\n\nexport type ProjectionHandlingType = 'inline' | 'async';\n\nexport type ProjectionHandler<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = (\n events: ReadEvent<EventType, EventMetaDataType>[],\n context: ProjectionHandlerContext,\n) => Promise<void> | void;\n\nexport interface ProjectionDefinition<\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<Event>;\n handle: ProjectionHandler<Event, ReadEventMetadata, ProjectionHandlerContext>;\n}\n\nexport interface TypedProjectionDefinition<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<EventType>;\n handle: ProjectionHandler<\n EventType,\n EventMetaDataType,\n ProjectionHandlerContext\n >;\n}\n\nexport type ProjectionRegistration<\n HandlingType extends ProjectionHandlingType,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = {\n type: HandlingType;\n projection: ProjectionDefinition<ProjectionHandlerContext>;\n};\n\nexport const projection = <\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends TypedProjectionDefinition<\n EventType,\n EventMetaDataType,\n ProjectionHandlerContext\n > = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definition: ProjectionDefintionType,\n): ProjectionDefintionType => definition;\n\nexport const inlineProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'inline', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'inline', projection }));\n\nexport const asyncProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'async', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'async', projection }));\n\nexport const projections = {\n inline: inlineProjections,\n async: asyncProjections,\n};\n"],"mappings":"AAoDO,IAAMA,EAWXC,GAC4BA,EAEjBC,EAKXC,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,SAAU,WAAAA,CAAW,EAAE,EAErDI,EAKXD,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,QAAS,WAAAA,CAAW,EAAE,EAEpDK,EAAc,CACzB,OAAQH,EACR,MAAOE,CACT","names":["projection","definition","inlineProjections","definitions","asyncProjections","projections"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var a=e=>e,n= exports.b =e=>e.map(t=>({type:"inline",projection:t})),o= exports.c =e=>e.map(t=>({type:"async",projection:t})),i= exports.d ={inline:n,async:o};exports.a = a; exports.b = n; exports.c = o; exports.d = i;
2
+ //# sourceMappingURL=chunk-XMANDEQN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/projections/index.ts"],"names":["projection","definition","inlineProjections","definitions","asyncProjections","projections"],"mappings":"AAoDO,IAAMA,EAWXC,GAC4BA,EAEjBC,EAKXC,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,SAAU,WAAAA,CAAW,EAAE,EAErDI,EAKXD,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,QAAS,WAAAA,CAAW,EAAE,EAEpDK,EAAc,CACzB,OAAQH,EACR,MAAOE,CACT","sourcesContent":["import type {\n CanHandle,\n DefaultRecord,\n Event,\n EventMetaDataOf,\n ReadEvent,\n ReadEventMetadata,\n} from '../typing';\n\nexport type ProjectionHandlingType = 'inline' | 'async';\n\nexport type ProjectionHandler<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = (\n events: ReadEvent<EventType, EventMetaDataType>[],\n context: ProjectionHandlerContext,\n) => Promise<void> | void;\n\nexport interface ProjectionDefinition<\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<Event>;\n handle: ProjectionHandler<Event, ReadEventMetadata, ProjectionHandlerContext>;\n}\n\nexport interface TypedProjectionDefinition<\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<EventType>;\n handle: ProjectionHandler<\n EventType,\n EventMetaDataType,\n ProjectionHandlerContext\n >;\n}\n\nexport type ProjectionRegistration<\n HandlingType extends ProjectionHandlingType,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = {\n type: HandlingType;\n projection: ProjectionDefinition<ProjectionHandlerContext>;\n};\n\nexport const projection = <\n EventType extends Event = Event,\n EventMetaDataType extends EventMetaDataOf<EventType> &\n ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends TypedProjectionDefinition<\n EventType,\n EventMetaDataType,\n ProjectionHandlerContext\n > = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definition: ProjectionDefintionType,\n): ProjectionDefintionType => definition;\n\nexport const inlineProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'inline', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'inline', projection }));\n\nexport const asyncProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'async', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'async', projection }));\n\nexport const projections = {\n inline: inlineProjections,\n async: asyncProjections,\n};\n"]}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-BNCTLP4B.js');var _chunkTNX525X5js = require('./chunk-TNX525X5.js');require('./chunk-7MFB6DXR.js');require('./chunk-BP5RXRGL.js');var _chunkUHJAD4TUjs = require('./chunk-UHJAD4TU.js');var _chunk7ZSJY377js = require('./chunk-7ZSJY377.js');var _chunkG6LPI3PAjs = require('./chunk-G6LPI3PA.js');var _chunk2E7KSKKIjs = require('./chunk-2E7KSKKI.js');var _chunk5JZKD7CBjs = require('./chunk-5JZKD7CB.js');var _chunkZIBX4FPGjs = require('./chunk-ZIBX4FPG.js');var _chunkFNYJ62ROjs = require('./chunk-FNYJ62RO.js');require('./chunk-YGTOG7JR.js');var _chunkC2N3BJXWjs = require('./chunk-C2N3BJXW.js');var _chunk3ZZHSAJGjs = require('./chunk-3ZZHSAJG.js');require('./chunk-6IATZUYD.js');var _chunkPVFUNWT6js = require('./chunk-PVFUNWT6.js');var _chunkFE73T2NSjs = require('./chunk-FE73T2NS.js');var _chunk3JE5DUJ2js = require('./chunk-3JE5DUJ2.js');var _chunkHCHELB23js = require('./chunk-HCHELB23.js');require('./chunk-ZLASBJGR.js');var _chunkUFUSYJWUjs = require('./chunk-UFUSYJWU.js');var _chunkMHB2JU4Ujs = require('./chunk-MHB2JU4U.js');require('./chunk-7FJXUW3D.js');require('./chunk-5BGN2FV4.js');var _chunkQYDAYWBJjs = require('./chunk-QYDAYWBJ.js');var _chunkOTLRRXEAjs = require('./chunk-OTLRRXEA.js');require('./chunk-LOJ6A4AJ.js');require('./chunk-AU2WZCER.js');var _chunkMKHK5TRMjs = require('./chunk-MKHK5TRM.js');var _chunk4K5I5WJGjs = require('./chunk-4K5I5WJG.js');require('./chunk-F7QRI2VL.js');var _chunkTNJCS5RVjs = require('./chunk-TNJCS5RV.js');var _chunkPRYQOCWYjs = require('./chunk-PRYQOCWY.js');require('./chunk-2452BJTJ.js');var _chunk74HCODMEjs = require('./chunk-74HCODME.js');require('./chunk-IJGC6SHP.js');var _chunkVY2C2KCWjs = require('./chunk-VY2C2KCW.js');var _chunkE7KI3V22js = require('./chunk-E7KI3V22.js');exports.AssertionError = _chunk3ZZHSAJGjs.a; exports.BinaryJsonDecoder = _chunk2E7KSKKIjs.a; exports.CommandHandler = _chunkPRYQOCWYjs.a; exports.CompositeDecoder = _chunkG6LPI3PAjs.a; exports.ConcurrencyError = _chunkE7KI3V22js.l; exports.DeciderCommandHandler = _chunkTNJCS5RVjs.a; exports.DeciderSpecification = _chunkC2N3BJXWjs.a; exports.DefaultDecoder = _chunkG6LPI3PAjs.b; exports.EmmettError = _chunkE7KI3V22js.k; exports.ExpectedVersionConflictError = _chunkVY2C2KCWjs.f; exports.IllegalStateError = _chunkE7KI3V22js.n; exports.JSONParser = _chunkMKHK5TRMjs.b; exports.JsonDecoder = _chunk5JZKD7CBjs.a; exports.NO_CONCURRENCY_CHECK = _chunkVY2C2KCWjs.c; exports.NotFoundError = _chunkE7KI3V22js.o; exports.ObjectDecoder = _chunkZIBX4FPGjs.a; exports.ParseError = _chunkMKHK5TRMjs.a; exports.STREAM_DOES_NOT_EXIST = _chunkVY2C2KCWjs.b; exports.STREAM_EXISTS = _chunkVY2C2KCWjs.a; exports.StringDecoder = _chunkFNYJ62ROjs.a; exports.ValidationError = _chunkE7KI3V22js.m; exports.ValidationErrors = _chunkE7KI3V22js.d; exports.WrapEventStore = _chunkTNX525X5js.a; exports.accept = _chunkUFUSYJWUjs.h; exports.argMatches = _chunk3ZZHSAJGjs.r; exports.argValue = _chunk3ZZHSAJGjs.q; exports.assertDeepEqual = _chunk3ZZHSAJGjs.g; exports.assertEqual = _chunk3ZZHSAJGjs.m; exports.assertExpectedVersionMatchesCurrent = _chunkVY2C2KCWjs.e; exports.assertFails = _chunk3ZZHSAJGjs.c; exports.assertFalse = _chunk3ZZHSAJGjs.j; exports.assertIsNotNull = _chunk3ZZHSAJGjs.o; exports.assertIsNull = _chunk3ZZHSAJGjs.p; exports.assertMatches = _chunk3ZZHSAJGjs.f; exports.assertNotDeepEqual = _chunk3ZZHSAJGjs.h; exports.assertNotEmptyString = _chunkE7KI3V22js.g; exports.assertNotEqual = _chunk3ZZHSAJGjs.n; exports.assertOk = _chunk3ZZHSAJGjs.l; exports.assertPositiveNumber = _chunkE7KI3V22js.h; exports.assertThat = _chunk3ZZHSAJGjs.i; exports.assertThatArray = _chunk3ZZHSAJGjs.t; exports.assertThrows = _chunk3ZZHSAJGjs.e; exports.assertThrowsAsync = _chunk3ZZHSAJGjs.d; exports.assertTrue = _chunk3ZZHSAJGjs.k; exports.assertUnsignedBigInt = _chunkE7KI3V22js.i; exports.asyncProjections = _chunkOTLRRXEAjs.c; exports.collectStream = _chunkUHJAD4TUjs.a; exports.command = _chunkMHB2JU4Ujs.a; exports.complete = _chunkUFUSYJWUjs.e; exports.concatUint8Arrays = _chunk4K5I5WJGjs.a; exports.deepEquals = _chunkPVFUNWT6js.a; exports.error = _chunkUFUSYJWUjs.g; exports.event = _chunkQYDAYWBJjs.a; exports.formatDateToUtcYYYYMMDD = _chunkE7KI3V22js.a; exports.getInMemoryEventStore = _chunk74HCODMEjs.a; exports.getInMemoryMessageBus = _chunkHCHELB23js.a; exports.ignore = _chunkUFUSYJWUjs.f; exports.inlineProjections = _chunkOTLRRXEAjs.b; exports.isEquatable = _chunkPVFUNWT6js.b; exports.isErrorConstructor = _chunkE7KI3V22js.j; exports.isNumber = _chunkE7KI3V22js.e; exports.isString = _chunkE7KI3V22js.f; exports.isSubset = _chunk3ZZHSAJGjs.b; exports.isValidYYYYMMDD = _chunkE7KI3V22js.b; exports.matchesExpectedVersion = _chunkVY2C2KCWjs.d; exports.merge = _chunk3JE5DUJ2js.a; exports.parseDateFromUtcYYYYMMDD = _chunkE7KI3V22js.c; exports.projection = _chunkOTLRRXEAjs.a; exports.projections = _chunkOTLRRXEAjs.d; exports.publish = _chunkUFUSYJWUjs.c; exports.reply = _chunkUFUSYJWUjs.a; exports.restream = _chunk7ZSJY377js.a; exports.schedule = _chunkUFUSYJWUjs.d; exports.send = _chunkUFUSYJWUjs.b; exports.sum = _chunkFE73T2NSjs.a; exports.verifyThat = _chunk3ZZHSAJGjs.s;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-BNCTLP4B.js');var _chunkTNX525X5js = require('./chunk-TNX525X5.js');require('./chunk-7MFB6DXR.js');require('./chunk-BP5RXRGL.js');var _chunkUHJAD4TUjs = require('./chunk-UHJAD4TU.js');var _chunk7ZSJY377js = require('./chunk-7ZSJY377.js');var _chunkG6LPI3PAjs = require('./chunk-G6LPI3PA.js');var _chunk2E7KSKKIjs = require('./chunk-2E7KSKKI.js');var _chunk5JZKD7CBjs = require('./chunk-5JZKD7CB.js');var _chunkZIBX4FPGjs = require('./chunk-ZIBX4FPG.js');var _chunkFNYJ62ROjs = require('./chunk-FNYJ62RO.js');require('./chunk-YGTOG7JR.js');var _chunkC2N3BJXWjs = require('./chunk-C2N3BJXW.js');var _chunk3ZZHSAJGjs = require('./chunk-3ZZHSAJG.js');require('./chunk-6IATZUYD.js');var _chunkPVFUNWT6js = require('./chunk-PVFUNWT6.js');var _chunkFE73T2NSjs = require('./chunk-FE73T2NS.js');var _chunk3JE5DUJ2js = require('./chunk-3JE5DUJ2.js');var _chunkHCHELB23js = require('./chunk-HCHELB23.js');require('./chunk-ZLASBJGR.js');var _chunkUFUSYJWUjs = require('./chunk-UFUSYJWU.js');var _chunkMHB2JU4Ujs = require('./chunk-MHB2JU4U.js');require('./chunk-7FJXUW3D.js');require('./chunk-5BGN2FV4.js');var _chunkQYDAYWBJjs = require('./chunk-QYDAYWBJ.js');var _chunkXMANDEQNjs = require('./chunk-XMANDEQN.js');require('./chunk-LOJ6A4AJ.js');require('./chunk-AU2WZCER.js');var _chunkMKHK5TRMjs = require('./chunk-MKHK5TRM.js');var _chunk4K5I5WJGjs = require('./chunk-4K5I5WJG.js');require('./chunk-F7QRI2VL.js');var _chunkTNJCS5RVjs = require('./chunk-TNJCS5RV.js');var _chunkPRYQOCWYjs = require('./chunk-PRYQOCWY.js');require('./chunk-2452BJTJ.js');var _chunk74HCODMEjs = require('./chunk-74HCODME.js');require('./chunk-IJGC6SHP.js');var _chunkVY2C2KCWjs = require('./chunk-VY2C2KCW.js');var _chunkE7KI3V22js = require('./chunk-E7KI3V22.js');exports.AssertionError = _chunk3ZZHSAJGjs.a; exports.BinaryJsonDecoder = _chunk2E7KSKKIjs.a; exports.CommandHandler = _chunkPRYQOCWYjs.a; exports.CompositeDecoder = _chunkG6LPI3PAjs.a; exports.ConcurrencyError = _chunkE7KI3V22js.l; exports.DeciderCommandHandler = _chunkTNJCS5RVjs.a; exports.DeciderSpecification = _chunkC2N3BJXWjs.a; exports.DefaultDecoder = _chunkG6LPI3PAjs.b; exports.EmmettError = _chunkE7KI3V22js.k; exports.ExpectedVersionConflictError = _chunkVY2C2KCWjs.f; exports.IllegalStateError = _chunkE7KI3V22js.n; exports.JSONParser = _chunkMKHK5TRMjs.b; exports.JsonDecoder = _chunk5JZKD7CBjs.a; exports.NO_CONCURRENCY_CHECK = _chunkVY2C2KCWjs.c; exports.NotFoundError = _chunkE7KI3V22js.o; exports.ObjectDecoder = _chunkZIBX4FPGjs.a; exports.ParseError = _chunkMKHK5TRMjs.a; exports.STREAM_DOES_NOT_EXIST = _chunkVY2C2KCWjs.b; exports.STREAM_EXISTS = _chunkVY2C2KCWjs.a; exports.StringDecoder = _chunkFNYJ62ROjs.a; exports.ValidationError = _chunkE7KI3V22js.m; exports.ValidationErrors = _chunkE7KI3V22js.d; exports.WrapEventStore = _chunkTNX525X5js.a; exports.accept = _chunkUFUSYJWUjs.h; exports.argMatches = _chunk3ZZHSAJGjs.r; exports.argValue = _chunk3ZZHSAJGjs.q; exports.assertDeepEqual = _chunk3ZZHSAJGjs.g; exports.assertEqual = _chunk3ZZHSAJGjs.m; exports.assertExpectedVersionMatchesCurrent = _chunkVY2C2KCWjs.e; exports.assertFails = _chunk3ZZHSAJGjs.c; exports.assertFalse = _chunk3ZZHSAJGjs.j; exports.assertIsNotNull = _chunk3ZZHSAJGjs.o; exports.assertIsNull = _chunk3ZZHSAJGjs.p; exports.assertMatches = _chunk3ZZHSAJGjs.f; exports.assertNotDeepEqual = _chunk3ZZHSAJGjs.h; exports.assertNotEmptyString = _chunkE7KI3V22js.g; exports.assertNotEqual = _chunk3ZZHSAJGjs.n; exports.assertOk = _chunk3ZZHSAJGjs.l; exports.assertPositiveNumber = _chunkE7KI3V22js.h; exports.assertThat = _chunk3ZZHSAJGjs.i; exports.assertThatArray = _chunk3ZZHSAJGjs.t; exports.assertThrows = _chunk3ZZHSAJGjs.e; exports.assertThrowsAsync = _chunk3ZZHSAJGjs.d; exports.assertTrue = _chunk3ZZHSAJGjs.k; exports.assertUnsignedBigInt = _chunkE7KI3V22js.i; exports.asyncProjections = _chunkXMANDEQNjs.c; exports.collectStream = _chunkUHJAD4TUjs.a; exports.command = _chunkMHB2JU4Ujs.a; exports.complete = _chunkUFUSYJWUjs.e; exports.concatUint8Arrays = _chunk4K5I5WJGjs.a; exports.deepEquals = _chunkPVFUNWT6js.a; exports.error = _chunkUFUSYJWUjs.g; exports.event = _chunkQYDAYWBJjs.a; exports.formatDateToUtcYYYYMMDD = _chunkE7KI3V22js.a; exports.getInMemoryEventStore = _chunk74HCODMEjs.a; exports.getInMemoryMessageBus = _chunkHCHELB23js.a; exports.ignore = _chunkUFUSYJWUjs.f; exports.inlineProjections = _chunkXMANDEQNjs.b; exports.isEquatable = _chunkPVFUNWT6js.b; exports.isErrorConstructor = _chunkE7KI3V22js.j; exports.isNumber = _chunkE7KI3V22js.e; exports.isString = _chunkE7KI3V22js.f; exports.isSubset = _chunk3ZZHSAJGjs.b; exports.isValidYYYYMMDD = _chunkE7KI3V22js.b; exports.matchesExpectedVersion = _chunkVY2C2KCWjs.d; exports.merge = _chunk3JE5DUJ2js.a; exports.parseDateFromUtcYYYYMMDD = _chunkE7KI3V22js.c; exports.projection = _chunkXMANDEQNjs.a; exports.projections = _chunkXMANDEQNjs.d; exports.publish = _chunkUFUSYJWUjs.c; exports.reply = _chunkUFUSYJWUjs.a; exports.restream = _chunk7ZSJY377js.a; exports.schedule = _chunkUFUSYJWUjs.d; exports.send = _chunkUFUSYJWUjs.b; exports.sum = _chunkFE73T2NSjs.a; exports.verifyThat = _chunk3ZZHSAJGjs.s;
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-AHXBZPOE.mjs";import{a as vo}from"./chunk-N6X7QWHP.mjs";import"./chunk-F6WLSL2L.mjs";import"./chunk-FVA6ACSC.mjs";import{a as Q}from"./chunk-7LENV63T.mjs";import{a as X}from"./chunk-ZV7YVTI7.mjs";import{a as V,b as W}from"./chunk-TKIRQ76T.mjs";import{a as R}from"./chunk-HKNRGZN2.mjs";import{a as T}from"./chunk-MR2WVMFM.mjs";import{a as U}from"./chunk-S3C5CKD5.mjs";import{a as S}from"./chunk-VTWTSAHB.mjs";import"./chunk-QFEG5DNU.mjs";import{a as uo}from"./chunk-BZ6ZVZAX.mjs";import{a as oo,b as ro,c as eo,d as fo,e as mo,f as po,g as to,h as xo,i as ao,j as bo,k as co,l as go,m as ho,n as io,o as jo,p as ko,q as lo,r as no,s as qo,t as so}from"./chunk-ZUHYOH4G.mjs";import"./chunk-3DH3DSMC.mjs";import{a as Y,b as Z}from"./chunk-B7NWWHCY.mjs";import{a as _}from"./chunk-OBA6MZMG.mjs";import{a as $}from"./chunk-YKFEDBH4.mjs";import{a as I}from"./chunk-6PH3GSCE.mjs";import"./chunk-YWRV75GA.mjs";import{a as A,b as B,c as C,d as D,e as E,f as F,g as G,h as H}from"./chunk-GNUOGYD6.mjs";import{a as y}from"./chunk-JDYZZRJE.mjs";import"./chunk-3LYVXI5R.mjs";import"./chunk-DOHUIBZQ.mjs";import{a as z}from"./chunk-QWM33AYY.mjs";import{a as J,b as K,c as L,d as M}from"./chunk-ZIFNLQ77.mjs";import"./chunk-DIW552TK.mjs";import"./chunk-7JLAVMM3.mjs";import{a as N,b as O}from"./chunk-S33YM44M.mjs";import{a as P}from"./chunk-WCQF2QY4.mjs";import"./chunk-XLZS42HB.mjs";import{a as w}from"./chunk-NXFNVBXL.mjs";import{a as v}from"./chunk-POWQ3BZ6.mjs";import"./chunk-45ODDXOQ.mjs";import{a as u}from"./chunk-JVPAJ3FU.mjs";import"./chunk-D24KLTN5.mjs";import{a as j,b as k,c as l,d as n,e as q,f as s}from"./chunk-HKDMOB55.mjs";import{a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d,m as g,n as h,o as i}from"./chunk-KLLSLLHN.mjs";export{oo as AssertionError,R as BinaryJsonDecoder,v as CommandHandler,V as CompositeDecoder,d as ConcurrencyError,w as DeciderCommandHandler,uo as DeciderSpecification,W as DefaultDecoder,c as EmmettError,s as ExpectedVersionConflictError,h as IllegalStateError,O as JSONParser,T as JsonDecoder,l as NO_CONCURRENCY_CHECK,i as NotFoundError,U as ObjectDecoder,N as ParseError,k as STREAM_DOES_NOT_EXIST,j as STREAM_EXISTS,S as StringDecoder,g as ValidationError,f as ValidationErrors,vo as WrapEventStore,H as accept,no as argMatches,lo as argValue,to as assertDeepEqual,ho as assertEqual,q as assertExpectedVersionMatchesCurrent,eo as assertFails,bo as assertFalse,jo as assertIsNotNull,ko as assertIsNull,po as assertMatches,xo as assertNotDeepEqual,t as assertNotEmptyString,io as assertNotEqual,go as assertOk,x as assertPositiveNumber,ao as assertThat,so as assertThatArray,mo as assertThrows,fo as assertThrowsAsync,co as assertTrue,a as assertUnsignedBigInt,L as asyncProjections,Q as collectStream,y as command,E as complete,P as concatUint8Arrays,Y as deepEquals,G as error,z as event,o as formatDateToUtcYYYYMMDD,u as getInMemoryEventStore,I as getInMemoryMessageBus,F as ignore,K as inlineProjections,Z as isEquatable,b as isErrorConstructor,m as isNumber,p as isString,ro as isSubset,r as isValidYYYYMMDD,n as matchesExpectedVersion,$ as merge,e as parseDateFromUtcYYYYMMDD,J as projection,M as projections,C as publish,A as reply,X as restream,D as schedule,B as send,_ as sum,qo as verifyThat};
1
+ import"./chunk-AHXBZPOE.mjs";import{a as vo}from"./chunk-N6X7QWHP.mjs";import"./chunk-F6WLSL2L.mjs";import"./chunk-FVA6ACSC.mjs";import{a as Q}from"./chunk-7LENV63T.mjs";import{a as X}from"./chunk-ZV7YVTI7.mjs";import{a as V,b as W}from"./chunk-TKIRQ76T.mjs";import{a as R}from"./chunk-HKNRGZN2.mjs";import{a as T}from"./chunk-MR2WVMFM.mjs";import{a as U}from"./chunk-S3C5CKD5.mjs";import{a as S}from"./chunk-VTWTSAHB.mjs";import"./chunk-QFEG5DNU.mjs";import{a as uo}from"./chunk-BZ6ZVZAX.mjs";import{a as oo,b as ro,c as eo,d as fo,e as mo,f as po,g as to,h as xo,i as ao,j as bo,k as co,l as go,m as ho,n as io,o as jo,p as ko,q as lo,r as no,s as qo,t as so}from"./chunk-ZUHYOH4G.mjs";import"./chunk-3DH3DSMC.mjs";import{a as Y,b as Z}from"./chunk-B7NWWHCY.mjs";import{a as _}from"./chunk-OBA6MZMG.mjs";import{a as $}from"./chunk-YKFEDBH4.mjs";import{a as I}from"./chunk-6PH3GSCE.mjs";import"./chunk-YWRV75GA.mjs";import{a as A,b as B,c as C,d as D,e as E,f as F,g as G,h as H}from"./chunk-GNUOGYD6.mjs";import{a as y}from"./chunk-JDYZZRJE.mjs";import"./chunk-3LYVXI5R.mjs";import"./chunk-DOHUIBZQ.mjs";import{a as z}from"./chunk-QWM33AYY.mjs";import{a as J,b as K,c as L,d as M}from"./chunk-VJ2HSKBS.mjs";import"./chunk-DIW552TK.mjs";import"./chunk-7JLAVMM3.mjs";import{a as N,b as O}from"./chunk-S33YM44M.mjs";import{a as P}from"./chunk-WCQF2QY4.mjs";import"./chunk-XLZS42HB.mjs";import{a as w}from"./chunk-NXFNVBXL.mjs";import{a as v}from"./chunk-POWQ3BZ6.mjs";import"./chunk-45ODDXOQ.mjs";import{a as u}from"./chunk-JVPAJ3FU.mjs";import"./chunk-D24KLTN5.mjs";import{a as j,b as k,c as l,d as n,e as q,f as s}from"./chunk-HKDMOB55.mjs";import{a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d,m as g,n as h,o as i}from"./chunk-KLLSLLHN.mjs";export{oo as AssertionError,R as BinaryJsonDecoder,v as CommandHandler,V as CompositeDecoder,d as ConcurrencyError,w as DeciderCommandHandler,uo as DeciderSpecification,W as DefaultDecoder,c as EmmettError,s as ExpectedVersionConflictError,h as IllegalStateError,O as JSONParser,T as JsonDecoder,l as NO_CONCURRENCY_CHECK,i as NotFoundError,U as ObjectDecoder,N as ParseError,k as STREAM_DOES_NOT_EXIST,j as STREAM_EXISTS,S as StringDecoder,g as ValidationError,f as ValidationErrors,vo as WrapEventStore,H as accept,no as argMatches,lo as argValue,to as assertDeepEqual,ho as assertEqual,q as assertExpectedVersionMatchesCurrent,eo as assertFails,bo as assertFalse,jo as assertIsNotNull,ko as assertIsNull,po as assertMatches,xo as assertNotDeepEqual,t as assertNotEmptyString,io as assertNotEqual,go as assertOk,x as assertPositiveNumber,ao as assertThat,so as assertThatArray,mo as assertThrows,fo as assertThrowsAsync,co as assertTrue,a as assertUnsignedBigInt,L as asyncProjections,Q as collectStream,y as command,E as complete,P as concatUint8Arrays,Y as deepEquals,G as error,z as event,o as formatDateToUtcYYYYMMDD,u as getInMemoryEventStore,I as getInMemoryMessageBus,F as ignore,K as inlineProjections,Z as isEquatable,b as isErrorConstructor,m as isNumber,p as isString,ro as isSubset,r as isValidYYYYMMDD,n as matchesExpectedVersion,$ as merge,e as parseDateFromUtcYYYYMMDD,J as projection,M as projections,C as publish,A as reply,X as restream,D as schedule,B as send,_ as sum,qo as verifyThat};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,23 +1,31 @@
1
- import { Event, DefaultRecord, ReadEvent, CanHandle } from '../typing/index.mjs';
1
+ import { Event, EventMetaDataOf, ReadEventMetadata, DefaultRecord, ReadEvent, CanHandle } from '../typing/index.mjs';
2
2
  import '../typing/deepReadonly.mjs';
3
3
 
4
4
  type ProjectionHandlingType = 'inline' | 'async';
5
- type ProjectionHandler<EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = (events: ReadEvent<EventType>[], context: ProjectionHandlerContext) => Promise<void> | void;
5
+ type ProjectionHandler<EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = (events: ReadEvent<EventType, EventMetaDataType>[], context: ProjectionHandlerContext) => Promise<void> | void;
6
6
  interface ProjectionDefinition<ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
7
7
  name?: string;
8
8
  canHandle: CanHandle<Event>;
9
- handle: ProjectionHandler<Event, ProjectionHandlerContext>;
9
+ handle: ProjectionHandler<Event, ReadEventMetadata, ProjectionHandlerContext>;
10
10
  }
11
- interface TypedProjectionDefinition<EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
11
+ interface TypedProjectionDefinition<EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
12
12
  name?: string;
13
13
  canHandle: CanHandle<EventType>;
14
- handle: ProjectionHandler<EventType, ProjectionHandlerContext>;
14
+ handle: ProjectionHandler<EventType, EventMetaDataType, ProjectionHandlerContext>;
15
15
  }
16
16
  type ProjectionRegistration<HandlingType extends ProjectionHandlingType, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = {
17
17
  type: HandlingType;
18
18
  projection: ProjectionDefinition<ProjectionHandlerContext>;
19
19
  };
20
- declare const projection: <EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends TypedProjectionDefinition<EventType, ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definition: ProjectionDefintionType) => ProjectionDefintionType;
20
+ declare const projection: <EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & Readonly<{
21
+ eventId: string;
22
+ streamPosition: bigint;
23
+ streamName: string;
24
+ }> = EventMetaDataOf<EventType> & Readonly<{
25
+ eventId: string;
26
+ streamPosition: bigint;
27
+ streamName: string;
28
+ }>, ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends TypedProjectionDefinition<EventType, EventMetaDataType, ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definition: ProjectionDefintionType) => ProjectionDefintionType;
21
29
  declare const inlineProjections: <ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definitions: ProjectionDefintionType[]) => ProjectionRegistration<'inline', ProjectionHandlerContext>[];
22
30
  declare const asyncProjections: <ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definitions: ProjectionDefintionType[]) => ProjectionRegistration<'async', ProjectionHandlerContext>[];
23
31
  declare const projections: {
@@ -1,23 +1,31 @@
1
- import { Event, DefaultRecord, ReadEvent, CanHandle } from '../typing/index.js';
1
+ import { Event, EventMetaDataOf, ReadEventMetadata, DefaultRecord, ReadEvent, CanHandle } from '../typing/index.js';
2
2
  import '../typing/deepReadonly.js';
3
3
 
4
4
  type ProjectionHandlingType = 'inline' | 'async';
5
- type ProjectionHandler<EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = (events: ReadEvent<EventType>[], context: ProjectionHandlerContext) => Promise<void> | void;
5
+ type ProjectionHandler<EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = (events: ReadEvent<EventType, EventMetaDataType>[], context: ProjectionHandlerContext) => Promise<void> | void;
6
6
  interface ProjectionDefinition<ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
7
7
  name?: string;
8
8
  canHandle: CanHandle<Event>;
9
- handle: ProjectionHandler<Event, ProjectionHandlerContext>;
9
+ handle: ProjectionHandler<Event, ReadEventMetadata, ProjectionHandlerContext>;
10
10
  }
11
- interface TypedProjectionDefinition<EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
11
+ interface TypedProjectionDefinition<EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & ReadEventMetadata = EventMetaDataOf<EventType> & ReadEventMetadata, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> {
12
12
  name?: string;
13
13
  canHandle: CanHandle<EventType>;
14
- handle: ProjectionHandler<EventType, ProjectionHandlerContext>;
14
+ handle: ProjectionHandler<EventType, EventMetaDataType, ProjectionHandlerContext>;
15
15
  }
16
16
  type ProjectionRegistration<HandlingType extends ProjectionHandlingType, ProjectionHandlerContext extends DefaultRecord = DefaultRecord> = {
17
17
  type: HandlingType;
18
18
  projection: ProjectionDefinition<ProjectionHandlerContext>;
19
19
  };
20
- declare const projection: <EventType extends Event = Event, ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends TypedProjectionDefinition<EventType, ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definition: ProjectionDefintionType) => ProjectionDefintionType;
20
+ declare const projection: <EventType extends Event = Event, EventMetaDataType extends EventMetaDataOf<EventType> & Readonly<{
21
+ eventId: string;
22
+ streamPosition: bigint;
23
+ streamName: string;
24
+ }> = EventMetaDataOf<EventType> & Readonly<{
25
+ eventId: string;
26
+ streamPosition: bigint;
27
+ streamName: string;
28
+ }>, ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends TypedProjectionDefinition<EventType, EventMetaDataType, ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definition: ProjectionDefintionType) => ProjectionDefintionType;
21
29
  declare const inlineProjections: <ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definitions: ProjectionDefintionType[]) => ProjectionRegistration<'inline', ProjectionHandlerContext>[];
22
30
  declare const asyncProjections: <ProjectionHandlerContext extends DefaultRecord = DefaultRecord, ProjectionDefintionType extends ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>>(definitions: ProjectionDefintionType[]) => ProjectionRegistration<'async', ProjectionHandlerContext>[];
23
31
  declare const projections: {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkOTLRRXEAjs = require('../chunk-OTLRRXEA.js');exports.asyncProjections = _chunkOTLRRXEAjs.c; exports.inlineProjections = _chunkOTLRRXEAjs.b; exports.projection = _chunkOTLRRXEAjs.a; exports.projections = _chunkOTLRRXEAjs.d;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkXMANDEQNjs = require('../chunk-XMANDEQN.js');exports.asyncProjections = _chunkXMANDEQNjs.c; exports.inlineProjections = _chunkXMANDEQNjs.b; exports.projection = _chunkXMANDEQNjs.a; exports.projections = _chunkXMANDEQNjs.d;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d}from"../chunk-ZIFNLQ77.mjs";export{c as asyncProjections,b as inlineProjections,a as projection,d as projections};
1
+ import{a,b,c,d}from"../chunk-VJ2HSKBS.mjs";export{c as asyncProjections,b as inlineProjections,a as projection,d as projections};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk7BR3VBVDjs = require('../chunk-7BR3VBVD.js');var _chunk3ZZHSAJGjs = require('../chunk-3ZZHSAJG.js');require('../chunk-6IATZUYD.js');require('../chunk-PVFUNWT6.js');require('../chunk-FE73T2NS.js');require('../chunk-3JE5DUJ2.js');require('../chunk-ZLASBJGR.js');require('../chunk-UFUSYJWU.js');require('../chunk-MHB2JU4U.js');require('../chunk-7FJXUW3D.js');require('../chunk-5BGN2FV4.js');require('../chunk-QYDAYWBJ.js');require('../chunk-LOJ6A4AJ.js');require('../chunk-AU2WZCER.js');require('../chunk-MKHK5TRM.js');var _crypto = require('crypto');var _test = require('test');async function C(g,r={getInitialIndex:()=>1n}){return _test.describe.call(void 0, "aggregateStream",async()=>{let t,u=[{evolve:_chunk7BR3VBVDjs.a,info:"evolve with raw event"},{evolve:_chunk7BR3VBVDjs.b,info:"evolve with event and metadata"}];_test.before.call(void 0, async()=>{t=await g()}),_test.after.call(void 0, async()=>{let e=r.teardownHook;e&&await e()});for(let e of u)await _test.it.call(void 0, `When called with 'to' allows time traveling using ${e.info}`,async()=>{let a={productId:"123",quantity:10,price:3},S=10,o=_crypto.randomUUID.call(void 0, );await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"DiscountApplied",data:{percent:S}}]);let p=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk7BR3VBVDjs.c,read:{to:1n}}),v=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk7BR3VBVDjs.c,read:{to:2n}}),c=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk7BR3VBVDjs.c,read:{to:3n}});_chunk3ZZHSAJGjs.l.call(void 0, p),_chunk3ZZHSAJGjs.l.call(void 0, v),_chunk3ZZHSAJGjs.l.call(void 0, c),_chunk3ZZHSAJGjs.m.call(void 0, p.currentStreamVersion,r.getInitialIndex()),_chunk3ZZHSAJGjs.g.call(void 0, p.state,{productItems:[a],totalAmount:30}),_chunk3ZZHSAJGjs.m.call(void 0, v.currentStreamVersion,r.getInitialIndex()+1n),_chunk3ZZHSAJGjs.g.call(void 0, v.state,{productItems:[a,a],totalAmount:60}),_chunk3ZZHSAJGjs.m.call(void 0, c.currentStreamVersion,r.getInitialIndex()+2n),_chunk3ZZHSAJGjs.g.call(void 0, c.state,{productItems:[a,a],totalAmount:54})})})}exports.testAggregateStream = C;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk6KOV4DVNjs = require('../chunk-6KOV4DVN.js');var _chunk3ZZHSAJGjs = require('../chunk-3ZZHSAJG.js');require('../chunk-6IATZUYD.js');require('../chunk-PVFUNWT6.js');require('../chunk-FE73T2NS.js');require('../chunk-3JE5DUJ2.js');require('../chunk-ZLASBJGR.js');require('../chunk-UFUSYJWU.js');require('../chunk-MHB2JU4U.js');require('../chunk-7FJXUW3D.js');require('../chunk-5BGN2FV4.js');require('../chunk-QYDAYWBJ.js');require('../chunk-LOJ6A4AJ.js');require('../chunk-AU2WZCER.js');require('../chunk-MKHK5TRM.js');var _test = require('test');var _uuid = require('uuid');async function C(u,r={getInitialIndex:()=>1n}){return _test.describe.call(void 0, "aggregateStream",async()=>{let t,S=[{evolve:_chunk6KOV4DVNjs.a,info:"evolve with raw event"},{evolve:_chunk6KOV4DVNjs.b,info:"evolve with event and metadata"}];_test.before.call(void 0, async()=>{t=await u()}),_test.after.call(void 0, async()=>{let e=r.teardownHook;e&&await e()});for(let e of S)await _test.it.call(void 0, `When called with 'to' allows time traveling using ${e.info}`,async()=>{let a={productId:"123",quantity:10,price:3},I=10,o=_uuid.v4.call(void 0, );await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"DiscountApplied",data:{percent:I,couponId:_uuid.v4.call(void 0, )}}]);let p=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk6KOV4DVNjs.c,read:{to:1n}}),v=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk6KOV4DVNjs.c,read:{to:2n}}),c=await t.aggregateStream(o,{evolve:e.evolve,initialState:_chunk6KOV4DVNjs.c,read:{to:3n}});_chunk3ZZHSAJGjs.l.call(void 0, p),_chunk3ZZHSAJGjs.l.call(void 0, v),_chunk3ZZHSAJGjs.l.call(void 0, c),_chunk3ZZHSAJGjs.m.call(void 0, p.currentStreamVersion,r.getInitialIndex()),_chunk3ZZHSAJGjs.g.call(void 0, p.state,{productItems:[a],totalAmount:30}),_chunk3ZZHSAJGjs.m.call(void 0, v.currentStreamVersion,r.getInitialIndex()+1n),_chunk3ZZHSAJGjs.g.call(void 0, v.state,{productItems:[a,a],totalAmount:60}),_chunk3ZZHSAJGjs.m.call(void 0, c.currentStreamVersion,r.getInitialIndex()+2n),_chunk3ZZHSAJGjs.g.call(void 0, c.state,{productItems:[a,a],totalAmount:54})})})}exports.testAggregateStream = C;
2
2
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/testing/features.ts"],"names":["randomUUID","after","before","describe","it","testAggregateStream","eventStoreFactory","options","eventStore","evolveTestCases","evolve","evolveWithMetadata","teardownHook","testCase","productItem","discount","shoppingCartId","resultAt1","initialState","resultAt2","resultAt3","assertOk","assertEqual","assertDeepEqual"],"mappings":"ueAAA,OAAS,cAAAA,MAAkB,SAC3B,OAAS,SAAAC,EAAO,UAAAC,EAAQ,YAAAC,EAAU,MAAAC,MAAU,OAkB5C,eAAsBC,EACpBC,EACAC,EAAuB,CACrB,gBAAiB,IAAM,EACzB,EACA,CACA,OAAOJ,EAAS,kBAAmB,SAAY,CAC7C,IAAIK,EACEC,EAAkB,CACtB,CACE,OAAAC,EACA,KAAM,uBACR,EACA,CAAE,OAAQC,EAAoB,KAAM,gCAAiC,CACvE,EAEAT,EAAO,SAAY,CACjBM,EAAa,MAAMF,EAAkB,CACvC,CAAC,EAEDL,EAAM,SAAY,CAChB,IAAMW,EAAeL,EAAQ,aACzBK,GAAc,MAAMA,EAAa,CACvC,CAAC,EAED,QAAWC,KAAYJ,EACrB,MAAML,EAAG,qDAAqDS,EAAS,IAAI,GAAI,SAAY,CAEzF,IAAMC,EAAiC,CACrC,UAAW,MACX,SAAU,GACV,MAAO,CACT,EACMC,EAAW,GACXC,EAAiBhB,EAAW,EAElC,MAAMQ,EAAW,eAAkCQ,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMN,EAAW,eAAkCQ,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMN,EAAW,eAAkCQ,EAAgB,CACjE,CAAE,KAAM,kBAAmB,KAAM,CAAE,QAASD,CAAS,CAAE,CACzD,CAAC,EAGD,IAAME,EAAY,MAAMT,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKC,EAAY,MAAMX,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKE,EAAY,MAAMZ,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EAGDG,EAASJ,CAAS,EAClBI,EAASF,CAAS,EAClBE,EAASD,CAAS,EAElBE,EAAYL,EAAU,qBAAsBV,EAAQ,gBAAgB,CAAC,EACrEgB,EAAgBN,EAAU,MAAO,CAC/B,aAAc,CAACH,CAAW,EAC1B,YAAa,EACf,CAAC,EAEDQ,EACEH,EAAU,qBACVZ,EAAQ,gBAAgB,EAAI,EAC9B,EACAgB,EAAgBJ,EAAU,MAAO,CAC/B,aAAc,CAACL,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,EAEDQ,EACEF,EAAU,qBACVb,EAAQ,gBAAgB,EAAI,EAC9B,EACAgB,EAAgBH,EAAU,MAAO,CAC/B,aAAc,CAACN,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,CACH,CAAC,CAEL,CAAC,CACH","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { after, before, describe, it } from 'node:test';\nimport type { EventStore } from '../eventStore';\nimport { assertDeepEqual, assertEqual, assertOk } from './assertions';\nimport {\n evolve,\n evolveWithMetadata,\n initialState,\n type PricedProductItem,\n type ShoppingCartEvent,\n} from './shoppingCart.domain';\n\ntype TestOptions = {\n getInitialIndex: () => bigint;\n teardownHook?: () => Promise<void>;\n};\n\nexport type EventStoreFactory = () => Promise<EventStore<bigint>>;\n\nexport async function testAggregateStream(\n eventStoreFactory: EventStoreFactory,\n options: TestOptions = {\n getInitialIndex: () => 1n,\n },\n) {\n return describe('aggregateStream', async () => {\n let eventStore: EventStore<bigint>;\n const evolveTestCases = [\n {\n evolve,\n info: 'evolve with raw event',\n },\n { evolve: evolveWithMetadata, info: 'evolve with event and metadata' },\n ];\n\n before(async () => {\n eventStore = await eventStoreFactory();\n });\n\n after(async () => {\n const teardownHook = options.teardownHook;\n if (teardownHook) await teardownHook();\n });\n\n for (const testCase of evolveTestCases) {\n await it(`When called with 'to' allows time traveling using ${testCase.info}`, async () => {\n // Given\n const productItem: PricedProductItem = {\n productId: '123',\n quantity: 10,\n price: 3,\n };\n const discount = 10;\n const shoppingCartId = randomUUID();\n\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'DiscountApplied', data: { percent: discount } },\n ]);\n\n // when\n const resultAt1 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 1n },\n });\n const resultAt2 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 2n },\n });\n const resultAt3 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 3n },\n });\n\n // then\n assertOk(resultAt1);\n assertOk(resultAt2);\n assertOk(resultAt3);\n\n assertEqual(resultAt1.currentStreamVersion, options.getInitialIndex());\n assertDeepEqual(resultAt1.state, {\n productItems: [productItem],\n totalAmount: 30,\n });\n\n assertEqual(\n resultAt2.currentStreamVersion,\n options.getInitialIndex() + 1n,\n );\n assertDeepEqual(resultAt2.state, {\n productItems: [productItem, productItem],\n totalAmount: 60,\n });\n\n assertEqual(\n resultAt3.currentStreamVersion,\n options.getInitialIndex() + 2n,\n );\n assertDeepEqual(resultAt3.state, {\n productItems: [productItem, productItem],\n totalAmount: 54,\n });\n });\n }\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/testing/features.ts"],"names":["after","before","describe","it","uuid","testAggregateStream","eventStoreFactory","options","eventStore","evolveTestCases","evolve","evolveWithMetadata","teardownHook","testCase","productItem","discount","shoppingCartId","resultAt1","initialState","resultAt2","resultAt3","assertOk","assertEqual","assertDeepEqual"],"mappings":"ueAAA,OAAS,SAAAA,EAAO,UAAAC,EAAQ,YAAAC,EAAU,MAAAC,MAAU,OAC5C,OAAS,MAAMC,MAAY,OAkB3B,eAAsBC,EACpBC,EACAC,EAAuB,CACrB,gBAAiB,IAAM,EACzB,EACA,CACA,OAAOL,EAAS,kBAAmB,SAAY,CAC7C,IAAIM,EACEC,EAAkB,CACtB,CACE,OAAAC,EACA,KAAM,uBACR,EACA,CAAE,OAAQC,EAAoB,KAAM,gCAAiC,CACvE,EAEAV,EAAO,SAAY,CACjBO,EAAa,MAAMF,EAAkB,CACvC,CAAC,EAEDN,EAAM,SAAY,CAChB,IAAMY,EAAeL,EAAQ,aACzBK,GAAc,MAAMA,EAAa,CACvC,CAAC,EAED,QAAWC,KAAYJ,EACrB,MAAMN,EAAG,qDAAqDU,EAAS,IAAI,GAAI,SAAY,CAEzF,IAAMC,EAAiC,CACrC,UAAW,MACX,SAAU,GACV,MAAO,CACT,EACMC,EAAW,GACXC,EAAiBZ,EAAK,EAE5B,MAAMI,EAAW,eAAkCQ,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMN,EAAW,eAAkCQ,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMN,EAAW,eAAkCQ,EAAgB,CACjE,CACE,KAAM,kBACN,KAAM,CAAE,QAASD,EAAU,SAAUX,EAAK,CAAE,CAC9C,CACF,CAAC,EAGD,IAAMa,EAAY,MAAMT,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKC,EAAY,MAAMX,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKE,EAAY,MAAMZ,EAAW,gBAAgBQ,EAAgB,CACjE,OAAQH,EAAS,OACjB,aAAAK,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EAGDG,EAASJ,CAAS,EAClBI,EAASF,CAAS,EAClBE,EAASD,CAAS,EAElBE,EAAYL,EAAU,qBAAsBV,EAAQ,gBAAgB,CAAC,EACrEgB,EAAgBN,EAAU,MAAO,CAC/B,aAAc,CAACH,CAAW,EAC1B,YAAa,EACf,CAAC,EAEDQ,EACEH,EAAU,qBACVZ,EAAQ,gBAAgB,EAAI,EAC9B,EACAgB,EAAgBJ,EAAU,MAAO,CAC/B,aAAc,CAACL,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,EAEDQ,EACEF,EAAU,qBACVb,EAAQ,gBAAgB,EAAI,EAC9B,EACAgB,EAAgBH,EAAU,MAAO,CAC/B,aAAc,CAACN,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,CACH,CAAC,CAEL,CAAC,CACH","sourcesContent":["import { after, before, describe, it } from 'node:test';\nimport { v4 as uuid } from 'uuid';\nimport type { EventStore } from '../eventStore';\nimport { assertDeepEqual, assertEqual, assertOk } from './assertions';\nimport {\n evolve,\n evolveWithMetadata,\n initialState,\n type PricedProductItem,\n type ShoppingCartEvent,\n} from './shoppingCart.domain';\n\ntype TestOptions = {\n getInitialIndex: () => bigint;\n teardownHook?: () => Promise<void>;\n};\n\nexport type EventStoreFactory = () => Promise<EventStore<bigint>>;\n\nexport async function testAggregateStream(\n eventStoreFactory: EventStoreFactory,\n options: TestOptions = {\n getInitialIndex: () => 1n,\n },\n) {\n return describe('aggregateStream', async () => {\n let eventStore: EventStore<bigint>;\n const evolveTestCases = [\n {\n evolve,\n info: 'evolve with raw event',\n },\n { evolve: evolveWithMetadata, info: 'evolve with event and metadata' },\n ];\n\n before(async () => {\n eventStore = await eventStoreFactory();\n });\n\n after(async () => {\n const teardownHook = options.teardownHook;\n if (teardownHook) await teardownHook();\n });\n\n for (const testCase of evolveTestCases) {\n await it(`When called with 'to' allows time traveling using ${testCase.info}`, async () => {\n // Given\n const productItem: PricedProductItem = {\n productId: '123',\n quantity: 10,\n price: 3,\n };\n const discount = 10;\n const shoppingCartId = uuid();\n\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n {\n type: 'DiscountApplied',\n data: { percent: discount, couponId: uuid() },\n },\n ]);\n\n // when\n const resultAt1 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 1n },\n });\n const resultAt2 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 2n },\n });\n const resultAt3 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 3n },\n });\n\n // then\n assertOk(resultAt1);\n assertOk(resultAt2);\n assertOk(resultAt3);\n\n assertEqual(resultAt1.currentStreamVersion, options.getInitialIndex());\n assertDeepEqual(resultAt1.state, {\n productItems: [productItem],\n totalAmount: 30,\n });\n\n assertEqual(\n resultAt2.currentStreamVersion,\n options.getInitialIndex() + 1n,\n );\n assertDeepEqual(resultAt2.state, {\n productItems: [productItem, productItem],\n totalAmount: 60,\n });\n\n assertEqual(\n resultAt3.currentStreamVersion,\n options.getInitialIndex() + 2n,\n );\n assertDeepEqual(resultAt3.state, {\n productItems: [productItem, productItem],\n totalAmount: 54,\n });\n });\n }\n });\n}\n"]}
@@ -1,2 +1,2 @@
1
- import{a as m,b as l,c as d}from"../chunk-WB5PNUKG.mjs";import{g as n,l as i,m as s}from"../chunk-ZUHYOH4G.mjs";import"../chunk-3DH3DSMC.mjs";import"../chunk-B7NWWHCY.mjs";import"../chunk-OBA6MZMG.mjs";import"../chunk-YKFEDBH4.mjs";import"../chunk-YWRV75GA.mjs";import"../chunk-GNUOGYD6.mjs";import"../chunk-JDYZZRJE.mjs";import"../chunk-3LYVXI5R.mjs";import"../chunk-DOHUIBZQ.mjs";import"../chunk-QWM33AYY.mjs";import"../chunk-DIW552TK.mjs";import"../chunk-7JLAVMM3.mjs";import"../chunk-S33YM44M.mjs";import{randomUUID as I}from"node:crypto";import{after as w,before as y,describe as f,it as E}from"node:test";async function C(g,r={getInitialIndex:()=>1n}){return f("aggregateStream",async()=>{let t,u=[{evolve:m,info:"evolve with raw event"},{evolve:l,info:"evolve with event and metadata"}];y(async()=>{t=await g()}),w(async()=>{let e=r.teardownHook;e&&await e()});for(let e of u)await E(`When called with 'to' allows time traveling using ${e.info}`,async()=>{let a={productId:"123",quantity:10,price:3},S=10,o=I();await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"DiscountApplied",data:{percent:S}}]);let p=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:1n}}),v=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:2n}}),c=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:3n}});i(p),i(v),i(c),s(p.currentStreamVersion,r.getInitialIndex()),n(p.state,{productItems:[a],totalAmount:30}),s(v.currentStreamVersion,r.getInitialIndex()+1n),n(v.state,{productItems:[a,a],totalAmount:60}),s(c.currentStreamVersion,r.getInitialIndex()+2n),n(c.state,{productItems:[a,a],totalAmount:54})})})}export{C as testAggregateStream};
1
+ import{a as m,b as l,c as d}from"../chunk-454AWP5L.mjs";import{g as n,l as i,m as s}from"../chunk-ZUHYOH4G.mjs";import"../chunk-3DH3DSMC.mjs";import"../chunk-B7NWWHCY.mjs";import"../chunk-OBA6MZMG.mjs";import"../chunk-YKFEDBH4.mjs";import"../chunk-YWRV75GA.mjs";import"../chunk-GNUOGYD6.mjs";import"../chunk-JDYZZRJE.mjs";import"../chunk-3LYVXI5R.mjs";import"../chunk-DOHUIBZQ.mjs";import"../chunk-QWM33AYY.mjs";import"../chunk-DIW552TK.mjs";import"../chunk-7JLAVMM3.mjs";import"../chunk-S33YM44M.mjs";import{after as w,before as y,describe as f,it as E}from"node:test";import{v4 as g}from"uuid";async function C(u,r={getInitialIndex:()=>1n}){return f("aggregateStream",async()=>{let t,S=[{evolve:m,info:"evolve with raw event"},{evolve:l,info:"evolve with event and metadata"}];y(async()=>{t=await u()}),w(async()=>{let e=r.teardownHook;e&&await e()});for(let e of S)await E(`When called with 'to' allows time traveling using ${e.info}`,async()=>{let a={productId:"123",quantity:10,price:3},I=10,o=g();await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"ProductItemAdded",data:{productItem:a}}]),await t.appendToStream(o,[{type:"DiscountApplied",data:{percent:I,couponId:g()}}]);let p=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:1n}}),v=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:2n}}),c=await t.aggregateStream(o,{evolve:e.evolve,initialState:d,read:{to:3n}});i(p),i(v),i(c),s(p.currentStreamVersion,r.getInitialIndex()),n(p.state,{productItems:[a],totalAmount:30}),s(v.currentStreamVersion,r.getInitialIndex()+1n),n(v.state,{productItems:[a,a],totalAmount:60}),s(c.currentStreamVersion,r.getInitialIndex()+2n),n(c.state,{productItems:[a,a],totalAmount:54})})})}export{C as testAggregateStream};
2
2
  //# sourceMappingURL=features.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/testing/features.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { after, before, describe, it } from 'node:test';\nimport type { EventStore } from '../eventStore';\nimport { assertDeepEqual, assertEqual, assertOk } from './assertions';\nimport {\n evolve,\n evolveWithMetadata,\n initialState,\n type PricedProductItem,\n type ShoppingCartEvent,\n} from './shoppingCart.domain';\n\ntype TestOptions = {\n getInitialIndex: () => bigint;\n teardownHook?: () => Promise<void>;\n};\n\nexport type EventStoreFactory = () => Promise<EventStore<bigint>>;\n\nexport async function testAggregateStream(\n eventStoreFactory: EventStoreFactory,\n options: TestOptions = {\n getInitialIndex: () => 1n,\n },\n) {\n return describe('aggregateStream', async () => {\n let eventStore: EventStore<bigint>;\n const evolveTestCases = [\n {\n evolve,\n info: 'evolve with raw event',\n },\n { evolve: evolveWithMetadata, info: 'evolve with event and metadata' },\n ];\n\n before(async () => {\n eventStore = await eventStoreFactory();\n });\n\n after(async () => {\n const teardownHook = options.teardownHook;\n if (teardownHook) await teardownHook();\n });\n\n for (const testCase of evolveTestCases) {\n await it(`When called with 'to' allows time traveling using ${testCase.info}`, async () => {\n // Given\n const productItem: PricedProductItem = {\n productId: '123',\n quantity: 10,\n price: 3,\n };\n const discount = 10;\n const shoppingCartId = randomUUID();\n\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'DiscountApplied', data: { percent: discount } },\n ]);\n\n // when\n const resultAt1 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 1n },\n });\n const resultAt2 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 2n },\n });\n const resultAt3 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 3n },\n });\n\n // then\n assertOk(resultAt1);\n assertOk(resultAt2);\n assertOk(resultAt3);\n\n assertEqual(resultAt1.currentStreamVersion, options.getInitialIndex());\n assertDeepEqual(resultAt1.state, {\n productItems: [productItem],\n totalAmount: 30,\n });\n\n assertEqual(\n resultAt2.currentStreamVersion,\n options.getInitialIndex() + 1n,\n );\n assertDeepEqual(resultAt2.state, {\n productItems: [productItem, productItem],\n totalAmount: 60,\n });\n\n assertEqual(\n resultAt3.currentStreamVersion,\n options.getInitialIndex() + 2n,\n );\n assertDeepEqual(resultAt3.state, {\n productItems: [productItem, productItem],\n totalAmount: 54,\n });\n });\n }\n });\n}\n"],"mappings":"sfAAA,OAAS,cAAAA,MAAkB,cAC3B,OAAS,SAAAC,EAAO,UAAAC,EAAQ,YAAAC,EAAU,MAAAC,MAAU,YAkB5C,eAAsBC,EACpBC,EACAC,EAAuB,CACrB,gBAAiB,IAAM,EACzB,EACA,CACA,OAAOC,EAAS,kBAAmB,SAAY,CAC7C,IAAIC,EACEC,EAAkB,CACtB,CACE,OAAAC,EACA,KAAM,uBACR,EACA,CAAE,OAAQC,EAAoB,KAAM,gCAAiC,CACvE,EAEAC,EAAO,SAAY,CACjBJ,EAAa,MAAMH,EAAkB,CACvC,CAAC,EAEDQ,EAAM,SAAY,CAChB,IAAMC,EAAeR,EAAQ,aACzBQ,GAAc,MAAMA,EAAa,CACvC,CAAC,EAED,QAAWC,KAAYN,EACrB,MAAMO,EAAG,qDAAqDD,EAAS,IAAI,GAAI,SAAY,CAEzF,IAAME,EAAiC,CACrC,UAAW,MACX,SAAU,GACV,MAAO,CACT,EACMC,EAAW,GACXC,EAAiBC,EAAW,EAElC,MAAMZ,EAAW,eAAkCW,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMT,EAAW,eAAkCW,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMT,EAAW,eAAkCW,EAAgB,CACjE,CAAE,KAAM,kBAAmB,KAAM,CAAE,QAASD,CAAS,CAAE,CACzD,CAAC,EAGD,IAAMG,EAAY,MAAMb,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKC,EAAY,MAAMf,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKE,EAAY,MAAMhB,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EAGDG,EAASJ,CAAS,EAClBI,EAASF,CAAS,EAClBE,EAASD,CAAS,EAElBE,EAAYL,EAAU,qBAAsBf,EAAQ,gBAAgB,CAAC,EACrEqB,EAAgBN,EAAU,MAAO,CAC/B,aAAc,CAACJ,CAAW,EAC1B,YAAa,EACf,CAAC,EAEDS,EACEH,EAAU,qBACVjB,EAAQ,gBAAgB,EAAI,EAC9B,EACAqB,EAAgBJ,EAAU,MAAO,CAC/B,aAAc,CAACN,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,EAEDS,EACEF,EAAU,qBACVlB,EAAQ,gBAAgB,EAAI,EAC9B,EACAqB,EAAgBH,EAAU,MAAO,CAC/B,aAAc,CAACP,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,CACH,CAAC,CAEL,CAAC,CACH","names":["randomUUID","after","before","describe","it","testAggregateStream","eventStoreFactory","options","describe","eventStore","evolveTestCases","evolve","evolveWithMetadata","before","after","teardownHook","testCase","it","productItem","discount","shoppingCartId","randomUUID","resultAt1","initialState","resultAt2","resultAt3","assertOk","assertEqual","assertDeepEqual"]}
1
+ {"version":3,"sources":["../../src/testing/features.ts"],"sourcesContent":["import { after, before, describe, it } from 'node:test';\nimport { v4 as uuid } from 'uuid';\nimport type { EventStore } from '../eventStore';\nimport { assertDeepEqual, assertEqual, assertOk } from './assertions';\nimport {\n evolve,\n evolveWithMetadata,\n initialState,\n type PricedProductItem,\n type ShoppingCartEvent,\n} from './shoppingCart.domain';\n\ntype TestOptions = {\n getInitialIndex: () => bigint;\n teardownHook?: () => Promise<void>;\n};\n\nexport type EventStoreFactory = () => Promise<EventStore<bigint>>;\n\nexport async function testAggregateStream(\n eventStoreFactory: EventStoreFactory,\n options: TestOptions = {\n getInitialIndex: () => 1n,\n },\n) {\n return describe('aggregateStream', async () => {\n let eventStore: EventStore<bigint>;\n const evolveTestCases = [\n {\n evolve,\n info: 'evolve with raw event',\n },\n { evolve: evolveWithMetadata, info: 'evolve with event and metadata' },\n ];\n\n before(async () => {\n eventStore = await eventStoreFactory();\n });\n\n after(async () => {\n const teardownHook = options.teardownHook;\n if (teardownHook) await teardownHook();\n });\n\n for (const testCase of evolveTestCases) {\n await it(`When called with 'to' allows time traveling using ${testCase.info}`, async () => {\n // Given\n const productItem: PricedProductItem = {\n productId: '123',\n quantity: 10,\n price: 3,\n };\n const discount = 10;\n const shoppingCartId = uuid();\n\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n { type: 'ProductItemAdded', data: { productItem } },\n ]);\n await eventStore.appendToStream<ShoppingCartEvent>(shoppingCartId, [\n {\n type: 'DiscountApplied',\n data: { percent: discount, couponId: uuid() },\n },\n ]);\n\n // when\n const resultAt1 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 1n },\n });\n const resultAt2 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 2n },\n });\n const resultAt3 = await eventStore.aggregateStream(shoppingCartId, {\n evolve: testCase.evolve,\n initialState,\n read: { to: 3n },\n });\n\n // then\n assertOk(resultAt1);\n assertOk(resultAt2);\n assertOk(resultAt3);\n\n assertEqual(resultAt1.currentStreamVersion, options.getInitialIndex());\n assertDeepEqual(resultAt1.state, {\n productItems: [productItem],\n totalAmount: 30,\n });\n\n assertEqual(\n resultAt2.currentStreamVersion,\n options.getInitialIndex() + 1n,\n );\n assertDeepEqual(resultAt2.state, {\n productItems: [productItem, productItem],\n totalAmount: 60,\n });\n\n assertEqual(\n resultAt3.currentStreamVersion,\n options.getInitialIndex() + 2n,\n );\n assertDeepEqual(resultAt3.state, {\n productItems: [productItem, productItem],\n totalAmount: 54,\n });\n });\n }\n });\n}\n"],"mappings":"sfAAA,OAAS,SAAAA,EAAO,UAAAC,EAAQ,YAAAC,EAAU,MAAAC,MAAU,YAC5C,OAAS,MAAMC,MAAY,OAkB3B,eAAsBC,EACpBC,EACAC,EAAuB,CACrB,gBAAiB,IAAM,EACzB,EACA,CACA,OAAOC,EAAS,kBAAmB,SAAY,CAC7C,IAAIC,EACEC,EAAkB,CACtB,CACE,OAAAC,EACA,KAAM,uBACR,EACA,CAAE,OAAQC,EAAoB,KAAM,gCAAiC,CACvE,EAEAC,EAAO,SAAY,CACjBJ,EAAa,MAAMH,EAAkB,CACvC,CAAC,EAEDQ,EAAM,SAAY,CAChB,IAAMC,EAAeR,EAAQ,aACzBQ,GAAc,MAAMA,EAAa,CACvC,CAAC,EAED,QAAWC,KAAYN,EACrB,MAAMO,EAAG,qDAAqDD,EAAS,IAAI,GAAI,SAAY,CAEzF,IAAME,EAAiC,CACrC,UAAW,MACX,SAAU,GACV,MAAO,CACT,EACMC,EAAW,GACXC,EAAiBC,EAAK,EAE5B,MAAMZ,EAAW,eAAkCW,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMT,EAAW,eAAkCW,EAAgB,CACjE,CAAE,KAAM,mBAAoB,KAAM,CAAE,YAAAF,CAAY,CAAE,CACpD,CAAC,EACD,MAAMT,EAAW,eAAkCW,EAAgB,CACjE,CACE,KAAM,kBACN,KAAM,CAAE,QAASD,EAAU,SAAUE,EAAK,CAAE,CAC9C,CACF,CAAC,EAGD,IAAMC,EAAY,MAAMb,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKC,EAAY,MAAMf,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EACKE,EAAY,MAAMhB,EAAW,gBAAgBW,EAAgB,CACjE,OAAQJ,EAAS,OACjB,aAAAO,EACA,KAAM,CAAE,GAAI,EAAG,CACjB,CAAC,EAGDG,EAASJ,CAAS,EAClBI,EAASF,CAAS,EAClBE,EAASD,CAAS,EAElBE,EAAYL,EAAU,qBAAsBf,EAAQ,gBAAgB,CAAC,EACrEqB,EAAgBN,EAAU,MAAO,CAC/B,aAAc,CAACJ,CAAW,EAC1B,YAAa,EACf,CAAC,EAEDS,EACEH,EAAU,qBACVjB,EAAQ,gBAAgB,EAAI,EAC9B,EACAqB,EAAgBJ,EAAU,MAAO,CAC/B,aAAc,CAACN,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,EAEDS,EACEF,EAAU,qBACVlB,EAAQ,gBAAgB,EAAI,EAC9B,EACAqB,EAAgBH,EAAU,MAAO,CAC/B,aAAc,CAACP,EAAaA,CAAW,EACvC,YAAa,EACf,CAAC,CACH,CAAC,CAEL,CAAC,CACH","names":["after","before","describe","it","uuid","testAggregateStream","eventStoreFactory","options","describe","eventStore","evolveTestCases","evolve","evolveWithMetadata","before","after","teardownHook","testCase","it","productItem","discount","shoppingCartId","uuid","resultAt1","initialState","resultAt2","resultAt3","assertOk","assertEqual","assertDeepEqual"]}
@@ -15,6 +15,7 @@ type ProductItemAdded = Event<'ProductItemAdded', {
15
15
  }>;
16
16
  type DiscountApplied = Event<'DiscountApplied', {
17
17
  percent: number;
18
+ couponId: string;
18
19
  }>;
19
20
  type ShoppingCartEvent = ProductItemAdded | DiscountApplied;
20
21
  declare const evolve: (state: ShoppingCart, { type, data }: ShoppingCartEvent) => ShoppingCart;
@@ -15,6 +15,7 @@ type ProductItemAdded = Event<'ProductItemAdded', {
15
15
  }>;
16
16
  type DiscountApplied = Event<'DiscountApplied', {
17
17
  percent: number;
18
+ couponId: string;
18
19
  }>;
19
20
  type ShoppingCartEvent = ProductItemAdded | DiscountApplied;
20
21
  declare const evolve: (state: ShoppingCart, { type, data }: ShoppingCartEvent) => ShoppingCart;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk7BR3VBVDjs = require('../chunk-7BR3VBVD.js');require('../chunk-ZLASBJGR.js');require('../chunk-UFUSYJWU.js');require('../chunk-MHB2JU4U.js');require('../chunk-7FJXUW3D.js');require('../chunk-5BGN2FV4.js');require('../chunk-QYDAYWBJ.js');exports.evolve = _chunk7BR3VBVDjs.a; exports.evolveWithMetadata = _chunk7BR3VBVDjs.b; exports.initialState = _chunk7BR3VBVDjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk6KOV4DVNjs = require('../chunk-6KOV4DVN.js');require('../chunk-ZLASBJGR.js');require('../chunk-UFUSYJWU.js');require('../chunk-MHB2JU4U.js');require('../chunk-7FJXUW3D.js');require('../chunk-5BGN2FV4.js');require('../chunk-QYDAYWBJ.js');exports.evolve = _chunk6KOV4DVNjs.a; exports.evolveWithMetadata = _chunk6KOV4DVNjs.b; exports.initialState = _chunk6KOV4DVNjs.c;
2
2
  //# sourceMappingURL=shoppingCart.domain.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c}from"../chunk-WB5PNUKG.mjs";import"../chunk-YWRV75GA.mjs";import"../chunk-GNUOGYD6.mjs";import"../chunk-JDYZZRJE.mjs";import"../chunk-3LYVXI5R.mjs";import"../chunk-DOHUIBZQ.mjs";import"../chunk-QWM33AYY.mjs";export{a as evolve,b as evolveWithMetadata,c as initialState};
1
+ import{a,b,c}from"../chunk-454AWP5L.mjs";import"../chunk-YWRV75GA.mjs";import"../chunk-GNUOGYD6.mjs";import"../chunk-JDYZZRJE.mjs";import"../chunk-3LYVXI5R.mjs";import"../chunk-DOHUIBZQ.mjs";import"../chunk-QWM33AYY.mjs";export{a as evolve,b as evolveWithMetadata,c as initialState};
2
2
  //# sourceMappingURL=shoppingCart.domain.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-driven-io/emmett",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Emmett - Event Sourcing development made simple",
5
5
  "scripts": {
6
6
  "build": "tsup",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/testing/shoppingCart.domain.ts"],"names":["evolve","state","type","data","productItem","evolveWithMetadata","initialState"],"mappings":"AAqBO,IAAMA,EAAS,CACpBC,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaE,EAAqB,CAChCJ,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaG,EAAe,KACnB,CAAE,aAAc,CAAC,EAAG,YAAa,CAAE","sourcesContent":["import { type Event, type ReadEvent } from '../typing';\n\nexport type PricedProductItem = {\n productId: string;\n quantity: number;\n price: number;\n};\n\nexport type ShoppingCart = {\n productItems: PricedProductItem[];\n totalAmount: number;\n};\n\nexport type ProductItemAdded = Event<\n 'ProductItemAdded',\n { productItem: PricedProductItem }\n>;\nexport type DiscountApplied = Event<'DiscountApplied', { percent: number }>;\n\nexport type ShoppingCartEvent = ProductItemAdded | DiscountApplied;\n\nexport const evolve = (\n state: ShoppingCart,\n { type, data }: ShoppingCartEvent,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const evolveWithMetadata = (\n state: ShoppingCart,\n { type, data }: ReadEvent<ShoppingCartEvent>,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const initialState = (): ShoppingCart => {\n return { productItems: [], totalAmount: 0 };\n};\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var i=e=>e,t= exports.b =e=>e.map(n=>({type:"inline",projection:n})),o= exports.c =e=>e.map(n=>({type:"async",projection:n})),r= exports.d ={inline:t,async:o};exports.a = i; exports.b = t; exports.c = o; exports.d = r;
2
- //# sourceMappingURL=chunk-OTLRRXEA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/projections/index.ts"],"names":["projection","definition","inlineProjections","definitions","asyncProjections","projections"],"mappings":"AAqCO,IAAMA,EAQXC,GAC4BA,EAEjBC,EAKXC,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,SAAU,WAAAA,CAAW,EAAE,EAErDI,EAKXD,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,QAAS,WAAAA,CAAW,EAAE,EAEpDK,EAAc,CACzB,OAAQH,EACR,MAAOE,CACT","sourcesContent":["import type { CanHandle, DefaultRecord, Event, ReadEvent } from '../typing';\n\nexport type ProjectionHandlingType = 'inline' | 'async';\n\nexport type ProjectionHandler<\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = (\n events: ReadEvent<EventType>[],\n context: ProjectionHandlerContext,\n) => Promise<void> | void;\n\nexport interface ProjectionDefinition<\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<Event>;\n handle: ProjectionHandler<Event, ProjectionHandlerContext>;\n}\n\nexport interface TypedProjectionDefinition<\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<EventType>;\n handle: ProjectionHandler<EventType, ProjectionHandlerContext>;\n}\n\nexport type ProjectionRegistration<\n HandlingType extends ProjectionHandlingType,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = {\n type: HandlingType;\n projection: ProjectionDefinition<ProjectionHandlerContext>;\n};\n\nexport const projection = <\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends TypedProjectionDefinition<\n EventType,\n ProjectionHandlerContext\n > = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definition: ProjectionDefintionType,\n): ProjectionDefintionType => definition;\n\nexport const inlineProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'inline', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'inline', projection }));\n\nexport const asyncProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'async', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'async', projection }));\n\nexport const projections = {\n inline: inlineProjections,\n async: asyncProjections,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/testing/shoppingCart.domain.ts"],"sourcesContent":["import { type Event, type ReadEvent } from '../typing';\n\nexport type PricedProductItem = {\n productId: string;\n quantity: number;\n price: number;\n};\n\nexport type ShoppingCart = {\n productItems: PricedProductItem[];\n totalAmount: number;\n};\n\nexport type ProductItemAdded = Event<\n 'ProductItemAdded',\n { productItem: PricedProductItem }\n>;\nexport type DiscountApplied = Event<'DiscountApplied', { percent: number }>;\n\nexport type ShoppingCartEvent = ProductItemAdded | DiscountApplied;\n\nexport const evolve = (\n state: ShoppingCart,\n { type, data }: ShoppingCartEvent,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const evolveWithMetadata = (\n state: ShoppingCart,\n { type, data }: ReadEvent<ShoppingCartEvent>,\n): ShoppingCart => {\n switch (type) {\n case 'ProductItemAdded': {\n const productItem = data.productItem;\n return {\n productItems: [...state.productItems, productItem],\n totalAmount:\n state.totalAmount + productItem.price * productItem.quantity,\n };\n }\n case 'DiscountApplied':\n return {\n ...state,\n totalAmount: state.totalAmount * (1 - data.percent / 100),\n };\n }\n};\n\nexport const initialState = (): ShoppingCart => {\n return { productItems: [], totalAmount: 0 };\n};\n"],"mappings":"AAqBO,IAAMA,EAAS,CACpBC,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaE,EAAqB,CAChCJ,EACA,CAAE,KAAAC,EAAM,KAAAC,CAAK,IACI,CACjB,OAAQD,EAAM,CACZ,IAAK,mBAAoB,CACvB,IAAME,EAAcD,EAAK,YACzB,MAAO,CACL,aAAc,CAAC,GAAGF,EAAM,aAAcG,CAAW,EACjD,YACEH,EAAM,YAAcG,EAAY,MAAQA,EAAY,QACxD,CACF,CACA,IAAK,kBACH,MAAO,CACL,GAAGH,EACH,YAAaA,EAAM,aAAe,EAAIE,EAAK,QAAU,IACvD,CACJ,CACF,EAEaG,EAAe,KACnB,CAAE,aAAc,CAAC,EAAG,YAAa,CAAE","names":["evolve","state","type","data","productItem","evolveWithMetadata","initialState"]}
@@ -1,2 +0,0 @@
1
- var i=e=>e,t=e=>e.map(n=>({type:"inline",projection:n})),o=e=>e.map(n=>({type:"async",projection:n})),r={inline:t,async:o};export{i as a,t as b,o as c,r as d};
2
- //# sourceMappingURL=chunk-ZIFNLQ77.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/projections/index.ts"],"sourcesContent":["import type { CanHandle, DefaultRecord, Event, ReadEvent } from '../typing';\n\nexport type ProjectionHandlingType = 'inline' | 'async';\n\nexport type ProjectionHandler<\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = (\n events: ReadEvent<EventType>[],\n context: ProjectionHandlerContext,\n) => Promise<void> | void;\n\nexport interface ProjectionDefinition<\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<Event>;\n handle: ProjectionHandler<Event, ProjectionHandlerContext>;\n}\n\nexport interface TypedProjectionDefinition<\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> {\n name?: string;\n canHandle: CanHandle<EventType>;\n handle: ProjectionHandler<EventType, ProjectionHandlerContext>;\n}\n\nexport type ProjectionRegistration<\n HandlingType extends ProjectionHandlingType,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n> = {\n type: HandlingType;\n projection: ProjectionDefinition<ProjectionHandlerContext>;\n};\n\nexport const projection = <\n EventType extends Event = Event,\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends TypedProjectionDefinition<\n EventType,\n ProjectionHandlerContext\n > = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definition: ProjectionDefintionType,\n): ProjectionDefintionType => definition;\n\nexport const inlineProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'inline', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'inline', projection }));\n\nexport const asyncProjections = <\n ProjectionHandlerContext extends DefaultRecord = DefaultRecord,\n ProjectionDefintionType extends\n ProjectionDefinition<ProjectionHandlerContext> = ProjectionDefinition<ProjectionHandlerContext>,\n>(\n definitions: ProjectionDefintionType[],\n): ProjectionRegistration<'async', ProjectionHandlerContext>[] =>\n definitions.map((projection) => ({ type: 'async', projection }));\n\nexport const projections = {\n inline: inlineProjections,\n async: asyncProjections,\n};\n"],"mappings":"AAqCO,IAAMA,EAQXC,GAC4BA,EAEjBC,EAKXC,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,SAAU,WAAAA,CAAW,EAAE,EAErDI,EAKXD,GAEAA,EAAY,IAAKH,IAAgB,CAAE,KAAM,QAAS,WAAAA,CAAW,EAAE,EAEpDK,EAAc,CACzB,OAAQH,EACR,MAAOE,CACT","names":["projection","definition","inlineProjections","definitions","asyncProjections","projections"]}