@twoabove/cue 0.4.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.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +410 -0
  3. package/dist/api/create.d.ts +3 -0
  4. package/dist/api/create.d.ts.map +1 -0
  5. package/dist/api/create.js +106 -0
  6. package/dist/api/define.d.ts +40 -0
  7. package/dist/api/define.d.ts.map +1 -0
  8. package/dist/api/define.js +61 -0
  9. package/dist/api/index.d.ts +5 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +7 -0
  12. package/dist/api/supervisor.d.ts +22 -0
  13. package/dist/api/supervisor.d.ts.map +1 -0
  14. package/dist/api/supervisor.js +39 -0
  15. package/dist/core/Evolution.d.ts +11 -0
  16. package/dist/core/Evolution.d.ts.map +1 -0
  17. package/dist/core/Evolution.js +29 -0
  18. package/dist/core/StateKernel.d.ts +35 -0
  19. package/dist/core/StateKernel.d.ts.map +1 -0
  20. package/dist/core/StateKernel.js +113 -0
  21. package/dist/errors/index.d.ts +22 -0
  22. package/dist/errors/index.d.ts.map +1 -0
  23. package/dist/errors/index.js +43 -0
  24. package/dist/index.d.ts +5 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +2 -0
  27. package/dist/persistence/adapters/inMemory.d.ts +21 -0
  28. package/dist/persistence/adapters/inMemory.d.ts.map +1 -0
  29. package/dist/persistence/adapters/inMemory.js +41 -0
  30. package/dist/persistence/types.d.ts +28 -0
  31. package/dist/persistence/types.d.ts.map +1 -0
  32. package/dist/persistence/types.js +1 -0
  33. package/dist/runtime/Entity.d.ts +42 -0
  34. package/dist/runtime/Entity.d.ts.map +1 -0
  35. package/dist/runtime/Entity.js +357 -0
  36. package/dist/runtime/EntityManager.d.ts +15 -0
  37. package/dist/runtime/EntityManager.d.ts.map +1 -0
  38. package/dist/runtime/EntityManager.js +46 -0
  39. package/dist/runtime/Mailbox.d.ts +5 -0
  40. package/dist/runtime/Mailbox.d.ts.map +1 -0
  41. package/dist/runtime/Mailbox.js +8 -0
  42. package/dist/runtime/Passivation.d.ts +12 -0
  43. package/dist/runtime/Passivation.d.ts.map +1 -0
  44. package/dist/runtime/Passivation.js +42 -0
  45. package/dist/runtime/Supervision.d.ts +4 -0
  46. package/dist/runtime/Supervision.d.ts.map +1 -0
  47. package/dist/runtime/Supervision.js +20 -0
  48. package/dist/serde/index.d.ts +7 -0
  49. package/dist/serde/index.d.ts.map +1 -0
  50. package/dist/serde/index.js +19 -0
  51. package/dist/types/internal.d.ts +10 -0
  52. package/dist/types/internal.d.ts.map +1 -0
  53. package/dist/types/internal.js +10 -0
  54. package/dist/types/public.d.ts +168 -0
  55. package/dist/types/public.d.ts.map +1 -0
  56. package/dist/types/public.js +1 -0
  57. package/dist/utils/clock.d.ts +5 -0
  58. package/dist/utils/clock.d.ts.map +1 -0
  59. package/dist/utils/clock.js +3 -0
  60. package/dist/utils/id.d.ts +2 -0
  61. package/dist/utils/id.d.ts.map +1 -0
  62. package/dist/utils/id.js +2 -0
  63. package/dist/utils/invariants.d.ts +2 -0
  64. package/dist/utils/invariants.d.ts.map +1 -0
  65. package/dist/utils/invariants.js +5 -0
  66. package/package.json +71 -0
@@ -0,0 +1,168 @@
1
+ import type { createDraft, Patch as ImmerPatch } from "immer";
2
+ import type { PersistenceAdapter } from "../persistence/types";
3
+ import type { _handlers, _initialStateFn, _messages, _name, _persistence, _state, _tag, _upcasters, _versions } from "./internal";
4
+ export type AnyHandler = (...args: any[]) => any;
5
+ export type Patch = readonly ImmerPatch[];
6
+ export type Draft<T> = T extends object ? ReturnType<typeof createDraft<T>> : never;
7
+ export interface HandlerContext {
8
+ self: {
9
+ id: string;
10
+ isFailed: boolean;
11
+ };
12
+ clock: {
13
+ now(): number;
14
+ };
15
+ meta: {
16
+ managerId: string;
17
+ defName: string;
18
+ };
19
+ }
20
+ type MessageDefinition<V extends "tell" | "ask" | "stream"> = {
21
+ verb: V;
22
+ payload: unknown[];
23
+ progress?: unknown;
24
+ return: unknown;
25
+ };
26
+ export type MessageMap = Record<string, MessageDefinition<"tell" | "ask" | "stream">>;
27
+ export type PayloadOf<F> = F extends (state: any, ...args: infer A) => unknown ? A extends [...infer P, HandlerContext] ? P : A : never;
28
+ export type CreateCommandMessage<THandler extends AnyHandler> = ReturnType<THandler> extends AsyncGenerator<infer TProgress, infer TReturn, unknown> ? {
29
+ verb: "stream";
30
+ payload: PayloadOf<THandler>;
31
+ progress: TProgress;
32
+ return: Awaited<TReturn>;
33
+ } : {
34
+ verb: "tell";
35
+ payload: PayloadOf<THandler>;
36
+ return: Awaited<ReturnType<THandler>>;
37
+ };
38
+ export type CreateQueryMessage<THandler extends AnyHandler> = {
39
+ verb: "ask";
40
+ payload: PayloadOf<THandler>;
41
+ return: Awaited<ReturnType<THandler>>;
42
+ };
43
+ export type CreateMessageMap<TCommands extends Record<string, AnyHandler>, TQueries extends Record<string, AnyHandler>> = {
44
+ [K in keyof TCommands]: CreateCommandMessage<TCommands[K]>;
45
+ } & {
46
+ [K in keyof TQueries]: CreateQueryMessage<TQueries[K]>;
47
+ };
48
+ export type EntityDefinition<TName extends string, TState, TMessages extends MessageMap> = {
49
+ readonly [_name]: TName;
50
+ readonly [_state]: TState;
51
+ readonly [_messages]: TMessages;
52
+ readonly [_tag]: "EntityDefinition";
53
+ };
54
+ export type AnyEntityDefinition = EntityDefinition<string, object, Record<string, never>> & InternalDefinitionFields;
55
+ export type HandlerEntry = {
56
+ type: "command";
57
+ fn: AnyHandler;
58
+ } | {
59
+ type: "stream";
60
+ fn: AnyHandler;
61
+ } | {
62
+ type: "query";
63
+ fn: AnyHandler;
64
+ };
65
+ export type InternalDefinitionFields<TState extends object = object> = {
66
+ readonly [_name]: string;
67
+ readonly [_state]: TState;
68
+ readonly [_messages]: MessageMap;
69
+ readonly [_tag]: "EntityDefinition";
70
+ readonly [_initialStateFn]: () => TState;
71
+ readonly [_upcasters]: ReadonlyArray<(prevState: any) => any>;
72
+ readonly [_handlers]: Record<string, HandlerEntry>;
73
+ readonly [_persistence]?: {
74
+ snapshotEvery?: number;
75
+ };
76
+ };
77
+ export type StateOf<TDef extends AnyEntityDefinition> = TDef[typeof _state];
78
+ export type MessagesOf<TDef extends AnyEntityDefinition> = TDef[typeof _messages];
79
+ export type SendProxy<TDef extends AnyEntityDefinition> = {
80
+ [K in keyof MessagesOf<TDef> as MessagesOf<TDef>[K] extends {
81
+ verb: "tell" | "stream";
82
+ } ? K : never]: (...args: MessagesOf<TDef>[K]["payload"]) => Promise<MessagesOf<TDef>[K]["return"]>;
83
+ };
84
+ export type ReadProxy<TDef extends AnyEntityDefinition> = {
85
+ [K in keyof MessagesOf<TDef> as MessagesOf<TDef>[K] extends {
86
+ verb: "ask";
87
+ } ? K : never]: (...args: MessagesOf<TDef>[K]["payload"]) => Promise<MessagesOf<TDef>[K]["return"]>;
88
+ };
89
+ export type StreamProxy<TDef extends AnyEntityDefinition> = {
90
+ [K in keyof MessagesOf<TDef> as MessagesOf<TDef>[K] extends {
91
+ verb: "stream";
92
+ } ? K : never]: (...args: MessagesOf<TDef>[K]["payload"]) => AsyncIterable<MessagesOf<TDef>[K]["progress"]>;
93
+ };
94
+ export type EntityRef<TDef extends AnyEntityDefinition> = {
95
+ readonly read: ReadProxy<TDef>;
96
+ readonly send: SendProxy<TDef>;
97
+ readonly stream: StreamProxy<TDef>;
98
+ snapshot(): Promise<{
99
+ state: StateOf<TDef>;
100
+ version: bigint;
101
+ }>;
102
+ stateAt(eventVersion: bigint): Promise<HistoryOf<TDef>>;
103
+ stop(): Promise<void>;
104
+ };
105
+ export type SupervisorStrategy = "resume" | "reset" | "stop";
106
+ export interface Supervisor {
107
+ strategy(state: unknown, error: Error): SupervisorStrategy;
108
+ }
109
+ export interface EntityMetrics {
110
+ onHydrate?: (id: string) => void;
111
+ onHydrateFallback?: (id: string, reason: string) => void;
112
+ onSnapshot?: (id: string, version: bigint) => void;
113
+ onEvict?: (id: string) => void;
114
+ onError?: (id: string, error: Error) => void;
115
+ onBeforeSnapshot?: (id: string, version: bigint) => void;
116
+ onAfterCommit?: (id: string, version: bigint, patch: Patch) => void;
117
+ }
118
+ export interface EntityManagerConfig<TDef extends AnyEntityDefinition> {
119
+ definition: TDef;
120
+ store?: PersistenceAdapter;
121
+ passivation?: {
122
+ idleAfter: number;
123
+ sweepInterval?: number;
124
+ };
125
+ supervisor?: Supervisor;
126
+ metrics?: EntityMetrics;
127
+ }
128
+ export interface EntityManager<TDef extends AnyEntityDefinition> {
129
+ get(id: string): EntityRef<TDef>;
130
+ stop(): Promise<void>;
131
+ }
132
+ /**
133
+ * Converts a tuple of state types into a discriminated union for type narrowing.
134
+ *
135
+ * BuildHistoryUnion<[A, B, C]> produces:
136
+ * | { schemaVersion: 1; state: A }
137
+ * | { schemaVersion: 2; state: B }
138
+ * | { schemaVersion: 3; state: C }
139
+ */
140
+ type BuildHistoryUnion<Versions extends object[], Counter extends unknown[] = [unknown]> = Versions extends [infer Head extends object, ...infer Tail extends object[]] ? {
141
+ schemaVersion: Counter["length"];
142
+ state: Head;
143
+ } | BuildHistoryUnion<Tail, [...Counter, unknown]> : never;
144
+ /**
145
+ * Extract the full history union from a definition.
146
+ * Enables type-safe temporal scrubbing with discriminated unions.
147
+ */
148
+ export type HistoryOf<TDef extends AnyEntityDefinition> = TDef extends {
149
+ readonly [_versions]: infer V extends object[];
150
+ } ? BuildHistoryUnion<V> : {
151
+ schemaVersion: number;
152
+ state: unknown;
153
+ };
154
+ /**
155
+ * Extract a specific schema version's state type from a definition.
156
+ *
157
+ * Usage:
158
+ * type CharacterV1 = VersionState<typeof Character, 1>;
159
+ */
160
+ export type VersionState<TDef extends AnyEntityDefinition, V extends number> = Extract<HistoryOf<TDef>, {
161
+ schemaVersion: V;
162
+ }>["state"];
163
+ /** The initial state shape (schema version 1). */
164
+ export type InitialState<TDef extends AnyEntityDefinition> = VersionState<TDef, 1>;
165
+ /** The current/latest state shape. Alias for StateOf. */
166
+ export type CurrentState<TDef extends AnyEntityDefinition> = StateOf<TDef>;
167
+ export {};
168
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AACjD,MAAM,MAAM,KAAK,GAAG,SAAS,UAAU,EAAE,CAAC;AAC1C,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACnC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,GACjC,KAAK,CAAC;AAEV,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACxC,KAAK,EAAE;QAAE,GAAG,IAAI,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAGD,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,QAAQ,IAAI;IAC5D,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAC7B,MAAM,EACN,iBAAiB,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,CAC7C,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAEnC,KAAK,EAAE,GAAG,EACV,GAAG,IAAI,EAAE,MAAM,CAAC,KACb,OAAO,GACR,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,EAAE,cAAc,CAAC,GACpC,CAAC,GACD,CAAC,GACH,KAAK,CAAC;AAEV,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,UAAU,IAC1D,UAAU,CAAC,QAAQ,CAAC,SAAS,cAAc,CACzC,MAAM,SAAS,EACf,MAAM,OAAO,EACb,OAAO,CACR,GACG;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;CACvC,CAAC;AAER,MAAM,MAAM,kBAAkB,CAAC,QAAQ,SAAS,UAAU,IAAI;IAC5D,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5C,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IACzC;KACD,CAAC,IAAI,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CAC3D,GAAG;KACD,CAAC,IAAI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACvD,CAAC;AAGF,MAAM,MAAM,gBAAgB,CAC1B,KAAK,SAAS,MAAM,EACpB,MAAM,EACN,SAAS,SAAS,UAAU,IAC1B;IACF,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAChD,MAAM,EACN,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB,GACC,wBAAwB,CAAC;AAE3B,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,wBAAwB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,IAAI;IACrE,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAEzC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC9D,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,IAAI,SAAS,mBAAmB,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,UAAU,CAAC,IAAI,SAAS,mBAAmB,IACrD,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;AAEzB,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,mBAAmB,IAAI;KACvD,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1D,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;KACzB,GACG,CAAC,GACD,KAAK,GAAG,CACV,GAAG,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KACpC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,mBAAmB,IAAI;KACvD,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GACvE,CAAC,GACD,KAAK,GAAG,CACV,GAAG,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KACpC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,mBAAmB,IAAI;KACzD,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1D,IAAI,EAAE,QAAQ,CAAC;KAChB,GACG,CAAC,GACD,KAAK,GAAG,CACV,GAAG,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KACpC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,mBAAmB,IAAI;IACxD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,kBAAkB,CAAC;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,mBAAmB,CAAC,IAAI,SAAS,mBAAmB;IACnE,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,WAAW,CAAC,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa,CAAC,IAAI,SAAS,mBAAmB;IAC7D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAID;;;;;;;GAOG;AACH,KAAK,iBAAiB,CACpB,QAAQ,SAAS,MAAM,EAAE,EACzB,OAAO,SAAS,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IACnC,QAAQ,SAAS,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE,GAAG,MAAM,IAAI,SAAS,MAAM,EAAE,CAAC,GAExE;IAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACjD,iBAAiB,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,GAClD,KAAK,CAAC;AAEV;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,mBAAmB,IAAI,IAAI,SAAS;IACrE,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,MAAM,EAAE,CAAC;CAChD,GACG,iBAAiB,CAAC,CAAC,CAAC,GACpB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,mBAAmB,EAChC,CAAC,SAAS,MAAM,IACd,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,aAAa,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAE5D,kDAAkD;AAClD,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,mBAAmB,IAAI,YAAY,CACvE,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface Clock {
2
+ now(): number;
3
+ }
4
+ export declare const WallClock: Clock;
5
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/utils/clock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,GAAG,IAAI,MAAM,CAAC;CACf;AAED,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const WallClock = {
2
+ now: () => Date.now(),
3
+ };
@@ -0,0 +1,2 @@
1
+ export declare const newId: () => string;
2
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,QAAO,MAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { randomUUID } from "node:crypto";
2
+ export const newId = () => randomUUID();
@@ -0,0 +1,2 @@
1
+ export declare function invariant(condition: unknown, message: string): asserts condition;
2
+ //# sourceMappingURL=invariants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../src/utils/invariants.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CACvB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAInB"}
@@ -0,0 +1,5 @@
1
+ export function invariant(condition, message) {
2
+ if (!condition) {
3
+ throw new Error(message);
4
+ }
5
+ }
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@twoabove/cue",
3
+ "private": false,
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "version": "0.4.2",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./errors": {
14
+ "types": "./dist/errors/index.d.ts",
15
+ "import": "./dist/errors/index.js"
16
+ },
17
+ "./persistence/adapters/inMemory": {
18
+ "types": "./dist/persistence/adapters/inMemory.d.ts",
19
+ "import": "./dist/persistence/adapters/inMemory.js"
20
+ },
21
+ "./types": {
22
+ "types": "./dist/types/public.d.ts",
23
+ "import": "./dist/types/public.js"
24
+ }
25
+ },
26
+ "description": "Durable stateful entities for TypeScript",
27
+ "keywords": [
28
+ "entity",
29
+ "stateful",
30
+ "durable",
31
+ "event-sourcing",
32
+ "typescript",
33
+ "persistence"
34
+ ],
35
+ "bugs": {
36
+ "url": "https://github.com/twoabove/cue/issues"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/twoabove/cue.git"
41
+ },
42
+ "author": "Seva Maltsev <me@seva.dev> (https://seva.dev)",
43
+ "files": [
44
+ "dist",
45
+ "README.md",
46
+ "LICENSE"
47
+ ],
48
+ "dependencies": {
49
+ "immer": "^10.2.0",
50
+ "superjson": "^2.2.3"
51
+ },
52
+ "scripts": {
53
+ "prepare": "bun run build",
54
+ "test:e2e": "sh ./scripts/e2e-test.sh",
55
+ "test": "vitest run --coverage",
56
+ "lint": "biome check",
57
+ "build": "tsc -p tsconfig.build.json",
58
+ "prepublishOnly": "bun run build"
59
+ },
60
+ "devDependencies": {
61
+ "@biomejs/biome": "2.3.1",
62
+ "@types/node": "^24.9.1",
63
+ "@types/pg": "^8.15.5",
64
+ "@vitest/coverage-v8": "^4.0.4",
65
+ "expect-type": "^1.2.2",
66
+ "pg": "^8.16.3",
67
+ "pg-mem": "^3.0.5",
68
+ "typescript": "^5.9.3",
69
+ "vitest": "^4.0.4"
70
+ }
71
+ }