UNPKG

7.18 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const ARRAY_VALUE = 'value';
4const ARRAY_ERROR = 'error';
5class AsyncSink {
6 constructor() {
7 this._ended = false;
8 this._values = [];
9 this._resolvers = [];
10 }
11 [Symbol.asyncIterator]() {
12 return this;
13 }
14 write(value) {
15 this._push({ type: ARRAY_VALUE, value });
16 }
17 error(error) {
18 this._push({ type: ARRAY_ERROR, error });
19 }
20 _push(item) {
21 if (this._ended) {
22 throw new Error('AsyncSink already ended');
23 }
24 if (this._resolvers.length > 0) {
25 const { resolve, reject } = this._resolvers.shift();
26 if (item.type === ARRAY_ERROR) {
27 reject(item.error);
28 }
29 else {
30 resolve({ done: false, value: item.value });
31 }
32 }
33 else {
34 this._values.push(item);
35 }
36 }
37 next() {
38 if (this._values.length > 0) {
39 const { type, value, error } = this._values.shift();
40 if (type === ARRAY_ERROR) {
41 return Promise.reject(error);
42 }
43 else {
44 return Promise.resolve({ done: false, value });
45 }
46 }
47 if (this._ended) {
48 return Promise.resolve({ done: true });
49 }
50 return new Promise((resolve, reject) => {
51 this._resolvers.push({ resolve, reject });
52 });
53 }
54 end() {
55 while (this._resolvers.length > 0) {
56 this._resolvers.shift().resolve({ done: true });
57 }
58 this._ended = true;
59 }
60}
61exports.AsyncSink = AsyncSink;
62
63//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUE2QixDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQWpFRCw4QkFpRUMiLCJmaWxlIjoiYXN5bmNzaW5rLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQVJSQVlfVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgQVJSQVlfRVJST1IgPSAnZXJyb3InO1xuXG5pbnRlcmZhY2UgQXN5bmNTaW5rSXRlbTxUPiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU/OiBUO1xuICBlcnJvcj86IGFueTtcbn1cblxuaW50ZXJmYWNlIEFzeW5jUmVzb2x2ZXI8VD4ge1xuICByZXNvbHZlOiAodmFsdWU/OiBUIHwgUHJvbWlzZUxpa2U8VD4gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEFzeW5jU2luazxUU291cmNlPiBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUU291cmNlPiB7XG4gIHByaXZhdGUgX2VuZGVkOiBib29sZWFuO1xuICBwcml2YXRlIF92YWx1ZXM6IEFzeW5jU2lua0l0ZW08VFNvdXJjZT5bXTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZXJzOiBBc3luY1Jlc29sdmVyPEl0ZXJhdG9yUmVzdWx0PFRTb3VyY2U+PltdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgdGhpcy5fcmVzb2x2ZXJzID0gW107XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd3JpdGUodmFsdWU6IFRTb3VyY2UpIHtcbiAgICB0aGlzLl9wdXNoKHsgdHlwZTogQVJSQVlfVkFMVUUsIHZhbHVlIH0pO1xuICB9XG5cbiAgZXJyb3IoZXJyb3I6IGFueSkge1xuICAgIHRoaXMuX3B1c2goeyB0eXBlOiBBUlJBWV9FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICBwcml2YXRlIF9wdXNoKGl0ZW06IEFzeW5jU2lua0l0ZW08VFNvdXJjZT4pIHtcbiAgICBpZiAodGhpcy5fZW5kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXN5bmNTaW5rIGFscmVhZHkgZW5kZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVzb2x2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSB0aGlzLl9yZXNvbHZlcnMuc2hpZnQoKSE7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBBUlJBWV9FUlJPUikge1xuICAgICAgICByZWplY3QoaXRlbS5lcnJvciEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogaXRlbS52YWx1ZSEgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHZhbHVlLCBlcnJvciB9ID0gdGhpcy5fdmFsdWVzLnNoaWZ0KCkhO1xuICAgICAgaWYgKHR5cGUgPT09IEFSUkFZX0VSUk9SKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlIH0gYXMgSXRlcmF0b3JSZXN1bHQ8VFNvdXJjZT4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IHRydWUgfSBhcyBJdGVyYXRvclJlc3VsdDxUU291cmNlPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFRTb3VyY2U+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlcnMucHVzaCh7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGVuZCgpIHtcbiAgICB3aGlsZSAodGhpcy5fcmVzb2x2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVycy5zaGlmdCgpIS5yZXNvbHZlKHsgZG9uZTogdHJ1ZSB9IGFzIEl0ZXJhdG9yUmVzdWx0PFRTb3VyY2U+KTtcbiAgICB9XG4gICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=