UNPKG

3.84 kBSource Map (JSON)View Raw
1{"version":3,"sources":["asynciterable/asyncsink.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,WAAW,GAAG,OAAO,CAAC;AAa5B,MAAM,OAAO,SAAS;IAKpB;QACE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAU;QACd,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,IAA4B;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAG,CAAC;YACrD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;aACrB;iBAAM;gBACL,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAM,EAAE,CAAC,CAAC;aAC9C;SACF;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAC;YACrD,IAAI,IAAI,KAAK,WAAW,EAAE;gBACxB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC9B;iBAAM;gBACL,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAA6B,CAAC,CAAC;aAC3E;SACF;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAA6B,CAAC,CAAC;SACnE;QAED,OAAO,IAAI,OAAO,CAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAA6B,CAAC,CAAC;SAC7E;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF","file":"asyncsink.js","sourcesContent":["const ARRAY_VALUE = 'value';\nconst ARRAY_ERROR = 'error';\n\ninterface AsyncSinkItem<T> {\n type: string;\n value?: T;\n error?: any;\n}\n\ninterface AsyncResolver<T> {\n resolve: (value?: T | PromiseLike<T> | undefined) => void;\n reject: (reason?: any) => void;\n}\n\nexport class AsyncSink<TSource> implements AsyncIterableIterator<TSource> {\n private _ended: boolean;\n private _values: AsyncSinkItem<TSource>[];\n private _resolvers: AsyncResolver<IteratorResult<TSource>>[];\n\n constructor() {\n this._ended = false;\n this._values = [];\n this._resolvers = [];\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n write(value: TSource) {\n this._push({ type: ARRAY_VALUE, value });\n }\n\n error(error: any) {\n this._push({ type: ARRAY_ERROR, error });\n }\n\n private _push(item: AsyncSinkItem<TSource>) {\n if (this._ended) {\n throw new Error('AsyncSink already ended');\n }\n\n if (this._resolvers.length > 0) {\n const { resolve, reject } = this._resolvers.shift()!;\n if (item.type === ARRAY_ERROR) {\n reject(item.error!);\n } else {\n resolve({ done: false, value: item.value! });\n }\n } else {\n this._values.push(item);\n }\n }\n\n next() {\n if (this._values.length > 0) {\n const { type, value, error } = this._values.shift()!;\n if (type === ARRAY_ERROR) {\n return Promise.reject(error);\n } else {\n return Promise.resolve({ done: false, value } as IteratorResult<TSource>);\n }\n }\n\n if (this._ended) {\n return Promise.resolve({ done: true } as IteratorResult<TSource>);\n }\n\n return new Promise<IteratorResult<TSource>>((resolve, reject) => {\n this._resolvers.push({ resolve, reject });\n });\n }\n\n end() {\n while (this._resolvers.length > 0) {\n this._resolvers.shift()!.resolve({ done: true } as IteratorResult<TSource>);\n }\n this._ended = true;\n }\n}\n"]}
\No newline at end of file