UNPKG

@react-slate/core

Version:

Write interactive CLI apps with React

75 lines 2.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function capitalize(text) { return text .split(' ') .map(word => `${word[0].toUpperCase()}${word.slice(1)}`) .join(' '); } exports.capitalize = capitalize; class AsyncIterator { constructor(maxIterations) { this.maxIterations = maxIterations; this.awaitingData = []; this.iteration = 0; this.isDone = false; } nextValue(value) { if (this.isDone) { return; } if (this.awaitingResolver) { this.awaitingResolver(value); this.awaitingResolver = undefined; } else { this.awaitingData.push(value); } } finish(value) { if (this.awaitingResolver) { this.awaitingResolver(value); } this.isDone = true; } makeIterator(target) { const self = this; return Object.assign(target, { [Symbol.iterator]() { return { next: () => { if ((self.maxIterations && self.iteration >= self.maxIterations - 1) || self.isDone) { return { done: true, value: Promise.resolve(undefined), }; } else { self.iteration++; } let value; if (self.awaitingResolver) { throw new Error('Cannot call next on iterator, if previous promise has not yet resolved'); } if (self.awaitingData.length) { value = Promise.resolve(self.awaitingData.shift()); } else { value = new Promise(resolve => { self.awaitingResolver = resolve; }); } return { done: false, value, }; }, }; }, }); } } exports.AsyncIterator = AsyncIterator; //# sourceMappingURL=utils.js.map