evnty
Version:
0-Deps, simple, fast, for browser and node js reactive anonymous event library
83 lines (81 loc) • 2.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Signal", {
enumerable: true,
get: function() {
return Signal;
}
});
const _callablecjs = require("./callable.cjs");
class Signal extends _callablecjs.Callable {
abortSignal;
rx;
constructor(abortSignal){
super((value)=>{
if (this.rx) {
this.rx.resolve(value);
this.rx = undefined;
return true;
} else {
return false;
}
}), this.abortSignal = abortSignal;
this.abortSignal?.addEventListener('abort', ()=>{
this.rx?.reject(this.abortSignal.reason);
this.rx = undefined;
}, {
once: true
});
}
get [Symbol.toStringTag]() {
return `Signal(${this.abortSignal?.aborted ? 'stopped' : 'active'})`;
}
get promise() {
return this.next();
}
async next() {
if (this.abortSignal?.aborted) {
return Promise.reject(this.abortSignal.reason);
}
if (!this.rx) {
this.rx = Promise.withResolvers();
}
return this.rx.promise;
}
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: ()=>{
return Promise.resolve({
value: undefined,
done: true
});
}
};
}
}
//# sourceMappingURL=signal.cjs.map