@react-slate/core
Version:
Write interactive CLI apps with React
75 lines • 2.44 kB
JavaScript
;
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