UNPKG

lazzy.ts

Version:

Fast and lightweight library for lazy operations with iterable objects.

127 lines 6.3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _Channel_puts, _Channel_takes, _Channel_closed, _Channel_requestedForClose, _Channel_resolveWhenClosed, _Channel_whenClosedPromise; Object.defineProperty(exports, "__esModule", { value: true }); exports.Channel = exports.isClosed = exports.CLOSED = void 0; const queue_1 = require("../common/queue"); const closedSymbol = Symbol("Closed"); exports.CLOSED = { [closedSymbol]: true, }; function isClosed(value) { return value === exports.CLOSED; } exports.isClosed = isClosed; class Channel { constructor(...source) { _Channel_puts.set(this, new queue_1.Queue()); _Channel_takes.set(this, new queue_1.Queue()); _Channel_closed.set(this, false); _Channel_requestedForClose.set(this, false); _Channel_resolveWhenClosed.set(this, void 0); _Channel_whenClosedPromise.set(this, new Promise(resolve => { __classPrivateFieldSet(this, _Channel_resolveWhenClosed, resolve, "f"); })); for (const value of source) { new Promise((resolvePut) => { __classPrivateFieldGet(this, _Channel_puts, "f").enqueue(() => { resolvePut(); return value; }); }); } } closeChannel() { __classPrivateFieldSet(this, _Channel_closed, true, "f"); if (__classPrivateFieldGet(this, _Channel_takes, "f").isNotEmpty()) { __classPrivateFieldGet(this, _Channel_takes, "f").dequeue()(exports.CLOSED); } if (__classPrivateFieldGet(this, _Channel_resolveWhenClosed, "f") != null) { __classPrivateFieldGet(this, _Channel_resolveWhenClosed, "f").call(this); } } close() { __classPrivateFieldSet(this, _Channel_requestedForClose, true, "f"); if (__classPrivateFieldGet(this, _Channel_puts, "f").isEmpty()) { this.closeChannel(); } } ; forceClose() { __classPrivateFieldSet(this, _Channel_requestedForClose, true, "f"); this.closeChannel(); } whenClosed() { return __classPrivateFieldGet(this, _Channel_whenClosedPromise, "f"); } isClosed() { return __classPrivateFieldGet(this, _Channel_closed, "f"); } isRequestedForClose() { return __classPrivateFieldGet(this, _Channel_requestedForClose, "f"); } reopen() { __classPrivateFieldSet(this, _Channel_closed, false, "f"); __classPrivateFieldSet(this, _Channel_requestedForClose, false, "f"); __classPrivateFieldSet(this, _Channel_whenClosedPromise, new Promise(resolve => { __classPrivateFieldSet(this, _Channel_resolveWhenClosed, resolve, "f"); }), "f"); } put(value) { return __awaiter(this, void 0, void 0, function* () { if (__classPrivateFieldGet(this, _Channel_requestedForClose, "f")) return; return new Promise(resolvePut => { if (__classPrivateFieldGet(this, _Channel_takes, "f").isNotEmpty()) { __classPrivateFieldGet(this, _Channel_takes, "f").dequeue()(value); resolvePut(); } else { __classPrivateFieldGet(this, _Channel_puts, "f").enqueue(() => { resolvePut(); return value; }); } }); }); } take() { return __awaiter(this, void 0, void 0, function* () { if (__classPrivateFieldGet(this, _Channel_closed, "f")) return exports.CLOSED; return new Promise(resolveTake => { if (__classPrivateFieldGet(this, _Channel_puts, "f").isNotEmpty()) { resolveTake(__classPrivateFieldGet(this, _Channel_puts, "f").dequeue()()); if (__classPrivateFieldGet(this, _Channel_requestedForClose, "f") && __classPrivateFieldGet(this, _Channel_puts, "f").isEmpty()) { this.closeChannel(); } } else { __classPrivateFieldGet(this, _Channel_takes, "f").enqueue(resolveTake); } }); }); } } exports.Channel = Channel; _Channel_puts = new WeakMap(), _Channel_takes = new WeakMap(), _Channel_closed = new WeakMap(), _Channel_requestedForClose = new WeakMap(), _Channel_resolveWhenClosed = new WeakMap(), _Channel_whenClosedPromise = new WeakMap(); //# sourceMappingURL=channel.js.map