MCPcopy Create free account
hub / github.com/Snowflyt/tinyeffect / andThen

Method andThen

src/effected.ts:941–960  ·  view source on GitHub ↗
(handler: (value: R) => unknown)

Source from the content-addressed store, hash-verified

939 handler: (value: R) => Generator<F, S, unknown> | Effected<F, S> | S,
940 ): Effected<E | F, S>;
941 andThen(handler: (value: R) => unknown): Effected<Effect, unknown> {
942 return effected(() => {
943 const iterator = this[Symbol.iterator]();
944 let originalIteratorDone = false;
945 let appendedIterator: Iterator<Effect, unknown, unknown>;
946 return {
947 next: (...args: [] | [R]) => {
948 if (originalIteratorDone) return appendedIterator.next(...args);
949 const result = iterator.next(...args);
950 if (!result.done) return result;
951 originalIteratorDone = true;
952 const it = handler(result.value);
953 if (!(it instanceof Effected) && !isGenerator(it) && !isEffectedIterator(it))
954 return { done: true, value: it };
955 appendedIterator = Symbol.iterator in it ? it[Symbol.iterator]() : it;
956 return appendedIterator.next();
957 },
958 };
959 });
960 }
961
962 /**
963 * Tap the return value of the effected program.

Callers 1

tapMethod · 0.95

Calls 3

effectedFunction · 0.85
isGeneratorFunction · 0.85
isEffectedIteratorFunction · 0.85

Tested by

no test coverage detected