UNPKG

8.92 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 // tslint:disable-next-line no-any
22 return Promise.resolve({ done: true });
23 }
24 // tslint:disable-next-line promise-must-complete
25 return new Promise((resolve, reject) => {
26 this.mutableResolvers.push({ resolve, reject });
27 });
28 }
29 write(value) {
30 let pushTimer = false;
31 if (value.type === 'handlePersistBlock') {
32 pushTimer = this.mutableItems.some((item) => item.type === 'value' && item.value.type === 'timer');
33 this.clear();
34 }
35 this.push({ type: 'value', value });
36 if (pushTimer) {
37 this.push({ type: 'value', value: { type: 'timer' } });
38 }
39 }
40 error(error) {
41 this.push({ type: 'error', error });
42 }
43 clear() {
44 this.mutableItems = [];
45 }
46 done() {
47 this.clear();
48 // tslint:disable-next-line no-any
49 this.mutableResolvers.forEach(({ resolve }) => resolve({ done: true }));
50 this.mutableResolvers = [];
51 this.mutableDoneInternal = true;
52 }
53 push(item) {
54 if (this.mutableDoneInternal) {
55 throw new Error('ConsensusQueue already ended');
56 }
57 const resolver = this.mutableResolvers.shift();
58 if (resolver !== undefined) {
59 const { resolve, reject } = resolver;
60 if (item.type === 'error') {
61 reject(item.error);
62 }
63 else {
64 resolve({ done: false, value: item.value });
65 }
66 }
67 else {
68 this.mutableItems.push(item);
69 }
70 }
71}
72exports.ConsensusQueue = ConsensusQueue;
73
74//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q3JCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3QztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7Q0FDRjtBQWxGRCx3Q0FrRkMiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvbnNlbnN1cy9zcmMvQ29uc2Vuc3VzUXVldWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xudHlwZSBJdGVtID0geyByZWFkb25seSB0eXBlOiAndmFsdWUnOyByZWFkb25seSB2YWx1ZTogRXZlbnQgfSB8IHsgcmVhZG9ubHkgdHlwZTogJ2Vycm9yJzsgcmVhZG9ubHkgZXJyb3I6IEVycm9yIH07XG5pbnRlcmZhY2UgUmVzb2x2ZXIge1xuICByZWFkb25seSByZXNvbHZlOiAodmFsdWU6IEl0ZXJhdG9yUmVzdWx0PEV2ZW50PikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgcmVqZWN0OiAocmVhc29uOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnNlbnN1c1F1ZXVlIGltcGxlbWVudHMgQXN5bmNJdGVyYXRvcjxFdmVudD4ge1xuICBwcml2YXRlIG11dGFibGVJdGVtczogSXRlbVtdO1xuICBwcml2YXRlIG11dGFibGVSZXNvbHZlcnM6IFJlc29sdmVyW107XG4gIHByaXZhdGUgbXV0YWJsZURvbmVJbnRlcm5hbDogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVSZXNvbHZlcnMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVEb25lSW50ZXJuYWwgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5tdXRhYmxlSXRlbXMuc2hpZnQoKTtcbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdXRhYmxlRG9uZUludGVybmFsKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByb21pc2UtbXVzdC1jb21wbGV0ZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubXV0YWJsZVJlc29sdmVycy5wdXNoKHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHZhbHVlOiBFdmVudCk6IHZvaWQge1xuICAgIGxldCBwdXNoVGltZXIgPSBmYWxzZTtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ2hhbmRsZVBlcnNpc3RCbG9jaycpIHtcbiAgICAgIHB1c2hUaW1lciA9IHRoaXMubXV0YWJsZUl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbHVlJyAmJiBpdGVtLnZhbHVlLnR5cGUgPT09ICd0aW1lcicpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlIH0pO1xuICAgIGlmIChwdXNoVGltZXIpIHtcbiAgICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiB7IHR5cGU6ICd0aW1lcicgfSB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgZXJyb3IgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBkb25lKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLmZvckVhY2goKHsgcmVzb2x2ZSB9KSA9PiByZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSkpO1xuICAgIHRoaXMubXV0YWJsZVJlc29sdmVycyA9IFtdO1xuICAgIHRoaXMubXV0YWJsZURvbmVJbnRlcm5hbCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHB1c2goaXRlbTogSXRlbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11dGFibGVEb25lSW50ZXJuYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2Vuc3VzUXVldWUgYWxyZWFkeSBlbmRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLnNoaWZ0KCk7XG4gICAgaWYgKHJlc29sdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSByZXNvbHZlcjtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmVqZWN0KGl0ZW0uZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhYmxlSXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==