Initial Sample.

This commit is contained in:
2024-06-03 20:23:50 +05:30
parent ef2b65f673
commit 5269ec3c66
2575 changed files with 282312 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
// @ts-ignore
import asyncIterator from './iterators/async.mjs';
// @ts-ignore
import nodeStreamIterator from './iterators/nodeStream.mjs';
// @ts-ignore
import promiseIterator from './iterators/promise.mjs';
// @ts-ignore
import readerIterator from './iterators/reader.mjs';
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
/**
* @param response A response. Supports fetch, node-fetch, and cross-fetch
*/ export default function responseIterator(response) {
if (response === undefined) throw new Error('Missing response for responseIterator');
// determine the body
let body = response;
if (response.body) body = response.body;
else if (response.data) body = response.data;
else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
/* c8 ignore stop */ // adapt the body
if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator(body);
/* c8 ignore start */ if (body.getReader) return readerIterator(body.getReader());
if (body.stream) return readerIterator(body.stream().getReader());
if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
if (body.pipe) return nodeStreamIterator(body);
/* c8 ignore stop */ throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');
};

View File

@@ -0,0 +1 @@
{"version":3,"sources":["index.ts"],"sourcesContent":["import { AxiosResponse } from 'axios';\nimport { Response as NodeResponse } from 'node-fetch';\nimport { Readable as NodeReadableStream } from 'stream';\n\n// @ts-ignore\nimport asyncIterator from './iterators/async.ts';\n// @ts-ignore\nimport nodeStreamIterator from './iterators/nodeStream.ts';\n// @ts-ignore\nimport promiseIterator from './iterators/promise.ts';\n// @ts-ignore\nimport readerIterator from './iterators/reader.ts';\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nconst hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: unknown): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error('Missing response for responseIterator');\n\n // determine the body\n let body: unknown = response;\n if ((response as NodeResponse).body) body = (response as NodeResponse).body;\n // node-fetch, browser fetch, undici\n else if ((response as AxiosResponse).data) body = (response as AxiosResponse).data;\n // axios\n /* c8 ignore start */ else if ((response as CrossFetchResponse)._bodyBlob) body = (response as CrossFetchResponse)._bodyBlob; // cross-fetch\n /* c8 ignore stop */\n\n // adapt the body\n if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator<T>(body as AsyncIterableIterator<T>);\n /* c8 ignore start */\n if ((body as ReadableStream<T>).getReader) return readerIterator<T>((body as ReadableStream<T>).getReader());\n if ((body as Blob).stream) return readerIterator<T>(((body as Blob).stream() as unknown as ReadableStream<T>).getReader());\n if ((body as Blob).arrayBuffer) return promiseIterator<T>((body as Blob).arrayBuffer());\n if ((body as NodeReadableStream).pipe) return nodeStreamIterator<T>(body as NodeReadableStream);\n /* c8 ignore stop */\n\n throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');\n}\n"],"names":["asyncIterator","nodeStreamIterator","promiseIterator","readerIterator","hasIterator","Symbol","responseIterator","response","undefined","Error","body","data","_bodyBlob","getReader","stream","arrayBuffer","pipe"],"mappings":"AAIA,aAAa;AACb,OAAOA,aAAa,MAAM,sBAAsB,CAAC;AACjD,aAAa;AACb,OAAOC,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,aAAa;AACb,OAAOC,eAAe,MAAM,wBAAwB,CAAC;AACrD,aAAa;AACb,OAAOC,cAAc,MAAM,uBAAuB,CAAC;AAMnD,MAAMC,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACL,aAAa,AAAC;AAE1E;;GAEG,CACH,eAAe,SAASM,gBAAgB,CAAIC,QAAiB,EAA4B;IACvF,IAAIA,QAAQ,KAAKC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErF,qBAAqB;IACrB,IAAIC,IAAI,GAAYH,QAAQ,AAAC;IAC7B,IAAI,AAACA,QAAQ,CAAkBG,IAAI,EAAEA,IAAI,GAAG,AAACH,QAAQ,CAAkBG,IAAI,CAAC;SAEvE,IAAI,AAACH,QAAQ,CAAmBI,IAAI,EAAED,IAAI,GAAG,AAACH,QAAQ,CAAmBI,IAAI,CAAC;SAExD,IAAI,AAACJ,QAAQ,CAAwBK,SAAS,EAAEF,IAAI,GAAG,AAACH,QAAQ,CAAwBK,SAAS,CAAC,CAAC,cAAc;IAC5I,oBAAoB,CAEpB,iBAAiB;IACjB,IAAIR,WAAW,IAAIM,IAAI,CAACL,MAAM,CAACL,aAAa,CAAC,EAAE,OAAOA,aAAa,CAAIU,IAAI,CAA6B,CAAC;IACzG,qBAAqB,CACrB,IAAI,AAACA,IAAI,CAAuBG,SAAS,EAAE,OAAOV,cAAc,CAAI,AAACO,IAAI,CAAuBG,SAAS,EAAE,CAAC,CAAC;IAC7G,IAAI,AAACH,IAAI,CAAUI,MAAM,EAAE,OAAOX,cAAc,CAAI,AAAC,AAACO,IAAI,CAAUI,MAAM,EAAE,CAAkCD,SAAS,EAAE,CAAC,CAAC;IAC3H,IAAI,AAACH,IAAI,CAAUK,WAAW,EAAE,OAAOb,eAAe,CAAI,AAACQ,IAAI,CAAUK,WAAW,EAAE,CAAC,CAAC;IACxF,IAAI,AAACL,IAAI,CAAwBM,IAAI,EAAE,OAAOf,kBAAkB,CAAIS,IAAI,CAAuB,CAAC;IAChG,oBAAoB,CAEpB,MAAM,IAAID,KAAK,CAAC,yFAAyF,CAAC,CAAC;CAC5G,CAAA"}

View File

@@ -0,0 +1,11 @@
export default function asyncIterator(source) {
const iterator = source[Symbol.asyncIterator]();
return {
next () {
return iterator.next();
},
[Symbol.asyncIterator] () {
return this;
}
};
};

View File

@@ -0,0 +1 @@
{"version":3,"sources":["async.ts"],"sourcesContent":["export default function asyncIterator<T>(source): AsyncIterableIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n"],"names":["asyncIterator","source","iterator","Symbol","next"],"mappings":"AAAA,eAAe,SAASA,aAAa,CAAIC,MAAM,EAA4B;IACzE,MAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACH,aAAa,CAAC,EAAE,AAAC;IAChD,OAAO;QACLI,IAAI,IAAwC;YAC1C,OAAOF,QAAQ,CAACE,IAAI,EAAE,CAAC;SACxB;QACD,CAACD,MAAM,CAACH,aAAa,CAAC,IAAqB;YACzC,OAAO,IAAI,CAAC;SACb;KACF,CAA6B;CAC/B,CAAA"}

View File

@@ -0,0 +1,76 @@
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
/* c8 ignore start */ export default function nodeStreamIterator(stream) {
let cleanup = null;
let error = null;
let done = false;
const data = [];
const waiting = [];
function onData(chunk) {
if (error) return;
if (waiting.length) return waiting.shift()[0]({
value: chunk,
done: false
});
data.push(chunk);
}
function onError(err) {
error = err;
const all = waiting.slice();
all.forEach(function(pair) {
pair[1](err);
});
!cleanup || cleanup();
}
function onEnd() {
done = true;
const all = waiting.slice();
all.forEach(function(pair) {
pair[0]({
value: undefined,
done: true
});
});
!cleanup || cleanup();
}
cleanup = function() {
cleanup = null;
stream.removeListener('data', onData);
stream.removeListener('error', onError);
stream.removeListener('end', onEnd);
stream.removeListener('finish', onEnd);
stream.removeListener('close', onEnd);
};
stream.on('data', onData);
stream.on('error', onError);
stream.on('end', onEnd);
stream.on('finish', onEnd);
stream.on('close', onEnd);
function getNext() {
return new Promise(function(resolve, reject) {
if (error) return reject(error);
if (data.length) return resolve({
value: data.shift(),
done: false
});
if (done) return resolve({
value: undefined,
done: true
});
waiting.push([
resolve,
reject
]);
});
}
const iterator = {
next () {
return getNext();
}
};
if (hasIterator) {
iterator[Symbol.asyncIterator] = function() {
return this;
};
}
return iterator;
}; /* c8 ignore stop */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["nodeStream.ts"],"sourcesContent":["import { Readable as NodeReadableStream } from 'stream';\n\nconst hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T> {\n let cleanup = null;\n let error = null;\n let done = false;\n const data = [];\n const waiting = [];\n\n function onData(chunk) {\n if (error) return;\n if (waiting.length) return waiting.shift()[0]({ value: chunk, done: false });\n data.push(chunk);\n }\n function onError(err) {\n error = err;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[1](err);\n });\n !cleanup || cleanup();\n }\n function onEnd() {\n done = true;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[0]({ value: undefined, done: true });\n });\n !cleanup || cleanup();\n }\n\n cleanup = function () {\n cleanup = null;\n stream.removeListener('data', onData);\n stream.removeListener('error', onError);\n stream.removeListener('end', onEnd);\n stream.removeListener('finish', onEnd);\n stream.removeListener('close', onEnd);\n };\n stream.on('data', onData);\n stream.on('error', onError);\n stream.on('end', onEnd);\n stream.on('finish', onEnd);\n stream.on('close', onEnd);\n\n function getNext(): Promise<IteratorResult<T, boolean>> {\n return new Promise(function (resolve, reject) {\n if (error) return reject(error);\n if (data.length) return resolve({ value: data.shift(), done: false });\n if (done) return resolve({ value: undefined, done: true });\n waiting.push([resolve, reject]);\n });\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return getNext();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"names":["hasIterator","Symbol","asyncIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","all","slice","forEach","pair","onEnd","undefined","removeListener","on","getNext","Promise","resolve","reject","iterator","next"],"mappings":"AAEA,MAAMA,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC;AAE1E,qBAAqB,CACrB,eAAe,SAASC,kBAAkB,CAAIC,MAA0B,EAA4B;IAClG,IAAIC,OAAO,GAAG,IAAI,AAAC;IACnB,IAAIC,KAAK,GAAG,IAAI,AAAC;IACjB,IAAIC,IAAI,GAAG,KAAK,AAAC;IACjB,MAAMC,IAAI,GAAG,EAAE,AAAC;IAChB,MAAMC,OAAO,GAAG,EAAE,AAAC;IAEnB,SAASC,MAAM,CAACC,KAAK,EAAE;QACrB,IAAIL,KAAK,EAAE,OAAO;QAClB,IAAIG,OAAO,CAACG,MAAM,EAAE,OAAOH,OAAO,CAACI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAAEC,KAAK,EAAEH,KAAK;YAAEJ,IAAI,EAAE,KAAK;SAAE,CAAC,CAAC;QAC7EC,IAAI,CAACO,IAAI,CAACJ,KAAK,CAAC,CAAC;KAClB;IACD,SAASK,OAAO,CAACC,GAAG,EAAE;QACpBX,KAAK,GAAGW,GAAG,CAAC;QACZ,MAAMC,GAAG,GAAGT,OAAO,CAACU,KAAK,EAAE,AAAC;QAC5BD,GAAG,CAACE,OAAO,CAAC,SAAUC,IAAI,EAAE;YAC1BA,IAAI,CAAC,CAAC,CAAC,CAACJ,GAAG,CAAC,CAAC;SACd,CAAC,CAAC;QACH,CAACZ,OAAO,IAAIA,OAAO,EAAE,CAAC;KACvB;IACD,SAASiB,KAAK,GAAG;QACff,IAAI,GAAG,IAAI,CAAC;QACZ,MAAMW,GAAG,GAAGT,OAAO,CAACU,KAAK,EAAE,AAAC;QAC5BD,GAAG,CAACE,OAAO,CAAC,SAAUC,IAAI,EAAE;YAC1BA,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAEP,KAAK,EAAES,SAAS;gBAAEhB,IAAI,EAAE,IAAI;aAAE,CAAC,CAAC;SAC3C,CAAC,CAAC;QACH,CAACF,OAAO,IAAIA,OAAO,EAAE,CAAC;KACvB;IAEDA,OAAO,GAAG,WAAY;QACpBA,OAAO,GAAG,IAAI,CAAC;QACfD,MAAM,CAACoB,cAAc,CAAC,MAAM,EAAEd,MAAM,CAAC,CAAC;QACtCN,MAAM,CAACoB,cAAc,CAAC,OAAO,EAAER,OAAO,CAAC,CAAC;QACxCZ,MAAM,CAACoB,cAAc,CAAC,KAAK,EAAEF,KAAK,CAAC,CAAC;QACpClB,MAAM,CAACoB,cAAc,CAAC,QAAQ,EAAEF,KAAK,CAAC,CAAC;QACvClB,MAAM,CAACoB,cAAc,CAAC,OAAO,EAAEF,KAAK,CAAC,CAAC;KACvC,CAAC;IACFlB,MAAM,CAACqB,EAAE,CAAC,MAAM,EAAEf,MAAM,CAAC,CAAC;IAC1BN,MAAM,CAACqB,EAAE,CAAC,OAAO,EAAET,OAAO,CAAC,CAAC;IAC5BZ,MAAM,CAACqB,EAAE,CAAC,KAAK,EAAEH,KAAK,CAAC,CAAC;IACxBlB,MAAM,CAACqB,EAAE,CAAC,QAAQ,EAAEH,KAAK,CAAC,CAAC;IAC3BlB,MAAM,CAACqB,EAAE,CAAC,OAAO,EAAEH,KAAK,CAAC,CAAC;IAE1B,SAASI,OAAO,GAAwC;QACtD,OAAO,IAAIC,OAAO,CAAC,SAAUC,OAAO,EAAEC,MAAM,EAAE;YAC5C,IAAIvB,KAAK,EAAE,OAAOuB,MAAM,CAACvB,KAAK,CAAC,CAAC;YAChC,IAAIE,IAAI,CAACI,MAAM,EAAE,OAAOgB,OAAO,CAAC;gBAAEd,KAAK,EAAEN,IAAI,CAACK,KAAK,EAAE;gBAAEN,IAAI,EAAE,KAAK;aAAE,CAAC,CAAC;YACtE,IAAIA,IAAI,EAAE,OAAOqB,OAAO,CAAC;gBAAEd,KAAK,EAAES,SAAS;gBAAEhB,IAAI,EAAE,IAAI;aAAE,CAAC,CAAC;YAC3DE,OAAO,CAACM,IAAI,CAAC;gBAACa,OAAO;gBAAEC,MAAM;aAAC,CAAC,CAAC;SACjC,CAAC,CAAC;KACJ;IAED,MAAMC,QAAQ,GAAG;QACfC,IAAI,IAAwC;YAC1C,OAAOL,OAAO,EAAE,CAAC;SAClB;KACF,AAAC;IAEF,IAAI1B,WAAW,EAAE;QACf8B,QAAQ,CAAC7B,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAO4B,QAAQ,CAA6B;CAC7C,CAAA,CACD,oBAAoB"}

View File

@@ -0,0 +1,27 @@
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
/* c8 ignore start */ export default function promiseIterator(promise) {
let resolved = false;
const iterator = {
next () {
if (resolved) return Promise.resolve({
value: undefined,
done: true
});
resolved = true;
return new Promise(function(resolve, reject) {
promise.then(function(value) {
resolve({
value,
done: false
});
}).catch(reject);
});
}
};
if (hasIterator) {
iterator[Symbol.asyncIterator] = function() {
return this;
};
}
return iterator;
}; /* c8 ignore stop */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["promise.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"names":["hasIterator","Symbol","asyncIterator","promiseIterator","promise","resolved","iterator","next","Promise","resolve","value","undefined","done","reject","then","catch"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC;AAE1E,qBAAqB,CACrB,eAAe,SAASC,eAAe,CAAIC,OAAO,EAA4B;IAC5E,IAAIC,QAAQ,GAAG,KAAK,AAAC;IAErB,MAAMC,QAAQ,GAAG;QACfC,IAAI,IAAwC;YAC1C,IAAIF,QAAQ,EAAE,OAAOG,OAAO,CAACC,OAAO,CAAC;gBAAEC,KAAK,EAAEC,SAAS;gBAAEC,IAAI,EAAE,IAAI;aAAE,CAAC,CAAC;YACvEP,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,IAAIG,OAAO,CAAC,SAAUC,OAAO,EAAEI,MAAM,EAAE;gBAC5CT,OAAO,CACJU,IAAI,CAAC,SAAUJ,KAAK,EAAE;oBACrBD,OAAO,CAAC;wBAAEC,KAAK;wBAAEE,IAAI,EAAE,KAAK;qBAAE,CAAC,CAAC;iBACjC,CAAC,CACDG,KAAK,CAACF,MAAM,CAAC,CAAC;aAClB,CAAC,CAAC;SACJ;KACF,AAAC;IAEF,IAAIb,WAAW,EAAE;QACfM,QAAQ,CAACL,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOI,QAAQ,CAA6B;CAC7C,CAAA,CACD,oBAAoB"}

View File

@@ -0,0 +1,14 @@
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
/* c8 ignore start */ export default function readerIterator(reader) {
const iterator = {
next () {
return reader.read();
}
};
if (hasIterator) {
iterator[Symbol.asyncIterator] = function() {
return this;
};
}
return iterator;
}; /* c8 ignore stop */

View File

@@ -0,0 +1 @@
{"version":3,"sources":["reader.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function readerIterator<T>(reader): AsyncIterableIterator<T> {\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"names":["hasIterator","Symbol","asyncIterator","readerIterator","reader","iterator","next","read"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC;AAE1E,qBAAqB,CACrB,eAAe,SAASC,cAAc,CAAIC,MAAM,EAA4B;IAC1E,MAAMC,QAAQ,GAAG;QACfC,IAAI,IAAwC;YAC1C,OAAOF,MAAM,CAACG,IAAI,EAAE,CAAC;SACtB;KACF,AAAC;IAEF,IAAIP,WAAW,EAAE;QACfK,QAAQ,CAACJ,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOG,QAAQ,CAA6B;CAC7C,CAAA,CACD,oBAAoB"}

View File

@@ -0,0 +1 @@
{ "type": "module" }