Files
2025-09-15 18:10:26 +03:00

163 lines
6.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PullFromUpstream = exports.PullFromChild = exports.OP_PULL_FROM_UPSTREAM = exports.OP_PULL_FROM_CHILD = exports.OP_EMIT = exports.OP_DRAIN_CHILD_EXECUTORS = exports.Emit = exports.DrainChildExecutors = void 0;
var Effect = _interopRequireWildcard(require("../../Effect.js"));
var Exit = _interopRequireWildcard(require("../../Exit.js"));
var _Function = require("../../Function.js");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
/** @internal */
const OP_PULL_FROM_CHILD = exports.OP_PULL_FROM_CHILD = "PullFromChild";
/** @internal */
const OP_PULL_FROM_UPSTREAM = exports.OP_PULL_FROM_UPSTREAM = "PullFromUpstream";
/** @internal */
const OP_DRAIN_CHILD_EXECUTORS = exports.OP_DRAIN_CHILD_EXECUTORS = "DrainChildExecutors";
/** @internal */
const OP_EMIT = exports.OP_EMIT = "Emit";
/**
* Execute the `childExecutor` and on each emitted value, decide what to do by
* `onEmit`.
*
* @internal
*/
class PullFromChild {
childExecutor;
parentSubexecutor;
onEmit;
_tag = OP_PULL_FROM_CHILD;
constructor(childExecutor, parentSubexecutor, onEmit) {
this.childExecutor = childExecutor;
this.parentSubexecutor = parentSubexecutor;
this.onEmit = onEmit;
}
close(exit) {
const fin1 = this.childExecutor.close(exit);
const fin2 = this.parentSubexecutor.close(exit);
if (fin1 !== undefined && fin2 !== undefined) {
return Effect.zipWith(Effect.exit(fin1), Effect.exit(fin2), (exit1, exit2) => (0, _Function.pipe)(exit1, Exit.zipRight(exit2)));
} else if (fin1 !== undefined) {
return fin1;
} else if (fin2 !== undefined) {
return fin2;
} else {
return undefined;
}
}
enqueuePullFromChild(_child) {
return this;
}
}
/**
* Execute `upstreamExecutor` and for each emitted element, spawn a child
* channel and continue with processing it by `PullFromChild`.
*
* @internal
*/
exports.PullFromChild = PullFromChild;
class PullFromUpstream {
upstreamExecutor;
createChild;
lastDone;
activeChildExecutors;
combineChildResults;
combineWithChildResult;
onPull;
onEmit;
_tag = OP_PULL_FROM_UPSTREAM;
constructor(upstreamExecutor, createChild, lastDone, activeChildExecutors, combineChildResults, combineWithChildResult, onPull, onEmit) {
this.upstreamExecutor = upstreamExecutor;
this.createChild = createChild;
this.lastDone = lastDone;
this.activeChildExecutors = activeChildExecutors;
this.combineChildResults = combineChildResults;
this.combineWithChildResult = combineWithChildResult;
this.onPull = onPull;
this.onEmit = onEmit;
}
close(exit) {
const fin1 = this.upstreamExecutor.close(exit);
const fins = [...this.activeChildExecutors.map(child => child !== undefined ? child.childExecutor.close(exit) : undefined), fin1];
const result = fins.reduce((acc, next) => {
if (acc !== undefined && next !== undefined) {
return Effect.zipWith(acc, Effect.exit(next), (exit1, exit2) => Exit.zipRight(exit1, exit2));
} else if (acc !== undefined) {
return acc;
} else if (next !== undefined) {
return Effect.exit(next);
} else {
return undefined;
}
}, undefined);
return result === undefined ? result : result;
}
enqueuePullFromChild(child) {
return new PullFromUpstream(this.upstreamExecutor, this.createChild, this.lastDone, [...this.activeChildExecutors, child], this.combineChildResults, this.combineWithChildResult, this.onPull, this.onEmit);
}
}
/**
* Transformed from `PullFromUpstream` when upstream has finished but there
* are still active child executors.
*
* @internal
*/
exports.PullFromUpstream = PullFromUpstream;
class DrainChildExecutors {
upstreamExecutor;
lastDone;
activeChildExecutors;
upstreamDone;
combineChildResults;
combineWithChildResult;
onPull;
_tag = OP_DRAIN_CHILD_EXECUTORS;
constructor(upstreamExecutor, lastDone, activeChildExecutors, upstreamDone, combineChildResults, combineWithChildResult, onPull) {
this.upstreamExecutor = upstreamExecutor;
this.lastDone = lastDone;
this.activeChildExecutors = activeChildExecutors;
this.upstreamDone = upstreamDone;
this.combineChildResults = combineChildResults;
this.combineWithChildResult = combineWithChildResult;
this.onPull = onPull;
}
close(exit) {
const fin1 = this.upstreamExecutor.close(exit);
const fins = [...this.activeChildExecutors.map(child => child !== undefined ? child.childExecutor.close(exit) : undefined), fin1];
const result = fins.reduce((acc, next) => {
if (acc !== undefined && next !== undefined) {
return Effect.zipWith(acc, Effect.exit(next), (exit1, exit2) => Exit.zipRight(exit1, exit2));
} else if (acc !== undefined) {
return acc;
} else if (next !== undefined) {
return Effect.exit(next);
} else {
return undefined;
}
}, undefined);
return result === undefined ? result : result;
}
enqueuePullFromChild(child) {
return new DrainChildExecutors(this.upstreamExecutor, this.lastDone, [...this.activeChildExecutors, child], this.upstreamDone, this.combineChildResults, this.combineWithChildResult, this.onPull);
}
}
/** @internal */
exports.DrainChildExecutors = DrainChildExecutors;
class Emit {
value;
next;
_tag = OP_EMIT;
constructor(value, next) {
this.value = value;
this.next = next;
}
close(exit) {
const result = this.next.close(exit);
return result === undefined ? result : result;
}
enqueuePullFromChild(_child) {
return this;
}
}
exports.Emit = Emit;
//# sourceMappingURL=subexecutor.js.map