@livestore/common 0.4.0-dev.20 → 0.4.0-dev.22

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 (127) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +10 -0
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/adapter-types.d.ts +23 -0
  6. package/dist/adapter-types.d.ts.map +1 -1
  7. package/dist/adapter-types.js +27 -1
  8. package/dist/adapter-types.js.map +1 -1
  9. package/dist/devtools/devtools-messages-client-session.d.ts +42 -22
  10. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  11. package/dist/devtools/devtools-messages-client-session.js +12 -1
  12. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  13. package/dist/devtools/devtools-messages-common.d.ts +12 -6
  14. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  15. package/dist/devtools/devtools-messages-common.js +7 -2
  16. package/dist/devtools/devtools-messages-common.js.map +1 -1
  17. package/dist/devtools/devtools-messages-leader.d.ts +47 -25
  18. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  19. package/dist/devtools/devtools-messages-leader.js +13 -1
  20. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  21. package/dist/leader-thread/LeaderSyncProcessor.d.ts +33 -0
  22. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  23. package/dist/leader-thread/LeaderSyncProcessor.js +12 -12
  24. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  25. package/dist/leader-thread/eventlog.d.ts +6 -1
  26. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  27. package/dist/leader-thread/eventlog.js +59 -2
  28. package/dist/leader-thread/eventlog.js.map +1 -1
  29. package/dist/leader-thread/leader-worker-devtools.js +38 -6
  30. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  31. package/dist/leader-thread/make-leader-thread-layer.d.ts +4 -2
  32. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  33. package/dist/leader-thread/make-leader-thread-layer.js +5 -1
  34. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  35. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  36. package/dist/leader-thread/materialize-event.js +3 -0
  37. package/dist/leader-thread/materialize-event.js.map +1 -1
  38. package/dist/leader-thread/mod.d.ts +1 -0
  39. package/dist/leader-thread/mod.d.ts.map +1 -1
  40. package/dist/leader-thread/mod.js +1 -0
  41. package/dist/leader-thread/mod.js.map +1 -1
  42. package/dist/leader-thread/stream-events.d.ts +56 -0
  43. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  44. package/dist/leader-thread/stream-events.js +166 -0
  45. package/dist/leader-thread/stream-events.js.map +1 -0
  46. package/dist/leader-thread/types.d.ts +77 -1
  47. package/dist/leader-thread/types.d.ts.map +1 -1
  48. package/dist/leader-thread/types.js +13 -0
  49. package/dist/leader-thread/types.js.map +1 -1
  50. package/dist/otel.d.ts +2 -1
  51. package/dist/otel.d.ts.map +1 -1
  52. package/dist/otel.js +5 -0
  53. package/dist/otel.js.map +1 -1
  54. package/dist/schema/EventDef/define.d.ts +14 -0
  55. package/dist/schema/EventDef/define.d.ts.map +1 -1
  56. package/dist/schema/EventDef/define.js +1 -0
  57. package/dist/schema/EventDef/define.js.map +1 -1
  58. package/dist/schema/EventDef/deprecated.d.ts +99 -0
  59. package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
  60. package/dist/schema/EventDef/deprecated.js +144 -0
  61. package/dist/schema/EventDef/deprecated.js.map +1 -0
  62. package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
  63. package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
  64. package/dist/schema/EventDef/deprecated.test.js +95 -0
  65. package/dist/schema/EventDef/deprecated.test.js.map +1 -0
  66. package/dist/schema/EventDef/event-def.d.ts +4 -0
  67. package/dist/schema/EventDef/event-def.d.ts.map +1 -1
  68. package/dist/schema/EventDef/mod.d.ts +1 -0
  69. package/dist/schema/EventDef/mod.d.ts.map +1 -1
  70. package/dist/schema/EventDef/mod.js +1 -0
  71. package/dist/schema/EventDef/mod.js.map +1 -1
  72. package/dist/schema/LiveStoreEvent/client.d.ts +6 -6
  73. package/dist/schema/state/sqlite/client-document-def.d.ts +1 -0
  74. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  75. package/dist/schema/state/sqlite/client-document-def.js +17 -8
  76. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  77. package/dist/schema/state/sqlite/client-document-def.test.js +120 -1
  78. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  79. package/dist/schema/state/sqlite/column-def.test.js +2 -3
  80. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  81. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  82. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  83. package/dist/schema/state/sqlite/query-builder/api.d.ts +29 -12
  84. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  85. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  86. package/dist/schema/state/sqlite/query-builder/astToSql.js +71 -1
  87. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  88. package/dist/schema/state/sqlite/query-builder/impl.test.js +109 -1
  89. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  90. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  91. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  92. package/dist/sync/ClientSessionSyncProcessor.js +6 -2
  93. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  94. package/dist/version.d.ts +7 -1
  95. package/dist/version.d.ts.map +1 -1
  96. package/dist/version.js +8 -1
  97. package/dist/version.js.map +1 -1
  98. package/package.json +4 -4
  99. package/src/ClientSessionLeaderThreadProxy.ts +10 -0
  100. package/src/adapter-types.ts +30 -0
  101. package/src/devtools/devtools-messages-client-session.ts +12 -0
  102. package/src/devtools/devtools-messages-common.ts +7 -3
  103. package/src/devtools/devtools-messages-leader.ts +13 -0
  104. package/src/leader-thread/LeaderSyncProcessor.ts +116 -42
  105. package/src/leader-thread/eventlog.ts +80 -4
  106. package/src/leader-thread/leader-worker-devtools.ts +52 -6
  107. package/src/leader-thread/make-leader-thread-layer.ts +8 -0
  108. package/src/leader-thread/materialize-event.ts +4 -0
  109. package/src/leader-thread/mod.ts +1 -0
  110. package/src/leader-thread/stream-events.ts +201 -0
  111. package/src/leader-thread/types.ts +49 -1
  112. package/src/otel.ts +10 -0
  113. package/src/schema/EventDef/define.ts +16 -0
  114. package/src/schema/EventDef/deprecated.test.ts +128 -0
  115. package/src/schema/EventDef/deprecated.ts +175 -0
  116. package/src/schema/EventDef/event-def.ts +5 -0
  117. package/src/schema/EventDef/mod.ts +1 -0
  118. package/src/schema/state/sqlite/client-document-def.test.ts +140 -2
  119. package/src/schema/state/sqlite/client-document-def.ts +25 -26
  120. package/src/schema/state/sqlite/column-def.test.ts +2 -3
  121. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +10 -16
  122. package/src/schema/state/sqlite/query-builder/api.ts +31 -4
  123. package/src/schema/state/sqlite/query-builder/astToSql.ts +81 -1
  124. package/src/schema/state/sqlite/query-builder/impl.test.ts +141 -1
  125. package/src/schema/state/sqlite/table-def.ts +9 -8
  126. package/src/sync/ClientSessionSyncProcessor.ts +26 -13
  127. package/src/version.ts +9 -1
@@ -0,0 +1,166 @@
1
+ import { Chunk, Effect, Option, Queue, Stream } from '@livestore/utils/effect';
2
+ import { EventSequenceNumber } from "../schema/mod.js";
3
+ import * as Eventlog from "./eventlog.js";
4
+ /**
5
+ * Streams events for leader-thread adapters.
6
+ *
7
+ * Provides a continuous stream from the eventlog as the upstream head advances.
8
+ * When an until event is passed in the stream finalizes upon reaching it.
9
+ *
10
+ * The batch size is set to 100 by default as this was meassured to provide the
11
+ * best performance and 1000 as the upper limit.
12
+ *
13
+ * Adapters that call this helper:
14
+ * - `packages/@livestore/adapter-web/src/in-memory/in-memory-adapter.ts`
15
+ * - `packages/@livestore/adapter-web/src/web-worker/leader-worker/make-leader-worker.ts`
16
+ * - `packages/@livestore/adapter-node/src/client-session/adapter.ts`
17
+ * - `packages/@livestore/adapter-node/src/make-leader-worker.ts`
18
+ * - `packages/@livestore/adapter-cloudflare/src/make-adapter.ts`
19
+ *
20
+ * Each caller resolves dependencies inside the leader scope before invoking this helper,
21
+ * so the stream stays environment-agnostic and does not leak `LeaderThreadCtx` into runtime
22
+ * entry points such as `Store.eventsStream`.
23
+ *
24
+ * Test files:
25
+ * Unit: `tests/package-common/src/leader-thread/stream-events.test.ts`
26
+ * Integration: `packages/@livestore/livestore/src/store/store-eventstream.test.ts`
27
+ * Performance: `tests/perf-eventlog/tests/suites/event-streaming.test.ts`
28
+ *
29
+ * Optimization explorations
30
+ *
31
+ * In order to alleviate the occurence of many small queries when the syncState
32
+ * is sequentially progressing quickly we have explored some time-based batching
33
+ * approaches. It remains to be determined if and when the added complexity of
34
+ * these approaches are worth the benefit. They come with some drawbacks such as
35
+ * degraded time to first event or general performance degredation for larger
36
+ * query steps. These aspects can likely be mitigated with some more work but
37
+ * that is best assessed when we have a final implementation of event streaming
38
+ * with support for session and leader level streams.
39
+ *
40
+ * Fetch plans into a Sink
41
+ * https://gist.github.com/slashv/f1223689f2d1171d2eeb60a2823f4c7c
42
+ *
43
+ * Fetch plans into sink and decompose into windows
44
+ * https://gist.github.com/slashv/a8f55f50121c080937f42e44b4039ac8
45
+ *
46
+ * Mailbox and Latch approach (suggestion by Tim Smart)
47
+ * https://gist.github.com/slashv/d6b12395c85415bf0d3363372a1636c3
48
+ */
49
+ export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) => {
50
+ const initialCursor = options.since ?? EventSequenceNumber.Client.ROOT;
51
+ const batchSize = options.batchSize ?? 100;
52
+ return Stream.unwrapScoped(Effect.gen(function* () {
53
+ /**
54
+ * Single-element Queue allows suspending the event stream until head
55
+ * advances because Queue.take is a suspending effect. SubscriptionRef in
56
+ * comparrison lacks a primitive for suspending a stream until a new value
57
+ * is set and would require polling.
58
+ *
59
+ * The use of a sliding Queue here is useful since it ensures only the
60
+ * lastest head from syncState is the one present on the queue without the
61
+ * need for manual substitution.
62
+ */
63
+ const headQueue = yield* Queue.sliding(1);
64
+ /**
65
+ * We run a separate fiber which listens to changes in syncState and
66
+ * offer the latest head to the headQueue. Keeping track of the previous
67
+ * value is done to prevent syncState changes unrelated to the
68
+ * upstreamHead triggering empty queries.
69
+ *
70
+ * When we implement support for leader and session level streams
71
+ * this will need to be adapted to support the relevant value from
72
+ * syncState that we are interested in tracking.
73
+ */
74
+ let prevGlobalHead = -1;
75
+ yield* syncState.changes.pipe(Stream.map((state) => state.upstreamHead), Stream.filter((head) => {
76
+ if (head.global > prevGlobalHead) {
77
+ prevGlobalHead = head.global;
78
+ return true;
79
+ }
80
+ return false;
81
+ }), Stream.runForEach((head) => Queue.offer(headQueue, head)), Effect.forkScoped);
82
+ return Stream.paginateChunkEffect({ cursor: initialCursor, head: EventSequenceNumber.Client.ROOT }, ({ cursor, head }) => Effect.gen(function* () {
83
+ /**
84
+ * Early check guards agains:
85
+ * since === until : Prevent empty query
86
+ * since > until : Incorrectly inverted interval
87
+ */
88
+ if (options.until && EventSequenceNumber.Client.isGreaterThanOrEqual(cursor, options.until)) {
89
+ return [Chunk.empty(), Option.none()];
90
+ }
91
+ /**
92
+ * There are two scenarios where we take the next head from the headQueue:
93
+ *
94
+ * 1. We need to wait for the head to advance
95
+ * The Stream suspends until a new head is available on the headQueue
96
+ *
97
+ * 2. Head has advanced during itteration
98
+ * While itterating towards the lastest head taken from the headQueue
99
+ * in increments of batchSize it's possible the head could have
100
+ * advanced. This leads to a suboptimal amount of queries. Therefor we
101
+ * check if the headQueue is full which tells us that there's a new
102
+ * head available to take. Example:
103
+ *
104
+ * batchSize: 2
105
+ *
106
+ * --> head at: e3
107
+ * First query: e0 -> e2 (two events)
108
+ * --> head advances to: e4
109
+ * Second query: e2 -> e3 (one event but we could have taken 2)
110
+ * --> Take the new head of e4
111
+ * Third query: e3 -> e4 (unnecessary third query)
112
+ *
113
+ *
114
+ * To define the target, which will be used as the temporary until
115
+ * marker for the eventlog query, we select the lowest of three possible values:
116
+ *
117
+ * hardStop: A user supplied until marker
118
+ * current cursor + batchSize: A batchSize step towards the latest head from headQueue
119
+ * nextHead: The latest head from headQueue
120
+ */
121
+ const waitForHead = EventSequenceNumber.Client.isGreaterThanOrEqual(cursor, head);
122
+ const maybeHead = waitForHead
123
+ ? yield* Queue.take(headQueue).pipe(Effect.map(Option.some))
124
+ : yield* Queue.poll(headQueue);
125
+ const nextHead = Option.getOrElse(maybeHead, () => head);
126
+ const hardStop = options.until?.global ?? Number.POSITIVE_INFINITY;
127
+ const target = EventSequenceNumber.Client.Composite.make({
128
+ global: Math.min(hardStop, cursor.global + batchSize, nextHead.global),
129
+ client: EventSequenceNumber.Client.DEFAULT,
130
+ });
131
+ /**
132
+ * Eventlog.getEventsFromEventlog returns a Chunk from each
133
+ * query which is what we emit at each itteration.
134
+ */
135
+ const chunk = yield* Eventlog.getEventsFromEventlog({
136
+ dbEventlog,
137
+ options: {
138
+ ...options,
139
+ since: cursor,
140
+ until: target,
141
+ },
142
+ });
143
+ /**
144
+ * We construct the state for the following itteration of the stream
145
+ * loop by setting the current target as the since cursor and pass
146
+ * along the latest head.
147
+ *
148
+ * If we have the reached the user supplied until marker we signal the
149
+ * finalization of the stream by passing Option.none() instead.
150
+ */
151
+ const reachedUntil = options.until !== undefined && EventSequenceNumber.Client.isGreaterThanOrEqual(target, options.until);
152
+ const nextState = reachedUntil ? Option.none() : Option.some({ cursor: target, head: nextHead });
153
+ const spanAttributes = {
154
+ 'livestore.streamEvents.cursor.global': cursor.global,
155
+ 'livestore.streamEvents.target.global': target.global,
156
+ 'livestore.streamEvents.batchSize': batchSize,
157
+ 'livestore.streamEvents.waitedForHead': waitForHead,
158
+ };
159
+ return yield* Effect.succeed([
160
+ chunk,
161
+ nextState,
162
+ ]).pipe(Effect.withSpan('@livestore/common:streamEvents:segment', { attributes: spanAttributes }));
163
+ }));
164
+ }));
165
+ };
166
+ //# sourceMappingURL=stream-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-events.js","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { MeshNode } from '@livestore/webmesh';
4
4
  import type { MigrationsReport } from '../defs.ts';
5
5
  import type { MaterializeError } from '../errors.ts';
6
6
  import type { BootStatus, Devtools, LeaderAheadError, MakeSqliteDb, PersistenceInfo, SqliteDb, SyncBackend, UnknownError } from '../index.ts';
7
- import type { EventSequenceNumber, LiveStoreEvent, LiveStoreSchema } from '../schema/mod.ts';
7
+ import { EventSequenceNumber, type LiveStoreEvent, type LiveStoreSchema } from '../schema/mod.ts';
8
8
  import type * as SyncState from '../sync/syncstate.ts';
9
9
  import type { ShutdownChannel } from './shutdown-channel.ts';
10
10
  export type ShutdownState = 'running' | 'shutting-down';
@@ -98,6 +98,82 @@ export type InitialBlockingSyncContext = {
98
98
  processed: number;
99
99
  }) => Effect.Effect<void>;
100
100
  };
101
+ export declare const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
102
+ export declare const STREAM_EVENTS_BATCH_SIZE_MAX = 1000;
103
+ export declare const StreamEventsOptionsFields: {
104
+ readonly since: Schema.optional<Schema.Struct<{
105
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
106
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
107
+ rebaseGeneration: typeof Schema.Int;
108
+ }> & {
109
+ make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
110
+ }>;
111
+ readonly until: Schema.optional<Schema.Struct<{
112
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
113
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
114
+ rebaseGeneration: typeof Schema.Int;
115
+ }> & {
116
+ make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
117
+ }>;
118
+ readonly filter: Schema.optional<Schema.Array$<typeof Schema.String>>;
119
+ readonly clientIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
120
+ readonly sessionIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
121
+ readonly batchSize: Schema.optional<Schema.filter<typeof Schema.Int>>;
122
+ readonly includeClientOnly: Schema.optional<typeof Schema.Boolean>;
123
+ };
124
+ export declare const StreamEventsOptionsSchema: Schema.Struct<{
125
+ readonly since: Schema.optional<Schema.Struct<{
126
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
127
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
128
+ rebaseGeneration: typeof Schema.Int;
129
+ }> & {
130
+ make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
131
+ }>;
132
+ readonly until: Schema.optional<Schema.Struct<{
133
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
134
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
135
+ rebaseGeneration: typeof Schema.Int;
136
+ }> & {
137
+ make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
138
+ }>;
139
+ readonly filter: Schema.optional<Schema.Array$<typeof Schema.String>>;
140
+ readonly clientIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
141
+ readonly sessionIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
142
+ readonly batchSize: Schema.optional<Schema.filter<typeof Schema.Int>>;
143
+ readonly includeClientOnly: Schema.optional<typeof Schema.Boolean>;
144
+ }>;
145
+ export interface StreamEventsOptions {
146
+ /**
147
+ * Only include events after this logical timestamp (exclusive).
148
+ * Defaults to `EventSequenceNumber.Client.ROOT` when omitted.
149
+ */
150
+ since?: EventSequenceNumber.Client.Composite;
151
+ /**
152
+ * Only include events up to this logical timestamp (inclusive).
153
+ */
154
+ until?: EventSequenceNumber.Client.Composite;
155
+ /**
156
+ * Only include events of the given names.
157
+ */
158
+ filter?: ReadonlyArray<string>;
159
+ /**
160
+ * Only include events from specific client identifiers.
161
+ */
162
+ clientIds?: ReadonlyArray<string>;
163
+ /**
164
+ * Only include events from specific session identifiers.
165
+ */
166
+ sessionIds?: ReadonlyArray<string>;
167
+ /**
168
+ * Number of events to fetch in each batch when streaming from the eventlog.
169
+ * Defaults to 100.
170
+ */
171
+ batchSize?: number;
172
+ /**
173
+ * Include client-only events (i.e. events with a positive client sequence number).
174
+ */
175
+ includeClientOnly?: boolean;
176
+ }
101
177
  export interface LeaderSyncProcessor {
102
178
  /** Used by client sessions to subscribe to upstream sync state changes */
103
179
  pull: (args: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Context, Schema } from '@livestore/utils/effect';
2
+ import { EventSequenceNumber } from "../schema/mod.js";
2
3
  export const InitialSyncOptionsSkip = Schema.TaggedStruct('Skip', {});
3
4
  export const InitialSyncOptionsBlocking = Schema.TaggedStruct('Blocking', {
4
5
  timeout: Schema.Union(Schema.DurationFromMillis, Schema.Number),
@@ -6,4 +7,16 @@ export const InitialSyncOptionsBlocking = Schema.TaggedStruct('Blocking', {
6
7
  export const InitialSyncOptions = Schema.Union(InitialSyncOptionsSkip, InitialSyncOptionsBlocking);
7
8
  export class LeaderThreadCtx extends Context.Tag('LeaderThreadCtx')() {
8
9
  }
10
+ export const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
11
+ export const STREAM_EVENTS_BATCH_SIZE_MAX = 1_000;
12
+ export const StreamEventsOptionsFields = {
13
+ since: Schema.optional(EventSequenceNumber.Client.Composite),
14
+ until: Schema.optional(EventSequenceNumber.Client.Composite),
15
+ filter: Schema.optional(Schema.Array(Schema.String)),
16
+ clientIds: Schema.optional(Schema.Array(Schema.String)),
17
+ sessionIds: Schema.optional(Schema.Array(Schema.String)),
18
+ batchSize: Schema.optional(Schema.Int.pipe(Schema.between(1, STREAM_EVENTS_BATCH_SIZE_MAX))),
19
+ includeClientOnly: Schema.optional(Schema.Boolean),
20
+ };
21
+ export const StreamEventsOptionsSchema = Schema.Struct(StreamEventsOptionsFields);
9
22
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAqBzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE;IACxE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;CAChE,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAA;AA4ClG,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EA8BhE;CAAG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAezD,OAAO,EAAE,mBAAmB,EAA6C,MAAM,kBAAkB,CAAA;AAMjG,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE;IACxE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;CAChE,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAA;AA4ClG,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EA8BhE;CAAG;AAqBN,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAA;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAA;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5D,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5D,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAC5F,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;CAC1C,CAAA;AAEV,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA"}
package/dist/otel.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { Effect, OtelTracer } from '@livestore/utils/effect';
1
+ import { Effect, Layer, OtelTracer } from '@livestore/utils/effect';
2
2
  import * as otel from '@opentelemetry/api';
3
+ export declare const OtelLiveDummy: Layer.Layer<OtelTracer.OtelTracer>;
3
4
  export declare const provideOtel: ({ otelTracer, parentSpanContext }: {
4
5
  otelTracer?: otel.Tracer;
5
6
  parentSpanContext?: otel.Context;
@@ -1 +1 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAmB,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,eAAO,MAAM,WAAW,GACrB,mCAAmC;IAAE,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAAE,MACjG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAa/F,CAAA;AAEH,eAAO,MAAM,qBAAqB,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,MAGvD,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,mBACF,CAAA"}
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAQ3D,CAAA;AAEF,eAAO,MAAM,WAAW,GACrB,mCAAmC;IAAE,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAAE,MACjG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAa/F,CAAA;AAEH,eAAO,MAAM,qBAAqB,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,MAGvD,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,mBACF,CAAA"}
package/dist/otel.js CHANGED
@@ -1,6 +1,11 @@
1
1
  import { makeNoopTracer } from '@livestore/utils';
2
2
  import { Effect, identity, Layer, OtelTracer } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
+ export const OtelLiveDummy = Layer.suspend(() => {
5
+ const OtelTracerLive = Layer.succeed(OtelTracer.OtelTracer, makeNoopTracer());
6
+ const TracingLive = Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(OtelTracerLive));
7
+ return TracingLive;
8
+ });
4
9
  export const provideOtel = ({ otelTracer, parentSpanContext }) => (effect) => {
5
10
  const OtelTracerLive = Layer.succeed(OtelTracer.OtelTracer, otelTracer ?? makeNoopTracer());
6
11
  const TracingLive = Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(OtelTracerLive));
package/dist/otel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAkE,EAAE,EAAE,CACtG,CAAU,MAA8B,EAA0D,EAAE;IAClG,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,IAAI,cAAc,EAAE,CAAC,CAAA;IAE3F,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACvF,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CACU,CAAA;IAE9C,OAAO,MAAM,CAAC,IAAI,CAChB,iBAAiB;QACf,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAE,CAAC,CAAC;QACnG,CAAC,CAAC,QAAQ,EACZ,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAC5B,CAAA;AACH,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAe,EAAU,EAAE;IAC/D,MAAM,UAAU,GAAsC,IAAY,CAAC,SAAS,CAAA;IAC5E,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,IAAe,EAAuB,EAAE,CACjF,IAAY,CAAC,qBAA4C,CAAA"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAuC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;IAClF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA;IAE7E,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACvF,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CACnC,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAkE,EAAE,EAAE,CACtG,CAAU,MAA8B,EAA0D,EAAE;IAClG,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,IAAI,cAAc,EAAE,CAAC,CAAA;IAE3F,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACvF,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CACU,CAAA;IAE9C,OAAO,MAAM,CAAC,IAAI,CAChB,iBAAiB;QACf,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAE,CAAC,CAAC;QACnG,CAAC,CAAC,QAAQ,EACZ,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAC5B,CAAA;AACH,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAe,EAAU,EAAE;IAC/D,MAAM,UAAU,GAAsC,IAAY,CAAC,SAAS,CAAA;IAC5E,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,IAAe,EAAuB,EAAE,CACjF,IAAY,CAAC,qBAA4C,CAAA"}
@@ -60,6 +60,20 @@ export type DefineEventOptions<TTo, TDerived extends boolean = false> = {
60
60
  * @default false
61
61
  */
62
62
  derived?: TDerived;
63
+ /**
64
+ * Marks the entire event as deprecated with a reason message.
65
+ * When this event is committed, a warning will be logged.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * Events.synced({
70
+ * name: 'v1.TodoRenamed',
71
+ * schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
72
+ * deprecated: "Use 'v1.TodoUpdated' instead",
73
+ * })
74
+ * ```
75
+ */
76
+ deprecated?: string;
63
77
  };
64
78
  /**
65
79
  * Creates an event definition with full control over all options.
@@ -1 +1 @@
1
- {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAElE,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IACtE;;;OAGG;IACH,KAAK,CAAC,EAAE,CACN,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,aAAa,KACxB;QACH,MAAM,CAAC,EAAE;YACP,uCAAuC;YACvC,GAAG,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YACjC,+BAA+B;YAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;SACpC,CAAA;QACD;;;WAGG;QACH,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;KACtC,CAAA;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,EACzG,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,KACtC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAqC3C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAClE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAgD,CAAA;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EACtE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAA+C,CAAA"}
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAElE,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IACtE;;;OAGG;IACH,KAAK,CAAC,EAAE,CACN,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,aAAa,KACxB;QACH,MAAM,CAAC,EAAE;YACP,uCAAuC;YACvC,GAAG,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YACjC,+BAA+B;YAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;SACpC,CAAA;QACD;;;WAGG;QACH,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;KACtC,CAAA;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAA;IAElB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,EACzG,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,KACtC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAsC3C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAClE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAgD,CAAA;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EACtE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAA+C,CAAA"}
@@ -75,6 +75,7 @@ export const defineEvent = (args) => {
75
75
  }
76
76
  : undefined,
77
77
  derived: options?.derived ?? false,
78
+ deprecated: options?.deprecated,
78
79
  },
79
80
  });
80
81
  return makePartialEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Deprecation Annotations for Events
3
+ *
4
+ * This module provides utilities for marking event fields and entire events as deprecated.
5
+ * When a deprecated field is used or a deprecated event is committed, a warning is logged.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { Events } from '@livestore/livestore'
10
+ * import { Schema } from 'effect'
11
+ * import { deprecated } from '@livestore/common/schema'
12
+ *
13
+ * // Field-level deprecation
14
+ * const todoUpdated = Events.synced({
15
+ * name: 'v1.TodoUpdated',
16
+ * schema: Schema.Struct({
17
+ * id: Schema.String,
18
+ * title: Schema.optional(Schema.String).pipe(deprecated("Use 'text' instead")),
19
+ * text: Schema.optional(Schema.String),
20
+ * }),
21
+ * })
22
+ *
23
+ * // Event-level deprecation
24
+ * const todoRenamed = Events.synced({
25
+ * name: 'v1.TodoRenamed',
26
+ * schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
27
+ * deprecated: "Use 'v1.TodoUpdated' instead",
28
+ * })
29
+ * ```
30
+ * @module
31
+ */
32
+ import type { Schema } from '@livestore/utils/effect';
33
+ import { Effect, Option } from '@livestore/utils/effect';
34
+ import type { EventDef } from './event-def.ts';
35
+ /** Symbol used to mark schemas as deprecated. */
36
+ export declare const DeprecatedId: unique symbol;
37
+ /**
38
+ * Marks a schema field as deprecated with a reason message.
39
+ * When an event is committed with a deprecated field that has a value,
40
+ * a warning will be logged.
41
+ *
42
+ * Works with both Schema types and PropertySignatures (from Schema.optional).
43
+ *
44
+ * @param reason - Explanation of why this field is deprecated and what to use instead
45
+ * @returns A function that adds the deprecation annotation to the schema
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const schema = Schema.Struct({
50
+ * oldField: Schema.optional(Schema.String).pipe(deprecated("Use 'newField' instead")),
51
+ * newField: Schema.optional(Schema.String),
52
+ * })
53
+ * ```
54
+ */
55
+ export declare const deprecated: (reason: string) => <T extends {
56
+ annotations: (annotations: {
57
+ readonly [DeprecatedId]?: string;
58
+ }) => T;
59
+ }>(schema: T) => T;
60
+ /**
61
+ * Checks if a schema has a deprecation annotation.
62
+ *
63
+ * @param schema - The schema to check
64
+ * @returns The deprecation reason if deprecated, None otherwise
65
+ */
66
+ export declare const getDeprecatedReason: <A, I, R>(schema: Schema.Schema<A, I, R>) => Option.Option<string>;
67
+ /**
68
+ * Checks if a schema is deprecated.
69
+ *
70
+ * @param schema - The schema to check
71
+ * @returns true if the schema is deprecated
72
+ */
73
+ export declare const isDeprecated: <A, I, R>(schema: Schema.Schema<A, I, R>) => boolean;
74
+ /**
75
+ * Finds deprecated fields with values in the given event arguments.
76
+ * This walks through a Struct schema and checks each property for deprecation.
77
+ *
78
+ * @param schema - The event schema (expected to be a Struct)
79
+ * @param args - The event arguments
80
+ * @returns Array of objects containing field name and deprecation reason
81
+ */
82
+ export declare const findDeprecatedFieldsWithValues: (schema: Schema.Schema.All, args: Record<string, unknown>) => Array<{
83
+ field: string;
84
+ reason: string;
85
+ }>;
86
+ /**
87
+ * Logs deprecation warnings for an event using Effect.logWarning.
88
+ * Checks both event-level and field-level deprecation, with deduplication.
89
+ *
90
+ * @param eventDef - The event definition to check
91
+ * @param args - The event arguments
92
+ * @returns An Effect that logs warnings for any deprecations found
93
+ */
94
+ export declare const logDeprecationWarnings: (eventDef: EventDef.AnyWithoutFn, args: Record<string, unknown>) => Effect.Effect<void>;
95
+ /**
96
+ * Resets the deprecation warning state. Useful for testing.
97
+ */
98
+ export declare const resetDeprecationWarnings: () => void;
99
+ //# sourceMappingURL=deprecated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAa,MAAM,yBAAyB,CAAA;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,iDAAiD;AACjD,eAAO,MAAM,YAAY,eAAwD,CAAA;AAEjF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACpB,QAAQ,MAAM,MACd,CAAC,SAAS;IAAE,WAAW,EAAE,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,CAAA;CAAE,EAAE,QAAQ,CAAC,KAAG,CAClD,CAAA;AAElD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACvC,CAAA;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,OAC3B,CAAA;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,EACzB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA4BzC,CAAA;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,CAAC,YAAY,EAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CA2BjB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAO,IAG3C,CAAA"}