1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | class 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 | }
|
72 | exports.ConsensusQueue = ConsensusQueue;
|
73 |
|
74 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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Q3JCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3QztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7Q0FDRjtBQWxGRCx3Q0FrRkMiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvbnNlbnN1cy9zcmMvQ29uc2Vuc3VzUXVldWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xudHlwZSBJdGVtID0geyByZWFkb25seSB0eXBlOiAndmFsdWUnOyByZWFkb25seSB2YWx1ZTogRXZlbnQgfSB8IHsgcmVhZG9ubHkgdHlwZTogJ2Vycm9yJzsgcmVhZG9ubHkgZXJyb3I6IEVycm9yIH07XG5pbnRlcmZhY2UgUmVzb2x2ZXIge1xuICByZWFkb25seSByZXNvbHZlOiAodmFsdWU6IEl0ZXJhdG9yUmVzdWx0PEV2ZW50PikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgcmVqZWN0OiAocmVhc29uOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnNlbnN1c1F1ZXVlIGltcGxlbWVudHMgQXN5bmNJdGVyYXRvcjxFdmVudD4ge1xuICBwcml2YXRlIG11dGFibGVJdGVtczogSXRlbVtdO1xuICBwcml2YXRlIG11dGFibGVSZXNvbHZlcnM6IFJlc29sdmVyW107XG4gIHByaXZhdGUgbXV0YWJsZURvbmVJbnRlcm5hbDogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVSZXNvbHZlcnMgPSBbXTtcbiAgICB0aGlzLm11dGFibGVEb25lSW50ZXJuYWwgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5tdXRhYmxlSXRlbXMuc2hpZnQoKTtcbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdXRhYmxlRG9uZUludGVybmFsKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByb21pc2UtbXVzdC1jb21wbGV0ZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxFdmVudD4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubXV0YWJsZVJlc29sdmVycy5wdXNoKHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHZhbHVlOiBFdmVudCk6IHZvaWQge1xuICAgIGxldCBwdXNoVGltZXIgPSBmYWxzZTtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ2hhbmRsZVBlcnNpc3RCbG9jaycpIHtcbiAgICAgIHB1c2hUaW1lciA9IHRoaXMubXV0YWJsZUl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbHVlJyAmJiBpdGVtLnZhbHVlLnR5cGUgPT09ICd0aW1lcicpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlIH0pO1xuICAgIGlmIChwdXNoVGltZXIpIHtcbiAgICAgIHRoaXMucHVzaCh7IHR5cGU6ICd2YWx1ZScsIHZhbHVlOiB7IHR5cGU6ICd0aW1lcicgfSB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgZXJyb3IgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5tdXRhYmxlSXRlbXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBkb25lKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLmZvckVhY2goKHsgcmVzb2x2ZSB9KSA9PiByZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIGFueSkpO1xuICAgIHRoaXMubXV0YWJsZVJlc29sdmVycyA9IFtdO1xuICAgIHRoaXMubXV0YWJsZURvbmVJbnRlcm5hbCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHB1c2goaXRlbTogSXRlbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11dGFibGVEb25lSW50ZXJuYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2Vuc3VzUXVldWUgYWxyZWFkeSBlbmRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVyID0gdGhpcy5tdXRhYmxlUmVzb2x2ZXJzLnNoaWZ0KCk7XG4gICAgaWYgKHJlc29sdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSByZXNvbHZlcjtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmVqZWN0KGl0ZW0uZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhYmxlSXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|