UNPKG

@nx/devkit

Version:

The Nx Devkit is used to customize Nx for different technologies and use cases. It contains many utility functions for reading and writing files, updating configuration, working with Abstract Syntax Trees(ASTs), and more. Learn more about [extending Nx by

68 lines (67 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAsyncIterable = createAsyncIterable; function createAsyncIterable(listener) { let done = false; let error = null; let cleanup; const pushQueue = []; const pullQueue = []; return { [Symbol.asyncIterator]() { listener({ next: (value) => { if (done || error) return; if (pullQueue.length > 0) { pullQueue.shift()?.[0]({ value, done: false }); } else { pushQueue.push(value); } }, error: (err) => { if (done || error) return; if (pullQueue.length > 0) { pullQueue.shift()?.[1](err); } error = err; }, done: () => { if (pullQueue.length > 0) { pullQueue.shift()?.[0]({ value: undefined, done: true }); } done = true; }, registerCleanup: (cb) => { cleanup = cb; }, }); return { next() { return new Promise((resolve, reject) => { if (pushQueue.length > 0) { resolve({ value: pushQueue.shift(), done: false }); } else if (done) { resolve({ value: undefined, done: true }); } else if (error) { reject(error); } else { pullQueue.push([resolve, reject]); } }); }, async return() { if (cleanup) { await cleanup(); } return { value: undefined, done: true }; }, }; }, }; }