UNPKG

8.72 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3class ConsensusQueue {
4 constructor() {
5 this.mutableItems = [];
6 this.mutableResolvers = [];
7 this.mutableDoneInternal = false;
8 }
9 [Symbol.asyncIterator]() {
10 return this;
11 }
12 async next() {
13 const item = this.mutableItems.shift();
14 if (item !== undefined) {
15 if (item.type === 'error') {
16 return Promise.reject(item.error);
17 }
18 return Promise.resolve({ done: false, value: item.value });
19 }
20 if (this.mutableDoneInternal) {
21 return Promise.resolve({ done: true });
22 }
23 return new Promise((resolve, reject) => {
24 this.mutableResolvers.push({ resolve, reject });
25 });
26 }
27 write(value) {
28 let pushTimer = false;
29 if (value.type === 'handlePersistBlock') {
30 pushTimer = this.mutableItems.some((item) => item.type === 'value' && item.value.type === 'timer');
31 this.clear();
32 }
33 this.push({ type: 'value', value });
34 if (pushTimer) {
35 this.push({ type: 'value', value: { type: 'timer' } });
36 }
37 }
38 error(error) {
39 this.push({ type: 'error', error });
40 }
41 clear() {
42 this.mutableItems = [];
43 }
44 done() {
45 this.clear();
46 this.mutableResolvers.forEach(({ resolve }) => resolve({ done: true }));
47 this.mutableResolvers = [];
48 this.mutableDoneInternal = true;
49 }
50 push(item) {
51 if (this.mutableDoneInternal) {
52 throw new Error('ConsensusQueue already ended');
53 }
54 const resolver = this.mutableResolvers.shift();
55 if (resolver !== undefined) {
56 const { resolve, reject } = resolver;
57 if (item.type === 'error') {
58 reject(item.error);
59 }
60 else {
61 resolve({ done: false, value: item.value });
62 }
63 }
64 else {
65 this.mutableItems.push(item);
66 }
67 }
68}
69exports.ConsensusQueue = ConsensusQueue;
70
71//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnNlbnN1c1F1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0EsTUFBYSxjQUFjO0lBS3pCO1FBQ0UsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25DO1lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUU1QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFTLENBQUMsQ0FBQztTQUMvQztRQUdELE9BQU8sSUFBSSxPQUFPLENBQXdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBWTtRQUN2QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFO1lBQ3ZDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7WUFDbkcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBUyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVPLElBQUksQ0FBQyxJQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3QztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7Q0FDRjtBQWxGRCx3Q0FrRkMiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvbnNlbnN1cy9zcmMvQ29uc2Vuc3VzUXVldWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xudHlwZSBJdGVtID0geyByZWFkb25seSB0eXBlOiAndmFsdWUnOyByZWFkb25seSB2YWx1ZTogRXZlbnQgfSB8IHsgcmVhZG9ubHkgdHlwZTogJ2Vycm9yJzsgcmVhZG9ubHkgZXJyb3I6IEVycm9yIH07XG5pbnRlcmZhY2UgUmVzb2x2ZXIge1xuICByZWFkb25seSByZXNvbHZlOiAodmFsdWU6IEl0ZXJhdG9yUmVzdWx0PEV2ZW50PikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgcmVqZWN0OiAocmVhc29uOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnNlbnN1c1F1ZXVlIGltcGxlbWVudHMgQXN5bmNJdGVyYXRvcjxFdmVudD4ge1xuICBwcml2YXRlIG11dGFibGVJdGVtczogSXRlbVtdO1xuICBwcml2YXRlIG11dGFibGVSZXNvbHZlcnM6IFJlc29sdmVyW107XG4gIHByaXZhdGUgbXV0YWJsZURvbmVJbnRlcm5hbDogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVSZXNvbHZlcnMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVEb25lSW50ZXJuYWwgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5tdXRhYmxlSXRlbXMuc2hpZnQoKTtcbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdXRhYmxlRG9uZUludGVybmFsKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByb21pc2UtbXVzdC1jb21wbGV0ZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubXV0YWJsZVJlc29sdmVycy5wdXNoKHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHZhbHVlOiBFdmVudCk6IHZvaWQge1xuICAgIGxldCBwdXNoVGltZXIgPSBmYWxzZTtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ2hhbmRsZVBlcnNpc3RCbG9jaycpIHtcbiAgICAgIHB1c2hUaW1lciA9IHRoaXMubXV0YWJsZUl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbHVlJyAmJiBpdGVtLnZhbHVlLnR5cGUgPT09ICd0aW1lcicpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlIH0pO1xuICAgIGlmIChwdXNoVGltZXIpIHtcbiAgICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiB7IHR5cGU6ICd0aW1lcicgfSB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgZXJyb3IgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBkb25lKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLmZvckVhY2goKHsgcmVzb2x2ZSB9KSA9PiByZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSkpO1xuICAgIHRoaXMubXV0YWJsZVJlc29sdmVycyA9IFtdO1xuICAgIHRoaXMubXV0YWJsZURvbmVJbnRlcm5hbCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHB1c2goaXRlbTogSXRlbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11dGFibGVEb25lSW50ZXJuYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2Vuc3VzUXVldWUgYWxyZWFkeSBlbmRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLnNoaWZ0KCk7XG4gICAgaWYgKHJlc29sdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSByZXNvbHZlcjtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmVqZWN0KGl0ZW0uZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhYmxlSXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==