evnty
Version:
0-Deps, simple, fast, for browser and node js reactive anonymous event library
87 lines (85 loc) • 2.36 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Sequence", {
enumerable: true,
get: function() {
return Sequence;
}
});
const _callablecjs = require("./callable.cjs");
const _signalcjs = require("./signal.cjs");
class Sequence extends _callablecjs.Callable {
abortSignal;
sequence;
nextSignal;
constructor(abortSignal){
super((value)=>{
if (this.abortSignal?.aborted) {
this.nextSignal(false);
return false;
} else {
this.sequence.push(value);
if (this.sequence.length === 1) {
this.nextSignal(true);
}
return true;
}
}), this.abortSignal = abortSignal;
this.sequence = [];
this.nextSignal = new _signalcjs.Signal(this.abortSignal);
this.abortSignal?.addEventListener('abort', ()=>{
this.nextSignal(false);
}, {
once: true
});
}
get [Symbol.toStringTag]() {
return `Sequence(${this.abortSignal?.aborted ? 'stopped' : 'active'})`;
}
get promise() {
return this.next();
}
async next() {
if (!this.sequence.length) {
await this.nextSignal;
}
return this.sequence.shift();
}
catch(onrejected) {
return this.promise.catch(onrejected);
}
finally(onfinally) {
return this.promise.finally(onfinally);
}
then(onfulfilled, onrejected) {
return this.promise.then(onfulfilled, onrejected);
}
[Symbol.asyncIterator]() {
return {
next: async ()=>{
try {
const value = await this;
return {
value,
done: false
};
} catch {
return {
value: undefined,
done: true
};
}
},
return: ()=>{
this.nextSignal(false);
return Promise.resolve({
value: undefined,
done: true
});
}
};
}
}
//# sourceMappingURL=sequence.cjs.map