@synkro/core 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,6 +17,7 @@ Lightweight workflow and state machine orchestrator. Define event-driven workflo
17
17
  - **Workflow Cancellation** — Cancel running workflows programmatically
18
18
  - **Handler Unsubscribe** — Remove event handlers at runtime with `off()`
19
19
  - **Typed Payloads** — Generic `HandlerCtx<T>` for compile-time payload safety
20
+ - **Event Versioning** — Versioned event types with automatic base-event fanout
20
21
  - **Simple API** — Single `Synkro` class with minimal configuration
21
22
  - **TypeScript** — Full type support out of the box
22
23
 
@@ -274,6 +275,40 @@ schemas: {
274
275
  }
275
276
  ```
276
277
 
278
+ ### Event Versioning
279
+
280
+ Versioned event types follow the `base:event:vN` convention. When a versioned event is published, it is automatically delivered to both the versioned channel and the base channel:
281
+
282
+ ```ts
283
+ // Handler on the base event receives ALL versions (catch-all)
284
+ synkro.on("user:created", async (ctx) => {
285
+ console.log("Any version:", ctx.payload);
286
+ });
287
+
288
+ // Handler on a specific version receives only that version
289
+ synkro.on("user:created:v2", async (ctx) => {
290
+ console.log("V2 only:", ctx.payload);
291
+ });
292
+
293
+ // Publishing a versioned event delivers to both handlers above
294
+ await synkro.publish("user:created:v2", { name: "Alice", role: "admin" });
295
+
296
+ // Publishing an unversioned event delivers only to the base handler
297
+ await synkro.publish("user:created", { name: "Bob" });
298
+ ```
299
+
300
+ Utility exports for working with versioned event types:
301
+
302
+ ```ts
303
+ import { parseEventType, isVersionedEvent } from "@synkro/core";
304
+
305
+ parseEventType("user:created:v2");
306
+ // { base: "user:created", version: 2, raw: "user:created:v2" }
307
+
308
+ isVersionedEvent("user:created:v2"); // true
309
+ isVersionedEvent("user:created"); // false
310
+ ```
311
+
277
312
  ## API
278
313
 
279
314
  ### `Synkro.start(options): Promise<Synkro>`
@@ -306,7 +341,7 @@ synkro.on("StockUpdate", async (ctx) => {
306
341
 
307
342
  ### `synkro.publish(event, payload?, requestId?): Promise<string>`
308
343
 
309
- Publishes an event or starts a workflow. Returns a `requestId` for correlation. A UUID is generated by default, but you can provide your own ID.
344
+ Publishes an event or starts a workflow. Returns a `requestId` for correlation. A UUID is generated by default, but you can provide your own ID. When the event type is versioned (e.g., `user:created:v2`), the event is also delivered to the base channel (`user:created`).
310
345
 
311
346
  ```ts
312
347
  // Auto-generated UUID
@@ -314,6 +349,9 @@ const id = await synkro.publish("UserSignedUp", { email: "user@example.com" });
314
349
 
315
350
  // Custom request ID
316
351
  const id = await synkro.publish("UserSignedUp", { email: "user@example.com" }, "my-custom-id");
352
+
353
+ // Versioned event — delivers to both "user:created:v2" and "user:created" channels
354
+ const id = await synkro.publish("user:created:v2", { name: "Alice" });
317
355
  ```
318
356
 
319
357
  ### `ctx.publish(event, payload?, requestId?): Promise<string>`
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { Synkro } from "./synkro.js";
2
2
  export { Logger } from "./logger.js";
3
3
  export { OnEvent, OnWorkflowStep, executeHandler } from "./handlers/index.js";
4
+ export { parseEventType, isVersionedEvent } from "./versioning.js";
5
+ export type { ParsedEventType } from "./versioning.js";
4
6
  export type { ExecuteHandlerOptions, ExecuteHandlerResult } from "./handlers/index.js";
5
7
  export type { TransportManager } from "./transport/index.js";
6
8
  export type { DeadLetterItem, EventFilter, EventInfo, EventMetrics, LogFormat, HandlerCtx, HandlerFunction, PublishFunction, RetentionConfig, RetryBackoffStrategy, RetryConfig, SchemaValidator, SynkroEvent, SynkroIntrospection, SynkroOptions, SynkroWorkflow, SynkroWorkflowStep, WorkflowInfo, WorkflowStepInfo, } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { Synkro } from "./synkro.js";
2
2
  export { Logger } from "./logger.js";
3
3
  export { OnEvent, OnWorkflowStep, executeHandler } from "./handlers/index.js";
4
+ export { parseEventType, isVersionedEvent } from "./versioning.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.d.ts","sourceRoot":"","sources":["../src/synkro.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EAGf,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAKtE,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO;WASM,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAsD3D,QAAQ,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYtC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAI1H,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAIjD,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAoBZ,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIxF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAM9F,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,UAAU,IAAI,mBAAmB;IAO3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,OAAO,CAAC,qBAAqB;CA4B9B"}
1
+ {"version":3,"file":"synkro.d.ts","sourceRoot":"","sources":["../src/synkro.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EAGf,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAKtE,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO;WASM,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAsD3D,QAAQ,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYtC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAI1H,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAIjD,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IA2BZ,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIxF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAM9F,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,UAAU,IAAI,mBAAmB;IAO3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,OAAO,CAAC,qBAAqB;CA4B9B"}
package/dist/synkro.js CHANGED
@@ -3,6 +3,7 @@ import { HandlerRegistry, discoverEventHandlers, discoverWorkflowStepHandlers, }
3
3
  import { InMemoryManager, RedisManager } from "./transport/index.js";
4
4
  import { Logger, setDebug } from "./logger.js";
5
5
  import { WorkflowRegistry } from "./workflows/index.js";
6
+ import { parseEventType } from "./versioning.js";
6
7
  const DEFAULT_DRAIN_TIMEOUT = 5000;
7
8
  const DRAIN_POLL_INTERVAL = 50;
8
9
  export class Synkro {
@@ -90,7 +91,15 @@ export class Synkro {
90
91
  await this.workflowRegistry.startWorkflow(event, requestId, payload);
91
92
  return requestId;
92
93
  }
93
- await this.transport.publishMessage(event, JSON.stringify({ requestId, payload }));
94
+ const message = JSON.stringify({ requestId, payload });
95
+ await this.transport.publishMessage(event, message);
96
+ // Version fanout: if event is versioned (e.g. "user:created:v2"),
97
+ // also publish to the base channel so catch-all handlers receive it.
98
+ const parsed = parseEventType(event);
99
+ if (parsed.version !== null) {
100
+ const baseMessage = JSON.stringify({ requestId, payload, _version: parsed.version });
101
+ await this.transport.publishMessage(parsed.base, baseMessage);
102
+ }
94
103
  return requestId;
95
104
  }
96
105
  async getWorkflowState(requestId, workflowName) {
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.js","sourceRoot":"","sources":["../src/synkro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synkro.js","sourceRoot":"","sources":["../src/synkro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TransportManager } from "../transport.js";
2
+ export declare function transportContractTests(name: string, factory: () => TransportManager | Promise<TransportManager>): void;
3
+ //# sourceMappingURL=transport-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-contract.d.ts","sourceRoot":"","sources":["../../../src/transport/__tests__/transport-contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAC1D,IAAI,CAwON"}
@@ -0,0 +1,187 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ export function transportContractTests(name, factory) {
3
+ describe(`TransportManager contract: ${name}`, () => {
4
+ let transport;
5
+ beforeEach(async () => {
6
+ vi.useFakeTimers();
7
+ transport = await factory();
8
+ });
9
+ afterEach(async () => {
10
+ await transport.disconnect();
11
+ vi.useRealTimers();
12
+ });
13
+ // ───────────────────────────── Pub/Sub ─────────────────────────────
14
+ describe("publishMessage / subscribeToChannel", () => {
15
+ it("should deliver a published message to a subscriber", async () => {
16
+ const received = [];
17
+ transport.subscribeToChannel("ch1", (msg) => received.push(msg));
18
+ await transport.publishMessage("ch1", "hello");
19
+ await vi.advanceTimersByTimeAsync(0);
20
+ expect(received).toEqual(["hello"]);
21
+ });
22
+ it("should deliver to multiple subscribers on the same channel", async () => {
23
+ const a = [];
24
+ const b = [];
25
+ transport.subscribeToChannel("ch2", (msg) => a.push(msg));
26
+ transport.subscribeToChannel("ch2", (msg) => b.push(msg));
27
+ await transport.publishMessage("ch2", "ping");
28
+ await vi.advanceTimersByTimeAsync(0);
29
+ expect(a).toEqual(["ping"]);
30
+ expect(b).toEqual(["ping"]);
31
+ });
32
+ it("should not deliver to subscribers on a different channel", async () => {
33
+ const received = [];
34
+ transport.subscribeToChannel("ch-a", (msg) => received.push(msg));
35
+ await transport.publishMessage("ch-b", "nope");
36
+ await vi.advanceTimersByTimeAsync(0);
37
+ expect(received).toEqual([]);
38
+ });
39
+ it("should not deliver after publish when no subscribers exist", async () => {
40
+ // Should not throw
41
+ await transport.publishMessage("no-sub", "orphan");
42
+ });
43
+ });
44
+ // ───────────────────────────── Unsubscribe ─────────────────────────────
45
+ describe("unsubscribeFromChannel", () => {
46
+ it("should stop delivering messages after unsubscribe", async () => {
47
+ const received = [];
48
+ transport.subscribeToChannel("ch-unsub", (msg) => received.push(msg));
49
+ await transport.publishMessage("ch-unsub", "before");
50
+ await vi.advanceTimersByTimeAsync(0);
51
+ expect(received).toEqual(["before"]);
52
+ transport.unsubscribeFromChannel("ch-unsub");
53
+ await transport.publishMessage("ch-unsub", "after");
54
+ await vi.advanceTimersByTimeAsync(0);
55
+ expect(received).toEqual(["before"]);
56
+ });
57
+ });
58
+ // ───────────────────────────── Cache: basic ─────────────────────────────
59
+ describe("cache operations", () => {
60
+ it("should return null for a missing key", async () => {
61
+ expect(await transport.getCache("missing")).toBeNull();
62
+ });
63
+ it("should set and get a value", async () => {
64
+ await transport.setCache("k1", "v1");
65
+ expect(await transport.getCache("k1")).toBe("v1");
66
+ });
67
+ it("should overwrite an existing value", async () => {
68
+ await transport.setCache("k1", "old");
69
+ await transport.setCache("k1", "new");
70
+ expect(await transport.getCache("k1")).toBe("new");
71
+ });
72
+ it("should delete a cached value", async () => {
73
+ await transport.setCache("k1", "v1");
74
+ await transport.deleteCache("k1");
75
+ expect(await transport.getCache("k1")).toBeNull();
76
+ });
77
+ });
78
+ // ───────────────────────────── Cache: setCacheIfNotExists ─────────────────────────────
79
+ describe("setCacheIfNotExists", () => {
80
+ it("should return true and set value when key is missing", async () => {
81
+ const result = await transport.setCacheIfNotExists("nx", "first");
82
+ expect(result).toBe(true);
83
+ expect(await transport.getCache("nx")).toBe("first");
84
+ });
85
+ it("should return false and preserve value when key exists", async () => {
86
+ await transport.setCacheIfNotExists("nx2", "first");
87
+ const result = await transport.setCacheIfNotExists("nx2", "second");
88
+ expect(result).toBe(false);
89
+ expect(await transport.getCache("nx2")).toBe("first");
90
+ });
91
+ });
92
+ // ───────────────────────────── Cache: TTL ─────────────────────────────
93
+ describe("cache TTL", () => {
94
+ it("should return value before TTL expires", async () => {
95
+ await transport.setCache("ttl-key", "alive", 10);
96
+ await vi.advanceTimersByTimeAsync(5000);
97
+ expect(await transport.getCache("ttl-key")).toBe("alive");
98
+ });
99
+ it("should return null after TTL expires", async () => {
100
+ await transport.setCache("ttl-key", "ephemeral", 2);
101
+ await vi.advanceTimersByTimeAsync(2000);
102
+ expect(await transport.getCache("ttl-key")).toBeNull();
103
+ });
104
+ it("should expire setCacheIfNotExists keys after TTL", async () => {
105
+ await transport.setCacheIfNotExists("nx-ttl", "val", 1);
106
+ await vi.advanceTimersByTimeAsync(1000);
107
+ expect(await transport.getCache("nx-ttl")).toBeNull();
108
+ // Should be settable again after expiry
109
+ const result = await transport.setCacheIfNotExists("nx-ttl", "new");
110
+ expect(result).toBe(true);
111
+ });
112
+ });
113
+ // ───────────────────────────── Increment ─────────────────────────────
114
+ describe("incrementCache", () => {
115
+ it("should return 1 when incrementing a missing key", async () => {
116
+ expect(await transport.incrementCache("counter")).toBe(1);
117
+ });
118
+ it("should increment on subsequent calls", async () => {
119
+ await transport.incrementCache("counter2");
120
+ await transport.incrementCache("counter2");
121
+ expect(await transport.incrementCache("counter2")).toBe(3);
122
+ });
123
+ it("should apply TTL when provided", async () => {
124
+ await transport.incrementCache("counter-ttl", 2);
125
+ await vi.advanceTimersByTimeAsync(2000);
126
+ expect(await transport.getCache("counter-ttl")).toBeNull();
127
+ });
128
+ });
129
+ // ───────────────────────────── Lists ─────────────────────────────
130
+ describe("list operations", () => {
131
+ it("should return empty array for missing list", async () => {
132
+ expect(await transport.getListRange("no-list", 0, -1)).toEqual([]);
133
+ });
134
+ it("should push and retrieve items in order", async () => {
135
+ await transport.pushToList("list1", "a");
136
+ await transport.pushToList("list1", "b");
137
+ await transport.pushToList("list1", "c");
138
+ expect(await transport.getListRange("list1", 0, -1)).toEqual(["a", "b", "c"]);
139
+ });
140
+ it("should support positive range indices", async () => {
141
+ await transport.pushToList("list2", "a");
142
+ await transport.pushToList("list2", "b");
143
+ await transport.pushToList("list2", "c");
144
+ expect(await transport.getListRange("list2", 0, 1)).toEqual(["a", "b"]);
145
+ });
146
+ it("should support negative stop index", async () => {
147
+ await transport.pushToList("list3", "a");
148
+ await transport.pushToList("list3", "b");
149
+ await transport.pushToList("list3", "c");
150
+ // 0 to -2 means first two elements (all except last)
151
+ expect(await transport.getListRange("list3", 0, -2)).toEqual(["a", "b"]);
152
+ });
153
+ });
154
+ // ───────────────────────────── deleteKey ─────────────────────────────
155
+ describe("deleteKey", () => {
156
+ it("should remove a list", async () => {
157
+ await transport.pushToList("del-list", "x");
158
+ await transport.deleteKey("del-list");
159
+ expect(await transport.getListRange("del-list", 0, -1)).toEqual([]);
160
+ });
161
+ it("should remove a cache entry", async () => {
162
+ await transport.setCache("del-cache", "x");
163
+ await transport.deleteKey("del-cache");
164
+ expect(await transport.getCache("del-cache")).toBeNull();
165
+ });
166
+ });
167
+ // ───────────────────────────── disconnect ─────────────────────────────
168
+ describe("disconnect", () => {
169
+ it("should clear all state after disconnect", async () => {
170
+ await transport.setCache("dc-key", "val");
171
+ await transport.pushToList("dc-list", "item");
172
+ transport.subscribeToChannel("dc-ch", () => { });
173
+ await transport.disconnect();
174
+ expect(await transport.getCache("dc-key")).toBeNull();
175
+ expect(await transport.getListRange("dc-list", 0, -1)).toEqual([]);
176
+ // Publish should not throw after disconnect
177
+ const received = [];
178
+ transport.subscribeToChannel("dc-ch", (msg) => received.push(msg));
179
+ await transport.publishMessage("dc-ch", "post-dc");
180
+ await vi.advanceTimersByTimeAsync(0);
181
+ // After disconnect + re-subscribe, should work fresh
182
+ expect(received).toEqual(["post-dc"]);
183
+ });
184
+ });
185
+ });
186
+ }
187
+ //# sourceMappingURL=transport-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-contract.js","sourceRoot":"","sources":["../../../src/transport/__tests__/transport-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIzE,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAA2D;IAE3D,QAAQ,CAAC,8BAA8B,IAAI,EAAE,EAAE,GAAG,EAAE;QAClD,IAAI,SAA2B,CAAC;QAEhC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,EAAE,CAAC,aAAa,EAAE,CAAC;YACnB,SAAS,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC7B,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,sEAAsE;QAEtE,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;YACnD,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEjE,MAAM,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAErC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,CAAC,GAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAa,EAAE,CAAC;gBACvB,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE1D,MAAM,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC9C,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAErC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAElE,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/C,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAErC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,mBAAmB;gBACnB,MAAM,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAE1E,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACtC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEtE,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACrD,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAErC,SAAS,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;gBAE7C,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;gBAC1C,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBAClD,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;gBAC5C,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrC,MAAM,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,yFAAyF;QAEzF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACtE,MAAM,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACpE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,yEAAyE;QAEzE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACzB,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACtD,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;gBAChE,MAAM,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAEtD,wCAAwC;gBACxC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,wEAAwE;QAExE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC9B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC/D,MAAM,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC9C,MAAM,SAAS,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oEAAoE;QAEpE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBAClD,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,qDAAqD;gBACrD,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,wEAAwE;QAExE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACzB,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;gBACpC,MAAM,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC5C,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;gBAC3C,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC3C,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACvC,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,yEAAyE;QAEzE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC9C,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEhD,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;gBAE7B,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACtD,MAAM,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAEnE,4CAA4C;gBAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnE,MAAM,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACnD,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBACrC,qDAAqD;gBACrD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ParsedEventType = {
2
+ base: string;
3
+ version: number | null;
4
+ raw: string;
5
+ };
6
+ export declare function parseEventType(eventType: string): ParsedEventType;
7
+ export declare function isVersionedEvent(eventType: string): boolean;
8
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAIF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAMjE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D"}
@@ -0,0 +1,12 @@
1
+ const VERSION_PATTERN = /^(.+):v(\d+)$/;
2
+ export function parseEventType(eventType) {
3
+ const match = eventType.match(VERSION_PATTERN);
4
+ if (match) {
5
+ return { base: match[1], version: parseInt(match[2], 10), raw: eventType };
6
+ }
7
+ return { base: eventType, version: null, raw: eventType };
8
+ }
9
+ export function isVersionedEvent(eventType) {
10
+ return VERSION_PATTERN.test(eventType);
11
+ }
12
+ //# sourceMappingURL=versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAMA,MAAM,eAAe,GAAG,eAAe,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synkro/core",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Lightweight workflow and state machine orchestrator powered by Redis. Define event-driven workflows via configuration or code.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",