UNPKG

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