@typed/fx 1.20.0 → 1.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/cjs/Fx.js +5 -1
  2. package/dist/cjs/Fx.js.map +1 -1
  3. package/dist/cjs/Idle.js +8 -6
  4. package/dist/cjs/Idle.js.map +1 -1
  5. package/dist/cjs/Push.js.map +1 -1
  6. package/dist/cjs/RefHashMap.js.map +1 -1
  7. package/dist/cjs/RefSubject.js +13 -9
  8. package/dist/cjs/RefSubject.js.map +1 -1
  9. package/dist/cjs/Subject.js +7 -3
  10. package/dist/cjs/Subject.js.map +1 -1
  11. package/dist/cjs/Versioned.js.map +1 -1
  12. package/dist/cjs/internal/DeferredRef.js +1 -1
  13. package/dist/cjs/internal/DeferredRef.js.map +1 -1
  14. package/dist/cjs/internal/core.js +2 -1
  15. package/dist/cjs/internal/core.js.map +1 -1
  16. package/dist/cjs/internal/diff.js +28 -20
  17. package/dist/cjs/internal/diff.js.map +1 -1
  18. package/dist/cjs/internal/helpers.js +5 -1
  19. package/dist/cjs/internal/helpers.js.map +1 -1
  20. package/dist/cjs/internal/keyed.js +13 -14
  21. package/dist/cjs/internal/keyed.js.map +1 -1
  22. package/dist/cjs/internal/share.js +4 -1
  23. package/dist/cjs/internal/share.js.map +1 -1
  24. package/dist/dts/Emitter.d.ts +1 -1
  25. package/dist/dts/Emitter.d.ts.map +1 -1
  26. package/dist/dts/Form.d.ts +2 -2
  27. package/dist/dts/Form.d.ts.map +1 -1
  28. package/dist/dts/Fx.d.ts.map +1 -1
  29. package/dist/dts/Guard.d.ts +1 -1
  30. package/dist/dts/Guard.d.ts.map +1 -1
  31. package/dist/dts/Idle.d.ts.map +1 -1
  32. package/dist/dts/Match.d.ts +2 -2
  33. package/dist/dts/Match.d.ts.map +1 -1
  34. package/dist/dts/Pull.d.ts +1 -1
  35. package/dist/dts/Pull.d.ts.map +1 -1
  36. package/dist/dts/Push.d.ts +4 -1
  37. package/dist/dts/Push.d.ts.map +1 -1
  38. package/dist/dts/RefArray.d.ts +1 -1
  39. package/dist/dts/RefArray.d.ts.map +1 -1
  40. package/dist/dts/RefChunk.d.ts +1 -1
  41. package/dist/dts/RefChunk.d.ts.map +1 -1
  42. package/dist/dts/RefHashMap.d.ts +1 -1
  43. package/dist/dts/RefHashMap.d.ts.map +1 -1
  44. package/dist/dts/RefHashSet.d.ts +1 -1
  45. package/dist/dts/RefHashSet.d.ts.map +1 -1
  46. package/dist/dts/RefSubject.d.ts +24 -4
  47. package/dist/dts/RefSubject.d.ts.map +1 -1
  48. package/dist/dts/Subject.d.ts +1 -1
  49. package/dist/dts/Subject.d.ts.map +1 -1
  50. package/dist/dts/Versioned.d.ts +1 -1
  51. package/dist/dts/Versioned.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/diff.d.ts +20 -16
  54. package/dist/dts/internal/diff.d.ts.map +1 -1
  55. package/dist/dts/internal/helpers.d.ts +2 -1
  56. package/dist/dts/internal/helpers.d.ts.map +1 -1
  57. package/dist/dts/internal/keyed.d.ts.map +1 -1
  58. package/dist/dts/internal/share.d.ts.map +1 -1
  59. package/dist/esm/Fx.js +5 -1
  60. package/dist/esm/Fx.js.map +1 -1
  61. package/dist/esm/Idle.js +8 -6
  62. package/dist/esm/Idle.js.map +1 -1
  63. package/dist/esm/Push.js.map +1 -1
  64. package/dist/esm/RefHashMap.js.map +1 -1
  65. package/dist/esm/RefSubject.js +11 -9
  66. package/dist/esm/RefSubject.js.map +1 -1
  67. package/dist/esm/Subject.js +7 -3
  68. package/dist/esm/Subject.js.map +1 -1
  69. package/dist/esm/Versioned.js.map +1 -1
  70. package/dist/esm/internal/DeferredRef.js +1 -1
  71. package/dist/esm/internal/DeferredRef.js.map +1 -1
  72. package/dist/esm/internal/core.js +2 -1
  73. package/dist/esm/internal/core.js.map +1 -1
  74. package/dist/esm/internal/diff.js +26 -16
  75. package/dist/esm/internal/diff.js.map +1 -1
  76. package/dist/esm/internal/helpers.js +5 -1
  77. package/dist/esm/internal/helpers.js.map +1 -1
  78. package/dist/esm/internal/keyed.js +14 -15
  79. package/dist/esm/internal/keyed.js.map +1 -1
  80. package/dist/esm/internal/share.js +4 -1
  81. package/dist/esm/internal/share.js.map +1 -1
  82. package/package.json +8 -8
  83. package/src/Emitter.ts +1 -1
  84. package/src/Form.ts +2 -2
  85. package/src/Fx.ts +5 -4
  86. package/src/Guard.ts +1 -1
  87. package/src/Idle.ts +9 -13
  88. package/src/Match.ts +2 -2
  89. package/src/Pull.ts +1 -1
  90. package/src/Push.ts +6 -1
  91. package/src/RefArray.ts +1 -1
  92. package/src/RefChunk.ts +1 -1
  93. package/src/RefHashMap.ts +3 -1
  94. package/src/RefHashSet.ts +1 -1
  95. package/src/RefSubject.ts +54 -25
  96. package/src/Subject.ts +24 -6
  97. package/src/Versioned.ts +4 -2
  98. package/src/internal/DeferredRef.ts +1 -1
  99. package/src/internal/core.ts +5 -1
  100. package/src/internal/diff.ts +56 -42
  101. package/src/internal/helpers.ts +7 -2
  102. package/src/internal/keyed.ts +19 -21
  103. package/src/internal/share.ts +6 -1
@@ -1,4 +1,4 @@
1
- import { Context, Effect, ExecutionStrategy, Option, Scope } from "effect";
1
+ import { Context, Effect, ExecutionStrategy, Exit, Option, Scope } from "effect";
2
2
  import * as RefSubject from "../RefSubject.js";
3
3
  import * as Sink from "../Sink.js";
4
4
  import { diffIterator } from "./diff.js";
@@ -24,7 +24,7 @@ function emptyKeyedState() {
24
24
  return {
25
25
  entries: new Map(),
26
26
  indices: new Map(),
27
- previousKeys: []
27
+ previousValues: []
28
28
  };
29
29
  }
30
30
  function runKeyed(fx, options, sink, id) {
@@ -34,13 +34,12 @@ function runKeyed(fx, options, sink, id) {
34
34
  const scheduleNextEmit = forkDebounce(Effect.suspend(() => sink.onSuccess(getReadyIndices(state))));
35
35
  function diffAndPatch(values) {
36
36
  return Effect.gen(function* (_) {
37
- const previous = state.previousKeys;
38
- const keys = values.map(options.getKey);
39
- state.previousKeys = keys;
37
+ const previous = state.previousValues;
38
+ state.previousValues = values;
40
39
  let added = false;
41
40
  let done = false;
42
41
  let scheduled = false;
43
- for (const patch of diffIterator(previous, keys)) {
42
+ for (const patch of diffIterator(previous, values, options)) {
44
43
  if (patch._tag === "Remove") {
45
44
  yield* _(removeValue(state, patch));
46
45
  }
@@ -84,9 +83,9 @@ class KeyedEntry {
84
83
  this.interrupt = interrupt;
85
84
  }
86
85
  }
87
- function getReadyIndices({ entries, indices, previousKeys }) {
86
+ function getReadyIndices({ entries, indices, previousValues }) {
88
87
  const output = [];
89
- for (let i = 0; i < previousKeys.length; ++i) {
88
+ for (let i = 0; i < previousValues.length; ++i) {
90
89
  const key = indices.get(i);
91
90
  if (key === undefined)
92
91
  break;
@@ -110,24 +109,24 @@ function addValue({ entries, indices }, values, patch, id, parentScope, options,
110
109
  scope: childScope,
111
110
  id
112
111
  }));
113
- const entry = new KeyedEntry(value, patch.index, Option.none(), ref, ref.interrupt);
114
- entries.set(patch.value, entry);
115
- indices.set(patch.index, patch.value);
116
112
  yield* _(Scope.addFinalizer(childScope, ref.interrupt));
117
- yield* _(Effect.forkIn(options.onValue(ref, patch.value).run(Sink.make((cause) => sink.onFailure(cause), (output) => {
113
+ const entry = new KeyedEntry(value, patch.index, Option.none(), ref, Scope.close(childScope, Exit.interrupt(id)));
114
+ entries.set(patch.key, entry);
115
+ indices.set(patch.index, patch.key);
116
+ yield* _(Effect.forkIn(options.onValue(ref, patch.key).run(Sink.make((cause) => sink.onFailure(cause), (output) => {
118
117
  entry.output = Option.some(output);
119
118
  return scheduleNextEmit;
120
119
  })), parentScope));
121
120
  });
122
121
  }
123
122
  function removeValue({ entries, indices }, patch) {
124
- const interrupt = entries.get(patch.value).interrupt;
125
- entries.delete(patch.value);
123
+ const interrupt = entries.get(patch.key).interrupt;
124
+ entries.delete(patch.key);
126
125
  indices.delete(patch.index);
127
126
  return interrupt;
128
127
  }
129
128
  function updateValue({ entries, indices }, values, patch) {
130
- const key = patch.value;
129
+ const key = patch.key;
131
130
  const entry = entries.get(key);
132
131
  if (patch._tag === "Moved") {
133
132
  const currentKey = indices.get(patch.index);
@@ -1 +1 @@
1
- {"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../src/internal/keyed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../src/internal/keyed.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,10 @@ export class Share extends FxBase {
35
35
  initialize() {
36
36
  return Effect.suspend(() => {
37
37
  if (this._RefCount.increment() === 1) {
38
- return this.i0.run(this.i1).pipe(Effect.onExit(() => Effect.sync(() => MutableRef.set(this._FxFiber, Option.none()))), Effect.interruptible, Effect.forkDaemon, Effect.tap((fiber) => Effect.sync(() => MutableRef.set(this._FxFiber, Option.some(fiber)))), Effect.flatMap(Fiber.join));
38
+ return this.i0.run(this.i1).pipe(Effect.onExit(() => Effect.suspend(() => {
39
+ MutableRef.set(this._FxFiber, Option.none());
40
+ return this.i1.interrupt;
41
+ })), Effect.interruptible, Effect.forkDaemon, Effect.tap((fiber) => Effect.sync(() => MutableRef.set(this._FxFiber, Option.some(fiber)))), Effect.flatMap(Fiber.join));
39
42
  }
40
43
  else {
41
44
  return Option.match(MutableRef.get(this._FxFiber), {
@@ -1 +1 @@
1
- {"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/internal/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAc,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,UAAU,KAAK,CACnB,EAAe,EACf,OAAkC;IAElC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU;IACd,SAAS,GAAkC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE7D,SAAS;QACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;CACF;AAED,MAAM,OAAO,KAAmB,SAAQ,MAAkC;IAK7D;IACA;IALX,QAAQ,GAAsE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5G,SAAS,GAAG,IAAI,UAAU,EAAE,CAAA;IAE5B,YACW,EAAe,EACf,EAA6B;QAEtC,KAAK,EAAE,CAAA;QAHE,OAAE,GAAF,EAAE,CAAa;QACf,OAAE,GAAF,EAAE,CAA2B;IAGxC,CAAC;IAED,GAAG,CAAK,IAAoB;QAC1B,OAAO,cAAc,CACnB,CAAC,IAAI,EAAE,EAAE,CACP,MAAM,CAAC,OAAO,CACZ,IAAI,CACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAC1G,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CACxB,EACH,iBAAiB,CAAC,UAAU,CAC7B,CAAA;IACH,CAAC;IAEO,UAAU;QAChB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACpF,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC3F,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAC3B,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAM,CAAC,KAAK,CACjB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC7B;oBACE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;oBACzB,MAAM,EAAE,KAAK,CAAC,IAAI;iBACnB,CACF,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,SAAS;QACf,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAElF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAA;QAC1F,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CACvB,EAAe;IAEf,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAO,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,EAAe;IAEf,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAO,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAGf,IAAI,CAAC,CAAC,EAAE,SAAS,MAAM,CACzB,EAAe,EACf,QAAgB;IAEhB,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAO,QAAQ,CAAC,CAAC,CAAA;AAC1D,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/internal/share.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typed/fx",
3
- "version": "1.20.0",
3
+ "version": "1.20.2",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -10,16 +10,16 @@
10
10
  "sideEffects": [],
11
11
  "author": "Typed contributors",
12
12
  "dependencies": {
13
- "@effect/schema": "0.59.1",
14
- "@effect/typeclass": "0.22.3",
15
- "effect": "^2.0.3",
13
+ "@effect/schema": "0.60.2",
14
+ "@effect/typeclass": "0.22.6",
15
+ "effect": "^2.1.0",
16
16
  "fast-deep-equal": "^3.1.3",
17
- "@typed/async-data": "0.3.0",
18
- "@typed/context": "0.21.0"
17
+ "@typed/async-data": "0.3.1",
18
+ "@typed/context": "0.21.1"
19
19
  },
20
20
  "peerDependencies": {
21
- "@effect/typeclass": "0.22.3",
22
- "effect": "^2.0.3"
21
+ "@effect/typeclass": "0.22.6",
22
+ "effect": "^2.1.0"
23
23
  },
24
24
  "main": "./dist/cjs/index.js",
25
25
  "module": "./dist/esm/index.js",
package/src/Emitter.ts CHANGED
@@ -16,7 +16,7 @@ import * as Sink from "./Sink.js"
16
16
  /**
17
17
  * @since 1.20.0
18
18
  */
19
- export interface Emitter<E, A> {
19
+ export interface Emitter<in E, in A> {
20
20
  readonly succeed: (value: A) => Promise<Exit.Exit<never, unknown>>
21
21
  readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<never, unknown>>
22
22
  readonly fail: (error: E) => Promise<Exit.Exit<never, unknown>>
package/src/Form.ts CHANGED
@@ -35,7 +35,7 @@ type AnyObjectWithKeys<K extends PropertyKey> = Readonly<Record<K, any>>
35
35
  /**
36
36
  * @since 1.18.0
37
37
  */
38
- export interface Form<R, Entries extends Form.AnyEntries> extends
38
+ export interface Form<out R, in out Entries extends Form.AnyEntries> extends
39
39
  Form.Base<
40
40
  R | Form.Context<Entries>,
41
41
  Form.Error<Entries>,
@@ -55,7 +55,7 @@ export namespace Form {
55
55
  /**
56
56
  * @since 1.18.0
57
57
  */
58
- export interface Base<R, E, I, O, Entries extends Form.AnyEntries>
58
+ export interface Base<out R, out E, in out I, in out O, in out Entries extends Form.AnyEntries>
59
59
  extends Versioned.Versioned<R, never, R | Scope.Scope, E | ParseError, I, R, E | ParseError, I>
60
60
  {
61
61
  readonly [FormTypeId]: FormTypeId
package/src/Fx.ts CHANGED
@@ -2444,10 +2444,11 @@ export function fromDequeue<A>(dequeue: Queue.Dequeue<A>): Fx<never, never, A>
2444
2444
  export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A>): Fx<I, never, A>
2445
2445
  export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A> | Queue.Dequeue<A>): Fx<I, never, A> {
2446
2446
  return core.make((sink) =>
2447
- Effect.repeatWhileEffect(
2448
- Effect.matchCauseEffect(dequeue.take, sink),
2449
- () => dequeueIsActive(dequeue)
2450
- )
2447
+ Effect.gen(function*(_) {
2448
+ while (yield* _(dequeueIsActive(dequeue))) {
2449
+ yield* _(dequeue.take, Effect.matchCauseEffect(sink))
2450
+ }
2451
+ })
2451
2452
  )
2452
2453
  }
2453
2454
 
package/src/Guard.ts CHANGED
@@ -10,7 +10,7 @@ import * as Option from "effect/Option"
10
10
  /**
11
11
  * @since 1.18.0
12
12
  */
13
- export type Guard<I, R, E, O> = (input: I) => Effect.Effect<R, E, Option.Option<O>>
13
+ export type Guard<in I, out R, out E, out O> = (input: I) => Effect.Effect<R, E, Option.Option<O>>
14
14
 
15
15
  /**
16
16
  * @since 1.18.0
package/src/Idle.ts CHANGED
@@ -9,7 +9,6 @@ import * as Effect from "effect/Effect"
9
9
  import * as ExecutionStrategy from "effect/ExecutionStrategy"
10
10
  import * as Exit from "effect/Exit"
11
11
  import type * as Fiber from "effect/Fiber"
12
- import { constant, constVoid } from "effect/Function"
13
12
  import { globalValue } from "effect/GlobalValue"
14
13
  import * as Layer from "effect/Layer"
15
14
  import type * as Queue from "effect/Queue"
@@ -160,18 +159,15 @@ export interface WhileIdleRequestOptions<R, E, R2, E2> extends IdleRequestOption
160
159
  export const whileIdle = <R, E, R2, E2>(
161
160
  options: WhileIdleRequestOptions<R, E, R2, E2>
162
161
  ): Effect.Effect<Scope.Scope | R | R2, E | E2, void> =>
163
- Effect.repeatWhileEffect(
164
- Effect.flatMap(
165
- whenIdle(options),
166
- (deadline) =>
167
- Effect.whileLoop({
168
- while: () => shouldContinue(deadline),
169
- body: constant(options.body),
170
- step: constVoid
171
- })
172
- ),
173
- constant(options.while)
174
- )
162
+ Effect.gen(function*(_) {
163
+ while (yield* _(options.while)) {
164
+ const deadline = yield* _(whenIdle(options))
165
+
166
+ while (shouldContinue(deadline)) {
167
+ yield* _(options.body)
168
+ }
169
+ }
170
+ })
175
171
 
176
172
  /**
177
173
  * Dequeue values and perform an Effect while the event loop is not busy with any other work.
package/src/Match.ts CHANGED
@@ -33,7 +33,7 @@ export type MatcherTypeId = typeof MatcherTypeId
33
33
  /**
34
34
  * @since 1.18.0
35
35
  */
36
- export interface TypeMatcher<R, E, I, O> {
36
+ export interface TypeMatcher<out R, out E, in out I, out O> {
37
37
  readonly _tag: "TypeMatcher"
38
38
 
39
39
  readonly [MatcherTypeId]: Matcher.Variance<R, E, I, O>
@@ -56,7 +56,7 @@ export interface TypeMatcher<R, E, I, O> {
56
56
  /**
57
57
  * @since 1.18.0
58
58
  */
59
- export interface ValueMatcher<R, E, I, O> extends Fx.Fx<R | Scope.Scope, E, Option.Option<O>> {
59
+ export interface ValueMatcher<out R, out E, in out I, out O> extends Fx.Fx<R | Scope.Scope, E, Option.Option<O>> {
60
60
  readonly _tag: "ValueMatcher"
61
61
 
62
62
  readonly [MatcherTypeId]: Matcher.Variance<R, E, I, O>
package/src/Pull.ts CHANGED
@@ -19,7 +19,7 @@ import type { Sink } from "./Sink.js"
19
19
  * An Effect which can be used to pull values of a Stream.
20
20
  * @since 1.18.0
21
21
  */
22
- export interface Pull<R, E, A> extends Effect.Effect<R, Option.Option<E>, Chunk.Chunk<A>> {}
22
+ export interface Pull<out R, out E, out A> extends Effect.Effect<R, Option.Option<E>, Chunk.Chunk<A>> {}
23
23
 
24
24
  function schedulePull<R, E, A, R2, R3>(
25
25
  pull: Pull<R, E, A>,
package/src/Push.ts CHANGED
@@ -13,9 +13,14 @@ import { FxBase } from "./internal/protos.js"
13
13
  import * as Sink from "./Sink.js"
14
14
 
15
15
  /**
16
+ * Push is an abstract type which represents a Type which is both an Fx and a Sink. The type parameters
17
+ * are decoupled from one another and allow mapping over the input and output of the Push separately for
18
+ * more complex use cases.
16
19
  * @since 1.20.0
17
20
  */
18
- export interface Push<R, E, A, R2, E2, B> extends Sink.Sink<R, E, A>, Fx<R2, E2, B>, Pipeable.Pipeable {}
21
+ export interface Push<out R, in E, in A, out R2, out E2, out B>
22
+ extends Sink.Sink<R, E, A>, Fx<R2, E2, B>, Pipeable.Pipeable
23
+ {}
19
24
 
20
25
  /**
21
26
  * @since 1.20.0
package/src/RefArray.ts CHANGED
@@ -20,7 +20,7 @@ import * as RefSubject from "./RefSubject.js"
20
20
  * @since 1.18.0
21
21
  * @category models
22
22
  */
23
- export interface RefArray<R, E, A> extends RefSubject.RefSubject<R, E, ReadonlyArray<A>> {}
23
+ export interface RefArray<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, ReadonlyArray<A>> {}
24
24
 
25
25
  /**
26
26
  * Construct a new RefArray with the given initial value.
package/src/RefChunk.ts CHANGED
@@ -18,7 +18,7 @@ import * as RefSubject from "./RefSubject.js"
18
18
  * @since 1.18.0
19
19
  * @category models
20
20
  */
21
- export interface RefChunk<R, E, A> extends RefSubject.RefSubject<R, E, Chunk.Chunk<A>> {}
21
+ export interface RefChunk<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, Chunk.Chunk<A>> {}
22
22
 
23
23
  /**
24
24
  * Construct a new RefChunk with the given initial value.
package/src/RefHashMap.ts CHANGED
@@ -17,7 +17,9 @@ import * as RefSubject from "./RefSubject.js"
17
17
  * @since 1.18.0
18
18
  * @category models
19
19
  */
20
- export interface RefHashMap<R, E, K, V> extends RefSubject.RefSubject<R, E, HashMap.HashMap<K, V>> {}
20
+ export interface RefHashMap<out R, in out E, in out K, in out V>
21
+ extends RefSubject.RefSubject<R, E, HashMap.HashMap<K, V>>
22
+ {}
21
23
 
22
24
  /**
23
25
  * Construct a new RefHashMap with the given initial value.
package/src/RefHashSet.ts CHANGED
@@ -16,7 +16,7 @@ import * as RefSubject from "./RefSubject.js"
16
16
  * @since 1.18.0
17
17
  * @category models
18
18
  */
19
- export interface RefHashSet<R, E, A> extends RefSubject.RefSubject<R, E, HashSet.HashSet<A>> {}
19
+ export interface RefHashSet<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, HashSet.HashSet<A>> {}
20
20
 
21
21
  /**
22
22
  * @since 1.18.0
package/src/RefSubject.ts CHANGED
@@ -123,7 +123,10 @@ export namespace RefSubject {
123
123
  /**
124
124
  * @since 1.20.0
125
125
  */
126
- readonly make: <R>(fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>) => Layer.Layer<R, never, I>
126
+ readonly make: <R>(
127
+ fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
128
+ options?: RefSubjectOptions<A>
129
+ ) => Layer.Layer<R, never, I>
127
130
  }
128
131
 
129
132
  /**
@@ -134,22 +137,48 @@ export namespace RefSubject {
134
137
  export interface Derived<R, E, A> extends RefSubject<R, E, A> {
135
138
  readonly persist: Effect.Effect<R, never, void>
136
139
  }
140
+
141
+ /**
142
+ * @since 1.20.0
143
+ */
144
+ export type Context<T> = T extends RefSubject<infer R, infer _E, infer _A> ? R : never
145
+
146
+ /**
147
+ * @since 1.20.0
148
+ */
149
+
150
+ export type Error<T> = T extends RefSubject<infer _R, infer E, infer _A> ? E : never
151
+
152
+ /**
153
+ * @since 1.20.0
154
+ */
155
+ export type Success<T> = T extends RefSubject<infer _R, infer _E, infer A> ? A : never
156
+
157
+ /**
158
+ * @since 1.20.0
159
+ */
160
+ export type Identifier<T> = T extends RefSubject.Tagged<infer R, infer _E, infer _A> ? R : never
137
161
  }
138
162
 
139
163
  /**
140
164
  * @since 1.20.0
141
165
  */
142
- export type Context<T> = Fx.Context<T>
166
+ export type Context<T> = RefSubject.Context<T>
167
+
168
+ /**
169
+ * @since 1.20.0
170
+ */
171
+ export type Error<T> = RefSubject.Error<T>
143
172
 
144
173
  /**
145
174
  * @since 1.20.0
146
175
  */
147
- export type Error<T> = Fx.Error<T>
176
+ export type Success<T> = RefSubject.Success<T>
148
177
 
149
178
  /**
150
179
  * @since 1.20.0
151
180
  */
152
- export type Success<T> = Fx.Success<T>
181
+ export type Identifier<T> = RefSubject.Identifier<T>
153
182
 
154
183
  /**
155
184
  * @since 1.20.0
@@ -331,7 +360,7 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
331
360
  super()
332
361
 
333
362
  this.version = Effect.sync(() => core.deferredRef.version)
334
- this.interrupt = interruptCore(core)
363
+ this.interrupt = Effect.provide(interruptCore(core), core.context)
335
364
  this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.context)
336
365
  this.getSetDelete = getSetDelete(core)
337
366
 
@@ -341,17 +370,16 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
341
370
  }
342
371
 
343
372
  run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<Exclude<R, R2> | R3 | Scope.Scope, never, unknown> {
344
- return Effect.matchCauseEffect(this.toEffect(), {
373
+ return Effect.matchCauseEffect(getOrInitializeCore(this.core, true), {
345
374
  onFailure: (cause) => sink.onFailure(cause),
346
375
  onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
347
376
  })
348
377
  }
349
378
 
350
379
  runUpdates<R3, E3, B>(
351
- run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B>,
352
- lock: boolean = true
380
+ run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B>
353
381
  ) {
354
- return lock ? this.core.semaphore.withPermits(1)(run(this.getSetDelete)) : run(this.getSetDelete)
382
+ return this.core.semaphore.withPermits(1)(run(this.getSetDelete))
355
383
  }
356
384
 
357
385
  onSuccess(value: A): Effect.Effect<Exclude<R, R2>, never, unknown> {
@@ -636,11 +664,11 @@ function initializeCoreEffect<R, E, A, R2>(
636
664
  ): Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>> {
637
665
  const initialize = Effect.onExit(
638
666
  Effect.provide(core.initial, core.context),
639
- (exit) => {
640
- core._fiber = undefined
641
- core.deferredRef.done(exit)
642
- return Effect.unit
643
- }
667
+ (exit) =>
668
+ Effect.sync(() => {
669
+ core._fiber = undefined
670
+ core.deferredRef.done(exit)
671
+ })
644
672
  )
645
673
 
646
674
  return Effect.flatMap(
@@ -718,11 +746,15 @@ function onFailureCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, cause: Ca
718
746
  })
719
747
  }
720
748
 
721
- function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.Effect<never, never, void> {
749
+ function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.Effect<R, never, void> {
722
750
  return Effect.fiberIdWith((id) => {
723
751
  core.deferredRef.reset()
724
752
 
725
- return Scope.close(core.scope, Exit.interrupt(id))
753
+ const closeScope = Scope.close(core.scope, Exit.interrupt(id))
754
+ const interruptFiber = core._fiber ? Fiber.interrupt(core._fiber) : Effect.unit
755
+ const interruptSubject = core.subject.interrupt
756
+
757
+ return Effect.all([closeScope, interruptFiber, interruptSubject], { discard: true })
726
758
  })
727
759
  }
728
760
 
@@ -989,12 +1021,7 @@ class ComputedImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
989
1021
  ) {
990
1022
  super(
991
1023
  input,
992
- (fx) =>
993
- share.hold(core.mapEffect(fx, f)) as Fx<
994
- R0 | Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
995
- E0 | E | E2 | E3,
996
- C
997
- >,
1024
+ (fx) => share.hold(core.mapEffect(fx, f)) as any,
998
1025
  Effect.flatMap(f)
999
1026
  )
1000
1027
  }
@@ -1031,7 +1058,7 @@ class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
1031
1058
  ) {
1032
1059
  super(
1033
1060
  input,
1034
- (fx) => share.hold(core.filterMapEffect(fx, f) as any),
1061
+ (fx) => share.hold(core.filterMapEffect(fx, f)) as any,
1035
1062
  (effect) => Effect.flatten(Effect.flatMap(effect, f))
1036
1063
  )
1037
1064
  }
@@ -1757,8 +1784,10 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
1757
1784
  return this.tag.withEffect((ref) => ref.onSuccess(value))
1758
1785
  }
1759
1786
 
1760
- make = <R>(fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>): Layer.Layer<R, never, I> =>
1761
- this.tag.scoped(make(fxOrEffect))
1787
+ make = <R>(
1788
+ fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
1789
+ options?: RefSubjectOptions<A>
1790
+ ): Layer.Layer<R, never, I> => this.tag.scoped(make(fxOrEffect, options))
1762
1791
  }
1763
1792
 
1764
1793
  /**
package/src/Subject.ts CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import * as C from "@typed/context"
7
7
  import type { Cause, Layer, Pipeable } from "effect"
8
- import * as Context from "effect/Context"
8
+ import type * as Context from "effect/Context"
9
9
  import * as Effect from "effect/Effect"
10
10
  import * as ExecutionStrategy from "effect/ExecutionStrategy"
11
11
  import * as Exit from "effect/Exit"
@@ -26,9 +26,7 @@ import { TypeId } from "./TypeId.js"
26
26
  * Subject is an Fx type which can also be imperatively pushed into.
27
27
  * @since 1.20.0
28
28
  */
29
- export interface Subject<R, E, A>
30
- extends Push<R, E, A, R | Scope.Scope, E, A>, Fx<R | Scope.Scope, E, A>, Pipeable.Pipeable
31
- {
29
+ export interface Subject<out R, in out E, in out A> extends Push<R, E, A, R | Scope.Scope, E, A>, Pipeable.Pipeable {
32
30
  readonly subscriberCount: Effect.Effect<R, never, number>
33
31
  readonly interrupt: Effect.Effect<R, never, void>
34
32
  }
@@ -102,7 +100,13 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
102
100
  }
103
101
 
104
102
  readonly interrupt = Effect.fiberIdWith((id) =>
105
- Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD)
103
+ Effect.tap(
104
+ Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
105
+ () => {
106
+ this.sinks.clear()
107
+ this.scopes.clear()
108
+ }
109
+ )
106
110
  )
107
111
 
108
112
  protected addSink<R, R2, B>(
@@ -112,7 +116,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
112
116
  return withScope(
113
117
  (innerScope) =>
114
118
  Effect.contextWithEffect((ctx) => {
115
- const entry = [sink, Context.add(ctx, Scope.Scope, innerScope)] as const
119
+ const entry = [sink, ctx] as const
116
120
  const add = Effect.sync(() => {
117
121
  this.sinks.add(entry)
118
122
  this.scopes.add(innerScope)
@@ -170,6 +174,13 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
170
174
  onSome: (a) => Effect.zipRight(sink.onSuccess(a), awaitScopeClose(scope))
171
175
  }))
172
176
  }
177
+
178
+ readonly interrupt = Effect.fiberIdWith((id) =>
179
+ Effect.tap(
180
+ Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
181
+ () => MutableRef.set(this.lastValue, Option.none())
182
+ )
183
+ )
173
184
  }
174
185
 
175
186
  /**
@@ -194,6 +205,13 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
194
205
  (scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
195
206
  )
196
207
  }
208
+
209
+ readonly interrupt = Effect.fiberIdWith((id) =>
210
+ Effect.tap(
211
+ Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
212
+ () => this.buffer.clear()
213
+ )
214
+ )
197
215
  }
198
216
 
199
217
  /**
package/src/Versioned.ts CHANGED
@@ -25,7 +25,9 @@ import type { Sink } from "./Sink.js"
25
25
  /**
26
26
  * @since 1.0.0
27
27
  */
28
- export interface Versioned<R1, E1, R2, E2, A2, R3, E3, A3> extends Fx<R2, E2, A2>, Effect.Effect<R3, E3, A3> {
28
+ export interface Versioned<out R1, out E1, out R2, out E2, out A2, out R3, out E3, out A3>
29
+ extends Fx<R2, E2, A2>, Effect.Effect<R3, E3, A3>
30
+ {
29
31
  readonly version: Effect.Effect<R1, E1, number>
30
32
  }
31
33
 
@@ -112,7 +114,7 @@ export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D
112
114
  {
113
115
  protected _version = -1
114
116
  protected _currentValue: Option.Option<D> = Option.none()
115
- private _fx: Fx<R3, E3, C>
117
+ protected _fx: Fx<R3, E3, C>
116
118
 
117
119
  constructor(
118
120
  readonly input: Versioned<R0, E0, R, E, A, R2, E2, B>,
@@ -43,7 +43,7 @@ export class DeferredRef<E, A> extends EffectBase<never, E, A> {
43
43
 
44
44
  reset() {
45
45
  this.current = Option.none()
46
- this.version = 0
46
+ this.version = -1
47
47
 
48
48
  if (this.deferred) {
49
49
  Deferred.unsafeDone(this.deferred, Exit.interrupt(this.id))
@@ -19,6 +19,7 @@ import * as Deferred from "effect/Deferred"
19
19
  import * as Effect from "effect/Effect"
20
20
  import * as Either from "effect/Either"
21
21
  import * as Equal from "effect/Equal"
22
+ import { boolean } from "effect/Equivalence"
22
23
  import * as ExecutionStrategy from "effect/ExecutionStrategy"
23
24
  import * as Exit from "effect/Exit"
24
25
  import * as Fiber from "effect/Fiber"
@@ -2712,7 +2713,10 @@ function if_<R, E, R2, E2, B, R3, E3, C>(
2712
2713
  readonly onFalse: Fx<R3, E3, C>
2713
2714
  }
2714
2715
  ): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C> {
2715
- return switchMap(bool, (b): Fx<R2 | R3, E2 | E3, B | C> => b ? options.onTrue : options.onFalse)
2716
+ return switchMap(
2717
+ skipRepeatsWith(bool, boolean),
2718
+ (b): Fx<R2 | R3, E2 | E3, B | C> => b ? options.onTrue : options.onFalse
2719
+ )
2716
2720
  }
2717
2721
 
2718
2722
  export { if_ as if }