@event-driven-io/emmett 0.7.1 → 0.9.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.
- package/dist/chunk-745CYO42.js +2 -0
- package/dist/chunk-EKMMSO74.mjs +2 -0
- package/dist/chunk-EKMMSO74.mjs.map +1 -0
- package/dist/chunk-UP2SDIVS.mjs +2 -0
- package/dist/{chunk-OYAO7QEP.js → chunk-WTLCMZYE.js} +2 -2
- package/dist/chunk-WTLCMZYE.js.map +1 -0
- package/dist/chunk-YGQBT3VL.mjs +2 -0
- package/dist/chunk-YGQBT3VL.mjs.map +1 -0
- package/dist/chunk-Z7L3IWOH.js +2 -0
- package/dist/chunk-Z7L3IWOH.js.map +1 -0
- package/dist/commandHandling/handleCommand.d.mts +1 -1
- package/dist/commandHandling/handleCommand.d.ts +1 -1
- package/dist/commandHandling/handleCommand.js +1 -1
- package/dist/commandHandling/handleCommand.mjs +1 -1
- package/dist/commandHandling/handleCommandWithDecider.js +1 -1
- package/dist/commandHandling/handleCommandWithDecider.mjs +1 -1
- package/dist/commandHandling/index.js +1 -1
- package/dist/commandHandling/index.mjs +1 -1
- package/dist/eventStore/inMemoryEventStore.js +1 -1
- package/dist/eventStore/inMemoryEventStore.mjs +1 -1
- package/dist/eventStore/index.js +1 -1
- package/dist/eventStore/index.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +4 -3
- package/dist/chunk-BM2H4NCZ.js +0 -2
- package/dist/chunk-BM2H4NCZ.js.map +0 -1
- package/dist/chunk-CTCSK4FW.mjs +0 -2
- package/dist/chunk-CTCSK4FW.mjs.map +0 -1
- package/dist/chunk-JJHE2RKT.mjs +0 -2
- package/dist/chunk-JJHE2RKT.mjs.map +0 -1
- package/dist/chunk-O2ZUNWMO.mjs +0 -2
- package/dist/chunk-OYAO7QEP.js.map +0 -1
- package/dist/chunk-U3WA3VIW.js +0 -2
- /package/dist/{chunk-U3WA3VIW.js.map → chunk-745CYO42.js.map} +0 -0
- /package/dist/{chunk-O2ZUNWMO.mjs.map → chunk-UP2SDIVS.mjs.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWTLCMZYEjs = require('./chunk-WTLCMZYE.js');var s=({decide:r,evolve:n,getInitialState:m},o=e=>e)=>async(e,a,i,d)=>_chunkWTLCMZYEjs.a.call(void 0, n,m,o)(e,a,p=>r(i,p),d);exports.a = s;
|
|
2
|
+
//# sourceMappingURL=chunk-745CYO42.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as p,c as i}from"./chunk-UI6CV7VB.mjs";var x=(a,n,d=e=>e)=>async(e,c,V,t)=>{let s=d(c),S=await e.aggregateStream(s,{evolve:a,getInitialState:n,read:{expectedStreamVersion:t?.expectedStreamVersion??i}}),m=S?.state??n(),E=S?.currentStreamVersion,r=V(m),o=Array.isArray(r)?r:[r],u=t?.expectedStreamVersion??E??p;return{...await e.appendToStream(s,o,{...t,expectedStreamVersion:u}),newState:o.reduce(a,m)}};export{x as a};
|
|
2
|
+
//# sourceMappingURL=chunk-EKMMSO74.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commandHandling/handleCommand.ts"],"sourcesContent":["import {\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type EventStore,\n type ExpectedStreamVersion,\n} from '../eventStore';\nimport type { Event } from '../typing';\n\n// #region command-handler\nexport type CommandHandlerResult<\n State,\n StreamVersion = DefaultStreamVersionType,\n> = AppendToStreamResult<StreamVersion> & { newState: State };\n\nexport const CommandHandler =\n <State, StreamEvent extends Event, StreamVersion = DefaultStreamVersionType>(\n evolve: (state: State, event: StreamEvent) => State,\n getInitialState: () => State,\n mapToStreamId: (id: string) => string = (id) => id,\n ) =>\n async <Store extends EventStore<StreamVersion>>(\n eventStore: Store,\n id: string,\n handle: (state: State) => StreamEvent | StreamEvent[],\n options?: Parameters<Store['appendToStream']>[2] & {\n expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;\n },\n ): Promise<CommandHandlerResult<State, StreamVersion>> => {\n const streamName = mapToStreamId(id);\n\n // 1. Aggregate the stream\n const aggregationResult = await eventStore.aggregateStream<\n State,\n StreamEvent\n >(streamName, {\n evolve,\n getInitialState,\n read: {\n // expected stream version is passed to fail fast\n // if stream is in the wrong state\n expectedStreamVersion:\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n },\n });\n\n // 2. Use the aggregate state or the initial one (when e.g. stream does not exist)\n const state = aggregationResult?.state ?? getInitialState();\n const currentStreamVersion = aggregationResult?.currentStreamVersion;\n\n // 3. Run business logic\n const result = handle(state);\n\n const newEvents = Array.isArray(result) ? result : [result];\n\n // Either use:\n // - provided expected stream version,\n // - current stream version got from stream aggregation,\n // - or expect stream not to exists otherwise.\n const expectedStreamVersion: ExpectedStreamVersion<StreamVersion> =\n options?.expectedStreamVersion ??\n currentStreamVersion ??\n STREAM_DOES_NOT_EXIST;\n\n // 4. Append result to the stream\n const appendResult = await eventStore.appendToStream(\n streamName,\n newEvents,\n {\n ...options,\n expectedStreamVersion,\n },\n );\n\n // 5. Return result with updated state\n return { ...appendResult, newState: newEvents.reduce(evolve, state) };\n };\n// #endregion command-handler\n"],"mappings":"gDAgBO,IAAMA,EACX,CACEC,EACAC,EACAC,EAAyCC,GAAOA,IAElD,MACEC,EACAD,EACAE,EACAC,IAGwD,CACxD,IAAMC,EAAaL,EAAcC,CAAE,EAG7BK,EAAoB,MAAMJ,EAAW,gBAGzCG,EAAY,CACZ,OAAAP,EACA,gBAAAC,EACA,KAAM,CAGJ,sBACEK,GAAS,uBAAyBG,CACtC,CACF,CAAC,EAGKC,EAAQF,GAAmB,OAASP,EAAgB,EACpDU,EAAuBH,GAAmB,qBAG1CI,EAASP,EAAOK,CAAK,EAErBG,EAAY,MAAM,QAAQD,CAAM,EAAIA,EAAS,CAACA,CAAM,EAMpDE,EACJR,GAAS,uBACTK,GACAI,EAaF,MAAO,CAAE,GAVY,MAAMX,EAAW,eACpCG,EACAM,EACA,CACE,GAAGP,EACH,sBAAAQ,CACF,CACF,EAG0B,SAAUD,EAAU,OAAOb,EAAQU,CAAK,CAAE,CACtE","names":["CommandHandler","evolve","getInitialState","mapToStreamId","id","eventStore","handle","options","streamName","aggregationResult","NO_CONCURRENCY_CHECK","state","currentStreamVersion","result","newEvents","expectedStreamVersion","STREAM_DOES_NOT_EXIST"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk46YIPCSNjs = require('./chunk-46YIPCSN.js');var x=(
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk46YIPCSNjs = require('./chunk-46YIPCSN.js');var x=(a,n,d=e=>e)=>async(e,c,V,t)=>{let s=d(c),S=await e.aggregateStream(s,{evolve:a,getInitialState:n,read:{expectedStreamVersion:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _ => _.expectedStreamVersion]), () => (_chunk46YIPCSNjs.c))}}),m=_nullishCoalesce(_optionalChain([S, 'optionalAccess', _2 => _2.state]), () => (n())),E=_optionalChain([S, 'optionalAccess', _3 => _3.currentStreamVersion]),r=V(m),o=Array.isArray(r)?r:[r],u=_nullishCoalesce(_nullishCoalesce(_optionalChain([t, 'optionalAccess', _4 => _4.expectedStreamVersion]), () => (E)), () => (_chunk46YIPCSNjs.b));return{...await e.appendToStream(s,o,{...t,expectedStreamVersion:u}),newState:o.reduce(a,m)}};exports.a = x;
|
|
2
|
+
//# sourceMappingURL=chunk-WTLCMZYE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commandHandling/handleCommand.ts"],"names":["CommandHandler","evolve","getInitialState","mapToStreamId","id","eventStore","handle","options","streamName","aggregationResult","NO_CONCURRENCY_CHECK","state","currentStreamVersion","result","newEvents","expectedStreamVersion","STREAM_DOES_NOT_EXIST"],"mappings":"+CAgBO,IAAMA,EACX,CACEC,EACAC,EACAC,EAAyCC,GAAOA,IAElD,MACEC,EACAD,EACAE,EACAC,IAGwD,CACxD,IAAMC,EAAaL,EAAcC,CAAE,EAG7BK,EAAoB,MAAMJ,EAAW,gBAGzCG,EAAY,CACZ,OAAAP,EACA,gBAAAC,EACA,KAAM,CAGJ,sBACEK,GAAS,uBAAyBG,CACtC,CACF,CAAC,EAGKC,EAAQF,GAAmB,OAASP,EAAgB,EACpDU,EAAuBH,GAAmB,qBAG1CI,EAASP,EAAOK,CAAK,EAErBG,EAAY,MAAM,QAAQD,CAAM,EAAIA,EAAS,CAACA,CAAM,EAMpDE,EACJR,GAAS,uBACTK,GACAI,EAaF,MAAO,CAAE,GAVY,MAAMX,EAAW,eACpCG,EACAM,EACA,CACE,GAAGP,EACH,sBAAAQ,CACF,CACF,EAG0B,SAAUD,EAAU,OAAOb,EAAQU,CAAK,CAAE,CACtE","sourcesContent":["import {\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type EventStore,\n type ExpectedStreamVersion,\n} from '../eventStore';\nimport type { Event } from '../typing';\n\n// #region command-handler\nexport type CommandHandlerResult<\n State,\n StreamVersion = DefaultStreamVersionType,\n> = AppendToStreamResult<StreamVersion> & { newState: State };\n\nexport const CommandHandler =\n <State, StreamEvent extends Event, StreamVersion = DefaultStreamVersionType>(\n evolve: (state: State, event: StreamEvent) => State,\n getInitialState: () => State,\n mapToStreamId: (id: string) => string = (id) => id,\n ) =>\n async <Store extends EventStore<StreamVersion>>(\n eventStore: Store,\n id: string,\n handle: (state: State) => StreamEvent | StreamEvent[],\n options?: Parameters<Store['appendToStream']>[2] & {\n expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;\n },\n ): Promise<CommandHandlerResult<State, StreamVersion>> => {\n const streamName = mapToStreamId(id);\n\n // 1. Aggregate the stream\n const aggregationResult = await eventStore.aggregateStream<\n State,\n StreamEvent\n >(streamName, {\n evolve,\n getInitialState,\n read: {\n // expected stream version is passed to fail fast\n // if stream is in the wrong state\n expectedStreamVersion:\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n },\n });\n\n // 2. Use the aggregate state or the initial one (when e.g. stream does not exist)\n const state = aggregationResult?.state ?? getInitialState();\n const currentStreamVersion = aggregationResult?.currentStreamVersion;\n\n // 3. Run business logic\n const result = handle(state);\n\n const newEvents = Array.isArray(result) ? result : [result];\n\n // Either use:\n // - provided expected stream version,\n // - current stream version got from stream aggregation,\n // - or expect stream not to exists otherwise.\n const expectedStreamVersion: ExpectedStreamVersion<StreamVersion> =\n options?.expectedStreamVersion ??\n currentStreamVersion ??\n STREAM_DOES_NOT_EXIST;\n\n // 4. Append result to the stream\n const appendResult = await eventStore.appendToStream(\n streamName,\n newEvents,\n {\n ...options,\n expectedStreamVersion,\n },\n );\n\n // 5. Return result with updated state\n return { ...appendResult, newState: newEvents.reduce(evolve, state) };\n };\n// #endregion command-handler\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as i}from"./chunk-UI6CV7VB.mjs";import{v4 as g}from"uuid";var S=()=>{let m=new Map,E=()=>Array.from(m.values()).map(n=>n.length).reduce((n,e)=>n+e,0);return{async aggregateStream(n,e){let{evolve:t,getInitialState:r,read:o}=e,a=await this.readStream(n,o);if(!a)return null;let s=a?.events??[];return{currentStreamVersion:BigInt(s.length),state:s.reduce(t,r())}},readStream:(n,e)=>{let t=m.get(n),r=t?BigInt(t.length):void 0;i(r,e?.expectedStreamVersion);let o=Number(e&&"from"in e?e.from:0),a=Number(e&&"to"in e?e.to:e&&"maxCount"in e&&e.maxCount?e.from+e.maxCount:t?.length??1),s=t&&t.length>0?t.map(p=>p.event).slice(o,a):[],v=t&&t.length>0?{currentStreamVersion:r,events:s}:null;return Promise.resolve(v)},appendToStream:(n,e,t)=>{let r=m.get(n)??[],o=r.length>0?BigInt(r.length):void 0;i(o,t?.expectedStreamVersion);let a=e.map((p,l)=>({event:p,metadata:{eventId:g(),streamPosition:r.length+l+1,logPosition:BigInt(E()+l+1)}})),s=BigInt(a.slice(-1)[0].metadata.streamPosition);m.set(n,[...r,...a]);let v={nextExpectedStreamVersion:s};return Promise.resolve(v)}}};export{S as a};
|
|
2
|
+
//# sourceMappingURL=chunk-YGQBT3VL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eventStore/inMemoryEventStore.ts"],"sourcesContent":["import { v4 as randomUUID } from 'uuid';\nimport type { Event } from '../typing';\nimport {\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type EventStore,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from './eventStore';\nimport { assertExpectedVersionMatchesCurrent } from './expectedVersion';\n\nexport type EventMetadata = Readonly<{\n eventId: string;\n streamPosition: number;\n logPosition: bigint;\n}>;\n\nexport type EventEnvelope<E extends Event = Event> = {\n event: E;\n metadata: EventMetadata;\n};\n\nexport type EventHandler<E extends Event = Event> = (\n eventEnvelope: EventEnvelope<E>,\n) => void;\n\nexport const getInMemoryEventStore = (): EventStore => {\n const streams = new Map<string, EventEnvelope[]>();\n\n const getAllEventsCount = () => {\n return Array.from<EventEnvelope[]>(streams.values())\n .map((s) => s.length)\n .reduce((p, c) => p + c, 0);\n };\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n const { evolve, getInitialState, read } = options;\n\n const result = await this.readStream<EventType>(streamName, read);\n\n if (!result) return null;\n\n const events = result?.events ?? [];\n\n return {\n currentStreamVersion: BigInt(events.length),\n state: events.reduce(evolve, getInitialState()),\n };\n },\n\n readStream: <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<ReadStreamResult<EventType>> => {\n const events = streams.get(streamName);\n const currentStreamVersion = events ? BigInt(events.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const from = Number(options && 'from' in options ? options.from : 0);\n const to = Number(\n options && 'to' in options\n ? options.to\n : options && 'maxCount' in options && options.maxCount\n ? options.from + options.maxCount\n : events?.length ?? 1,\n );\n\n const resultEvents =\n events && events.length > 0\n ? events.map((e) => e.event as EventType).slice(from, to)\n : [];\n\n const result: ReadStreamResult<EventType> =\n events && events.length > 0\n ? {\n currentStreamVersion: currentStreamVersion!,\n events: resultEvents,\n }\n : null;\n\n return Promise.resolve(result);\n },\n\n appendToStream: <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n const currentEvents = streams.get(streamName) ?? [];\n const currentStreamVersion =\n currentEvents.length > 0 ? BigInt(currentEvents.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const eventEnvelopes: EventEnvelope[] = events.map((event, index) => {\n return {\n event,\n metadata: {\n eventId: randomUUID(),\n streamPosition: currentEvents.length + index + 1,\n logPosition: BigInt(getAllEventsCount() + index + 1),\n },\n };\n });\n\n const positionOfLastEventInTheStream = BigInt(\n eventEnvelopes.slice(-1)[0]!.metadata.streamPosition,\n );\n\n streams.set(streamName, [...currentEvents, ...eventEnvelopes]);\n\n const result: AppendToStreamResult = {\n nextExpectedStreamVersion: positionOfLastEventInTheStream,\n };\n\n return Promise.resolve(result);\n },\n };\n};\n"],"mappings":"yCAAA,OAAS,MAAMA,MAAkB,OA4B1B,IAAMC,EAAwB,IAAkB,CACrD,IAAMC,EAAU,IAAI,IAEdC,EAAoB,IACjB,MAAM,KAAsBD,EAAQ,OAAO,CAAC,EAChD,IAAKE,GAAMA,EAAE,MAAM,EACnB,OAAO,CAACC,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EAG9B,MAAO,CACL,MAAM,gBACJC,EACAC,EAC8C,CAC9C,GAAM,CAAE,OAAAC,EAAQ,gBAAAC,EAAiB,KAAAC,CAAK,EAAIH,EAEpCI,EAAS,MAAM,KAAK,WAAsBL,EAAYI,CAAI,EAEhE,GAAI,CAACC,EAAQ,OAAO,KAEpB,IAAMC,EAASD,GAAQ,QAAU,CAAC,EAElC,MAAO,CACL,qBAAsB,OAAOC,EAAO,MAAM,EAC1C,MAAOA,EAAO,OAAOJ,EAAQC,EAAgB,CAAC,CAChD,CACF,EAEA,WAAY,CACVH,EACAC,IACyC,CACzC,IAAMK,EAASX,EAAQ,IAAIK,CAAU,EAC/BO,EAAuBD,EAAS,OAAOA,EAAO,MAAM,EAAI,OAE9DE,EACED,EACAN,GAAS,qBACX,EAEA,IAAMQ,EAAO,OAAOR,GAAW,SAAUA,EAAUA,EAAQ,KAAO,CAAC,EAC7DS,EAAK,OACTT,GAAW,OAAQA,EACfA,EAAQ,GACRA,GAAW,aAAcA,GAAWA,EAAQ,SAC1CA,EAAQ,KAAOA,EAAQ,SACvBK,GAAQ,QAAU,CAC1B,EAEMK,EACJL,GAAUA,EAAO,OAAS,EACtBA,EAAO,IAAKM,GAAMA,EAAE,KAAkB,EAAE,MAAMH,EAAMC,CAAE,EACtD,CAAC,EAEDL,EACJC,GAAUA,EAAO,OAAS,EACtB,CACE,qBAAsBC,EACtB,OAAQI,CACV,EACA,KAEN,OAAO,QAAQ,QAAQN,CAAM,CAC/B,EAEA,eAAgB,CACdL,EACAM,EACAL,IACkC,CAClC,IAAMY,EAAgBlB,EAAQ,IAAIK,CAAU,GAAK,CAAC,EAC5CO,EACJM,EAAc,OAAS,EAAI,OAAOA,EAAc,MAAM,EAAI,OAE5DL,EACED,EACAN,GAAS,qBACX,EAEA,IAAMa,EAAkCR,EAAO,IAAI,CAACS,EAAOC,KAClD,CACL,MAAAD,EACA,SAAU,CACR,QAASE,EAAW,EACpB,eAAgBJ,EAAc,OAASG,EAAQ,EAC/C,YAAa,OAAOpB,EAAkB,EAAIoB,EAAQ,CAAC,CACrD,CACF,EACD,EAEKE,EAAiC,OACrCJ,EAAe,MAAM,EAAE,EAAE,CAAC,EAAG,SAAS,cACxC,EAEAnB,EAAQ,IAAIK,EAAY,CAAC,GAAGa,EAAe,GAAGC,CAAc,CAAC,EAE7D,IAAMT,EAA+B,CACnC,0BAA2Ba,CAC7B,EAEA,OAAO,QAAQ,QAAQb,CAAM,CAC/B,CACF,CACF","names":["randomUUID","getInMemoryEventStore","streams","getAllEventsCount","s","p","c","streamName","options","evolve","getInitialState","read","result","events","currentStreamVersion","assertExpectedVersionMatchesCurrent","from","to","resultEvents","e","currentEvents","eventEnvelopes","event","index","randomUUID","positionOfLastEventInTheStream"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk46YIPCSNjs = require('./chunk-46YIPCSN.js');var _uuid = require('uuid');var S=()=>{let m=new Map,E=()=>Array.from(m.values()).map(n=>n.length).reduce((n,e)=>n+e,0);return{async aggregateStream(n,e){let{evolve:t,getInitialState:r,read:o}=e,a=await this.readStream(n,o);if(!a)return null;let s=_nullishCoalesce(_optionalChain([a, 'optionalAccess', _ => _.events]), () => ([]));return{currentStreamVersion:BigInt(s.length),state:s.reduce(t,r())}},readStream:(n,e)=>{let t=m.get(n),r=t?BigInt(t.length):void 0;_chunk46YIPCSNjs.e.call(void 0, r,_optionalChain([e, 'optionalAccess', _2 => _2.expectedStreamVersion]));let o=Number(e&&"from"in e?e.from:0),a=Number(e&&"to"in e?e.to:e&&"maxCount"in e&&e.maxCount?e.from+e.maxCount:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _3 => _3.length]), () => (1))),s=t&&t.length>0?t.map(p=>p.event).slice(o,a):[],v=t&&t.length>0?{currentStreamVersion:r,events:s}:null;return Promise.resolve(v)},appendToStream:(n,e,t)=>{let r=_nullishCoalesce(m.get(n), () => ([])),o=r.length>0?BigInt(r.length):void 0;_chunk46YIPCSNjs.e.call(void 0, o,_optionalChain([t, 'optionalAccess', _4 => _4.expectedStreamVersion]));let a=e.map((p,l)=>({event:p,metadata:{eventId:_uuid.v4.call(void 0, ),streamPosition:r.length+l+1,logPosition:BigInt(E()+l+1)}})),s=BigInt(a.slice(-1)[0].metadata.streamPosition);m.set(n,[...r,...a]);let v={nextExpectedStreamVersion:s};return Promise.resolve(v)}}};exports.a = S;
|
|
2
|
+
//# sourceMappingURL=chunk-Z7L3IWOH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eventStore/inMemoryEventStore.ts"],"names":["randomUUID","getInMemoryEventStore","streams","getAllEventsCount","s","p","c","streamName","options","evolve","getInitialState","read","result","events","currentStreamVersion","assertExpectedVersionMatchesCurrent","from","to","resultEvents","e","currentEvents","eventEnvelopes","event","index","positionOfLastEventInTheStream"],"mappings":"wCAAA,OAAS,MAAMA,MAAkB,OA4B1B,IAAMC,EAAwB,IAAkB,CACrD,IAAMC,EAAU,IAAI,IAEdC,EAAoB,IACjB,MAAM,KAAsBD,EAAQ,OAAO,CAAC,EAChD,IAAKE,GAAMA,EAAE,MAAM,EACnB,OAAO,CAACC,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EAG9B,MAAO,CACL,MAAM,gBACJC,EACAC,EAC8C,CAC9C,GAAM,CAAE,OAAAC,EAAQ,gBAAAC,EAAiB,KAAAC,CAAK,EAAIH,EAEpCI,EAAS,MAAM,KAAK,WAAsBL,EAAYI,CAAI,EAEhE,GAAI,CAACC,EAAQ,OAAO,KAEpB,IAAMC,EAASD,GAAQ,QAAU,CAAC,EAElC,MAAO,CACL,qBAAsB,OAAOC,EAAO,MAAM,EAC1C,MAAOA,EAAO,OAAOJ,EAAQC,EAAgB,CAAC,CAChD,CACF,EAEA,WAAY,CACVH,EACAC,IACyC,CACzC,IAAMK,EAASX,EAAQ,IAAIK,CAAU,EAC/BO,EAAuBD,EAAS,OAAOA,EAAO,MAAM,EAAI,OAE9DE,EACED,EACAN,GAAS,qBACX,EAEA,IAAMQ,EAAO,OAAOR,GAAW,SAAUA,EAAUA,EAAQ,KAAO,CAAC,EAC7DS,EAAK,OACTT,GAAW,OAAQA,EACfA,EAAQ,GACRA,GAAW,aAAcA,GAAWA,EAAQ,SAC1CA,EAAQ,KAAOA,EAAQ,SACvBK,GAAQ,QAAU,CAC1B,EAEMK,EACJL,GAAUA,EAAO,OAAS,EACtBA,EAAO,IAAKM,GAAMA,EAAE,KAAkB,EAAE,MAAMH,EAAMC,CAAE,EACtD,CAAC,EAEDL,EACJC,GAAUA,EAAO,OAAS,EACtB,CACE,qBAAsBC,EACtB,OAAQI,CACV,EACA,KAEN,OAAO,QAAQ,QAAQN,CAAM,CAC/B,EAEA,eAAgB,CACdL,EACAM,EACAL,IACkC,CAClC,IAAMY,EAAgBlB,EAAQ,IAAIK,CAAU,GAAK,CAAC,EAC5CO,EACJM,EAAc,OAAS,EAAI,OAAOA,EAAc,MAAM,EAAI,OAE5DL,EACED,EACAN,GAAS,qBACX,EAEA,IAAMa,EAAkCR,EAAO,IAAI,CAACS,EAAOC,KAClD,CACL,MAAAD,EACA,SAAU,CACR,QAAStB,EAAW,EACpB,eAAgBoB,EAAc,OAASG,EAAQ,EAC/C,YAAa,OAAOpB,EAAkB,EAAIoB,EAAQ,CAAC,CACrD,CACF,EACD,EAEKC,EAAiC,OACrCH,EAAe,MAAM,EAAE,EAAE,CAAC,EAAG,SAAS,cACxC,EAEAnB,EAAQ,IAAIK,EAAY,CAAC,GAAGa,EAAe,GAAGC,CAAc,CAAC,EAE7D,IAAMT,EAA+B,CACnC,0BAA2BY,CAC7B,EAEA,OAAO,QAAQ,QAAQZ,CAAM,CAC/B,CACF,CACF","sourcesContent":["import { v4 as randomUUID } from 'uuid';\nimport type { Event } from '../typing';\nimport {\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type EventStore,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from './eventStore';\nimport { assertExpectedVersionMatchesCurrent } from './expectedVersion';\n\nexport type EventMetadata = Readonly<{\n eventId: string;\n streamPosition: number;\n logPosition: bigint;\n}>;\n\nexport type EventEnvelope<E extends Event = Event> = {\n event: E;\n metadata: EventMetadata;\n};\n\nexport type EventHandler<E extends Event = Event> = (\n eventEnvelope: EventEnvelope<E>,\n) => void;\n\nexport const getInMemoryEventStore = (): EventStore => {\n const streams = new Map<string, EventEnvelope[]>();\n\n const getAllEventsCount = () => {\n return Array.from<EventEnvelope[]>(streams.values())\n .map((s) => s.length)\n .reduce((p, c) => p + c, 0);\n };\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n const { evolve, getInitialState, read } = options;\n\n const result = await this.readStream<EventType>(streamName, read);\n\n if (!result) return null;\n\n const events = result?.events ?? [];\n\n return {\n currentStreamVersion: BigInt(events.length),\n state: events.reduce(evolve, getInitialState()),\n };\n },\n\n readStream: <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<ReadStreamResult<EventType>> => {\n const events = streams.get(streamName);\n const currentStreamVersion = events ? BigInt(events.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const from = Number(options && 'from' in options ? options.from : 0);\n const to = Number(\n options && 'to' in options\n ? options.to\n : options && 'maxCount' in options && options.maxCount\n ? options.from + options.maxCount\n : events?.length ?? 1,\n );\n\n const resultEvents =\n events && events.length > 0\n ? events.map((e) => e.event as EventType).slice(from, to)\n : [];\n\n const result: ReadStreamResult<EventType> =\n events && events.length > 0\n ? {\n currentStreamVersion: currentStreamVersion!,\n events: resultEvents,\n }\n : null;\n\n return Promise.resolve(result);\n },\n\n appendToStream: <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n const currentEvents = streams.get(streamName) ?? [];\n const currentStreamVersion =\n currentEvents.length > 0 ? BigInt(currentEvents.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const eventEnvelopes: EventEnvelope[] = events.map((event, index) => {\n return {\n event,\n metadata: {\n eventId: randomUUID(),\n streamPosition: currentEvents.length + index + 1,\n logPosition: BigInt(getAllEventsCount() + index + 1),\n },\n };\n });\n\n const positionOfLastEventInTheStream = BigInt(\n eventEnvelopes.slice(-1)[0]!.metadata.streamPosition,\n );\n\n streams.set(streamName, [...currentEvents, ...eventEnvelopes]);\n\n const result: AppendToStreamResult = {\n nextExpectedStreamVersion: positionOfLastEventInTheStream,\n };\n\n return Promise.resolve(result);\n },\n };\n};\n"]}
|
|
@@ -6,7 +6,7 @@ import '../typing/deepReadonly.mjs';
|
|
|
6
6
|
type CommandHandlerResult<State, StreamVersion = DefaultStreamVersionType> = AppendToStreamResult<StreamVersion> & {
|
|
7
7
|
newState: State;
|
|
8
8
|
};
|
|
9
|
-
declare const CommandHandler: <State, StreamEvent extends Event, StreamVersion = bigint>(evolve: (state: State, event: StreamEvent) => State, getInitialState: () => State, mapToStreamId?: (id: string) => string) =>
|
|
9
|
+
declare const CommandHandler: <State, StreamEvent extends Event, StreamVersion = bigint>(evolve: (state: State, event: StreamEvent) => State, getInitialState: () => State, mapToStreamId?: (id: string) => string) => <Store extends EventStore<StreamVersion>>(eventStore: Store, id: string, handle: (state: State) => StreamEvent | StreamEvent[], options?: Parameters<Store['appendToStream']>[2] & {
|
|
10
10
|
expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;
|
|
11
11
|
}) => Promise<CommandHandlerResult<State, StreamVersion>>;
|
|
12
12
|
|
|
@@ -6,7 +6,7 @@ import '../typing/deepReadonly.js';
|
|
|
6
6
|
type CommandHandlerResult<State, StreamVersion = DefaultStreamVersionType> = AppendToStreamResult<StreamVersion> & {
|
|
7
7
|
newState: State;
|
|
8
8
|
};
|
|
9
|
-
declare const CommandHandler: <State, StreamEvent extends Event, StreamVersion = bigint>(evolve: (state: State, event: StreamEvent) => State, getInitialState: () => State, mapToStreamId?: (id: string) => string) =>
|
|
9
|
+
declare const CommandHandler: <State, StreamEvent extends Event, StreamVersion = bigint>(evolve: (state: State, event: StreamEvent) => State, getInitialState: () => State, mapToStreamId?: (id: string) => string) => <Store extends EventStore<StreamVersion>>(eventStore: Store, id: string, handle: (state: State) => StreamEvent | StreamEvent[], options?: Parameters<Store['appendToStream']>[2] & {
|
|
10
10
|
expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;
|
|
11
11
|
}) => Promise<CommandHandlerResult<State, StreamVersion>>;
|
|
12
12
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWTLCMZYEjs = require('../chunk-WTLCMZYE.js');require('../chunk-2452BJTJ.js');require('../chunk-Z7L3IWOH.js');require('../chunk-IJGC6SHP.js');require('../chunk-46YIPCSN.js');require('../chunk-UUCTMJK7.js');exports.CommandHandler = _chunkWTLCMZYEjs.a;
|
|
2
2
|
//# sourceMappingURL=handleCommand.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-EKMMSO74.mjs";import"../chunk-45ODDXOQ.mjs";import"../chunk-YGQBT3VL.mjs";import"../chunk-D24KLTN5.mjs";import"../chunk-UI6CV7VB.mjs";import"../chunk-YV6PB6LX.mjs";export{a as CommandHandler};
|
|
2
2
|
//# sourceMappingURL=handleCommand.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk745CYO42js = require('../chunk-745CYO42.js');require('../chunk-WTLCMZYE.js');require('../chunk-2452BJTJ.js');require('../chunk-Z7L3IWOH.js');require('../chunk-IJGC6SHP.js');require('../chunk-46YIPCSN.js');require('../chunk-UUCTMJK7.js');exports.DeciderCommandHandler = _chunk745CYO42js.a;
|
|
2
2
|
//# sourceMappingURL=handleCommandWithDecider.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-UP2SDIVS.mjs";import"../chunk-EKMMSO74.mjs";import"../chunk-45ODDXOQ.mjs";import"../chunk-YGQBT3VL.mjs";import"../chunk-D24KLTN5.mjs";import"../chunk-UI6CV7VB.mjs";import"../chunk-YV6PB6LX.mjs";export{a as DeciderCommandHandler};
|
|
2
2
|
//# sourceMappingURL=handleCommandWithDecider.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-F7QRI2VL.js');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-F7QRI2VL.js');var _chunk745CYO42js = require('../chunk-745CYO42.js');var _chunkWTLCMZYEjs = require('../chunk-WTLCMZYE.js');require('../chunk-2452BJTJ.js');require('../chunk-Z7L3IWOH.js');require('../chunk-IJGC6SHP.js');require('../chunk-46YIPCSN.js');require('../chunk-UUCTMJK7.js');exports.CommandHandler = _chunkWTLCMZYEjs.a; exports.DeciderCommandHandler = _chunk745CYO42js.a;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../chunk-XLZS42HB.mjs";import{a as b}from"../chunk-
|
|
1
|
+
import"../chunk-XLZS42HB.mjs";import{a as b}from"../chunk-UP2SDIVS.mjs";import{a}from"../chunk-EKMMSO74.mjs";import"../chunk-45ODDXOQ.mjs";import"../chunk-YGQBT3VL.mjs";import"../chunk-D24KLTN5.mjs";import"../chunk-UI6CV7VB.mjs";import"../chunk-YV6PB6LX.mjs";export{a as CommandHandler,b as DeciderCommandHandler};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZ7L3IWOHjs = require('../chunk-Z7L3IWOH.js');require('../chunk-IJGC6SHP.js');require('../chunk-46YIPCSN.js');require('../chunk-UUCTMJK7.js');exports.getInMemoryEventStore = _chunkZ7L3IWOHjs.a;
|
|
2
2
|
//# sourceMappingURL=inMemoryEventStore.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-YGQBT3VL.mjs";import"../chunk-D24KLTN5.mjs";import"../chunk-UI6CV7VB.mjs";import"../chunk-YV6PB6LX.mjs";export{a as getInMemoryEventStore};
|
|
2
2
|
//# sourceMappingURL=inMemoryEventStore.mjs.map
|
package/dist/eventStore/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-2452BJTJ.js');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-2452BJTJ.js');var _chunkZ7L3IWOHjs = require('../chunk-Z7L3IWOH.js');require('../chunk-IJGC6SHP.js');var _chunk46YIPCSNjs = require('../chunk-46YIPCSN.js');require('../chunk-UUCTMJK7.js');exports.ExpectedVersionConflictError = _chunk46YIPCSNjs.f; exports.NO_CONCURRENCY_CHECK = _chunk46YIPCSNjs.c; exports.STREAM_DOES_NOT_EXIST = _chunk46YIPCSNjs.b; exports.STREAM_EXISTS = _chunk46YIPCSNjs.a; exports.assertExpectedVersionMatchesCurrent = _chunk46YIPCSNjs.e; exports.getInMemoryEventStore = _chunkZ7L3IWOHjs.a; exports.matchesExpectedVersion = _chunk46YIPCSNjs.d;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../chunk-45ODDXOQ.mjs";import{a as g}from"../chunk-
|
|
1
|
+
import"../chunk-45ODDXOQ.mjs";import{a as g}from"../chunk-YGQBT3VL.mjs";import"../chunk-D24KLTN5.mjs";import{a,b,c,d,e,f}from"../chunk-UI6CV7VB.mjs";import"../chunk-YV6PB6LX.mjs";export{f as ExpectedVersionConflictError,c as NO_CONCURRENCY_CHECK,b as STREAM_DOES_NOT_EXIST,a as STREAM_EXISTS,e as assertExpectedVersionMatchesCurrent,g as getInMemoryEventStore,d as matchesExpectedVersion};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-WIMBG2PX.js');var _chunk3JE5DUJ2js = require('./chunk-3JE5DUJ2.js');var _chunkFE73T2NSjs = require('./chunk-FE73T2NS.js');require('./chunk-LOJ6A4AJ.js');require('./chunk-AU2WZCER.js');var _chunkLYKEARRWjs = require('./chunk-LYKEARRW.js');require('./chunk-BNCTLP4B.js');var _chunk7D2LV2X5js = require('./chunk-7D2LV2X5.js');var _chunkO34VKX7Rjs = require('./chunk-O34VKX7R.js');var _chunk4PGUBQK3js = require('./chunk-4PGUBQK3.js');require('./chunk-ZLASBJGR.js');var _chunkMHB2JU4Ujs = require('./chunk-MHB2JU4U.js');require('./chunk-7FJXUW3D.js');require('./chunk-5BGN2FV4.js');var _chunkS3PRXL2Jjs = require('./chunk-S3PRXL2J.js');var _chunk7EZVPMJ6js = require('./chunk-7EZVPMJ6.js');require('./chunk-F7QRI2VL.js');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-WIMBG2PX.js');var _chunk3JE5DUJ2js = require('./chunk-3JE5DUJ2.js');var _chunkFE73T2NSjs = require('./chunk-FE73T2NS.js');require('./chunk-LOJ6A4AJ.js');require('./chunk-AU2WZCER.js');var _chunkLYKEARRWjs = require('./chunk-LYKEARRW.js');require('./chunk-BNCTLP4B.js');var _chunk7D2LV2X5js = require('./chunk-7D2LV2X5.js');var _chunkO34VKX7Rjs = require('./chunk-O34VKX7R.js');var _chunk4PGUBQK3js = require('./chunk-4PGUBQK3.js');require('./chunk-ZLASBJGR.js');var _chunkMHB2JU4Ujs = require('./chunk-MHB2JU4U.js');require('./chunk-7FJXUW3D.js');require('./chunk-5BGN2FV4.js');var _chunkS3PRXL2Jjs = require('./chunk-S3PRXL2J.js');var _chunk7EZVPMJ6js = require('./chunk-7EZVPMJ6.js');require('./chunk-F7QRI2VL.js');var _chunk745CYO42js = require('./chunk-745CYO42.js');var _chunkWTLCMZYEjs = require('./chunk-WTLCMZYE.js');require('./chunk-2452BJTJ.js');var _chunkZ7L3IWOHjs = require('./chunk-Z7L3IWOH.js');require('./chunk-IJGC6SHP.js');var _chunk46YIPCSNjs = require('./chunk-46YIPCSN.js');var _chunkUUCTMJK7js = require('./chunk-UUCTMJK7.js');exports.CommandHandler = _chunkWTLCMZYEjs.a; exports.ConcurrencyError = _chunkUUCTMJK7js.h; exports.DeciderCommandHandler = _chunk745CYO42js.a; exports.DeciderSpecification = _chunkO34VKX7Rjs.a; exports.EmmettError = _chunkUUCTMJK7js.g; exports.ExpectedVersionConflictError = _chunk46YIPCSNjs.f; exports.IllegalStateError = _chunkUUCTMJK7js.j; exports.JSONParser = _chunkLYKEARRWjs.b; exports.NO_CONCURRENCY_CHECK = _chunk46YIPCSNjs.c; exports.NotFoundError = _chunkUUCTMJK7js.k; exports.ParseError = _chunkLYKEARRWjs.a; exports.STREAM_DOES_NOT_EXIST = _chunk46YIPCSNjs.b; exports.STREAM_EXISTS = _chunk46YIPCSNjs.a; exports.ValidationError = _chunkUUCTMJK7js.i; exports.ValidationErrors = _chunkUUCTMJK7js.a; exports.accept = _chunk7EZVPMJ6js.h; exports.assertExpectedVersionMatchesCurrent = _chunk46YIPCSNjs.e; exports.assertMatches = _chunk7D2LV2X5js.b; exports.assertNotEmptyString = _chunkUUCTMJK7js.d; exports.assertPositiveNumber = _chunkUUCTMJK7js.e; exports.assertUnsignedBigInt = _chunkUUCTMJK7js.f; exports.command = _chunkMHB2JU4Ujs.a; exports.complete = _chunk7EZVPMJ6js.e; exports.error = _chunk7EZVPMJ6js.g; exports.event = _chunkS3PRXL2Jjs.a; exports.evolve = _chunk4PGUBQK3js.a; exports.getInMemoryEventStore = _chunkZ7L3IWOHjs.a; exports.getInitialState = _chunk4PGUBQK3js.b; exports.ignore = _chunk7EZVPMJ6js.f; exports.isNumber = _chunkUUCTMJK7js.b; exports.isString = _chunkUUCTMJK7js.c; exports.isSubset = _chunk7D2LV2X5js.a; exports.matchesExpectedVersion = _chunk46YIPCSNjs.d; exports.merge = _chunk3JE5DUJ2js.a; exports.publish = _chunk7EZVPMJ6js.c; exports.reply = _chunk7EZVPMJ6js.a; exports.schedule = _chunk7EZVPMJ6js.d; exports.send = _chunk7EZVPMJ6js.b; exports.sum = _chunkFE73T2NSjs.a;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./chunk-PNOEBD4U.mjs";import{a as M}from"./chunk-YKFEDBH4.mjs";import{a as L}from"./chunk-OBA6MZMG.mjs";import"./chunk-DIW552TK.mjs";import"./chunk-7JLAVMM3.mjs";import{a as s,b as u}from"./chunk-PKL7KGJ3.mjs";import"./chunk-AHXBZPOE.mjs";import{a as v,b as w}from"./chunk-HVU6UBXF.mjs";import{a as y}from"./chunk-32IWULJJ.mjs";import{a as J,b as K}from"./chunk-AYVR4VYR.mjs";import"./chunk-YWRV75GA.mjs";import{a as z}from"./chunk-JDYZZRJE.mjs";import"./chunk-3LYVXI5R.mjs";import"./chunk-DOHUIBZQ.mjs";import{a as A}from"./chunk-AWUWW7EJ.mjs";import{a as B,b as C,c as D,d as E,e as F,f as G,g as H,h as I}from"./chunk-ERDVHQZL.mjs";import"./chunk-XLZS42HB.mjs";import{a as q}from"./chunk-
|
|
1
|
+
import"./chunk-PNOEBD4U.mjs";import{a as M}from"./chunk-YKFEDBH4.mjs";import{a as L}from"./chunk-OBA6MZMG.mjs";import"./chunk-DIW552TK.mjs";import"./chunk-7JLAVMM3.mjs";import{a as s,b as u}from"./chunk-PKL7KGJ3.mjs";import"./chunk-AHXBZPOE.mjs";import{a as v,b as w}from"./chunk-HVU6UBXF.mjs";import{a as y}from"./chunk-32IWULJJ.mjs";import{a as J,b as K}from"./chunk-AYVR4VYR.mjs";import"./chunk-YWRV75GA.mjs";import{a as z}from"./chunk-JDYZZRJE.mjs";import"./chunk-3LYVXI5R.mjs";import"./chunk-DOHUIBZQ.mjs";import{a as A}from"./chunk-AWUWW7EJ.mjs";import{a as B,b as C,c as D,d as E,e as F,f as G,g as H,h as I}from"./chunk-ERDVHQZL.mjs";import"./chunk-XLZS42HB.mjs";import{a as q}from"./chunk-UP2SDIVS.mjs";import{a as n}from"./chunk-EKMMSO74.mjs";import"./chunk-45ODDXOQ.mjs";import{a as l}from"./chunk-YGQBT3VL.mjs";import"./chunk-D24KLTN5.mjs";import{a as d,b as g,c as h,d as i,e as j,f as k}from"./chunk-UI6CV7VB.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}from"./chunk-YV6PB6LX.mjs";export{n as CommandHandler,x as ConcurrencyError,q as DeciderCommandHandler,y as DeciderSpecification,t as EmmettError,k as ExpectedVersionConflictError,b as IllegalStateError,u as JSONParser,h as NO_CONCURRENCY_CHECK,c as NotFoundError,s as ParseError,g as STREAM_DOES_NOT_EXIST,d as STREAM_EXISTS,a as ValidationError,o as ValidationErrors,I as accept,j as assertExpectedVersionMatchesCurrent,w as assertMatches,f as assertNotEmptyString,m as assertPositiveNumber,p as assertUnsignedBigInt,z as command,F as complete,H as error,A as event,J as evolve,l as getInMemoryEventStore,K as getInitialState,G as ignore,r as isNumber,e as isString,v as isSubset,i as matchesExpectedVersion,M as merge,D as publish,B as reply,E as schedule,C as send,L as sum};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event-driven-io/emmett",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Emmett - Event Sourcing development made simple",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsup",
|
|
@@ -45,8 +45,9 @@
|
|
|
45
45
|
"files": [
|
|
46
46
|
"dist"
|
|
47
47
|
],
|
|
48
|
-
"devDependencies": {},
|
|
49
48
|
"peerDependencies": {
|
|
50
|
-
"@types/node": "^20.11.30"
|
|
49
|
+
"@types/node": "^20.11.30",
|
|
50
|
+
"@types/uuid": "9.0.8",
|
|
51
|
+
"uuid": "9.0.1"
|
|
51
52
|
}
|
|
52
53
|
}
|
package/dist/chunk-BM2H4NCZ.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk46YIPCSNjs = require('./chunk-46YIPCSN.js');var _crypto = require('crypto');var S=()=>{let m=new Map,E=()=>Array.from(m.values()).map(n=>n.length).reduce((n,e)=>n+e,0);return{async aggregateStream(n,e){let{evolve:t,getInitialState:r,read:o}=e,a=await this.readStream(n,o);if(!a)return null;let s=_nullishCoalesce(_optionalChain([a, 'optionalAccess', _ => _.events]), () => ([]));return{currentStreamVersion:BigInt(s.length),state:s.reduce(t,r())}},readStream:(n,e)=>{let t=m.get(n),r=t?BigInt(t.length):void 0;_chunk46YIPCSNjs.e.call(void 0, r,_optionalChain([e, 'optionalAccess', _2 => _2.expectedStreamVersion]));let o=Number(e&&"from"in e?e.from:0),a=Number(e&&"to"in e?e.to:e&&"maxCount"in e&&e.maxCount?e.from+e.maxCount:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _3 => _3.length]), () => (1))),s=t&&t.length>0?t.map(p=>p.event).slice(o,a):[],v=t&&t.length>0?{currentStreamVersion:r,events:s}:null;return Promise.resolve(v)},appendToStream:(n,e,t)=>{let r=_nullishCoalesce(m.get(n), () => ([])),o=r.length>0?BigInt(r.length):void 0;_chunk46YIPCSNjs.e.call(void 0, o,_optionalChain([t, 'optionalAccess', _4 => _4.expectedStreamVersion]));let a=e.map((p,l)=>({event:p,metadata:{eventId:_crypto.randomUUID.call(void 0, ),streamPosition:r.length+l+1,logPosition:BigInt(E()+l+1)}})),s=BigInt(a.slice(-1)[0].metadata.streamPosition);m.set(n,[...r,...a]);let v={nextExpectedStreamVersion:s};return Promise.resolve(v)}}};exports.a = S;
|
|
2
|
-
//# sourceMappingURL=chunk-BM2H4NCZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/eventStore/inMemoryEventStore.ts"],"names":["randomUUID","getInMemoryEventStore","streams","getAllEventsCount","s","p","c","streamName","options","evolve","getInitialState","read","result","events","currentStreamVersion","assertExpectedVersionMatchesCurrent","from","to","resultEvents","e","currentEvents","eventEnvelopes","event","index","positionOfLastEventInTheStream"],"mappings":"wCAAA,OAAS,cAAAA,MAAkB,SA4BpB,IAAMC,EAAwB,IAAkB,CACrD,IAAMC,EAAU,IAAI,IAEdC,EAAoB,IACjB,MAAM,KAAsBD,EAAQ,OAAO,CAAC,EAChD,IAAKE,GAAMA,EAAE,MAAM,EACnB,OAAO,CAACC,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EAG9B,MAAO,CACL,MAAM,gBACJC,EACAC,EAC8C,CAC9C,GAAM,CAAE,OAAAC,EAAQ,gBAAAC,EAAiB,KAAAC,CAAK,EAAIH,EAEpCI,EAAS,MAAM,KAAK,WAAsBL,EAAYI,CAAI,EAEhE,GAAI,CAACC,EAAQ,OAAO,KAEpB,IAAMC,EAASD,GAAQ,QAAU,CAAC,EAElC,MAAO,CACL,qBAAsB,OAAOC,EAAO,MAAM,EAC1C,MAAOA,EAAO,OAAOJ,EAAQC,EAAgB,CAAC,CAChD,CACF,EAEA,WAAY,CACVH,EACAC,IACyC,CACzC,IAAMK,EAASX,EAAQ,IAAIK,CAAU,EAC/BO,EAAuBD,EAAS,OAAOA,EAAO,MAAM,EAAI,OAE9DE,EACED,EACAN,GAAS,qBACX,EAEA,IAAMQ,EAAO,OAAOR,GAAW,SAAUA,EAAUA,EAAQ,KAAO,CAAC,EAC7DS,EAAK,OACTT,GAAW,OAAQA,EACfA,EAAQ,GACRA,GAAW,aAAcA,GAAWA,EAAQ,SAC1CA,EAAQ,KAAOA,EAAQ,SACvBK,GAAQ,QAAU,CAC1B,EAEMK,EACJL,GAAUA,EAAO,OAAS,EACtBA,EAAO,IAAKM,GAAMA,EAAE,KAAkB,EAAE,MAAMH,EAAMC,CAAE,EACtD,CAAC,EAEDL,EACJC,GAAUA,EAAO,OAAS,EACtB,CACE,qBAAsBC,EACtB,OAAQI,CACV,EACA,KAEN,OAAO,QAAQ,QAAQN,CAAM,CAC/B,EAEA,eAAgB,CACdL,EACAM,EACAL,IACkC,CAClC,IAAMY,EAAgBlB,EAAQ,IAAIK,CAAU,GAAK,CAAC,EAC5CO,EACJM,EAAc,OAAS,EAAI,OAAOA,EAAc,MAAM,EAAI,OAE5DL,EACED,EACAN,GAAS,qBACX,EAEA,IAAMa,EAAkCR,EAAO,IAAI,CAACS,EAAOC,KAClD,CACL,MAAAD,EACA,SAAU,CACR,QAAStB,EAAW,EACpB,eAAgBoB,EAAc,OAASG,EAAQ,EAC/C,YAAa,OAAOpB,EAAkB,EAAIoB,EAAQ,CAAC,CACrD,CACF,EACD,EAEKC,EAAiC,OACrCH,EAAe,MAAM,EAAE,EAAE,CAAC,EAAG,SAAS,cACxC,EAEAnB,EAAQ,IAAIK,EAAY,CAAC,GAAGa,EAAe,GAAGC,CAAc,CAAC,EAE7D,IAAMT,EAA+B,CACnC,0BAA2BY,CAC7B,EAEA,OAAO,QAAQ,QAAQZ,CAAM,CAC/B,CACF,CACF","sourcesContent":["import { randomUUID } from 'crypto';\nimport type { Event } from '../typing';\nimport {\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type EventStore,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from './eventStore';\nimport { assertExpectedVersionMatchesCurrent } from './expectedVersion';\n\nexport type EventMetadata = Readonly<{\n eventId: string;\n streamPosition: number;\n logPosition: bigint;\n}>;\n\nexport type EventEnvelope<E extends Event = Event> = {\n event: E;\n metadata: EventMetadata;\n};\n\nexport type EventHandler<E extends Event = Event> = (\n eventEnvelope: EventEnvelope<E>,\n) => void;\n\nexport const getInMemoryEventStore = (): EventStore => {\n const streams = new Map<string, EventEnvelope[]>();\n\n const getAllEventsCount = () => {\n return Array.from<EventEnvelope[]>(streams.values())\n .map((s) => s.length)\n .reduce((p, c) => p + c, 0);\n };\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n const { evolve, getInitialState, read } = options;\n\n const result = await this.readStream<EventType>(streamName, read);\n\n if (!result) return null;\n\n const events = result?.events ?? [];\n\n return {\n currentStreamVersion: BigInt(events.length),\n state: events.reduce(evolve, getInitialState()),\n };\n },\n\n readStream: <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<ReadStreamResult<EventType>> => {\n const events = streams.get(streamName);\n const currentStreamVersion = events ? BigInt(events.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const from = Number(options && 'from' in options ? options.from : 0);\n const to = Number(\n options && 'to' in options\n ? options.to\n : options && 'maxCount' in options && options.maxCount\n ? options.from + options.maxCount\n : events?.length ?? 1,\n );\n\n const resultEvents =\n events && events.length > 0\n ? events.map((e) => e.event as EventType).slice(from, to)\n : [];\n\n const result: ReadStreamResult<EventType> =\n events && events.length > 0\n ? {\n currentStreamVersion: currentStreamVersion!,\n events: resultEvents,\n }\n : null;\n\n return Promise.resolve(result);\n },\n\n appendToStream: <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n const currentEvents = streams.get(streamName) ?? [];\n const currentStreamVersion =\n currentEvents.length > 0 ? BigInt(currentEvents.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const eventEnvelopes: EventEnvelope[] = events.map((event, index) => {\n return {\n event,\n metadata: {\n eventId: randomUUID(),\n streamPosition: currentEvents.length + index + 1,\n logPosition: BigInt(getAllEventsCount() + index + 1),\n },\n };\n });\n\n const positionOfLastEventInTheStream = BigInt(\n eventEnvelopes.slice(-1)[0]!.metadata.streamPosition,\n );\n\n streams.set(streamName, [...currentEvents, ...eventEnvelopes]);\n\n const result: AppendToStreamResult = {\n nextExpectedStreamVersion: positionOfLastEventInTheStream,\n };\n\n return Promise.resolve(result);\n },\n };\n};\n"]}
|
package/dist/chunk-CTCSK4FW.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{e as i}from"./chunk-UI6CV7VB.mjs";import{randomUUID as g}from"crypto";var S=()=>{let m=new Map,E=()=>Array.from(m.values()).map(n=>n.length).reduce((n,e)=>n+e,0);return{async aggregateStream(n,e){let{evolve:t,getInitialState:r,read:o}=e,a=await this.readStream(n,o);if(!a)return null;let s=a?.events??[];return{currentStreamVersion:BigInt(s.length),state:s.reduce(t,r())}},readStream:(n,e)=>{let t=m.get(n),r=t?BigInt(t.length):void 0;i(r,e?.expectedStreamVersion);let o=Number(e&&"from"in e?e.from:0),a=Number(e&&"to"in e?e.to:e&&"maxCount"in e&&e.maxCount?e.from+e.maxCount:t?.length??1),s=t&&t.length>0?t.map(p=>p.event).slice(o,a):[],v=t&&t.length>0?{currentStreamVersion:r,events:s}:null;return Promise.resolve(v)},appendToStream:(n,e,t)=>{let r=m.get(n)??[],o=r.length>0?BigInt(r.length):void 0;i(o,t?.expectedStreamVersion);let a=e.map((p,l)=>({event:p,metadata:{eventId:g(),streamPosition:r.length+l+1,logPosition:BigInt(E()+l+1)}})),s=BigInt(a.slice(-1)[0].metadata.streamPosition);m.set(n,[...r,...a]);let v={nextExpectedStreamVersion:s};return Promise.resolve(v)}}};export{S as a};
|
|
2
|
-
//# sourceMappingURL=chunk-CTCSK4FW.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/eventStore/inMemoryEventStore.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport type { Event } from '../typing';\nimport {\n type AggregateStreamOptions,\n type AggregateStreamResult,\n type AppendToStreamOptions,\n type AppendToStreamResult,\n type EventStore,\n type ReadStreamOptions,\n type ReadStreamResult,\n} from './eventStore';\nimport { assertExpectedVersionMatchesCurrent } from './expectedVersion';\n\nexport type EventMetadata = Readonly<{\n eventId: string;\n streamPosition: number;\n logPosition: bigint;\n}>;\n\nexport type EventEnvelope<E extends Event = Event> = {\n event: E;\n metadata: EventMetadata;\n};\n\nexport type EventHandler<E extends Event = Event> = (\n eventEnvelope: EventEnvelope<E>,\n) => void;\n\nexport const getInMemoryEventStore = (): EventStore => {\n const streams = new Map<string, EventEnvelope[]>();\n\n const getAllEventsCount = () => {\n return Array.from<EventEnvelope[]>(streams.values())\n .map((s) => s.length)\n .reduce((p, c) => p + c, 0);\n };\n\n return {\n async aggregateStream<State, EventType extends Event>(\n streamName: string,\n options: AggregateStreamOptions<State, EventType>,\n ): Promise<AggregateStreamResult<State> | null> {\n const { evolve, getInitialState, read } = options;\n\n const result = await this.readStream<EventType>(streamName, read);\n\n if (!result) return null;\n\n const events = result?.events ?? [];\n\n return {\n currentStreamVersion: BigInt(events.length),\n state: events.reduce(evolve, getInitialState()),\n };\n },\n\n readStream: <EventType extends Event>(\n streamName: string,\n options?: ReadStreamOptions,\n ): Promise<ReadStreamResult<EventType>> => {\n const events = streams.get(streamName);\n const currentStreamVersion = events ? BigInt(events.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const from = Number(options && 'from' in options ? options.from : 0);\n const to = Number(\n options && 'to' in options\n ? options.to\n : options && 'maxCount' in options && options.maxCount\n ? options.from + options.maxCount\n : events?.length ?? 1,\n );\n\n const resultEvents =\n events && events.length > 0\n ? events.map((e) => e.event as EventType).slice(from, to)\n : [];\n\n const result: ReadStreamResult<EventType> =\n events && events.length > 0\n ? {\n currentStreamVersion: currentStreamVersion!,\n events: resultEvents,\n }\n : null;\n\n return Promise.resolve(result);\n },\n\n appendToStream: <EventType extends Event>(\n streamName: string,\n events: EventType[],\n options?: AppendToStreamOptions,\n ): Promise<AppendToStreamResult> => {\n const currentEvents = streams.get(streamName) ?? [];\n const currentStreamVersion =\n currentEvents.length > 0 ? BigInt(currentEvents.length) : undefined;\n\n assertExpectedVersionMatchesCurrent(\n currentStreamVersion,\n options?.expectedStreamVersion,\n );\n\n const eventEnvelopes: EventEnvelope[] = events.map((event, index) => {\n return {\n event,\n metadata: {\n eventId: randomUUID(),\n streamPosition: currentEvents.length + index + 1,\n logPosition: BigInt(getAllEventsCount() + index + 1),\n },\n };\n });\n\n const positionOfLastEventInTheStream = BigInt(\n eventEnvelopes.slice(-1)[0]!.metadata.streamPosition,\n );\n\n streams.set(streamName, [...currentEvents, ...eventEnvelopes]);\n\n const result: AppendToStreamResult = {\n nextExpectedStreamVersion: positionOfLastEventInTheStream,\n };\n\n return Promise.resolve(result);\n },\n };\n};\n"],"mappings":"yCAAA,OAAS,cAAAA,MAAkB,SA4BpB,IAAMC,EAAwB,IAAkB,CACrD,IAAMC,EAAU,IAAI,IAEdC,EAAoB,IACjB,MAAM,KAAsBD,EAAQ,OAAO,CAAC,EAChD,IAAKE,GAAMA,EAAE,MAAM,EACnB,OAAO,CAACC,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EAG9B,MAAO,CACL,MAAM,gBACJC,EACAC,EAC8C,CAC9C,GAAM,CAAE,OAAAC,EAAQ,gBAAAC,EAAiB,KAAAC,CAAK,EAAIH,EAEpCI,EAAS,MAAM,KAAK,WAAsBL,EAAYI,CAAI,EAEhE,GAAI,CAACC,EAAQ,OAAO,KAEpB,IAAMC,EAASD,GAAQ,QAAU,CAAC,EAElC,MAAO,CACL,qBAAsB,OAAOC,EAAO,MAAM,EAC1C,MAAOA,EAAO,OAAOJ,EAAQC,EAAgB,CAAC,CAChD,CACF,EAEA,WAAY,CACVH,EACAC,IACyC,CACzC,IAAMK,EAASX,EAAQ,IAAIK,CAAU,EAC/BO,EAAuBD,EAAS,OAAOA,EAAO,MAAM,EAAI,OAE9DE,EACED,EACAN,GAAS,qBACX,EAEA,IAAMQ,EAAO,OAAOR,GAAW,SAAUA,EAAUA,EAAQ,KAAO,CAAC,EAC7DS,EAAK,OACTT,GAAW,OAAQA,EACfA,EAAQ,GACRA,GAAW,aAAcA,GAAWA,EAAQ,SAC1CA,EAAQ,KAAOA,EAAQ,SACvBK,GAAQ,QAAU,CAC1B,EAEMK,EACJL,GAAUA,EAAO,OAAS,EACtBA,EAAO,IAAKM,GAAMA,EAAE,KAAkB,EAAE,MAAMH,EAAMC,CAAE,EACtD,CAAC,EAEDL,EACJC,GAAUA,EAAO,OAAS,EACtB,CACE,qBAAsBC,EACtB,OAAQI,CACV,EACA,KAEN,OAAO,QAAQ,QAAQN,CAAM,CAC/B,EAEA,eAAgB,CACdL,EACAM,EACAL,IACkC,CAClC,IAAMY,EAAgBlB,EAAQ,IAAIK,CAAU,GAAK,CAAC,EAC5CO,EACJM,EAAc,OAAS,EAAI,OAAOA,EAAc,MAAM,EAAI,OAE5DL,EACED,EACAN,GAAS,qBACX,EAEA,IAAMa,EAAkCR,EAAO,IAAI,CAACS,EAAOC,KAClD,CACL,MAAAD,EACA,SAAU,CACR,QAASE,EAAW,EACpB,eAAgBJ,EAAc,OAASG,EAAQ,EAC/C,YAAa,OAAOpB,EAAkB,EAAIoB,EAAQ,CAAC,CACrD,CACF,EACD,EAEKE,EAAiC,OACrCJ,EAAe,MAAM,EAAE,EAAE,CAAC,EAAG,SAAS,cACxC,EAEAnB,EAAQ,IAAIK,EAAY,CAAC,GAAGa,EAAe,GAAGC,CAAc,CAAC,EAE7D,IAAMT,EAA+B,CACnC,0BAA2Ba,CAC7B,EAEA,OAAO,QAAQ,QAAQb,CAAM,CAC/B,CACF,CACF","names":["randomUUID","getInMemoryEventStore","streams","getAllEventsCount","s","p","c","streamName","options","evolve","getInitialState","read","result","events","currentStreamVersion","assertExpectedVersionMatchesCurrent","from","to","resultEvents","e","currentEvents","eventEnvelopes","event","index","randomUUID","positionOfLastEventInTheStream"]}
|
package/dist/chunk-JJHE2RKT.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as p,c as i}from"./chunk-UI6CV7VB.mjs";var x=(r,a,d=e=>e)=>async(e,c,V,n)=>{let s=d(c),S=await e.aggregateStream(s,{evolve:r,getInitialState:a,read:{expectedStreamVersion:n?.expectedStreamVersion??i}}),m=S?.state??a(),E=S?.currentStreamVersion,t=V(m),o=Array.isArray(t)?t:[t],u=n?.expectedStreamVersion??E??p;return{...await e.appendToStream(s,o,{expectedStreamVersion:u}),newState:o.reduce(r,m)}};export{x as a};
|
|
2
|
-
//# sourceMappingURL=chunk-JJHE2RKT.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commandHandling/handleCommand.ts"],"sourcesContent":["import {\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type EventStore,\n type ExpectedStreamVersion,\n} from '../eventStore';\nimport type { Event } from '../typing';\n\n// #region command-handler\nexport type CommandHandlerResult<\n State,\n StreamVersion = DefaultStreamVersionType,\n> = AppendToStreamResult<StreamVersion> & { newState: State };\n\nexport const CommandHandler =\n <State, StreamEvent extends Event, StreamVersion = DefaultStreamVersionType>(\n evolve: (state: State, event: StreamEvent) => State,\n getInitialState: () => State,\n mapToStreamId: (id: string) => string = (id) => id,\n ) =>\n async (\n eventStore: EventStore<StreamVersion>,\n id: string,\n handle: (state: State) => StreamEvent | StreamEvent[],\n options?: {\n expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;\n },\n ): Promise<CommandHandlerResult<State, StreamVersion>> => {\n const streamName = mapToStreamId(id);\n\n // 1. Aggregate the stream\n const aggregationResult = await eventStore.aggregateStream<\n State,\n StreamEvent\n >(streamName, {\n evolve,\n getInitialState,\n read: {\n // expected stream version is passed to fail fast\n // if stream is in the wrong state\n expectedStreamVersion:\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n },\n });\n\n // 2. Use the aggregate state or the initial one (when e.g. stream does not exist)\n const state = aggregationResult?.state ?? getInitialState();\n const currentStreamVersion = aggregationResult?.currentStreamVersion;\n\n // 3. Run business logic\n const result = handle(state);\n\n const newEvents = Array.isArray(result) ? result : [result];\n\n // Either use:\n // - provided expected stream version,\n // - current stream version got from stream aggregation,\n // - or expect stream not to exists otherwise.\n const expectedStreamVersion: ExpectedStreamVersion<StreamVersion> =\n options?.expectedStreamVersion ??\n currentStreamVersion ??\n STREAM_DOES_NOT_EXIST;\n\n // 4. Append result to the stream\n const appendResult = await eventStore.appendToStream(\n streamName,\n newEvents,\n {\n expectedStreamVersion,\n },\n );\n\n // 5. Return result with updated state\n return { ...appendResult, newState: newEvents.reduce(evolve, state) };\n };\n// #endregion command-handler\n"],"mappings":"gDAgBO,IAAMA,EACX,CACEC,EACAC,EACAC,EAAyCC,GAAOA,IAElD,MACEC,EACAD,EACAE,EACAC,IAGwD,CACxD,IAAMC,EAAaL,EAAcC,CAAE,EAG7BK,EAAoB,MAAMJ,EAAW,gBAGzCG,EAAY,CACZ,OAAAP,EACA,gBAAAC,EACA,KAAM,CAGJ,sBACEK,GAAS,uBAAyBG,CACtC,CACF,CAAC,EAGKC,EAAQF,GAAmB,OAASP,EAAgB,EACpDU,EAAuBH,GAAmB,qBAG1CI,EAASP,EAAOK,CAAK,EAErBG,EAAY,MAAM,QAAQD,CAAM,EAAIA,EAAS,CAACA,CAAM,EAMpDE,EACJR,GAAS,uBACTK,GACAI,EAYF,MAAO,CAAE,GATY,MAAMX,EAAW,eACpCG,EACAM,EACA,CACE,sBAAAC,CACF,CACF,EAG0B,SAAUD,EAAU,OAAOb,EAAQU,CAAK,CAAE,CACtE","names":["CommandHandler","evolve","getInitialState","mapToStreamId","id","eventStore","handle","options","streamName","aggregationResult","NO_CONCURRENCY_CHECK","state","currentStreamVersion","result","newEvents","expectedStreamVersion","STREAM_DOES_NOT_EXIST"]}
|
package/dist/chunk-O2ZUNWMO.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commandHandling/handleCommand.ts"],"names":["CommandHandler","evolve","getInitialState","mapToStreamId","id","eventStore","handle","options","streamName","aggregationResult","NO_CONCURRENCY_CHECK","state","currentStreamVersion","result","newEvents","expectedStreamVersion","STREAM_DOES_NOT_EXIST"],"mappings":"+CAgBO,IAAMA,EACX,CACEC,EACAC,EACAC,EAAyCC,GAAOA,IAElD,MACEC,EACAD,EACAE,EACAC,IAGwD,CACxD,IAAMC,EAAaL,EAAcC,CAAE,EAG7BK,EAAoB,MAAMJ,EAAW,gBAGzCG,EAAY,CACZ,OAAAP,EACA,gBAAAC,EACA,KAAM,CAGJ,sBACEK,GAAS,uBAAyBG,CACtC,CACF,CAAC,EAGKC,EAAQF,GAAmB,OAASP,EAAgB,EACpDU,EAAuBH,GAAmB,qBAG1CI,EAASP,EAAOK,CAAK,EAErBG,EAAY,MAAM,QAAQD,CAAM,EAAIA,EAAS,CAACA,CAAM,EAMpDE,EACJR,GAAS,uBACTK,GACAI,EAYF,MAAO,CAAE,GATY,MAAMX,EAAW,eACpCG,EACAM,EACA,CACE,sBAAAC,CACF,CACF,EAG0B,SAAUD,EAAU,OAAOb,EAAQU,CAAK,CAAE,CACtE","sourcesContent":["import {\n NO_CONCURRENCY_CHECK,\n STREAM_DOES_NOT_EXIST,\n type AppendToStreamResult,\n type DefaultStreamVersionType,\n type EventStore,\n type ExpectedStreamVersion,\n} from '../eventStore';\nimport type { Event } from '../typing';\n\n// #region command-handler\nexport type CommandHandlerResult<\n State,\n StreamVersion = DefaultStreamVersionType,\n> = AppendToStreamResult<StreamVersion> & { newState: State };\n\nexport const CommandHandler =\n <State, StreamEvent extends Event, StreamVersion = DefaultStreamVersionType>(\n evolve: (state: State, event: StreamEvent) => State,\n getInitialState: () => State,\n mapToStreamId: (id: string) => string = (id) => id,\n ) =>\n async (\n eventStore: EventStore<StreamVersion>,\n id: string,\n handle: (state: State) => StreamEvent | StreamEvent[],\n options?: {\n expectedStreamVersion?: ExpectedStreamVersion<StreamVersion>;\n },\n ): Promise<CommandHandlerResult<State, StreamVersion>> => {\n const streamName = mapToStreamId(id);\n\n // 1. Aggregate the stream\n const aggregationResult = await eventStore.aggregateStream<\n State,\n StreamEvent\n >(streamName, {\n evolve,\n getInitialState,\n read: {\n // expected stream version is passed to fail fast\n // if stream is in the wrong state\n expectedStreamVersion:\n options?.expectedStreamVersion ?? NO_CONCURRENCY_CHECK,\n },\n });\n\n // 2. Use the aggregate state or the initial one (when e.g. stream does not exist)\n const state = aggregationResult?.state ?? getInitialState();\n const currentStreamVersion = aggregationResult?.currentStreamVersion;\n\n // 3. Run business logic\n const result = handle(state);\n\n const newEvents = Array.isArray(result) ? result : [result];\n\n // Either use:\n // - provided expected stream version,\n // - current stream version got from stream aggregation,\n // - or expect stream not to exists otherwise.\n const expectedStreamVersion: ExpectedStreamVersion<StreamVersion> =\n options?.expectedStreamVersion ??\n currentStreamVersion ??\n STREAM_DOES_NOT_EXIST;\n\n // 4. Append result to the stream\n const appendResult = await eventStore.appendToStream(\n streamName,\n newEvents,\n {\n expectedStreamVersion,\n },\n );\n\n // 5. Return result with updated state\n return { ...appendResult, newState: newEvents.reduce(evolve, state) };\n };\n// #endregion command-handler\n"]}
|
package/dist/chunk-U3WA3VIW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkOYAO7QEPjs = require('./chunk-OYAO7QEP.js');var s=({decide:r,evolve:n,getInitialState:m},o=e=>e)=>async(e,a,i,d)=>_chunkOYAO7QEPjs.a.call(void 0, n,m,o)(e,a,p=>r(i,p),d);exports.a = s;
|
|
2
|
-
//# sourceMappingURL=chunk-U3WA3VIW.js.map
|
|
File without changes
|
|
File without changes
|