@typed/fx 1.11.7 → 1.11.8

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.
@@ -1,12 +1,12 @@
1
1
  import type { Trace } from '@effect/data/Debug';
2
2
  import type { Fx, Sink } from './Fx.js';
3
3
  import { FxTypeId } from './Fx.js';
4
- import type { Cause, Context } from './externals.js';
5
- import { Effect, Fiber } from './externals.js';
4
+ import { Cause, Context, Deferred, Effect, Fiber } from './externals.js';
6
5
  export declare function multicast<R, E, A>(fx: Fx<R, E, A>): Fx<R, E, A>;
7
6
  export interface MulticastObserver<R, E, A> {
8
7
  readonly sink: Sink<R, E, A>;
9
8
  readonly context: Context.Context<R>;
9
+ readonly deferred: Deferred.Deferred<never, void>;
10
10
  }
11
11
  export declare class MulticastFx<R, E, A> implements Fx<R, E, A>, Sink<never, E, A> {
12
12
  readonly fx: Fx<R, E, A>;
@@ -21,9 +21,10 @@ export declare class MulticastFx<R, E, A> implements Fx<R, E, A>, Sink<never, E,
21
21
  run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R | R2, never, void>;
22
22
  readonly addTrace: (trace: Trace) => Fx<R, E, A>;
23
23
  event(a: A): Effect.Effect<never, never, void>;
24
- error: (cause: Cause.Cause<E>) => Effect.Effect<never, never, void>;
24
+ error(cause: Cause.Cause<E>): Effect.Effect<never, never, void>;
25
25
  protected runEvent<R>(observer: MulticastObserver<R, E, A>, a: A): Effect.Effect<never, never, void>;
26
26
  protected runError<R>(observer: MulticastObserver<R, E, A>, cause: Cause.Cause<E>): Effect.Effect<never, never, void>;
27
+ protected runEnd(): Effect.Effect<never, never, void>;
27
28
  protected removeSink(sink: Sink<any, E, A>): Effect.Effect<never, never, void>;
28
29
  }
29
30
  //# sourceMappingURL=multicast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multicast.d.ts","sourceRoot":"","sources":["../../src/multicast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE9C,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE/D;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CACrC;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,YAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAU7D,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IATpC,QAAQ,CAAC,CAAC,QAAQ,CAAC;;;;MAIlB;IAED,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK;IAC7D,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;gBAEvC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAMpC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAqB5B,QAAQ,CAAC,QAAQ,UAAW,KAAK,KAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE9C;IAED,KAAK,CAAC,CAAC,EAAE,CAAC;IAMV,KAAK,UAAW,WAAW,CAAC,CAAC,CAAC,uCAG3B;IAEH,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAOhE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAOjF,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;CAwB3C"}
1
+ {"version":3,"file":"multicast.d.ts","sourceRoot":"","sources":["../../src/multicast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExE,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE/D;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;CAClD;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,YAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAU7D,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IATpC,QAAQ,CAAC,CAAC,QAAQ,CAAC;;;;MAIlB;IAED,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK;IAC7D,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;gBAEvC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAMpC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IA4B5B,QAAQ,CAAC,QAAQ,UAAW,KAAK,KAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE9C;IAED,KAAK,CAAC,CAAC,EAAE,CAAC;IAMV,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAM3B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAIhE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAIjF,SAAS,CAAC,MAAM;IAQhB,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;CAuB3C"}
@@ -21,7 +21,6 @@ class MulticastFx {
21
21
  this.addTrace = (trace) => {
22
22
  return multicast((0, Fx_js_1.Traced)(this.fx, trace));
23
23
  };
24
- this.error = (cause) => externals_js_1.Effect.suspend(() => externals_js_1.Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runError(observer, cause)));
25
24
  this.run = this.run.bind(this);
26
25
  this.event = this.event.bind(this);
27
26
  this.error = this.error.bind(this);
@@ -32,22 +31,29 @@ class MulticastFx {
32
31
  const that = this;
33
32
  return externals_js_1.Effect.uninterruptibleMask((restore) => externals_js_1.Effect.gen(function* ($) {
34
33
  const context = yield* $(externals_js_1.Effect.context());
35
- const observer = { sink, context };
34
+ const deferred = yield* $(externals_js_1.Deferred.make());
35
+ const observer = { sink, context, deferred };
36
36
  if (observers.push(observer) === 1) {
37
- that.fiber = yield* $(externals_js_1.Effect.forkDaemon(restore(that.fx.run(that))));
37
+ that.fiber = yield* $(that.fx.run(that), restore, externals_js_1.Effect.onExit(() => that.runEnd()), externals_js_1.Effect.uninterruptible, externals_js_1.Effect.forkDaemon);
38
38
  }
39
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
40
- yield* $(externals_js_1.Effect.ensuring(restore(externals_js_1.Fiber.await(that.fiber)), that.removeSink(sink)));
39
+ yield* $(externals_js_1.Deferred.await(deferred));
40
+ yield* $(that.removeSink(sink));
41
41
  }));
42
42
  }
43
43
  event(a) {
44
44
  return externals_js_1.Effect.suspend(() => externals_js_1.Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runEvent(observer, a)));
45
45
  }
46
+ error(cause) {
47
+ return externals_js_1.Effect.suspend(() => externals_js_1.Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runError(observer, cause)));
48
+ }
46
49
  runEvent(observer, a) {
47
- return externals_js_1.Effect.catchAllCause(externals_js_1.Effect.provideContext(observer.sink.event(a), observer.context), () => this.removeSink(observer.sink));
50
+ return externals_js_1.Effect.provideContext(observer.sink.event(a), observer.context);
48
51
  }
49
52
  runError(observer, cause) {
50
- return externals_js_1.Effect.catchAllCause(externals_js_1.Effect.provideContext(observer.sink.error(cause), observer.context), () => this.removeSink(observer.sink));
53
+ return externals_js_1.Effect.provideContext(observer.sink.error(cause), observer.context);
54
+ }
55
+ runEnd() {
56
+ return externals_js_1.Effect.suspend(() => externals_js_1.Effect.forEachDiscard(this.observers.slice(0), (observer) => externals_js_1.Deferred.succeed(observer.deferred, void 0)));
51
57
  }
52
58
  removeSink(sink) {
53
59
  return externals_js_1.Effect.suspend(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"multicast.js","sourceRoot":"","sources":["../../src/multicast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multicast.js","sourceRoot":"","sources":["../../src/multicast.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"switchMap.d.ts","sourceRoot":"","sources":["../../src/switchMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAQ,MAAM,SAAS,CAAA;AAClC,OAAO,EAAS,MAAM,EAAkB,MAAM,gBAAgB,CAAA;AAG9D,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC1C,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACzB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAmCvB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GACrC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB"}
1
+ {"version":3,"file":"switchMap.d.ts","sourceRoot":"","sources":["../../src/switchMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAQ,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,MAAM,EAAsB,MAAM,gBAAgB,CAAA;AAG3D,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC1C,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACzB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAsCvB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GACrC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB"}
@@ -1,25 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.switchLatestEffect = exports.switchLatest = exports.switchMapEffect = exports.switchMap = void 0;
4
- const Function_1 = require("@effect/data/Function");
5
4
  const Fx_js_1 = require("./Fx.js");
6
5
  const externals_js_1 = require("./externals.js");
7
6
  const fromEffect_js_1 = require("./fromEffect.js");
8
7
  function switchMap(fx, f) {
9
8
  return (0, Fx_js_1.Fx)((sink) => externals_js_1.Effect.gen(function* ($) {
10
- const runFork = externals_js_1.Runtime.runFork(yield* $(externals_js_1.Effect.runtime()));
11
- let ref;
12
- const switchEvent = (a) => externals_js_1.Effect.gen(function* ($) {
13
- if (ref) {
14
- yield* $(externals_js_1.Fiber.interruptFork(ref));
9
+ const scope = yield* $(externals_js_1.Scope.make());
10
+ const ref = yield* $(externals_js_1.RefS.make(null));
11
+ const reset = externals_js_1.RefS.set(ref, null);
12
+ const switchEvent = (a) => externals_js_1.RefS.updateEffect(ref, (fiber) => externals_js_1.Effect.gen(function* ($) {
13
+ if (fiber) {
14
+ yield* $(externals_js_1.Fiber.interrupt(fiber));
15
15
  }
16
- ref = runFork((0, Function_1.pipe)(f(a).run((0, Fx_js_1.Sink)(sink.event, (cause) => externals_js_1.Cause.isInterruptedOnly(cause) ? externals_js_1.Effect.unit() : sink.error(cause))), externals_js_1.Effect.zipLeft(externals_js_1.Effect.sync(() => (ref = undefined))), externals_js_1.Effect.catchAllCause((cause) => externals_js_1.Cause.isInterruptedOnly(cause) ? externals_js_1.Effect.unit() : sink.error(cause))));
17
- });
18
- yield* $(fx.run((0, Fx_js_1.Sink)(switchEvent, sink.error)));
19
- // Wait for the last fiber to finish
20
- if (ref) {
21
- yield* $(externals_js_1.Fiber.join(ref));
22
- }
16
+ return yield* $(f(a).run(sink), externals_js_1.Effect.zipLeft(reset), externals_js_1.Effect.catchAllCause(sink.error), externals_js_1.Effect.forkIn(scope));
17
+ }));
18
+ yield* $(externals_js_1.Effect.gen(function* ($) {
19
+ yield* $(fx.run((0, Fx_js_1.Sink)(switchEvent, sink.error)));
20
+ const fiber = yield* $(externals_js_1.RefS.get(ref));
21
+ // Wait for the last fiber to finish
22
+ if (fiber) {
23
+ yield* $(externals_js_1.Fiber.join(fiber));
24
+ }
25
+ }), externals_js_1.Effect.onExit((exit) => externals_js_1.Scope.close(scope, exit)));
23
26
  }));
24
27
  }
25
28
  exports.switchMap = switchMap;
@@ -1 +1 @@
1
- {"version":3,"file":"switchMap.js","sourceRoot":"","sources":["../../src/switchMap.ts"],"names":[],"mappings":";;;AAAA,oDAA4C;AAE5C,mCAAkC;AAClC,iDAA8D;AAC9D,mDAA4C;AAE5C,SAAgB,SAAS,CACvB,EAAe,EACf,CAA0B;IAE1B,OAAO,IAAA,UAAE,EAAC,CAAK,IAAyB,EAAE,EAAE,CAC1C,qBAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,sBAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAM,CAAC,OAAO,EAAe,CAAC,CAAC,CAAA;QACxE,IAAI,GAAgD,CAAA;QAEpD,MAAM,WAAW,GAAG,CAAC,CAAI,EAAE,EAAE,CAC3B,qBAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,IAAI,GAAG,EAAE;gBACP,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;aACnC;YAED,GAAG,GAAG,OAAO,CACX,IAAA,eAAI,EACF,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CACN,IAAA,YAAI,EAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,oBAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACnE,CACF,EACD,qBAAM,CAAC,OAAO,CAAC,qBAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EACpD,qBAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,oBAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACnE,CACF,CACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEJ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAA,YAAI,EAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE/C,oCAAoC;QACpC,IAAI,GAAG,EAAE;YACP,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;SAC1B;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAtCD,8BAsCC;AAED,SAAgB,eAAe,CAC7B,EAAe,EACf,CAAqC;IAErC,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AALD,0CAKC;AAED,SAAgB,YAAY,CAAkB,EAA2B;IACvE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAFD,oCAEC;AAED,SAAgB,kBAAkB,CAChC,EAAsC;IAEtC,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC;AAJD,gDAIC"}
1
+ {"version":3,"file":"switchMap.js","sourceRoot":"","sources":["../../src/switchMap.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,iDAA2D;AAC3D,mDAA4C;AAE5C,SAAgB,SAAS,CACvB,EAAe,EACf,CAA0B;IAE1B,OAAO,IAAA,UAAE,EAAC,CAAK,IAAyB,EAAE,EAAE,CAC1C,qBAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAyC,IAAI,CAAC,CAAC,CAAA;QAC7E,MAAM,KAAK,GAAG,mBAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAEjC,MAAM,WAAW,GAAG,CAAC,CAAI,EAAE,EAAE,CAC3B,mBAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/B,qBAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;aACjC;YAED,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACd,qBAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,qBAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAChC,qBAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB,CAAA;QACH,CAAC,CAAC,CACH,CAAA;QAEH,KAAK,CAAC,CAAC,CAAC,CACN,qBAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAA,YAAI,EAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAE/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAErC,oCAAoC;YACpC,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;aAC5B;QACH,CAAC,CAAC,EACF,qBAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAClD,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAzCD,8BAyCC;AAED,SAAgB,eAAe,CAC7B,EAAe,EACf,CAAqC;IAErC,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AALD,0CAKC;AAED,SAAgB,YAAY,CAAkB,EAA2B;IACvE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAFD,oCAEC;AAED,SAAgB,kBAAkB,CAChC,EAAsC;IAEtC,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC;AAJD,gDAIC"}
@@ -1,12 +1,12 @@
1
1
  import type { Trace } from '@effect/data/Debug';
2
2
  import type { Fx, Sink } from './Fx.js';
3
3
  import { FxTypeId } from './Fx.js';
4
- import type { Cause, Context } from './externals.js';
5
- import { Effect, Fiber } from './externals.js';
4
+ import { Cause, Context, Deferred, Effect, Fiber } from './externals.js';
6
5
  export declare function multicast<R, E, A>(fx: Fx<R, E, A>): Fx<R, E, A>;
7
6
  export interface MulticastObserver<R, E, A> {
8
7
  readonly sink: Sink<R, E, A>;
9
8
  readonly context: Context.Context<R>;
9
+ readonly deferred: Deferred.Deferred<never, void>;
10
10
  }
11
11
  export declare class MulticastFx<R, E, A> implements Fx<R, E, A>, Sink<never, E, A> {
12
12
  readonly fx: Fx<R, E, A>;
@@ -21,9 +21,10 @@ export declare class MulticastFx<R, E, A> implements Fx<R, E, A>, Sink<never, E,
21
21
  run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R | R2, never, void>;
22
22
  readonly addTrace: (trace: Trace) => Fx<R, E, A>;
23
23
  event(a: A): Effect.Effect<never, never, void>;
24
- error: (cause: Cause.Cause<E>) => Effect.Effect<never, never, void>;
24
+ error(cause: Cause.Cause<E>): Effect.Effect<never, never, void>;
25
25
  protected runEvent<R>(observer: MulticastObserver<R, E, A>, a: A): Effect.Effect<never, never, void>;
26
26
  protected runError<R>(observer: MulticastObserver<R, E, A>, cause: Cause.Cause<E>): Effect.Effect<never, never, void>;
27
+ protected runEnd(): Effect.Effect<never, never, void>;
27
28
  protected removeSink(sink: Sink<any, E, A>): Effect.Effect<never, never, void>;
28
29
  }
29
30
  //# sourceMappingURL=multicast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multicast.d.ts","sourceRoot":"","sources":["../src/multicast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE9C,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE/D;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CACrC;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,YAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAU7D,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IATpC,QAAQ,CAAC,CAAC,QAAQ,CAAC;;;;MAIlB;IAED,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK;IAC7D,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;gBAEvC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAMpC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAqB5B,QAAQ,CAAC,QAAQ,UAAW,KAAK,KAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE9C;IAED,KAAK,CAAC,CAAC,EAAE,CAAC;IAMV,KAAK,UAAW,WAAW,CAAC,CAAC,CAAC,uCAG3B;IAEH,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAOhE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAOjF,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;CAwB3C"}
1
+ {"version":3,"file":"multicast.d.ts","sourceRoot":"","sources":["../src/multicast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAU,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAExE,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE/D;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;CAClD;AAED,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,YAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAU7D,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IATpC,QAAQ,CAAC,CAAC,QAAQ,CAAC;;;;MAIlB;IAED,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAK;IAC7D,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;gBAEvC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAMpC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IA4B5B,QAAQ,CAAC,QAAQ,UAAW,KAAK,KAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAE9C;IAED,KAAK,CAAC,CAAC,EAAE,CAAC;IAMV,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAM3B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAIhE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAIjF,SAAS,CAAC,MAAM;IAQhB,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;CAuB3C"}
package/dist/multicast.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var _a;
2
2
  import { identity } from '@effect/data/Function';
3
3
  import { FxTypeId, Traced } from './Fx.js';
4
- import { Effect, Fiber } from './externals.js';
4
+ import { Deferred, Effect, Fiber } from './externals.js';
5
5
  export function multicast(fx) {
6
6
  return new MulticastFx(fx);
7
7
  }
@@ -17,7 +17,6 @@ export class MulticastFx {
17
17
  this.addTrace = (trace) => {
18
18
  return multicast(Traced(this.fx, trace));
19
19
  };
20
- this.error = (cause) => Effect.suspend(() => Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runError(observer, cause)));
21
20
  this.run = this.run.bind(this);
22
21
  this.event = this.event.bind(this);
23
22
  this.error = this.error.bind(this);
@@ -28,22 +27,29 @@ export class MulticastFx {
28
27
  const that = this;
29
28
  return Effect.uninterruptibleMask((restore) => Effect.gen(function* ($) {
30
29
  const context = yield* $(Effect.context());
31
- const observer = { sink, context };
30
+ const deferred = yield* $(Deferred.make());
31
+ const observer = { sink, context, deferred };
32
32
  if (observers.push(observer) === 1) {
33
- that.fiber = yield* $(Effect.forkDaemon(restore(that.fx.run(that))));
33
+ that.fiber = yield* $(that.fx.run(that), restore, Effect.onExit(() => that.runEnd()), Effect.uninterruptible, Effect.forkDaemon);
34
34
  }
35
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
36
- yield* $(Effect.ensuring(restore(Fiber.await(that.fiber)), that.removeSink(sink)));
35
+ yield* $(Deferred.await(deferred));
36
+ yield* $(that.removeSink(sink));
37
37
  }));
38
38
  }
39
39
  event(a) {
40
40
  return Effect.suspend(() => Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runEvent(observer, a)));
41
41
  }
42
+ error(cause) {
43
+ return Effect.suspend(() => Effect.forEachDiscard(this.observers.slice(0), (observer) => this.runError(observer, cause)));
44
+ }
42
45
  runEvent(observer, a) {
43
- return Effect.catchAllCause(Effect.provideContext(observer.sink.event(a), observer.context), () => this.removeSink(observer.sink));
46
+ return Effect.provideContext(observer.sink.event(a), observer.context);
44
47
  }
45
48
  runError(observer, cause) {
46
- return Effect.catchAllCause(Effect.provideContext(observer.sink.error(cause), observer.context), () => this.removeSink(observer.sink));
49
+ return Effect.provideContext(observer.sink.error(cause), observer.context);
50
+ }
51
+ runEnd() {
52
+ return Effect.suspend(() => Effect.forEachDiscard(this.observers.slice(0), (observer) => Deferred.succeed(observer.deferred, void 0)));
47
53
  }
48
54
  removeSink(sink) {
49
55
  return Effect.suspend(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"multicast.js","sourceRoot":"","sources":["../src/multicast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multicast.js","sourceRoot":"","sources":["../src/multicast.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"switchMap.d.ts","sourceRoot":"","sources":["../src/switchMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAQ,MAAM,SAAS,CAAA;AAClC,OAAO,EAAS,MAAM,EAAkB,MAAM,gBAAgB,CAAA;AAG9D,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC1C,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACzB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAmCvB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GACrC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB"}
1
+ {"version":3,"file":"switchMap.d.ts","sourceRoot":"","sources":["../src/switchMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAQ,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,MAAM,EAAsB,MAAM,gBAAgB,CAAA;AAG3D,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC1C,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACzB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAsCvB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACpC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GACrC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAEvB"}
package/dist/switchMap.js CHANGED
@@ -1,22 +1,25 @@
1
- import { pipe } from '@effect/data/Function';
2
1
  import { Fx, Sink } from './Fx.js';
3
- import { Cause, Effect, Fiber, Runtime } from './externals.js';
2
+ import { Effect, Fiber, RefS, Scope } from './externals.js';
4
3
  import { fromEffect } from './fromEffect.js';
5
4
  export function switchMap(fx, f) {
6
5
  return Fx((sink) => Effect.gen(function* ($) {
7
- const runFork = Runtime.runFork(yield* $(Effect.runtime()));
8
- let ref;
9
- const switchEvent = (a) => Effect.gen(function* ($) {
10
- if (ref) {
11
- yield* $(Fiber.interruptFork(ref));
6
+ const scope = yield* $(Scope.make());
7
+ const ref = yield* $(RefS.make(null));
8
+ const reset = RefS.set(ref, null);
9
+ const switchEvent = (a) => RefS.updateEffect(ref, (fiber) => Effect.gen(function* ($) {
10
+ if (fiber) {
11
+ yield* $(Fiber.interrupt(fiber));
12
12
  }
13
- ref = runFork(pipe(f(a).run(Sink(sink.event, (cause) => Cause.isInterruptedOnly(cause) ? Effect.unit() : sink.error(cause))), Effect.zipLeft(Effect.sync(() => (ref = undefined))), Effect.catchAllCause((cause) => Cause.isInterruptedOnly(cause) ? Effect.unit() : sink.error(cause))));
14
- });
15
- yield* $(fx.run(Sink(switchEvent, sink.error)));
16
- // Wait for the last fiber to finish
17
- if (ref) {
18
- yield* $(Fiber.join(ref));
19
- }
13
+ return yield* $(f(a).run(sink), Effect.zipLeft(reset), Effect.catchAllCause(sink.error), Effect.forkIn(scope));
14
+ }));
15
+ yield* $(Effect.gen(function* ($) {
16
+ yield* $(fx.run(Sink(switchEvent, sink.error)));
17
+ const fiber = yield* $(RefS.get(ref));
18
+ // Wait for the last fiber to finish
19
+ if (fiber) {
20
+ yield* $(Fiber.join(fiber));
21
+ }
22
+ }), Effect.onExit((exit) => Scope.close(scope, exit)));
20
23
  }));
21
24
  }
22
25
  export function switchMapEffect(fx, f) {
@@ -1 +1 @@
1
- {"version":3,"file":"switchMap.js","sourceRoot":"","sources":["../src/switchMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE5C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,UAAU,SAAS,CACvB,EAAe,EACf,CAA0B;IAE1B,OAAO,EAAE,CAAC,CAAK,IAAyB,EAAE,EAAE,CAC1C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAe,CAAC,CAAC,CAAA;QACxE,IAAI,GAAgD,CAAA;QAEpD,MAAM,WAAW,GAAG,CAAC,CAAI,EAAE,EAAE,CAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,IAAI,GAAG,EAAE;gBACP,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;aACnC;YAED,GAAG,GAAG,OAAO,CACX,IAAI,CACF,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACnE,CACF,EACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EACpD,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACnE,CACF,CACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEJ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE/C,oCAAoC;QACpC,IAAI,GAAG,EAAE;YACP,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;SAC1B;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAe,EACf,CAAqC;IAErC,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAkB,EAA2B;IACvE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,EAAsC;IAEtC,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"switchMap.js","sourceRoot":"","sources":["../src/switchMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,UAAU,SAAS,CACvB,EAAe,EACf,CAA0B;IAE1B,OAAO,EAAE,CAAC,CAAK,IAAyB,EAAE,EAAE,CAC1C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAyC,IAAI,CAAC,CAAC,CAAA;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAEjC,MAAM,WAAW,GAAG,CAAC,CAAI,EAAE,EAAE,CAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;aACjC;YAED,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACd,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAChC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACrB,CAAA;QACH,CAAC,CAAC,CACH,CAAA;QAEH,KAAK,CAAC,CAAC,CAAC,CACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAE/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAErC,oCAAoC;YACpC,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;aAC5B;QACH,CAAC,CAAC,EACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAClD,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,EAAe,EACf,CAAqC;IAErC,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAkB,EAA2B;IACvE,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,EAAsC;IAEtC,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC"}