@requence/event-sourcing 1.0.0 → 1.0.2
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/README.md +81 -0
- package/dist/{chunk-m07vf8q9.js → chunk-13wtyj2h.js} +26 -1
- package/dist/chunk-13wtyj2h.js.map +10 -0
- package/dist/{chunk-tkvj6x8k.js → chunk-6n3jfg84.js} +10 -10
- package/dist/{chunk-tkvj6x8k.js.map → chunk-6n3jfg84.js.map} +1 -1
- package/dist/{chunk-ncpk70p4.js → chunk-8ev7sb2v.js} +4 -4
- package/dist/{chunk-ncpk70p4.js.map → chunk-8ev7sb2v.js.map} +1 -1
- package/dist/{chunk-wmz6a1jk.js → chunk-8pchcyvm.js} +19 -12
- package/dist/chunk-8pchcyvm.js.map +10 -0
- package/dist/chunk-jd4q8fcf.js.map +1 -1
- package/dist/chunk-zf3x573k.js.map +1 -1
- package/dist/createAggregateRoot.js +5 -5
- package/dist/createCheckpointApi.d.ts +1 -1
- package/dist/createEventStore.d.ts +1 -1
- package/dist/createEventStore.js +4 -4
- package/dist/createProcessManager.d.ts +2 -0
- package/dist/createProcessManager.d.ts.map +1 -1
- package/dist/createProcessManager.js +1 -1
- package/dist/createProjection.js +2 -2
- package/dist/drizzle/index.js +7 -7
- package/dist/drizzle/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/memory/index.js +7 -7
- package/dist/memory/index.js.map +1 -1
- package/dist/tests/aggregateRoot.spec.d.ts +2 -0
- package/dist/tests/aggregateRoot.spec.d.ts.map +1 -0
- package/dist/tests/eventListener.spec.d.ts +2 -0
- package/dist/tests/eventListener.spec.d.ts.map +1 -0
- package/dist/tests/eventStore.spec.d.ts +2 -0
- package/dist/tests/eventStore.spec.d.ts.map +1 -0
- package/dist/tests/processManager.spec.d.ts +2 -0
- package/dist/tests/processManager.spec.d.ts.map +1 -0
- package/dist/tests/processManagerMultiInstance.spec.d.ts +2 -0
- package/dist/tests/processManagerMultiInstance.spec.d.ts.map +1 -0
- package/dist/tests/projection.spec.d.ts +2 -0
- package/dist/tests/projection.spec.d.ts.map +1 -0
- package/dist/tests/projectionProcessManager.spec.d.ts +2 -0
- package/dist/tests/projectionProcessManager.spec.d.ts.map +1 -0
- package/dist/tests/setup.d.ts +71 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/transaction.spec.d.ts +2 -0
- package/dist/tests/transaction.spec.d.ts.map +1 -0
- package/dist/utilityTypes.d.ts +72 -0
- package/dist/utilityTypes.d.ts.map +1 -0
- package/dist/utilityTypes.js +2 -0
- package/dist/{utilityTypes.d.js.map → utilityTypes.js.map} +1 -1
- package/package.json +19 -8
- package/src/createCheckpointApi.ts +1 -1
- package/src/createEventStore.ts +24 -16
- package/src/createProcessManager.ts +34 -0
- package/src/index.ts +1 -1
- package/src/tests/processManagerMultiInstance.spec.ts +214 -0
- package/src/{utilityTypes.d.ts → utilityTypes.ts} +4 -4
- package/dist/chunk-m07vf8q9.js.map +0 -10
- package/dist/chunk-wmz6a1jk.js.map +0 -10
- package/dist/utilityTypes.d.js +0 -2
|
@@ -16,6 +16,8 @@ type ProcessManagerAfterEffectHandlers<Events extends EventTemplate> = AfterEffe
|
|
|
16
16
|
export type InternalProcessManager = {
|
|
17
17
|
apply: (event: BaseOutputEvent) => Promise<void>;
|
|
18
18
|
applyAfter: (event: BaseOutputEvent) => Promise<void>;
|
|
19
|
+
beginSession: () => Promise<void>;
|
|
20
|
+
endSession: () => void;
|
|
19
21
|
setRelatedStreamEvents: (generateRelatedStreamEvents: (eventHandlers: EventHandlers<EventTemplate>) => StreamEvents[]) => void;
|
|
20
22
|
isReady(): Promise<void>;
|
|
21
23
|
beginRefresh(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createProcessManager.d.ts","sourceRoot":"","sources":["../src/createProcessManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"createProcessManager.d.ts","sourceRoot":"","sources":["../src/createProcessManager.ts"],"names":[],"mappings":"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"}
|
package/dist/createProjection.js
CHANGED
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
buildProjectionCreator,
|
|
3
3
|
getProjectionInfo,
|
|
4
4
|
isInsideProjection
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-8ev7sb2v.js";
|
|
6
|
+
import"./chunk-pmfzjavb.js";
|
|
6
7
|
import"./chunk-x90g388y.js";
|
|
7
8
|
import"./chunk-zf3x573k.js";
|
|
8
|
-
import"./chunk-pmfzjavb.js";
|
|
9
9
|
import"./chunk-qdczt68t.js";
|
|
10
10
|
export {
|
|
11
11
|
isInsideProjection,
|
package/dist/drizzle/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "../chunk-jd4q8fcf.js";
|
|
5
5
|
import {
|
|
6
6
|
createEventStore
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-8pchcyvm.js";
|
|
8
8
|
import"../chunk-24xjphpk.js";
|
|
9
9
|
import"../chunk-ty9bhdvx.js";
|
|
10
10
|
import {
|
|
@@ -17,22 +17,22 @@ import {
|
|
|
17
17
|
import"../chunk-gq80tgvf.js";
|
|
18
18
|
import {
|
|
19
19
|
createAggregateRoot
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-6n3jfg84.js";
|
|
21
21
|
import"../chunk-z388cd25.js";
|
|
22
|
-
import"../chunk-
|
|
23
|
-
import"../chunk-
|
|
22
|
+
import"../chunk-8ev7sb2v.js";
|
|
23
|
+
import"../chunk-13wtyj2h.js";
|
|
24
24
|
import {
|
|
25
25
|
extendTypes,
|
|
26
26
|
superjson
|
|
27
27
|
} from "../chunk-6q8mr1sg.js";
|
|
28
|
+
import"../chunk-pmfzjavb.js";
|
|
28
29
|
import"../chunk-x90g388y.js";
|
|
29
30
|
import"../chunk-zf3x573k.js";
|
|
30
31
|
import"../chunk-9psg50cb.js";
|
|
31
|
-
import"../chunk-tfy01fah.js";
|
|
32
|
-
import"../chunk-pmfzjavb.js";
|
|
33
32
|
import {
|
|
34
33
|
ConcurrencyError
|
|
35
34
|
} from "../chunk-qdczt68t.js";
|
|
35
|
+
import"../chunk-tfy01fah.js";
|
|
36
36
|
|
|
37
37
|
// src/drizzle/index.ts
|
|
38
38
|
import {
|
|
@@ -322,4 +322,4 @@ export {
|
|
|
322
322
|
createAggregateRoot
|
|
323
323
|
};
|
|
324
324
|
|
|
325
|
-
//# debugId=
|
|
325
|
+
//# debugId=66599957F0FA6B8764756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import {\n type SQL,\n and,\n asc,\n desc,\n eq,\n gt,\n inArray,\n lte,\n sql,\n} from 'drizzle-orm'\nimport type { NodePgDatabase } from 'drizzle-orm/node-postgres'\n\nimport type { AnyAggregateRoot } from '../createAggregateRoot.ts'\nimport {\n ConcurrencyError,\n createEventStore as createBaseEventStore,\n isStreamEvents,\n isStreamId,\n} from '../index.ts'\nimport {\n aggregateRootSnapshots,\n checkpoints,\n events,\n projectionAppliedEvents,\n projectionSnapshots,\n} from './postgres.ts'\nimport type {\n EventStore,\n EventStoreParamsWithAggregateRootSnapshots,\n EventsFromRoot,\n OnProgress,\n} from '../createEventStore.ts'\nimport { superjson } from '../superjson.ts'\nimport type {\n BaseOutputEvent,\n MaybePromise,\n OutputEvent,\n} from '../utilityTypes.js'\n\nexport { createAggregateRoot } from '../index.ts'\nexport { extendTypes } from '../superjson.ts'\n\nexport type OnEventsAppendend = (\n events: BaseOutputEvent[],\n) => MaybePromise<void>\n\ninterface DrizzleEventStoreParams<Root extends AnyAggregateRoot> {\n database: NodePgDatabase<any> | (() => NodePgDatabase<any>)\n aggregateRoots: Root[]\n autoInit?: boolean\n postProcessEvent?: EventStoreParamsWithAggregateRootSnapshots<Root>['postProcessEvent']\n onProjectionReplay?: OnProgress\n onProcessManagerRefresh?: OnProgress\n onEventsAppended?: OnEventsAppendend\n}\n\nfunction isPgUniqueViolation(\n err: unknown,\n): err is { cause: { code: string; constraint?: string } } {\n if (typeof err !== 'object' || err === null) {\n return false\n }\n\n const cause = (err as any).cause\n if (typeof cause !== 'object' || cause === null) {\n return false\n }\n\n if (cause.code !== '23505') {\n return false\n }\n\n return true\n}\n\nfunction createEventsQuery(database: NodePgDatabase<any>) {\n return database\n .select({\n position: events.position,\n type: events.type,\n schemaVersion: events.schemaVersion,\n payload: events.payload,\n streamId: events.streamId,\n streamType: events.streamType,\n streamVersion: events.streamVersion,\n createdAt: events.createdAt,\n actorId: events.actorId,\n correlationId: events.correlationId,\n causationId: events.causationId,\n metadata: events.metadata,\n })\n .from(events)\n .orderBy(asc(events.position))\n .$dynamic()\n}\n\ntype EventsQuery = ReturnType<typeof createEventsQuery>\n\nexport async function fetchEvents<E extends OutputEvent<any> = BaseOutputEvent>(\n database: NodePgDatabase<any>,\n modifyQuery: (query: EventsQuery, table: typeof events) => EventsQuery = (\n q,\n ) => q,\n) {\n const resolvedEvents = await modifyQuery(createEventsQuery(database), events)\n\n return resolvedEvents.map((resolvedEvent) => ({\n ...resolvedEvent,\n payload: superjson.parse(resolvedEvent.payload),\n metadata: superjson.deserialize(resolvedEvent.metadata),\n })) as E[]\n}\n\nexport function createEventStore<const Root extends AnyAggregateRoot>({\n database,\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n onEventsAppended,\n autoInit,\n}: DrizzleEventStoreParams<Root>): EventStore<\n EventsFromRoot<Root>,\n Root,\n true\n> {\n const db = () => (typeof database === 'function' ? database() : database)\n\n return createBaseEventStore({\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n autoInit,\n async *loadEvents(select, range) {\n const conditions = [] as SQL[]\n\n if (select) {\n const selects = Array.isArray(select) ? select : [select]\n const streamTypes = selects.map((select) => select.stream)\n const streamIds = selects\n .map((select) => (isStreamId(select) ? select.id : null))\n .filter(Boolean) as string[]\n const eventTypes = selects.flatMap((select) =>\n isStreamEvents(select) ? select.events : [],\n )\n conditions.push(inArray(events.streamType, streamTypes))\n\n if (streamIds.length > 0) {\n conditions.push(inArray(events.streamId, streamIds))\n }\n\n if (eventTypes.length > 0) {\n conditions.push(inArray(events.type, eventTypes))\n }\n }\n let lastPosition = 0\n\n if (range?.from) {\n lastPosition = range.from - 1\n }\n\n if (range?.to) {\n conditions.push(lte(events.position, range.to))\n }\n\n const chunkSize = 50\n\n while (true) {\n const resolvedEvents = await db()\n .select({\n position: events.position,\n type: events.type,\n schemaVersion: events.schemaVersion,\n payload: events.payload,\n streamId: events.streamId,\n streamType: events.streamType,\n streamVersion: events.streamVersion,\n createdAt: events.createdAt,\n actorId: events.actorId,\n correlationId: events.correlationId,\n causationId: events.causationId,\n metadata: events.metadata,\n })\n .from(events)\n .where(and(...conditions, gt(events.position, lastPosition)))\n .limit(chunkSize)\n .orderBy(asc(events.position))\n\n if (resolvedEvents.length === 0) {\n break\n }\n\n for (const resolvedEvent of resolvedEvents) {\n yield {\n ...resolvedEvent,\n payload: superjson.parse(resolvedEvent.payload),\n metadata: superjson.deserialize(resolvedEvent.metadata),\n }\n lastPosition = resolvedEvent.position\n }\n }\n },\n async appendEvents(streamId, newEvents, expectedVersion) {\n const mappedEvents = newEvents.map((event, index) => ({\n streamId: streamId.id,\n streamType: streamId.stream,\n streamVersion: expectedVersion + 1 + index,\n type: event.type,\n payload: superjson.stringify(event.payload),\n metadata: superjson.serialize(event.metadata),\n causationId: event.causationId,\n actorId: event.actorId,\n correlationId: event.correlationId,\n schemaVersion: event.schemaVersion,\n }))\n\n try {\n const persistedEvents = await db()\n .insert(events)\n .values(mappedEvents)\n .returning()\n\n const resolvedEvents = persistedEvents\n .map((persistendEvent) => ({\n ...persistendEvent,\n payload: superjson.parse(persistendEvent.payload),\n metadata: superjson.deserialize<\n Record<string, unknown> | undefined\n >(persistendEvent.metadata),\n }))\n .toSorted((eventA, eventB) => eventA.position - eventB.position)\n\n onEventsAppended?.(resolvedEvents)\n\n return resolvedEvents\n } catch (error) {\n if (isPgUniqueViolation(error)) {\n const [lastStreamEvent] = await db()\n .select({\n streamVersion: events.streamVersion,\n })\n .from(events)\n .where(\n and(\n eq(events.streamId, streamId.id),\n eq(events.streamType, streamId.stream),\n ),\n )\n .orderBy(desc(events.position))\n .limit(1)\n\n const currentVersion = lastStreamEvent?.streamVersion ?? 0\n throw new ConcurrencyError(streamId, expectedVersion, currentVersion)\n }\n throw error\n }\n },\n checkpoint: {\n async upsert(checkpoint) {\n await db()\n .insert(checkpoints)\n .values({\n lastEventPosition: checkpoint.lastEventPosition,\n name: checkpoint.name,\n type: checkpoint.type,\n metadata: superjson.stringify(checkpoint.metadata),\n })\n .onConflictDoUpdate({\n target: [checkpoints.type, checkpoints.name],\n set: {\n lastEventPosition: checkpoint.lastEventPosition,\n metadata: superjson.stringify(checkpoint.metadata),\n },\n })\n },\n async get(type, name) {\n const [checkpoint] = await db()\n .select({\n type: checkpoints.type,\n name: checkpoints.name,\n lastEventPosition: checkpoints.lastEventPosition,\n metadata: checkpoints.metadata,\n })\n .from(checkpoints)\n .where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)))\n\n if (!checkpoint) {\n return null\n }\n\n return {\n ...checkpoint,\n metadata: superjson.parse(checkpoint.metadata),\n }\n },\n async delete(type, name) {\n await db()\n .delete(checkpoints)\n .where(and(eq(checkpoints.type, type), eq(checkpoints.name, name)))\n },\n },\n\n projectionSnapshot: {\n async put(snapshot) {\n await db()\n .insert(projectionSnapshots)\n .values({\n lastEventPosition: snapshot.lastEventPosition,\n projectionId: snapshot.projectionId,\n projectionType: snapshot.projectionType,\n schemaVersion: snapshot.schemaVersion,\n state: superjson.stringify(snapshot.state),\n metadata: superjson.stringify(snapshot.metadata),\n })\n },\n async get(select) {\n const [snapshot] = await db()\n .select({\n projectionId: projectionSnapshots.projectionId,\n projectionType: projectionSnapshots.projectionType,\n state: projectionSnapshots.state,\n lastEventPosition: projectionSnapshots.lastEventPosition,\n schemaVersion: projectionSnapshots.schemaVersion,\n createdAt: projectionSnapshots.createdAt,\n metadata: projectionSnapshots.metadata,\n })\n .from(projectionSnapshots)\n .where(\n and(\n eq(projectionSnapshots.projectionId, select.id),\n eq(projectionSnapshots.projectionType, select.projection),\n ),\n )\n .orderBy(desc(projectionSnapshots.lastEventPosition))\n\n if (!snapshot) {\n return null\n }\n\n return {\n ...snapshot,\n state: superjson.parse(snapshot.state),\n metadata: super.parse(snapshot.metadata),\n }\n },\n async delete(target, fromPosition) {\n const conditions = [\n eq(projectionSnapshots.projectionType, target.projection),\n ]\n\n if (target.id) {\n conditions.push(eq(projectionSnapshots.projectionId, target.id))\n }\n\n if (fromPosition) {\n conditions.push(\n gt(projectionSnapshots.lastEventPosition, fromPosition),\n )\n }\n\n await db()\n .delete(projectionSnapshots)\n .where(and(...conditions))\n },\n async incrementAppliedCount(select) {\n const [applied] = await db()\n .insert(projectionAppliedEvents)\n .values({\n projectionId: select.id,\n projectionType: select.projection,\n appliedEvents: 1,\n })\n .onConflictDoUpdate({\n target: [\n projectionAppliedEvents.projectionId,\n projectionAppliedEvents.projectionType,\n ],\n set: {\n appliedEvents: sql`${projectionAppliedEvents.appliedEvents} + 1`,\n },\n })\n .returning({\n appliedEvents: projectionAppliedEvents.appliedEvents,\n })\n\n return applied.appliedEvents\n },\n },\n aggregateRootSnapshot: {\n async put(snapshot) {\n await db()\n .insert(aggregateRootSnapshots)\n .values({\n lastEventPosition: snapshot.lastEventPosition,\n schemaVersion: snapshot.schemaVersion,\n state: superjson.stringify(snapshot.state),\n streamId: snapshot.streamId,\n streamType: snapshot.streamType,\n streamVersion: snapshot.streamVersion,\n metadata: superjson.stringify(snapshot.metadata),\n })\n },\n async get(select) {\n const [snapshot] = await db()\n .select({\n streamId: aggregateRootSnapshots.streamId,\n streamType: aggregateRootSnapshots.streamType,\n streamVersion: aggregateRootSnapshots.streamVersion,\n schemaVersion: aggregateRootSnapshots.schemaVersion,\n state: aggregateRootSnapshots.state,\n createdAt: aggregateRootSnapshots.createdAt,\n lastEventPosition: aggregateRootSnapshots.lastEventPosition,\n metadata: aggregateRootSnapshots.metadata,\n })\n .from(aggregateRootSnapshots)\n .where(\n and(\n eq(aggregateRootSnapshots.streamId, select.id),\n eq(aggregateRootSnapshots.streamType, select.stream),\n ),\n )\n .orderBy(desc(aggregateRootSnapshots.streamVersion))\n\n if (!snapshot) {\n return null\n }\n\n return {\n ...snapshot,\n state: superjson.parse(snapshot.state),\n metadata: superjson.parse(snapshot.metadata),\n }\n },\n async delete(target, fromStreamVersion) {\n await db()\n .delete(aggregateRootSnapshots)\n .where(\n and(\n eq(aggregateRootSnapshots.streamId, target.id),\n eq(aggregateRootSnapshots.streamType, target.stream),\n gt(aggregateRootSnapshots.streamVersion, fromStreamVersion),\n ),\n )\n },\n },\n }) as any\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "66599957F0FA6B8764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Stream, StreamEvents, StreamId, StreamIdEvents } from './utilityTypes.
|
|
1
|
+
import type { Stream, StreamEvents, StreamId, StreamIdEvents } from './utilityTypes.ts';
|
|
2
2
|
export { createEventStore } from './createEventStore.ts';
|
|
3
3
|
export type { BaseOutputEvent as Event } from './utilityTypes.d.ts';
|
|
4
4
|
export { type Snapshot as ProjectionSnapshot, isInsideProjection, getProjectionInfo, } from './createProjection.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,cAAc,EACf,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,cAAc,EACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,eAAe,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EACL,KAAK,QAAQ,IAAI,kBAAkB,EACnC,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,OAAO,EACL,KAAK,QAAQ,IAAI,qBAAqB,EACtC,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,GACb,MAAM,IAAI,QAAQ,GAAG,cAAc,CAErC;AACD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,GACb,MAAM,IAAI,YAAY,GAAG,cAAc,CAEzC;AACD,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-jd4q8fcf.js";
|
|
5
5
|
import {
|
|
6
6
|
createEventStore
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-8pchcyvm.js";
|
|
8
8
|
import {
|
|
9
9
|
getEventListenerInfo,
|
|
10
10
|
isInsideEventListener
|
|
@@ -13,17 +13,18 @@ import"./chunk-ty9bhdvx.js";
|
|
|
13
13
|
import"./chunk-gq80tgvf.js";
|
|
14
14
|
import {
|
|
15
15
|
createAggregateRoot
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-6n3jfg84.js";
|
|
17
17
|
import"./chunk-z388cd25.js";
|
|
18
18
|
import {
|
|
19
19
|
getProjectionInfo,
|
|
20
20
|
isInsideProjection
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-8ev7sb2v.js";
|
|
22
22
|
import {
|
|
23
23
|
getProcessManagerInfo,
|
|
24
24
|
isInsideProcessManager
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-13wtyj2h.js";
|
|
26
26
|
import"./chunk-6q8mr1sg.js";
|
|
27
|
+
import"./chunk-pmfzjavb.js";
|
|
27
28
|
import {
|
|
28
29
|
skipReplay
|
|
29
30
|
} from "./chunk-x90g388y.js";
|
|
@@ -31,8 +32,6 @@ import"./chunk-zf3x573k.js";
|
|
|
31
32
|
import {
|
|
32
33
|
skipRefreshing
|
|
33
34
|
} from "./chunk-9psg50cb.js";
|
|
34
|
-
import"./chunk-tfy01fah.js";
|
|
35
|
-
import"./chunk-pmfzjavb.js";
|
|
36
35
|
import {
|
|
37
36
|
CommandError,
|
|
38
37
|
ConcurrencyError,
|
|
@@ -45,6 +44,7 @@ import {
|
|
|
45
44
|
ReplaySkipError,
|
|
46
45
|
ValidationError
|
|
47
46
|
} from "./chunk-qdczt68t.js";
|
|
47
|
+
import"./chunk-tfy01fah.js";
|
|
48
48
|
export {
|
|
49
49
|
skipReplay,
|
|
50
50
|
skipRefreshing,
|
|
@@ -70,4 +70,4 @@ export {
|
|
|
70
70
|
CommandError
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
//# debugId=
|
|
73
|
+
//# debugId=5B4FCC65AE37B9EF64756E2164756E21
|
package/dist/index.js.map
CHANGED
package/dist/memory/index.js
CHANGED
|
@@ -4,25 +4,25 @@ import {
|
|
|
4
4
|
} from "../chunk-jd4q8fcf.js";
|
|
5
5
|
import {
|
|
6
6
|
createEventStore
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-8pchcyvm.js";
|
|
8
8
|
import"../chunk-24xjphpk.js";
|
|
9
9
|
import"../chunk-ty9bhdvx.js";
|
|
10
10
|
import"../chunk-gq80tgvf.js";
|
|
11
11
|
import {
|
|
12
12
|
createAggregateRoot
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-6n3jfg84.js";
|
|
14
14
|
import"../chunk-z388cd25.js";
|
|
15
|
-
import"../chunk-
|
|
16
|
-
import"../chunk-
|
|
15
|
+
import"../chunk-8ev7sb2v.js";
|
|
16
|
+
import"../chunk-13wtyj2h.js";
|
|
17
17
|
import"../chunk-6q8mr1sg.js";
|
|
18
|
+
import"../chunk-pmfzjavb.js";
|
|
18
19
|
import"../chunk-x90g388y.js";
|
|
19
20
|
import"../chunk-zf3x573k.js";
|
|
20
21
|
import"../chunk-9psg50cb.js";
|
|
21
|
-
import"../chunk-tfy01fah.js";
|
|
22
|
-
import"../chunk-pmfzjavb.js";
|
|
23
22
|
import {
|
|
24
23
|
ConcurrencyError
|
|
25
24
|
} from "../chunk-qdczt68t.js";
|
|
25
|
+
import"../chunk-tfy01fah.js";
|
|
26
26
|
|
|
27
27
|
// src/memory/index.ts
|
|
28
28
|
function createEventStore2({
|
|
@@ -175,4 +175,4 @@ export {
|
|
|
175
175
|
createAggregateRoot
|
|
176
176
|
};
|
|
177
177
|
|
|
178
|
-
//# debugId=
|
|
178
|
+
//# debugId=94478E1EDE4A6DEF64756E2164756E21
|
package/dist/memory/index.js.map
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import type { AnyAggregateRoot } from '../createAggregateRoot.ts'\nimport type { Checkpoint } from '../createCheckpointApi.ts'\nimport {\n type AggregateRootSnapshot,\n ConcurrencyError,\n type Event,\n type ProjectionSnapshot,\n createEventStore as createBaseEventStore,\n isStreamEvents,\n isStreamId,\n} from '../index.ts'\nimport type {\n EventStore,\n EventStoreParamsWithAggregateRootSnapshots,\n EventsFromRoot,\n OnProgress,\n} from '../createEventStore.ts'\nimport type { BaseOutputEvent, MaybePromise } from '../utilityTypes.js'\n\nexport { createAggregateRoot } from '../index.ts'\n\nexport type OnEventsAppended = (\n events: BaseOutputEvent[],\n) => MaybePromise<void>\n\ninterface MemoryEventStoreParams<Root extends AnyAggregateRoot> {\n aggregateRoots: Root[]\n autoInit?: boolean\n postProcessEvent?: EventStoreParamsWithAggregateRootSnapshots<Root>['postProcessEvent']\n onProjectionReplay?: OnProgress\n onProcessManagerRefresh?: OnProgress\n onEventsAppended?: OnEventsAppended\n}\n\nexport function createEventStore<const Root extends AnyAggregateRoot>({\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n onEventsAppended,\n autoInit,\n}: MemoryEventStoreParams<Root>): EventStore<\n EventsFromRoot<Root>,\n Root,\n true\n> {\n const events: Event[] = []\n const checkpoints = new Set<Checkpoint>()\n const aggregateRootSnapshots = new Map<string, AggregateRootSnapshot>()\n const projectionSnapshots = new Set<ProjectionSnapshot>()\n const projectionAppliedCount = new Map<string, number>()\n\n return createBaseEventStore({\n aggregateRoots,\n postProcessEvent,\n onProjectionReplay,\n onProcessManagerRefresh,\n autoInit,\n\n async *loadEvents(select, range) {\n let streamTypes: string[] | null = null\n let streamIds: string[] | null = null\n let eventTypes: string[] | null = null\n\n if (select) {\n const selects = Array.isArray(select) ? select : [select]\n streamTypes = selects.map((select) => select.stream)\n streamIds = selects\n .map((select) => (isStreamId(select) ? select.id : null))\n .filter(Boolean) as string[]\n eventTypes = selects.flatMap((select) =>\n isStreamEvents(select) ? select.events : [],\n )\n }\n\n const filteredEvents = events.filter((event) => {\n if (streamTypes?.length && !streamTypes.includes(event.streamType)) {\n return false\n }\n\n if (streamIds?.length && !streamIds.includes(event.streamId)) {\n return false\n }\n\n if (eventTypes?.length && !eventTypes.includes(event.type)) {\n return false\n }\n\n if (range?.from && event.position < range.from) {\n return false\n }\n\n if (range?.to && event.position > range.to) {\n return false\n }\n\n return true\n })\n\n for (const event of filteredEvents) {\n yield event\n }\n },\n\n appendEvents({ id, stream }, newEvents, expectedVersion) {\n const lastEvent = events.findLast(\n (e) => e.streamId === id && e.streamType === stream,\n )\n\n const currentVersion = lastEvent?.streamVersion ?? 0\n\n if (currentVersion !== expectedVersion) {\n throw new ConcurrencyError(\n { id, stream },\n expectedVersion,\n currentVersion,\n )\n }\n\n const extendedEvents: Event[] = newEvents.map((event, index) => ({\n ...event,\n createdAt: new Date(),\n position: events.length + index,\n streamId: id,\n streamType: stream,\n streamVersion: expectedVersion + index + 1,\n }))\n\n events.push(...extendedEvents)\n onEventsAppended?.(extendedEvents)\n return extendedEvents\n },\n\n checkpoint: {\n get(type, name) {\n for (const checkpoint of checkpoints) {\n if (checkpoint.type === type && checkpoint.name === name) {\n return checkpoint\n }\n }\n },\n upsert(checkpoint) {\n let persisted: Checkpoint | undefined\n for (const c of checkpoints) {\n if (c.type === checkpoint.type && c.name === checkpoint.name) {\n persisted = c\n break\n }\n }\n\n if (persisted) {\n persisted.lastEventPosition = checkpoint.lastEventPosition\n persisted.metadata = checkpoint.metadata\n } else {\n checkpoints.add(checkpoint)\n }\n },\n delete(type, name) {\n for (const checkpoint of checkpoints) {\n if (checkpoint.type === type && checkpoint.name === name) {\n checkpoints.delete(checkpoint)\n }\n }\n },\n },\n\n projectionSnapshot: {\n put(snapshot) {\n projectionSnapshots.add(snapshot)\n },\n get(select) {\n return Array.from(projectionSnapshots)\n .toReversed()\n .find(\n (snapshot) =>\n snapshot.projectionId === select.id &&\n snapshot.projectionType === select.projection,\n )\n },\n delete(target, fromPosition) {\n for (const snapshot of projectionSnapshots) {\n if (target.id && snapshot.projectionId !== target.id) {\n continue\n }\n\n if (snapshot.projectionType !== target.projection) {\n continue\n }\n\n if (fromPosition && snapshot.lastEventPosition < fromPosition) {\n continue\n }\n\n projectionSnapshots.delete(snapshot)\n }\n },\n incrementAppliedCount(select) {\n const key = `${select.projection}-${select.id}`\n const nextCount = (projectionAppliedCount.get(key) ?? 0) + 1\n projectionAppliedCount.set(key, nextCount)\n return nextCount\n },\n },\n\n aggregateRootSnapshot: {\n put(snapshot) {\n aggregateRootSnapshots.set(\n `${snapshot.streamType}:${snapshot.streamId}`,\n snapshot,\n )\n },\n get(select) {\n return aggregateRootSnapshots.get(`${select.stream}:${select.id}`)\n },\n delete(target, fromStreamVersion) {\n const key = `${target.stream}:${target.id}`\n const snapshot = aggregateRootSnapshots.get(key)\n if (snapshot && snapshot.streamVersion > fromStreamVersion) {\n aggregateRootSnapshots.delete(key)\n }\n },\n },\n }) as any\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "94478E1EDE4A6DEF64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregateRoot.spec.d.ts","sourceRoot":"","sources":["../../src/tests/aggregateRoot.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventListener.spec.d.ts","sourceRoot":"","sources":["../../src/tests/eventListener.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventStore.spec.d.ts","sourceRoot":"","sources":["../../src/tests/eventStore.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processManager.spec.d.ts","sourceRoot":"","sources":["../../src/tests/processManager.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processManagerMultiInstance.spec.d.ts","sourceRoot":"","sources":["../../src/tests/processManagerMultiInstance.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.spec.d.ts","sourceRoot":"","sources":["../../src/tests/projection.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectionProcessManager.spec.d.ts","sourceRoot":"","sources":["../../src/tests/projectionProcessManager.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import type { AnyAggregateRoot } from '../createAggregateRoot.ts';
|
|
3
|
+
import { type Event } from '../index.ts';
|
|
4
|
+
import type { LockCreator } from '../lock.ts';
|
|
5
|
+
export declare function createUserAggregate(): Omit<import("../createAggregateRoot.ts").AggregateRootApi<"users", never, {
|
|
6
|
+
type: "UserCreated";
|
|
7
|
+
schema: z.ZodObject<{
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
version: 0;
|
|
11
|
+
} | {
|
|
12
|
+
type: "UserUpdated";
|
|
13
|
+
schema: z.ZodObject<{
|
|
14
|
+
age: z.ZodInt;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
version: 0;
|
|
17
|
+
} | {
|
|
18
|
+
type: "Test";
|
|
19
|
+
schema: z.ZodFunction<z.ZodTuple<readonly [z.ZodNumber], null>, z.ZodString>;
|
|
20
|
+
version: 0;
|
|
21
|
+
}, {
|
|
22
|
+
create(name: string): import("../wrappedEventBuilder.ts").WrappedEvent<import("../utilityTypes.ts").EventTemplate>;
|
|
23
|
+
update(age: number): import("../wrappedEventBuilder.ts").WrappedEvent<import("../utilityTypes.ts").EventTemplate>;
|
|
24
|
+
}, {
|
|
25
|
+
withEventHandlers: true;
|
|
26
|
+
withSnapshots: false;
|
|
27
|
+
withInitialState: true;
|
|
28
|
+
withCommands: true;
|
|
29
|
+
withEvents: true;
|
|
30
|
+
}>, import("../utilityTypes.ts").Keys<{
|
|
31
|
+
withEventHandlers: true;
|
|
32
|
+
withSnapshots: false;
|
|
33
|
+
withInitialState: true;
|
|
34
|
+
withCommands: true;
|
|
35
|
+
withEvents: true;
|
|
36
|
+
}>>;
|
|
37
|
+
export declare function setupEventStore<const Root extends AnyAggregateRoot>(aggregateRoot: Root | Root[], options?: {
|
|
38
|
+
preloadEvents?: Event[];
|
|
39
|
+
autoInit?: boolean;
|
|
40
|
+
lock?: LockCreator;
|
|
41
|
+
}): {
|
|
42
|
+
eventStore: import("../createEventStore.ts").EventStore<import("../createEventStore.ts").EventsFromRoot<Root>, Root, true>;
|
|
43
|
+
pseudoCheckpointStore: Set<{
|
|
44
|
+
lastEventPosition: number;
|
|
45
|
+
type: "projection" | "processManager";
|
|
46
|
+
name: string;
|
|
47
|
+
metadata: Record<string, any>;
|
|
48
|
+
}>;
|
|
49
|
+
pseudoEventStore: Event[];
|
|
50
|
+
pseudoAggregateRootSnapshotStore: Map<string, {
|
|
51
|
+
streamId: string;
|
|
52
|
+
schemaVersion: number;
|
|
53
|
+
state: unknown;
|
|
54
|
+
createdAt: Date;
|
|
55
|
+
streamVersion: number;
|
|
56
|
+
streamType: string;
|
|
57
|
+
lastEventPosition: number;
|
|
58
|
+
metadata?: Record<string, unknown> | undefined;
|
|
59
|
+
}>;
|
|
60
|
+
pseudoProjectionSnapshotStore: Set<{
|
|
61
|
+
projectionId: string;
|
|
62
|
+
projectionType: string;
|
|
63
|
+
lastEventPosition: number;
|
|
64
|
+
state: unknown;
|
|
65
|
+
schemaVersion: number;
|
|
66
|
+
createdAt: Date;
|
|
67
|
+
metadata?: Record<string, unknown> | undefined;
|
|
68
|
+
}>;
|
|
69
|
+
pseudoProjectionAppliedCount: Map<string, number>;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,OAAO,EAGL,KAAK,KAAK,EAMX,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;;iBAehB,MAAM;gBAGP,MAAM;;;;;;;;;;;;;IAIvB;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,IAAI,SAAS,gBAAgB,EACjE,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,EAC5B,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyL9E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.spec.d.ts","sourceRoot":"","sources":["../../src/tests/transaction.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type z from 'zod/v4';
|
|
2
|
+
export type Prettify<T> = {
|
|
3
|
+
[K in keyof T]: T[K];
|
|
4
|
+
} & {};
|
|
5
|
+
export interface Stream {
|
|
6
|
+
stream: string;
|
|
7
|
+
}
|
|
8
|
+
export interface StreamEvents extends Stream {
|
|
9
|
+
events: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface StreamId extends Stream {
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface StreamIdEvents extends StreamEvents {
|
|
15
|
+
id: string;
|
|
16
|
+
}
|
|
17
|
+
export type BaseInputEvent<Type extends string = string, Payload = unknown> = {
|
|
18
|
+
type: Type;
|
|
19
|
+
payload: Payload;
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
causationId?: string;
|
|
22
|
+
correlationId?: string;
|
|
23
|
+
actorId?: string;
|
|
24
|
+
schemaVersion: number;
|
|
25
|
+
};
|
|
26
|
+
type LatestEvent<Event extends EventTemplate, LatestVersion = Max<Event['version']>, Schema = Event extends {
|
|
27
|
+
version: LatestVersion;
|
|
28
|
+
} ? Event['schema'] : never> = LatestVersion extends number ? BaseOutputEvent<Event['type'], LatestVersion, z.output<Schema>> : never;
|
|
29
|
+
export type AllEvents<Event extends EventTemplate> = {
|
|
30
|
+
[E in Event as E['type']]: LatestEvent<E>;
|
|
31
|
+
}[Event['type']];
|
|
32
|
+
export type BaseOutputEvent<Type extends string = string, Version extends number = number, Payload = unknown> = {
|
|
33
|
+
position: number;
|
|
34
|
+
type: Type;
|
|
35
|
+
schemaVersion: Version;
|
|
36
|
+
payload: Payload;
|
|
37
|
+
metadata?: Record<string, any>;
|
|
38
|
+
causationId?: string | null;
|
|
39
|
+
actorId?: string | null;
|
|
40
|
+
correlationId?: string | null;
|
|
41
|
+
streamId: string;
|
|
42
|
+
streamType: string;
|
|
43
|
+
streamVersion: number;
|
|
44
|
+
createdAt: Date;
|
|
45
|
+
};
|
|
46
|
+
export type EventTemplate = {
|
|
47
|
+
type: string;
|
|
48
|
+
schema: z.ZodType;
|
|
49
|
+
version: number;
|
|
50
|
+
};
|
|
51
|
+
export type OutputEvent<Event extends EventTemplate> = Prettify<{
|
|
52
|
+
[K in Event as K['version']]: BaseOutputEvent<K['type'], K['version'], z.output<K['schema']>>;
|
|
53
|
+
}[Event['version']]>;
|
|
54
|
+
export type OutputEvents<Event extends EventTemplate> = Prettify<{
|
|
55
|
+
[E in Event as E['type']]: OutputEvent<E>;
|
|
56
|
+
}[Event['type']]>;
|
|
57
|
+
export type Max<N extends number, A extends any[] = []> = [N] extends [
|
|
58
|
+
Partial<A>['length']
|
|
59
|
+
] ? A['length'] : Max<N, [0, ...A]>;
|
|
60
|
+
export type EventHandlers<Events extends EventTemplate, Helpers = never> = {
|
|
61
|
+
[K in Events as `on${K['type']}`]?: (...args: [Helpers] extends [never] ? [event: OutputEvent<K>] : [event: OutputEvent<K>, helpers: Helpers]) => MaybePromise<void>;
|
|
62
|
+
};
|
|
63
|
+
export type AfterEffectHandlers<Events extends EventTemplate, Helpers = never> = {
|
|
64
|
+
[K in Events as `after${K['type']}`]?: (...args: [Helpers] extends [never] ? [event: OutputEvent<K>] : [event: OutputEvent<K>, helpers: Helpers]) => MaybePromise<void>;
|
|
65
|
+
};
|
|
66
|
+
export type Merge<A, B> = Prettify<Omit<A, keyof B> & B>;
|
|
67
|
+
export type Keys<T> = {
|
|
68
|
+
[K in keyof T]: T[K] extends true ? K : never;
|
|
69
|
+
}[keyof T];
|
|
70
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=utilityTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilityTypes.d.ts","sourceRoot":"","sources":["../src/utilityTypes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@requence/event-sourcing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Event sourcing primitives — aggregate roots, projections, process managers, and event listeners",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -42,21 +42,22 @@
|
|
|
42
42
|
"files": [
|
|
43
43
|
"dist",
|
|
44
44
|
"src",
|
|
45
|
-
"LICENSE"
|
|
45
|
+
"LICENSE",
|
|
46
|
+
"README.md"
|
|
46
47
|
],
|
|
47
48
|
"scripts": {
|
|
48
49
|
"build": "bun run build.ts",
|
|
49
50
|
"test": "bun test",
|
|
50
51
|
"check-types": "tsc --noEmit",
|
|
51
|
-
"
|
|
52
|
+
"cs": "changeset",
|
|
52
53
|
"version": "changeset version",
|
|
53
54
|
"release": "bun run build && changeset publish",
|
|
54
55
|
"prepublishOnly": "bun run build"
|
|
55
56
|
},
|
|
56
57
|
"dependencies": {
|
|
57
58
|
"async-mutex": "^0.5.0",
|
|
58
|
-
"fast-equals": "^5.
|
|
59
|
-
"superjson": "^2.2.
|
|
59
|
+
"fast-equals": "^5.4.0",
|
|
60
|
+
"superjson": "^2.2.6"
|
|
60
61
|
},
|
|
61
62
|
"peerDependencies": {
|
|
62
63
|
"zod": "^4.3.6",
|
|
@@ -74,13 +75,23 @@
|
|
|
74
75
|
"devDependencies": {
|
|
75
76
|
"@changesets/changelog-github": "^0.6.0",
|
|
76
77
|
"@changesets/cli": "^2.31.0",
|
|
77
|
-
"@
|
|
78
|
+
"@eslint/js": "^10.0.1",
|
|
79
|
+
"@stylistic/eslint-plugin": "^5.10.0",
|
|
80
|
+
"@types/bun": "^1.3.13",
|
|
81
|
+
"@types/node": "^25.6.0",
|
|
78
82
|
"drizzle-orm": "^0.45.1",
|
|
79
|
-
"
|
|
80
|
-
"
|
|
83
|
+
"eslint": "^10.2.1",
|
|
84
|
+
"eslint-plugin-import": "^2.32.0",
|
|
85
|
+
"eslint-plugin-no-only-tests": "^3.3.0",
|
|
86
|
+
"globals": "^17.5.0",
|
|
87
|
+
"ioredis": "^5.10.1",
|
|
88
|
+
"prettier": "^3.8.3",
|
|
89
|
+
"typescript": "^6.0.3",
|
|
90
|
+
"typescript-eslint": "^8.59.1",
|
|
81
91
|
"zod": "^4.3.6"
|
|
82
92
|
},
|
|
83
93
|
"license": "MIT",
|
|
94
|
+
"homepage": "https://event-sourcing.docs.requence.cloud",
|
|
84
95
|
"repository": {
|
|
85
96
|
"type": "git",
|
|
86
97
|
"url": "git+https://github.com/requence/event-sourcing.git"
|