This commit is contained in:
Lukian LEIZOUR 2023-01-29 00:57:47 +01:00
parent a15c733e45
commit 2a5130cbda
2838 changed files with 288613 additions and 0 deletions

6
node_modules/peek-readable/lib/Deferred.d.ts generated vendored Normal file
View file

@ -0,0 +1,6 @@
export declare class Deferred<T> {
promise: Promise<T>;
resolve: (value: T) => void;
reject: (reason: any) => void;
constructor();
}

10
node_modules/peek-readable/lib/Deferred.js generated vendored Normal file
View file

@ -0,0 +1,10 @@
export class Deferred {
constructor() {
this.resolve = () => null;
this.reject = () => null;
this.promise = new Promise((resolve, reject) => {
this.reject = reject;
this.resolve = resolve;
});
}
}

7
node_modules/peek-readable/lib/EndOfFileStream.d.ts generated vendored Normal file
View file

@ -0,0 +1,7 @@
export declare const defaultMessages = "End-Of-Stream";
/**
* Thrown on read operation of the end of file or stream has been reached
*/
export declare class EndOfStreamError extends Error {
constructor();
}

9
node_modules/peek-readable/lib/EndOfFileStream.js generated vendored Normal file
View file

@ -0,0 +1,9 @@
export const defaultMessages = 'End-Of-Stream';
/**
* Thrown on read operation of the end of file or stream has been reached
*/
export class EndOfStreamError extends Error {
constructor() {
super(defaultMessages);
}
}

47
node_modules/peek-readable/lib/StreamReader.d.ts generated vendored Normal file
View file

@ -0,0 +1,47 @@
/// <reference types="node" resolution-mode="require"/>
import { Readable } from 'node:stream';
export { EndOfStreamError } from './EndOfFileStream.js';
export declare class StreamReader {
private s;
/**
* Deferred used for postponed read request (as not data is yet available to read)
*/
private deferred;
private endOfStream;
/**
* Store peeked data
* @type {Array}
*/
private peekQueue;
constructor(s: Readable);
/**
* Read ahead (peek) from stream. Subsequent read or peeks will return the same data
* @param uint8Array - Uint8Array (or Buffer) to store data read from stream in
* @param offset - Offset target
* @param length - Number of bytes to read
* @returns Number of bytes peeked
*/
peek(uint8Array: Uint8Array, offset: number, length: number): Promise<number>;
/**
* Read chunk from stream
* @param buffer - Target Uint8Array (or Buffer) to store data read from stream in
* @param offset - Offset target
* @param length - Number of bytes to read
* @returns Number of bytes read
*/
read(buffer: Uint8Array, offset: number, length: number): Promise<number>;
/**
* Read chunk from stream
* @param buffer Target Uint8Array (or Buffer) to store data read from stream in
* @param offset Offset target
* @param length Number of bytes to read
* @returns Number of bytes read
*/
private readFromStream;
/**
* Process deferred read request
* @param request Deferred read request
*/
private readDeferred;
private reject;
}

129
node_modules/peek-readable/lib/StreamReader.js generated vendored Normal file
View file

@ -0,0 +1,129 @@
import { EndOfStreamError } from './EndOfFileStream.js';
import { Deferred } from './Deferred.js';
export { EndOfStreamError } from './EndOfFileStream.js';
const maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation
export class StreamReader {
constructor(s) {
this.s = s;
/**
* Deferred used for postponed read request (as not data is yet available to read)
*/
this.deferred = null;
this.endOfStream = false;
/**
* Store peeked data
* @type {Array}
*/
this.peekQueue = [];
if (!s.read || !s.once) {
throw new Error('Expected an instance of stream.Readable');
}
this.s.once('end', () => this.reject(new EndOfStreamError()));
this.s.once('error', err => this.reject(err));
this.s.once('close', () => this.reject(new Error('Stream closed')));
}
/**
* Read ahead (peek) from stream. Subsequent read or peeks will return the same data
* @param uint8Array - Uint8Array (or Buffer) to store data read from stream in
* @param offset - Offset target
* @param length - Number of bytes to read
* @returns Number of bytes peeked
*/
async peek(uint8Array, offset, length) {
const bytesRead = await this.read(uint8Array, offset, length);
this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer
return bytesRead;
}
/**
* Read chunk from stream
* @param buffer - Target Uint8Array (or Buffer) to store data read from stream in
* @param offset - Offset target
* @param length - Number of bytes to read
* @returns Number of bytes read
*/
async read(buffer, offset, length) {
if (length === 0) {
return 0;
}
if (this.peekQueue.length === 0 && this.endOfStream) {
throw new EndOfStreamError();
}
let remaining = length;
let bytesRead = 0;
// consume peeked data first
while (this.peekQueue.length > 0 && remaining > 0) {
const peekData = this.peekQueue.pop(); // Front of queue
if (!peekData)
throw new Error('peekData should be defined');
const lenCopy = Math.min(peekData.length, remaining);
buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);
bytesRead += lenCopy;
remaining -= lenCopy;
if (lenCopy < peekData.length) {
// remainder back to queue
this.peekQueue.push(peekData.subarray(lenCopy));
}
}
// continue reading from stream if required
while (remaining > 0 && !this.endOfStream) {
const reqLen = Math.min(remaining, maxStreamReadSize);
const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);
bytesRead += chunkLen;
if (chunkLen < reqLen)
break;
remaining -= chunkLen;
}
return bytesRead;
}
/**
* Read chunk from stream
* @param buffer Target Uint8Array (or Buffer) to store data read from stream in
* @param offset Offset target
* @param length Number of bytes to read
* @returns Number of bytes read
*/
async readFromStream(buffer, offset, length) {
const readBuffer = this.s.read(length);
if (readBuffer) {
buffer.set(readBuffer, offset);
return readBuffer.length;
}
else {
const request = {
buffer,
offset,
length,
deferred: new Deferred()
};
this.deferred = request.deferred;
this.s.once('readable', () => {
this.readDeferred(request);
});
return request.deferred.promise;
}
}
/**
* Process deferred read request
* @param request Deferred read request
*/
readDeferred(request) {
const readBuffer = this.s.read(request.length);
if (readBuffer) {
request.buffer.set(readBuffer, request.offset);
request.deferred.resolve(readBuffer.length);
this.deferred = null;
}
else {
this.s.once('readable', () => {
this.readDeferred(request);
});
}
}
reject(err) {
this.endOfStream = true;
if (this.deferred) {
this.deferred.reject(err);
this.deferred = null;
}
}
}

2
node_modules/peek-readable/lib/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,2 @@
export { EndOfStreamError } from './EndOfFileStream.js';
export { StreamReader } from './StreamReader.js';

2
node_modules/peek-readable/lib/index.js generated vendored Normal file
View file

@ -0,0 +1,2 @@
export { EndOfStreamError } from './EndOfFileStream.js';
export { StreamReader } from './StreamReader.js';