diff --git a/src/streams.ts b/src/streams.ts new file mode 100644 index 0000000..9f465c0 --- /dev/null +++ b/src/streams.ts @@ -0,0 +1,33 @@ +function idFactory(start = 1, step = 1, limit = 2 ** 32) { + let id = start; + + return function nextId() { + const nextId = id; + id += step; + if (id >= limit) id = start; + return nextId; + }; +} + +export interface StreamFileResponse { + data?: Uint8Array; + done: boolean; +} + +const nextId = idFactory(1); +const streams = new Map>(); + +export function getStream(id: number): AsyncIterable | boolean { + if (!streams.has(id)) { + return false; + } + + return streams.get(id) as AsyncIterable; +} + +export function addStream(stream: AsyncIterable): number { + const id = nextId(); + streams.set(id, stream); + + return id; +}