@kairos-es/core 1.0.0-alpha.4 → 1.0.0-alpha.5

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 (113) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/AppendCondition.js +1 -3
  3. package/dist/cjs/AppendCondition.js.map +1 -1
  4. package/dist/cjs/AppendIsOwned.js +6 -6
  5. package/dist/cjs/AppendIsOwned.js.map +1 -1
  6. package/dist/cjs/ContractStore.js +2 -2
  7. package/dist/cjs/ContractStore.js.map +1 -1
  8. package/dist/cjs/DcbEventStore.js +1 -1
  9. package/dist/cjs/DcbEventStore.js.map +1 -1
  10. package/dist/cjs/Event.js +29 -13
  11. package/dist/cjs/Event.js.map +1 -1
  12. package/dist/cjs/Query.js +1 -1
  13. package/dist/cjs/Query.js.map +1 -1
  14. package/dist/cjs/SubscribeMachine.js +20 -22
  15. package/dist/cjs/SubscribeMachine.js.map +1 -1
  16. package/dist/cjs/inMemory.js +4 -4
  17. package/dist/cjs/inMemory.js.map +1 -1
  18. package/dist/cjs/retryOnConflict.js +4 -10
  19. package/dist/cjs/retryOnConflict.js.map +1 -1
  20. package/dist/cjs/testing.js +2 -2
  21. package/dist/cjs/testing.js.map +1 -1
  22. package/dist/{dts → dts-cjs}/AppendCondition.d.ts +5 -7
  23. package/dist/{dts → dts-cjs}/AppendCondition.d.ts.map +1 -1
  24. package/dist/{dts → dts-cjs}/AppendIsOwned.d.ts +6 -6
  25. package/dist/{dts → dts-cjs}/AppendIsOwned.d.ts.map +1 -1
  26. package/dist/{dts → dts-cjs}/ContractStore.d.ts +3 -2
  27. package/dist/dts-cjs/ContractStore.d.ts.map +1 -0
  28. package/dist/{dts → dts-cjs}/DcbEventStore.d.ts +2 -2
  29. package/dist/{dts → dts-cjs}/DcbEventStore.d.ts.map +1 -1
  30. package/dist/{dts → dts-cjs}/Event.d.ts +31 -20
  31. package/dist/dts-cjs/Event.d.ts.map +1 -0
  32. package/dist/{dts → dts-cjs}/Query.d.ts +5 -5
  33. package/dist/{dts → dts-cjs}/SubscribeMachine.d.ts +11 -15
  34. package/dist/dts-cjs/SubscribeMachine.d.ts.map +1 -0
  35. package/dist/{dts → dts-cjs}/inMemory.d.ts.map +1 -1
  36. package/dist/{dts → dts-cjs}/index.d.ts +1 -1
  37. package/dist/dts-cjs/package.json +3 -0
  38. package/dist/{dts → dts-cjs}/retryOnConflict.d.ts +1 -7
  39. package/dist/dts-cjs/retryOnConflict.d.ts.map +1 -0
  40. package/dist/{dts → dts-cjs}/testing.d.ts +1 -1
  41. package/dist/dts-esm/AppendCondition.d.ts +21 -0
  42. package/dist/dts-esm/AppendCondition.d.ts.map +1 -0
  43. package/dist/dts-esm/AppendIsOwned.d.ts +78 -0
  44. package/dist/dts-esm/AppendIsOwned.d.ts.map +1 -0
  45. package/dist/dts-esm/ContractStore.d.ts +62 -0
  46. package/dist/dts-esm/ContractStore.d.ts.map +1 -0
  47. package/dist/dts-esm/DcbEventStore.d.ts +64 -0
  48. package/dist/dts-esm/DcbEventStore.d.ts.map +1 -0
  49. package/dist/dts-esm/Event.d.ts +174 -0
  50. package/dist/dts-esm/Event.d.ts.map +1 -0
  51. package/dist/dts-esm/Projection.d.ts +124 -0
  52. package/dist/dts-esm/Projection.d.ts.map +1 -0
  53. package/dist/dts-esm/Query.d.ts +180 -0
  54. package/dist/dts-esm/Query.d.ts.map +1 -0
  55. package/dist/dts-esm/SubscribeMachine.d.ts +175 -0
  56. package/dist/dts-esm/SubscribeMachine.d.ts.map +1 -0
  57. package/dist/dts-esm/errors.d.ts +17 -0
  58. package/dist/dts-esm/errors.d.ts.map +1 -0
  59. package/dist/dts-esm/inMemory.d.ts +76 -0
  60. package/dist/dts-esm/inMemory.d.ts.map +1 -0
  61. package/dist/dts-esm/index.d.ts +40 -0
  62. package/dist/dts-esm/index.d.ts.map +1 -0
  63. package/dist/dts-esm/package.json +3 -0
  64. package/dist/dts-esm/retryOnConflict.d.ts +64 -0
  65. package/dist/dts-esm/retryOnConflict.d.ts.map +1 -0
  66. package/dist/dts-esm/testing.d.ts +39 -0
  67. package/dist/dts-esm/testing.d.ts.map +1 -0
  68. package/dist/esm/AppendCondition.js +1 -3
  69. package/dist/esm/AppendCondition.js.map +1 -1
  70. package/dist/esm/AppendIsOwned.js +6 -6
  71. package/dist/esm/AppendIsOwned.js.map +1 -1
  72. package/dist/esm/ContractStore.js +2 -2
  73. package/dist/esm/ContractStore.js.map +1 -1
  74. package/dist/esm/DcbEventStore.js +1 -1
  75. package/dist/esm/DcbEventStore.js.map +1 -1
  76. package/dist/esm/Event.js +30 -14
  77. package/dist/esm/Event.js.map +1 -1
  78. package/dist/esm/Query.js +1 -1
  79. package/dist/esm/Query.js.map +1 -1
  80. package/dist/esm/SubscribeMachine.js +21 -23
  81. package/dist/esm/SubscribeMachine.js.map +1 -1
  82. package/dist/esm/inMemory.js +5 -5
  83. package/dist/esm/inMemory.js.map +1 -1
  84. package/dist/esm/index.js +1 -1
  85. package/dist/esm/retryOnConflict.js +4 -10
  86. package/dist/esm/retryOnConflict.js.map +1 -1
  87. package/dist/esm/testing.js +2 -2
  88. package/dist/esm/testing.js.map +1 -1
  89. package/package.json +21 -11
  90. package/src/AppendCondition.ts +1 -1
  91. package/src/AppendIsOwned.ts +7 -7
  92. package/src/ContractStore.ts +5 -4
  93. package/src/DcbEventStore.ts +3 -3
  94. package/src/Event.ts +49 -14
  95. package/src/Query.ts +1 -1
  96. package/src/SubscribeMachine.ts +38 -31
  97. package/src/inMemory.ts +6 -6
  98. package/src/index.ts +1 -1
  99. package/src/retryOnConflict.ts +6 -11
  100. package/src/testing.ts +2 -2
  101. package/testing/package.json +1 -1
  102. package/dist/dts/ContractStore.d.ts.map +0 -1
  103. package/dist/dts/Event.d.ts.map +0 -1
  104. package/dist/dts/SubscribeMachine.d.ts.map +0 -1
  105. package/dist/dts/retryOnConflict.d.ts.map +0 -1
  106. /package/dist/{dts → dts-cjs}/Projection.d.ts +0 -0
  107. /package/dist/{dts → dts-cjs}/Projection.d.ts.map +0 -0
  108. /package/dist/{dts → dts-cjs}/Query.d.ts.map +0 -0
  109. /package/dist/{dts → dts-cjs}/errors.d.ts +0 -0
  110. /package/dist/{dts → dts-cjs}/errors.d.ts.map +0 -0
  111. /package/dist/{dts → dts-cjs}/inMemory.d.ts +0 -0
  112. /package/dist/{dts → dts-cjs}/index.d.ts.map +0 -0
  113. /package/dist/{dts → dts-cjs}/testing.d.ts.map +0 -0
package/dist/esm/Event.js CHANGED
@@ -6,17 +6,34 @@
6
6
  * payloads into these bytes. Ordering is by `position` alone; `occurredAt` is
7
7
  * producer-supplied domain time and is informational only.
8
8
  */
9
- import { Schema } from 'effect';
9
+ import { BigInt as BigInt_, Effect, Option, Schema, SchemaIssue, SchemaTransformation } from 'effect';
10
10
  /**
11
11
  * A position in the single global event log: a branded, non-negative `bigint`.
12
12
  *
13
13
  * The log is 64-bit (`bigserial` in Postgres) and exceeds JS `number` safety at
14
14
  * 2^53, so positions are a `bigint`. They are compared, never arithmetic'd.
15
- * `Schema.BigInt` encodes to a decimal string (JSON-safe) and decodes to
15
+ * Encoded, a position is a decimal string (JSON-safe, `String(b)`); decoded, a
16
16
  * `bigint`. `0n` is the "before the first event" sentinel used by `after` and by
17
17
  * an empty store's head.
18
+ *
19
+ * The string-to-`bigint` step is hand-built rather than Effect 4's
20
+ * `Schema.BigIntFromString`, because that schema accepts only `^-?\d+$` and so
21
+ * refuses inputs the encoded side has always admitted — `" 5"`, `"+5"`,
22
+ * `"0x10"`. The decode here is the global `BigInt(s)` behind a blank-string
23
+ * refusal, which is `BigInt.fromString` and is exactly what Effect 3's
24
+ * `Schema.BigInt` ran, so a position string any earlier release decoded still
25
+ * decodes to the same value. The non-negative check then runs on the `bigint`,
26
+ * as it always did.
18
27
  */
19
- export const Position = /*#__PURE__*/Schema.BigInt.pipe(/*#__PURE__*/Schema.nonNegativeBigInt(), /*#__PURE__*/Schema.brand('Position'));
28
+ export const Position = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.decodeTo(Schema.BigInt, /*#__PURE__*/SchemaTransformation.transformEffect({
29
+ decode: (s, options) => Option.match(BigInt_.fromString(s), {
30
+ onNone: () => Effect.fail(new SchemaIssue.InvalidValue({
31
+ message: `Unable to decode ${JSON.stringify(s)} into a bigint`
32
+ }, s, options)),
33
+ onSome: Effect.succeed
34
+ }),
35
+ encode: b => Effect.succeed(String(b))
36
+ })), /*#__PURE__*/Schema.check(/*#__PURE__*/Schema.isGreaterThanOrEqualToBigInt(0n)), /*#__PURE__*/Schema.brand('Position'));
20
37
  /** The sentinel position meaning "before the first event". */
21
38
  export const ORIGIN = /*#__PURE__*/Position.make(0n);
22
39
  /**
@@ -25,9 +42,9 @@ export const ORIGIN = /*#__PURE__*/Position.make(0n);
25
42
  * event sourcing; a query matches an event when the event carries all of an
26
43
  * item's tags (superset test).
27
44
  */
28
- export const Tag = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.pattern(/^[^:]+:.+/, {
45
+ export const Tag = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.check(/*#__PURE__*/Schema.isPattern(/^[^:]+:.+/, {
29
46
  identifier: 'Tag'
30
- }), /*#__PURE__*/Schema.brand('Tag'));
47
+ })), /*#__PURE__*/Schema.brand('Tag'));
31
48
  export const tagIdentity = key => {
32
49
  if (key.length === 0 || key.includes(':')) {
33
50
  throw new Error(`tagIdentity: key must be non-empty and contain no ':' (got ${JSON.stringify(key)})`);
@@ -52,12 +69,12 @@ export const tagIdentity = key => {
52
69
  * error channel (`read` keeps `E = never`). Constructed at call sites with
53
70
  * `ReadLimit.make(n)`.
54
71
  */
55
- export const ReadLimit = /*#__PURE__*/Schema.Int.pipe(/*#__PURE__*/Schema.greaterThanOrEqualTo(0), /*#__PURE__*/Schema.brand('ReadLimit'));
72
+ export const ReadLimit = /*#__PURE__*/Schema.Int.pipe(/*#__PURE__*/Schema.check(/*#__PURE__*/Schema.isGreaterThanOrEqualTo(0)), /*#__PURE__*/Schema.brand('ReadLimit'));
56
73
  /**
57
74
  * An event type name, a branded non-empty string. Versioning is by convention
58
75
  * in the name (e.g. `course-registered.v2`); only non-emptiness is enforced.
59
76
  */
60
- export const EventType = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.nonEmptyString(), /*#__PURE__*/Schema.brand('EventType'));
77
+ export const EventType = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.check(/*#__PURE__*/Schema.isNonEmpty()), /*#__PURE__*/Schema.brand('EventType'));
61
78
  /**
62
79
  * An event's metadata: a flat bag of strings carrying the circumstances under
63
80
  * which the event was RECORDED, never anything the business asserts (ADR-0017).
@@ -107,10 +124,7 @@ export const EventType = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.non
107
124
  * alone: it would make an event the store accepted unreadable for ever, so a
108
125
  * value check belongs at write or nowhere.
109
126
  */
110
- export const Metadata = /*#__PURE__*/Schema.Record({
111
- key: Schema.String,
112
- value: Schema.String
113
- });
127
+ export const Metadata = /*#__PURE__*/Schema.Record(Schema.String, Schema.String);
114
128
  /**
115
129
  * An event as stored: an opaque payload plus its type, tags, a
116
130
  * producer-supplied `uuid`, producer-supplied `occurredAt` domain time, and its
@@ -118,6 +132,8 @@ export const Metadata = /*#__PURE__*/Schema.Record({
118
132
  *
119
133
  * `data` is `Uint8Array` (opaque bytes); the store does not interpret it.
120
134
  * `uuid` is producer-supplied to keep `core` deterministic (no RNG in core).
135
+ * It is checked for UUID SHAPE only (`isGUID`), not for a version nibble: a
136
+ * stricter check would refuse ids an existing log already holds.
121
137
  * `occurredAt` is informational only; ordering is by position alone.
122
138
  * `metadata` mirrors `tags` rather than `data`: REQUIRED, with an empty bag
123
139
  * legal. Required because an absent-versus-empty divergence between engines is
@@ -127,10 +143,10 @@ export const Metadata = /*#__PURE__*/Schema.Record({
127
143
  */
128
144
  export const DcbEvent = /*#__PURE__*/Schema.Struct({
129
145
  type: EventType,
130
- data: Schema.Uint8ArrayFromSelf,
146
+ data: Schema.Uint8Array,
131
147
  tags: /*#__PURE__*/Schema.Array(Tag),
132
- uuid: Schema.UUID,
133
- occurredAt: Schema.DateTimeUtc,
148
+ uuid: /*#__PURE__*/Schema.String.check(/*#__PURE__*/Schema.isGUID()),
149
+ occurredAt: Schema.DateTimeUtcFromString,
134
150
  metadata: Metadata
135
151
  });
136
152
  /** A persisted event: the event together with the position it was written at. */
@@ -1 +1 @@
1
- {"version":3,"file":"Event.js","names":["Schema","Position","BigInt","pipe","nonNegativeBigInt","brand","ORIGIN","make","Tag","String","pattern","identifier","tagIdentity","key","length","includes","Error","JSON","stringify","value","ReadLimit","Int","greaterThanOrEqualTo","EventType","nonEmptyString","Metadata","Record","DcbEvent","Struct","type","data","Uint8ArrayFromSelf","tags","Array","uuid","UUID","occurredAt","DateTimeUtc","metadata","SequencedEvent","event","position"],"sources":["../../src/Event.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;AAQA,SAASA,MAAM,QAAQ,QAAQ;AAE/B;;;;;;;;;AASA,OAAO,MAAMC,QAAQ,gBAAGD,MAAM,CAACE,MAAM,CAACC,IAAI,cACxCH,MAAM,CAACI,iBAAiB,EAAE,eAC1BJ,MAAM,CAACK,KAAK,CAAC,UAAU,CAAC,CACzB;AAGD;AACA,OAAO,MAAMC,MAAM,gBAAaL,QAAQ,CAACM,IAAI,CAAC,EAAE,CAAC;AAEjD;;;;;;AAMA,OAAO,MAAMC,GAAG,gBAAGR,MAAM,CAACS,MAAM,CAACN,IAAI,cACnCH,MAAM,CAACU,OAAO,CAAC,WAAW,EAAE;EAAEC,UAAU,EAAE;AAAK,CAAE,CAAC,eAClDX,MAAM,CAACK,KAAK,CAAC,KAAK,CAAC,CACpB;AA8BD,OAAO,MAAMO,WAAW,GAAIC,GAAW,IAAiB;EACtD,IAAIA,GAAG,CAACC,MAAM,KAAK,CAAC,IAAID,GAAG,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;IACzC,MAAM,IAAIC,KAAK,CACb,8DAA8DC,IAAI,CAACC,SAAS,CAACL,GAAG,CAAC,GAAG,CACrF;EACH;EACA,OAAO;IACLA,GAAG;IACHN,IAAI,EAAGY,KAAK,IAAI;MACd,IAAIA,KAAK,CAACL,MAAM,KAAK,CAAC,IAAIK,KAAK,CAACJ,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC7C,MAAM,IAAIC,KAAK,CACb,eAAeC,IAAI,CAACC,SAAS,CAACL,GAAG,CAAC,2DAA2DI,IAAI,CAACC,SAAS,CAACC,KAAK,CAAC,GAAG,CACtH;MACH;MACA,OAAOX,GAAG,CAACD,IAAI,CAAC,GAAGM,GAAG,IAAIM,KAAK,EAAE,CAAC;IACpC;GACD;AACH,CAAC;AAED;;;;;;;;;;AAUA,OAAO,MAAMC,SAAS,gBAAGpB,MAAM,CAACqB,GAAG,CAAClB,IAAI,cACtCH,MAAM,CAACsB,oBAAoB,CAAC,CAAC,CAAC,eAC9BtB,MAAM,CAACK,KAAK,CAAC,WAAW,CAAC,CAC1B;AAGD;;;;AAIA,OAAO,MAAMkB,SAAS,gBAAGvB,MAAM,CAACS,MAAM,CAACN,IAAI,cACzCH,MAAM,CAACwB,cAAc,EAAE,eACvBxB,MAAM,CAACK,KAAK,CAAC,WAAW,CAAC,CAC1B;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,OAAO,MAAMoB,QAAQ,gBAAGzB,MAAM,CAAC0B,MAAM,CAAC;EACpCb,GAAG,EAAEb,MAAM,CAACS,MAAM;EAClBU,KAAK,EAAEnB,MAAM,CAACS;CACf,CAAC;AAGF;;;;;;;;;;;;;;AAcA,OAAO,MAAMkB,QAAQ,gBAAG3B,MAAM,CAAC4B,MAAM,CAAC;EACpCC,IAAI,EAAEN,SAAS;EACfO,IAAI,EAAE9B,MAAM,CAAC+B,kBAAkB;EAC/BC,IAAI,eAAEhC,MAAM,CAACiC,KAAK,CAACzB,GAAG,CAAC;EACvB0B,IAAI,EAAElC,MAAM,CAACmC,IAAI;EACjBC,UAAU,EAAEpC,MAAM,CAACqC,WAAW;EAC9BC,QAAQ,EAAEb;CACX,CAAC;AAGF;AACA,OAAO,MAAMc,cAAc,gBAAGvC,MAAM,CAAC4B,MAAM,CAAC;EAC1CY,KAAK,EAAEb,QAAQ;EACfc,QAAQ,EAAExC;CACX,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Event.js","names":["BigInt","BigInt_","Effect","Option","Schema","SchemaIssue","SchemaTransformation","Position","String","pipe","decodeTo","transformEffect","decode","s","options","match","fromString","onNone","fail","InvalidValue","message","JSON","stringify","onSome","succeed","encode","b","check","isGreaterThanOrEqualToBigInt","brand","ORIGIN","make","Tag","isPattern","identifier","tagIdentity","key","length","includes","Error","value","ReadLimit","Int","isGreaterThanOrEqualTo","EventType","isNonEmpty","Metadata","Record","DcbEvent","Struct","type","data","Uint8Array","tags","Array","uuid","isGUID","occurredAt","DateTimeUtcFromString","metadata","SequencedEvent","event","position"],"sources":["../../src/Event.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/esm/Query.js CHANGED
@@ -225,7 +225,7 @@ export const classifyServableQuery = query => {
225
225
  }
226
226
  const only = query.items.length === 1 ? query.items[0] : undefined;
227
227
  if (only !== undefined && only.tags.length === 0) {
228
- return Arr.isNonEmptyReadonlyArray(only.types) ? {
228
+ return Arr.isReadonlyArrayNonEmpty(only.types) ? {
229
229
  kind: 'typeOnly',
230
230
  types: only.types
231
231
  } : {
@@ -1 +1 @@
1
- {"version":3,"file":"Query.js","names":["Array","Arr","Schema","EventType","Tag","QueryItem","Struct","types","tags","Query","items","matchesQueryItem","event","item","typeOk","length","includes","type","eventTags","Set","every","tag","has","matchesQuery","query","some","matchesSequenced","sequenced","assertServableQuery","fault","servableQueryFault","undefined","Error","unknownKeyFault","where","value","schemaFields","unknown","Object","keys","find","key","hasOwn","JSON","stringify","unknownQueryKeyFault","fields","reduce","unknownKey","classifyServableQuery","kind","only","isNonEmptyReadonlyArray","all","or"],"sources":["../../src/Query.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Query.js","names":["Array","Arr","Schema","EventType","Tag","QueryItem","Struct","types","tags","Query","items","matchesQueryItem","event","item","typeOk","length","includes","type","eventTags","Set","every","tag","has","matchesQuery","query","some","matchesSequenced","sequenced","assertServableQuery","fault","servableQueryFault","undefined","Error","unknownKeyFault","where","value","schemaFields","unknown","Object","keys","find","key","hasOwn","JSON","stringify","unknownQueryKeyFault","fields","reduce","unknownKey","classifyServableQuery","kind","only","isReadonlyArrayNonEmpty","all","or"],"sources":["../../src/Query.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -68,7 +68,7 @@
68
68
  * memory alone, and it lands hardest on the durable-log-with-in-memory-view mode,
69
69
  * where an ephemeral view re-catches-up the entire log on every boot.
70
70
  */
71
- import { Chunk, Effect, Option, Queue, Schedule, Schema, Stream } from 'effect';
71
+ import { Effect, Option, Queue, Schedule, Schema, Stream } from 'effect';
72
72
  import { ORIGIN, ReadLimit } from "./Event.js";
73
73
  /**
74
74
  * A short catch-up page size default for the reconcile loop. Reads page by page
@@ -107,12 +107,12 @@ export const DEFAULT_POLL_INTERVAL_MILLIS = 1000;
107
107
  * the key NAME, the VALIDATION and the DEFAULT from one place, so a caller who has
108
108
  * tuned one engine's subscribe reads another's without translating, and the two
109
109
  * cannot drift in what they ACCEPT any more than in what they assume. Two engines
110
- * hand-authoring the identical `Schema.optionalWith(…)` twice were identical only
110
+ * hand-authoring the identical `Schema.optionalKey(…)` twice were identical only
111
111
  * by inspection.
112
112
  *
113
113
  * The bounds differ between the two because the quantities do. `pollInterval` is a
114
- * duration, so a fraction of a millisecond is meaningful and only `positive` and
115
- * `finite` matter: at zero or below the loop would spin without ever waiting for a
114
+ * duration, so a fraction of a millisecond is meaningful and only `isGreaterThan(0)`
115
+ * and `isFinite` matter: at zero or below the loop would spin without ever waiting for a
116
116
  * wake, and at `Infinity` the periodic re-read — the half that carries delivery —
117
117
  * would never come, which silently converts the wake source from an optimisation
118
118
  * into the guarantee. `catchUpPageSize` is a COUNT, so it must be an integer
@@ -120,17 +120,13 @@ export const DEFAULT_POLL_INTERVAL_MILLIS = 1000;
120
120
  * length against it to decide the tail is drained, and a page of zero would report
121
121
  * "drained" forever without reading anything.
122
122
  *
123
- * `exact: true` on both keeps the decoded type at `key?: T` rather than
123
+ * `optionalKey` on both keeps the decoded type at `key?: T` rather than
124
124
  * `T | undefined`, matching the repo's `exactOptionalPropertyTypes` discipline — an
125
125
  * absent key, never an explicit `undefined`.
126
126
  */
127
127
  export const subscriptionTuningFields = {
128
- pollInterval: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.Number.pipe(/*#__PURE__*/Schema.positive(), /*#__PURE__*/Schema.finite()), {
129
- exact: true
130
- }),
131
- catchUpPageSize: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.Int.pipe(/*#__PURE__*/Schema.positive()), {
132
- exact: true
133
- })
128
+ pollInterval: /*#__PURE__*/Schema.optionalKey(/*#__PURE__*/Schema.Number.check(/*#__PURE__*/Schema.isGreaterThan(0), /*#__PURE__*/Schema.isFinite())),
129
+ catchUpPageSize: /*#__PURE__*/Schema.optionalKey(/*#__PURE__*/Schema.Int.check(/*#__PURE__*/Schema.isGreaterThan(0)))
134
130
  };
135
131
  /**
136
132
  * Retry a TRANSIENT poll fault (an `E` from one reconcile read) on a capped
@@ -139,16 +135,16 @@ export const subscriptionTuningFields = {
139
135
  * past the cap propagates (the decorator dies it) — infrastructure stays off the
140
136
  * contract channel while the stream survives ordinary transients.
141
137
  */
142
- const POLL_RETRY_SCHEDULE = /*#__PURE__*/Schedule.exponential('100 millis', 2).pipe(/*#__PURE__*/Schedule.union(/*#__PURE__*/Schedule.spaced('2 seconds')), /*#__PURE__*/Schedule.intersect(/*#__PURE__*/Schedule.recurs(20)));
138
+ const POLL_RETRY_SCHEDULE = /*#__PURE__*/Schedule.max([/*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential('100 millis', 2), /*#__PURE__*/Schedule.spaced('2 seconds')]), /*#__PURE__*/Schedule.recurs(20)]);
143
139
  /**
144
140
  * Build the subscription `Stream`: catch up from `after`, then track the live tail.
145
- * The cursor threads through the `unfoldChunkEffect` unfold state, starting at
146
- * `after` and advancing to the last delivered position each batch; the stream never
147
- * completes on its own (always `Option.some`), so the enclosing scope interrupts it
148
- * on close. An `E` mid-stream stays on the channel; `makeContractStore` dies it
141
+ * The cursor threads through the `Stream.paginate` state, starting at `after` and
142
+ * advancing to the last delivered position each batch; the stream never completes
143
+ * on its own (the next state is always `Option.some`), so the enclosing scope
144
+ * interrupts it on close. An `E` mid-stream stays on the channel; `makeContractStore` dies it
149
145
  * (subscribe is `E = never` on the contract).
150
146
  */
151
- export const subscribeStream = (deps, after) => Stream.unwrapScoped(Effect.gen(function* () {
147
+ export const subscribeStream = (deps, after) => Stream.unwrap(Effect.gen(function* () {
152
148
  // The wake primitive: a sliding(1) queue holding at most one pending
153
149
  // signal. The wake source `offer`s an opaque wake on every notification;
154
150
  // the poll loop `take`s (with a timeout). The lost-wakeup guard is
@@ -164,7 +160,7 @@ export const subscribeStream = (deps, after) => Stream.unwrapScoped(Effect.gen(f
164
160
  // silently-dropped (and later re-established) wake source loses no
165
161
  // positions. Absent a wake source entirely, `Stream.never` makes this a
166
162
  // fibre that parks forever and delivery falls to the poll alone.
167
- const listener = (deps.listen ?? Stream.never).pipe(Stream.tap(() => Queue.offer(wake, undefined)), Stream.retry(Schedule.exponential('50 millis').pipe(Schedule.union(Schedule.spaced('1 seconds')))));
163
+ const listener = (deps.listen ?? Stream.never).pipe(Stream.tap(() => Queue.offer(wake, undefined)), Stream.retry(Schedule.min([Schedule.exponential('50 millis'), Schedule.spaced('1 seconds')])));
168
164
  // Drain the wake source into the wake queue on a background fibre; the
169
165
  // scope releases it. We never read its elements directly — every
170
166
  // notification is an opaque wake signal.
@@ -196,7 +192,7 @@ export const subscribeStream = (deps, after) => Stream.unwrapScoped(Effect.gen(f
196
192
  }).pipe(Effect.retry(POLL_RETRY_SCHEDULE));
197
193
  /**
198
194
  * Produce the NEXT non-empty batch from a cursor position, together with
199
- * the advanced cursor — a pure `Position → Effect<[Chunk, next]>`. The
195
+ * the advanced cursor — a pure `Position → Effect<[events, next]>`. The
200
196
  * `> boundary` de-dup is enforced by `fetch`'s exclusive lower bound, so a
201
197
  * live re-read after a wake never re-emits an already-delivered position.
202
198
  *
@@ -204,24 +200,26 @@ export const subscribeStream = (deps, after) => Stream.unwrapScoped(Effect.gen(f
204
200
  * the cursor. If a drain yields nothing, wait for a wake but only up to the
205
201
  * poll interval, then loop and re-read ANYWAY — the periodic position-based
206
202
  * poll that makes delivery correct independently of any wake. This effect
207
- * only completes by returning a non-empty chunk; the scope interrupts it on
203
+ * only completes by returning a non-empty batch; the scope interrupts it on
208
204
  * close.
209
205
  */
210
206
  const nextBatch = from => Effect.gen(function* () {
211
207
  while (true) {
212
- yield* Queue.takeAll(wake);
208
+ // `Queue.clear` and not `Queue.takeAll`: the drain must NOT wait, and
209
+ // `takeAll` suspends until at least one signal is present.
210
+ yield* Queue.clear(wake);
213
211
  const {
214
212
  events,
215
213
  last
216
214
  } = yield* drainFrom(from);
217
215
  if (events.length > 0) {
218
- return [Chunk.fromIterable(events), last];
216
+ return [events, last];
219
217
  }
220
218
  // Nothing new: block on a wake, but only up to the poll interval — on
221
219
  // timeout we fall through and the loop re-reads regardless.
222
220
  yield* Effect.ignore(Effect.timeout(Queue.take(wake), deps.pollInterval));
223
221
  }
224
222
  });
225
- return Stream.unfoldChunkEffect(after ?? ORIGIN, from => Effect.map(nextBatch(from), Option.some));
223
+ return Stream.paginate(after ?? ORIGIN, from => Effect.map(nextBatch(from), ([events, last]) => [events, Option.some(last)]));
226
224
  }));
227
225
  //# sourceMappingURL=SubscribeMachine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscribeMachine.js","names":["Chunk","Effect","Option","Queue","Schedule","Schema","Stream","ORIGIN","ReadLimit","DEFAULT_CATCH_UP_PAGE_SIZE","DEFAULT_POLL_INTERVAL_MILLIS","subscriptionTuningFields","pollInterval","optionalWith","Number","pipe","positive","finite","exact","catchUpPageSize","Int","POLL_RETRY_SCHEDULE","exponential","union","spaced","intersect","recurs","subscribeStream","deps","after","unwrapScoped","gen","wake","sliding","listener","listen","never","tap","offer","undefined","retry","runDrain","forkScoped","drainFrom","from","collected","cursor","events","fetch","make","event","push","lastEvent","at","length","position","last","nextBatch","takeAll","fromIterable","ignore","timeout","take","unfoldChunkEffect","map","some"],"sources":["../../src/SubscribeMachine.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SubscribeMachine.js","names":["Effect","Option","Queue","Schedule","Schema","Stream","ORIGIN","ReadLimit","DEFAULT_CATCH_UP_PAGE_SIZE","DEFAULT_POLL_INTERVAL_MILLIS","subscriptionTuningFields","pollInterval","optionalKey","Number","check","isGreaterThan","isFinite","catchUpPageSize","Int","POLL_RETRY_SCHEDULE","max","min","exponential","spaced","recurs","subscribeStream","deps","after","unwrap","gen","wake","sliding","listener","listen","never","pipe","tap","offer","undefined","retry","runDrain","forkScoped","drainFrom","from","collected","cursor","events","fetch","make","event","push","lastEvent","at","length","position","last","nextBatch","clear","ignore","timeout","take","paginate","map","some"],"sources":["../../src/SubscribeMachine.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { DateTime, Effect, Layer, PubSub, Ref, Stream } from 'effect';
1
+ import { DateTime, Effect, Layer, PubSub, Ref, Semaphore, Stream } from 'effect';
2
2
  import { makeContractStore } from "./ContractStore.js";
3
3
  import { DcbEventStore } from "./DcbEventStore.js";
4
4
  import { ORIGIN } from "./Event.js";
@@ -37,7 +37,7 @@ const copyEvent = event => ({
37
37
  data: new Uint8Array(event.data),
38
38
  tags: [...event.tags],
39
39
  uuid: event.uuid,
40
- occurredAt: DateTime.unsafeMake(DateTime.toEpochMillis(event.occurredAt)),
40
+ occurredAt: DateTime.makeUnsafe(DateTime.toEpochMillis(event.occurredAt)),
41
41
  metadata: {
42
42
  ...event.metadata
43
43
  }
@@ -152,7 +152,7 @@ const make = options => Effect.gen(function* () {
152
152
  const catchUpPageSize = options?.catchUpPageSize ?? DEFAULT_CATCH_UP_PAGE_SIZE;
153
153
  const pollInterval = options?.pollInterval ?? DEFAULT_POLL_INTERVAL_MILLIS;
154
154
  const log = yield* Ref.make([]);
155
- const mutex = yield* Effect.makeSemaphore(1);
155
+ const mutex = yield* Semaphore.make(1);
156
156
  const hub = yield* PubSub.unbounded();
157
157
  const nextPosition = yield* Ref.make(1n);
158
158
  const read = (query, options) =>
@@ -219,14 +219,14 @@ const make = options => Effect.gen(function* () {
219
219
  // exclusive cursor is what makes the catch-up/live seam exactly-once, so there
220
220
  // is nothing left here for a critical section to protect. `append` keeps its
221
221
  // permit, which is the whole exactly-one-wins guarantee.
222
- Stream.unwrapScoped(Effect.gen(function* () {
222
+ Stream.unwrap(Effect.gen(function* () {
223
223
  // Taken when the subscription starts, as the SQL engines compile theirs
224
224
  // (see `copyQuery`).
225
225
  const judged = copyQuery(query);
226
226
  const wakes = yield* PubSub.subscribe(hub);
227
227
  return subscribeStream({
228
228
  fetch: (from, limit) => Effect.map(Ref.get(log), snapshot => fetchPage(snapshot, judged, from, limit)),
229
- listen: Stream.fromQueue(wakes),
229
+ listen: Stream.fromSubscription(wakes),
230
230
  pollInterval,
231
231
  catchUpPageSize
232
232
  }, after);
@@ -1 +1 @@
1
- {"version":3,"file":"inMemory.js","names":["DateTime","Effect","Layer","PubSub","Ref","Stream","makeContractStore","DcbEventStore","ORIGIN","AppendConditionFailed","matchesSequenced","DEFAULT_CATCH_UP_PAGE_SIZE","DEFAULT_POLL_INTERVAL_MILLIS","subscribeStream","copyEvent","event","type","data","Uint8Array","tags","uuid","occurredAt","unsafeMake","toEpochMillis","metadata","copyQuery","query","items","map","item","types","copySequenced","sequenced","position","filterLog","log","after","filter","undefined","lastPosition","events","at","readSnapshot","options","matched","limited","limit","slice","head","fromIterable","firstIndexAfter","low","high","length","mid","fetchPage","from","page","index","push","make","gen","beforeCommit","void","suppressWake","catchUpPageSize","pollInterval","mutex","makeSemaphore","hub","unbounded","nextPosition","read","withPermits","get","snapshot","append","condition","suspend","owned","conflicts","failIfEventsMatch","start","appended","BigInt","end","set","publishAll","subscribe","unwrapScoped","judged","wakes","fetch","listen","fromQueue","DcbEventStoreInMemory","effect","makeInMemoryTestLayer"],"sources":["../../src/inMemory.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"inMemory.js","names":["DateTime","Effect","Layer","PubSub","Ref","Semaphore","Stream","makeContractStore","DcbEventStore","ORIGIN","AppendConditionFailed","matchesSequenced","DEFAULT_CATCH_UP_PAGE_SIZE","DEFAULT_POLL_INTERVAL_MILLIS","subscribeStream","copyEvent","event","type","data","Uint8Array","tags","uuid","occurredAt","makeUnsafe","toEpochMillis","metadata","copyQuery","query","items","map","item","types","copySequenced","sequenced","position","filterLog","log","after","filter","undefined","lastPosition","events","at","readSnapshot","options","matched","limited","limit","slice","head","fromIterable","firstIndexAfter","low","high","length","mid","fetchPage","from","page","index","push","make","gen","beforeCommit","void","suppressWake","catchUpPageSize","pollInterval","mutex","hub","unbounded","nextPosition","read","withPermits","get","snapshot","append","condition","suspend","owned","conflicts","failIfEventsMatch","start","appended","BigInt","end","set","publishAll","subscribe","unwrap","judged","wakes","fetch","listen","fromSubscription","DcbEventStoreInMemory","effect","makeInMemoryTestLayer"],"sources":["../../src/inMemory.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @kairos-es/core: DCB-first event-sourcing contract and in-memory store for
3
- * Effect v3.
3
+ * Effect.
4
4
  *
5
5
  * Exposes the domain types (`DcbEvent`, `SequencedEvent`, `Position`, `Tag`,
6
6
  * `EventType`), the selection language (`Query`, `QueryItem`, the pure match
@@ -35,21 +35,15 @@
35
35
  * jitter draws from `Random.next`, a default service on the same footing as the
36
36
  * clock rather than a host `Math.random`. No `node:*`, no wall-clock reading, no
37
37
  * ungoverned RNG.
38
- *
39
- * Effect v3 caveat: the `Schedule` API below is the THREE-type-parameter
40
- * `Schedule<Out, In, R>` that `effect@3` exports, with `Schedule.intersect`. The
41
- * currently-published docs show a newer four-type-parameter `Schedule` without
42
- * `intersect` — do not copy them; this file is written against the installed
43
- * `effect@3` type definitions.
44
38
  */
45
39
  import { Effect, Predicate, Schedule } from 'effect';
46
40
  /**
47
41
  * The default conflict backoff: exponential from 20ms, jittered, capped at five
48
42
  * retries.
49
43
  *
50
- * `Schedule.intersect` continues only while BOTH schedules continue, so the
51
- * `recurs(5)` arm is what bounds the attempts and the exponential arm is what
52
- * spaces them. Jitter matters more here than in a typical backoff: contending
44
+ * `Schedule.max` continues only while BOTH schedules continue, waiting the longer
45
+ * of their two delays, so the `recurs(5)` arm is what bounds the attempts and the
46
+ * exponential arm is what spaces them. Jitter matters more here than in a typical backoff: contending
53
47
  * deciders conflict precisely because they read the same boundary at the same
54
48
  * time, so an unjittered backoff would re-synchronise them into the same conflict
55
49
  * on every round. The figures are the conventional starting point (Emmett,
@@ -57,7 +51,7 @@ import { Effect, Predicate, Schedule } from 'effect';
57
51
  * command with a tighter latency budget, or one contending harder, should pass its
58
52
  * own schedule.
59
53
  */
60
- const conflictBackoff = /*#__PURE__*/Schedule.intersect(/*#__PURE__*/Schedule.jittered(/*#__PURE__*/Schedule.exponential('20 millis', 2)), /*#__PURE__*/Schedule.recurs(5));
54
+ const conflictBackoff = /*#__PURE__*/Schedule.max([/*#__PURE__*/Schedule.jittered(/*#__PURE__*/Schedule.exponential('20 millis', 2)), /*#__PURE__*/Schedule.recurs(5)]);
61
55
  /**
62
56
  * Retry `command` while — and only while — it fails `AppendConditionFailed`.
63
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"retryOnConflict.js","names":["Effect","Predicate","Schedule","conflictBackoff","intersect","jittered","exponential","recurs","retryOnConflict","command","schedule","retry","while","isTagged"],"sources":["../../src/retryOnConflict.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,SAASA,MAAM,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD;;;;;;;;;;;;;;AAcA,MAAMC,eAAe,gBAAGD,QAAQ,CAACE,SAAS,cACxCF,QAAQ,CAACG,QAAQ,cAACH,QAAQ,CAACI,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,eACvDJ,QAAQ,CAACK,MAAM,CAAC,CAAC,CAAC,CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,OAAuD,EACvDC,QAAA,GAIIP,eAAe,KAEnBH,MAAM,CAACW,KAAK,CAACF,OAAO,EAAE;EACpBC,QAAQ;EACRE,KAAK,EAAEX,SAAS,CAACY,QAAQ,CAAC,uBAAuB;CAClD,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"retryOnConflict.js","names":["Effect","Predicate","Schedule","conflictBackoff","max","jittered","exponential","recurs","retryOnConflict","command","schedule","retry","while","isTagged"],"sources":["../../src/retryOnConflict.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAASA,MAAM,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD;;;;;;;;;;;;;;AAcA,MAAMC,eAAe,gBAAGD,QAAQ,CAACE,GAAG,CAAC,cACnCF,QAAQ,CAACG,QAAQ,cAACH,QAAQ,CAACI,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,eACvDJ,QAAQ,CAACK,MAAM,CAAC,CAAC,CAAC,CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,OAAuD,EACvDC,QAAA,GAKIP,eAAe,KAEnBH,MAAM,CAACW,KAAK,CAACF,OAAO,EAAE;EACpBC,QAAQ;EACRE,KAAK,EAAEX,SAAS,CAACY,QAAQ,CAAC,uBAAuB;CAClD,CAAC","ignoreList":[]}
@@ -20,10 +20,10 @@ import { DateTime } from 'effect';
20
20
  *
21
21
  * Ordering in the log is by `position` alone, so an event's `occurredAt` is
22
22
  * informational; pinning it to the epoch keeps serialised bytes and comparisons
23
- * stable across runs. Built via `DateTime.unsafeMake(0)` (the value is a
23
+ * stable across runs. Built via `DateTime.makeUnsafe(0)` (the value is a
24
24
  * compile-time constant, not read from the host clock).
25
25
  */
26
- export const EPOCH = /*#__PURE__*/DateTime.unsafeMake(0);
26
+ export const EPOCH = /*#__PURE__*/DateTime.makeUnsafe(0);
27
27
  /**
28
28
  * Build a fresh, deterministic uuid generator: a zero-based counter producing
29
29
  * RFC-4122 v4-shaped ids `00000000-0000-4000-8000-<counter as 12 hex digits>`,
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","names":["DateTime","EPOCH","unsafeMake","makeSequentialUuid","counter","suffix","toString","padStart"],"sources":["../../src/testing.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;AAgBA,SAASA,QAAQ,QAAQ,QAAQ;AAEjC;;;;;;;;AAQA,OAAO,MAAMC,KAAK,gBAAGD,QAAQ,CAACE,UAAU,CAAC,CAAC,CAAC;AAE3C;;;;;;;;;;;AAWA,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAqB;EACrD,IAAIC,OAAO,GAAG,CAAC;EACf,OAAO,MAAK;IACV,MAAMC,MAAM,GAAGD,OAAO,CAACE,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACrDH,OAAO,IAAI,CAAC;IACZ,OAAO,2BAA2BC,MAAM,EAAE;EAC5C,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"testing.js","names":["DateTime","EPOCH","makeUnsafe","makeSequentialUuid","counter","suffix","toString","padStart"],"sources":["../../src/testing.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;AAgBA,SAASA,QAAQ,QAAQ,QAAQ;AAEjC;;;;;;;;AAQA,OAAO,MAAMC,KAAK,gBAAGD,QAAQ,CAACE,UAAU,CAAC,CAAC,CAAC;AAE3C;;;;;;;;;;;AAWA,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAqB;EACrD,IAAIC,OAAO,GAAG,CAAC;EACf,OAAO,MAAK;IACV,MAAMC,MAAM,GAAGD,OAAO,CAACE,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACrDH,OAAO,IAAI,CAAC;IACZ,OAAO,2BAA2BC,MAAM,EAAE;EAC5C,CAAC;AACH,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kairos-es/core",
3
- "version": "1.0.0-alpha.4",
4
- "description": "DCB-first event-sourcing contract and in-memory store for Effect v3",
3
+ "version": "1.0.0-alpha.5",
4
+ "description": "DCB-first event-sourcing contract and in-memory store for Effect 4",
5
5
  "license": "BSD-3-Clause",
6
6
  "repository": {
7
7
  "type": "git",
@@ -11,28 +11,38 @@
11
11
  "sideEffects": [],
12
12
  "homepage": "https://github.com/neverbland/kairos-es",
13
13
  "peerDependencies": {
14
- "effect": "^3.22.0"
14
+ "effect": "^4.0.5"
15
15
  },
16
16
  "main": "./dist/cjs/index.js",
17
17
  "module": "./dist/esm/index.js",
18
- "types": "./dist/dts/index.d.ts",
18
+ "types": "./dist/dts-cjs/index.d.ts",
19
19
  "exports": {
20
20
  ".": {
21
- "types": "./dist/dts/index.d.ts",
22
- "import": "./dist/esm/index.js",
23
- "default": "./dist/cjs/index.js"
21
+ "import": {
22
+ "types": "./dist/dts-esm/index.d.ts",
23
+ "default": "./dist/esm/index.js"
24
+ },
25
+ "require": {
26
+ "types": "./dist/dts-cjs/index.d.ts",
27
+ "default": "./dist/cjs/index.js"
28
+ }
24
29
  },
25
30
  "./testing": {
26
- "types": "./dist/dts/testing.d.ts",
27
- "import": "./dist/esm/testing.js",
28
- "default": "./dist/cjs/testing.js"
31
+ "import": {
32
+ "types": "./dist/dts-esm/testing.d.ts",
33
+ "default": "./dist/esm/testing.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist/dts-cjs/testing.d.ts",
37
+ "default": "./dist/cjs/testing.js"
38
+ }
29
39
  },
30
40
  "./package.json": "./package.json"
31
41
  },
32
42
  "typesVersions": {
33
43
  "*": {
34
44
  "testing": [
35
- "./dist/dts/testing.d.ts"
45
+ "./dist/dts-cjs/testing.d.ts"
36
46
  ]
37
47
  }
38
48
  }
@@ -13,6 +13,6 @@ import { Query } from './Query'
13
13
 
14
14
  export const AppendCondition = Schema.Struct({
15
15
  failIfEventsMatch: Query,
16
- after: Schema.optionalWith(Position, { exact: true }),
16
+ after: Schema.optionalKey(Position),
17
17
  })
18
18
  export type AppendCondition = typeof AppendCondition.Type
@@ -30,15 +30,15 @@
30
30
  *
31
31
  * ## Present means refused, so a sanctioned append REMOVES the marker
32
32
  *
33
- * The check reads the tag through `Effect.serviceOption`, so its ABSENCE is the
33
+ * The check reads the service through `Effect.serviceOption`, so its ABSENCE is the
34
34
  * normal case and costs the `append` signature nothing — `DcbEventStore.append`
35
35
  * keeps `R = never` and no caller provides anything. Presence is what refuses.
36
36
  *
37
37
  * That shape decides how the two legitimate appends inside a bracket get through,
38
38
  * and there is only one route: run with the marker STRIPPED from the context
39
- * (`Effect.mapInputContext` over `Context.omit(AppendIsOwned)`). The bracket's own
39
+ * (`Effect.updateContext` over `Context.omit(AppendIsOwned)`). The bracket's own
40
40
  * closing append is issued outside the scope it provided the marker in, and the
41
- * codec's escape hatch strips it explicitly. Neither needs a second tag, a
41
+ * codec's escape hatch strips it explicitly. Neither needs a second service, a
42
42
  * sanctioning flag or a mutable cell, and there is no way to be exempt by
43
43
  * accident: an append is either lexically outside the marked region or it says in
44
44
  * as many words that it is removing the marker.
@@ -50,13 +50,13 @@ import { Context, Effect } from 'effect'
50
50
  * owns it.
51
51
  *
52
52
  * `by` is a human-readable owner name and exists for the defect message alone —
53
- * the refusal is decided by the tag's PRESENCE, never by this value, so nothing
53
+ * the refusal is decided by the service's PRESENCE, never by this value, so nothing
54
54
  * branches on it and no caller need agree on a vocabulary for it.
55
55
  */
56
- export class AppendIsOwned extends Context.Tag('@kairos-es/core/AppendIsOwned')<
56
+ export class AppendIsOwned extends Context.Service<
57
57
  AppendIsOwned,
58
58
  { readonly by: string }
59
- >() {}
59
+ >()('@kairos-es/core/AppendIsOwned') {}
60
60
 
61
61
  /**
62
62
  * Die if an append is already owned here; do nothing otherwise.
@@ -70,7 +70,7 @@ export class AppendIsOwned extends Context.Tag('@kairos-es/core/AppendIsOwned')<
70
70
  * its escape hatch for a deliberate second append — which is what makes a defect
71
71
  * affordable here.
72
72
  *
73
- * `Effect.serviceOption` is what keeps this free: it reads the tag if present and
73
+ * `Effect.serviceOption` is what keeps this free: it reads the service if present and
74
74
  * adds NOTHING to the requirement channel, so every existing append is unchanged
75
75
  * and unprovisioned.
76
76
  */
@@ -8,7 +8,8 @@
8
8
  * channel (`never` for the pure in-memory engine; `SqlError` for either SQL one).
9
9
  * The decorator wraps those mechanics with the policy the contract demands — the
10
10
  * policy the first two engines hand-duplicated, with the Postgres one even
11
- * needing a bespoke `catchAll`/`instanceof`:
11
+ * needing a bespoke `catchAll`/`instanceof` (Effect 3's `catchAll`, which Effect 4
12
+ * names `catch`):
12
13
  *
13
14
  * - `assertServableQuery` at every verb's entry (read, the append condition's
14
15
  * guard query, subscribe) — a non-servable query, or one carrying a key the
@@ -75,7 +76,7 @@ export interface RawDcbEventStore<E> {
75
76
  */
76
77
  export const makeContractStore = <E>(
77
78
  raw: RawDcbEventStore<E>,
78
- ): DcbEventStore['Type'] => ({
79
+ ): DcbEventStore['Service'] => ({
79
80
  read: (query, options) =>
80
81
  Effect.suspend(() => {
81
82
  // Defects (surface when the Effect runs), keeping `read` at `E = never`.
@@ -90,7 +91,7 @@ export const makeContractStore = <E>(
90
91
  append: (events, condition) =>
91
92
  // The ownership refusal runs FIRST and sits OUTSIDE the suspend, because it is
92
93
  // the only one of append's checks that is EFFECTFUL: it consults a
93
- // `Context.Tag` rather than inspecting the arguments. `Effect.flatMap` over an
94
+ // `Context.Service` rather than inspecting the arguments. `Effect.flatMap` over an
94
95
  // already-lazy effect defers it exactly as the suspend defers the throws below,
95
96
  // so nothing runs at the call site either way; what it buys is that the
96
97
  // "you are inside a bracket" defect arrives before any argument is judged, which
@@ -156,7 +157,7 @@ export const makeContractStore = <E>(
156
157
  // engine's channel simply answers false and dies as it should. It also
157
158
  // narrows the raw `AppendConditionFailed | E` to the contract's single
158
159
  // error, which is what keeps `append` at `E = AppendConditionFailed`.
159
- return Effect.catchAll(raw.append(events, condition), (error) =>
160
+ return Effect.catch(raw.append(events, condition), (error) =>
160
161
  Predicate.isTagged('AppendConditionFailed')(error)
161
162
  ? Effect.fail(error)
162
163
  : Effect.die(error),