123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- /// <reference types="node" />
- /// <reference types="node" />
- /// <reference types="node" />
- /// <reference types="node" />
- import { EventEmitter } from 'node:events';
- import { StringDecoder } from 'node:string_decoder';
- /**
- * Same as StringDecoder, but exposing the `lastNeed` flag on the type
- */
- type SD = StringDecoder & {
- lastNeed: boolean;
- };
- export type { SD, Pipe, PipeProxyErrors };
- /**
- * Return true if the argument is a Minipass stream, Node stream, or something
- * else that Minipass can interact with.
- */
- export declare const isStream: (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass<any, any, any> | (NodeJS.ReadStream & {
- fd: number;
- }) | (EventEmitter & {
- pause(): any;
- resume(): any;
- pipe(...destArgs: any[]): any;
- }) | (NodeJS.WriteStream & {
- fd: number;
- }) | (EventEmitter & {
- end(): any;
- write(chunk: any, ...args: any[]): any;
- });
- /**
- * Return true if the argument is a valid {@link Minipass.Readable}
- */
- export declare const isReadable: (s: any) => s is Minipass.Readable;
- /**
- * Return true if the argument is a valid {@link Minipass.Writable}
- */
- export declare const isWritable: (s: any) => s is Minipass.Readable;
- declare const EOF: unique symbol;
- declare const MAYBE_EMIT_END: unique symbol;
- declare const EMITTED_END: unique symbol;
- declare const EMITTING_END: unique symbol;
- declare const EMITTED_ERROR: unique symbol;
- declare const CLOSED: unique symbol;
- declare const READ: unique symbol;
- declare const FLUSH: unique symbol;
- declare const FLUSHCHUNK: unique symbol;
- declare const ENCODING: unique symbol;
- declare const DECODER: unique symbol;
- declare const FLOWING: unique symbol;
- declare const PAUSED: unique symbol;
- declare const RESUME: unique symbol;
- declare const BUFFER: unique symbol;
- declare const PIPES: unique symbol;
- declare const BUFFERLENGTH: unique symbol;
- declare const BUFFERPUSH: unique symbol;
- declare const BUFFERSHIFT: unique symbol;
- declare const OBJECTMODE: unique symbol;
- declare const DESTROYED: unique symbol;
- declare const ERROR: unique symbol;
- declare const EMITDATA: unique symbol;
- declare const EMITEND: unique symbol;
- declare const EMITEND2: unique symbol;
- declare const ASYNC: unique symbol;
- declare const ABORT: unique symbol;
- declare const ABORTED: unique symbol;
- declare const SIGNAL: unique symbol;
- declare const DATALISTENERS: unique symbol;
- declare const DISCARDED: unique symbol;
- /**
- * Options that may be passed to stream.pipe()
- */
- export interface PipeOptions {
- /**
- * end the destination stream when the source stream ends
- */
- end?: boolean;
- /**
- * proxy errors from the source stream to the destination stream
- */
- proxyErrors?: boolean;
- }
- /**
- * Internal class representing a pipe to a destination stream.
- *
- * @internal
- */
- declare class Pipe<T extends unknown> {
- src: Minipass<T>;
- dest: Minipass<any, T>;
- opts: PipeOptions;
- ondrain: () => any;
- constructor(src: Minipass<T>, dest: Minipass.Writable, opts: PipeOptions);
- unpipe(): void;
- proxyErrors(_er: any): void;
- end(): void;
- }
- /**
- * Internal class representing a pipe to a destination stream where
- * errors are proxied.
- *
- * @internal
- */
- declare class PipeProxyErrors<T> extends Pipe<T> {
- unpipe(): void;
- constructor(src: Minipass<T>, dest: Minipass.Writable, opts: PipeOptions);
- }
- export declare namespace Minipass {
- /**
- * Encoding used to create a stream that outputs strings rather than
- * Buffer objects.
- */
- export type Encoding = BufferEncoding | 'buffer' | null;
- /**
- * Any stream that Minipass can pipe into
- */
- export type Writable = Minipass<any, any, any> | NodeJS.WriteStream | (NodeJS.WriteStream & {
- fd: number;
- }) | (EventEmitter & {
- end(): any;
- write(chunk: any, ...args: any[]): any;
- });
- /**
- * Any stream that can be read from
- */
- export type Readable = Minipass<any, any, any> | NodeJS.ReadStream | (NodeJS.ReadStream & {
- fd: number;
- }) | (EventEmitter & {
- pause(): any;
- resume(): any;
- pipe(...destArgs: any[]): any;
- });
- /**
- * Utility type that can be iterated sync or async
- */
- export type DualIterable<T> = Iterable<T> & AsyncIterable<T>;
- type EventArguments = Record<string | symbol, unknown[]>;
- /**
- * The listing of events that a Minipass class can emit.
- * Extend this when extending the Minipass class, and pass as
- * the third template argument. The key is the name of the event,
- * and the value is the argument list.
- *
- * Any undeclared events will still be allowed, but the handler will get
- * arguments as `unknown[]`.
- */
- export interface Events<RType extends any = Buffer> extends EventArguments {
- readable: [];
- data: [chunk: RType];
- error: [er: unknown];
- abort: [reason: unknown];
- drain: [];
- resume: [];
- end: [];
- finish: [];
- prefinish: [];
- close: [];
- [DESTROYED]: [er?: unknown];
- [ERROR]: [er: unknown];
- }
- /**
- * String or buffer-like data that can be joined and sliced
- */
- export type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string;
- export type BufferOrString = Buffer | string;
- /**
- * Options passed to the Minipass constructor.
- */
- export type SharedOptions = {
- /**
- * Defer all data emission and other events until the end of the
- * current tick, similar to Node core streams
- */
- async?: boolean;
- /**
- * A signal which will abort the stream
- */
- signal?: AbortSignal;
- /**
- * Output string encoding. Set to `null` or `'buffer'` (or omit) to
- * emit Buffer objects rather than strings.
- *
- * Conflicts with `objectMode`
- */
- encoding?: BufferEncoding | null | 'buffer';
- /**
- * Output data exactly as it was written, supporting non-buffer/string
- * data (such as arbitrary objects, falsey values, etc.)
- *
- * Conflicts with `encoding`
- */
- objectMode?: boolean;
- };
- /**
- * Options for a string encoded output
- */
- export type EncodingOptions = SharedOptions & {
- encoding: BufferEncoding;
- objectMode?: false;
- };
- /**
- * Options for contiguous data buffer output
- */
- export type BufferOptions = SharedOptions & {
- encoding?: null | 'buffer';
- objectMode?: false;
- };
- /**
- * Options for objectMode arbitrary output
- */
- export type ObjectModeOptions = SharedOptions & {
- objectMode: true;
- encoding?: null;
- };
- /**
- * Utility type to determine allowed options based on read type
- */
- export type Options<T> = ObjectModeOptions | (T extends string ? EncodingOptions : T extends Buffer ? BufferOptions : SharedOptions);
- export {};
- }
- /**
- * Main export, the Minipass class
- *
- * `RType` is the type of data emitted, defaults to Buffer
- *
- * `WType` is the type of data to be written, if RType is buffer or string,
- * then any {@link Minipass.ContiguousData} is allowed.
- *
- * `Events` is the set of event handler signatures that this object
- * will emit, see {@link Minipass.Events}
- */
- export declare class Minipass<RType extends unknown = Buffer, WType extends unknown = RType extends Minipass.BufferOrString ? Minipass.ContiguousData : RType, Events extends Minipass.Events<RType> = Minipass.Events<RType>> extends EventEmitter implements Minipass.DualIterable<RType> {
- [FLOWING]: boolean;
- [PAUSED]: boolean;
- [PIPES]: Pipe<RType>[];
- [BUFFER]: RType[];
- [OBJECTMODE]: boolean;
- [ENCODING]: BufferEncoding | null;
- [ASYNC]: boolean;
- [DECODER]: SD | null;
- [EOF]: boolean;
- [EMITTED_END]: boolean;
- [EMITTING_END]: boolean;
- [CLOSED]: boolean;
- [EMITTED_ERROR]: unknown;
- [BUFFERLENGTH]: number;
- [DESTROYED]: boolean;
- [SIGNAL]?: AbortSignal;
- [ABORTED]: boolean;
- [DATALISTENERS]: number;
- [DISCARDED]: boolean;
- /**
- * true if the stream can be written
- */
- writable: boolean;
- /**
- * true if the stream can be read
- */
- readable: boolean;
- /**
- * If `RType` is Buffer, then options do not need to be provided.
- * Otherwise, an options object must be provided to specify either
- * {@link Minipass.SharedOptions.objectMode} or
- * {@link Minipass.SharedOptions.encoding}, as appropriate.
- */
- constructor(...args: [Minipass.ObjectModeOptions] | (RType extends Buffer ? [] | [Minipass.Options<RType>] : [Minipass.Options<RType>]));
- /**
- * The amount of data stored in the buffer waiting to be read.
- *
- * For Buffer strings, this will be the total byte length.
- * For string encoding streams, this will be the string character length,
- * according to JavaScript's `string.length` logic.
- * For objectMode streams, this is a count of the items waiting to be
- * emitted.
- */
- get bufferLength(): number;
- /**
- * The `BufferEncoding` currently in use, or `null`
- */
- get encoding(): BufferEncoding | null;
- /**
- * @deprecated - This is a read only property
- */
- set encoding(_enc: BufferEncoding | null);
- /**
- * @deprecated - Encoding may only be set at instantiation time
- */
- setEncoding(_enc: Minipass.Encoding): void;
- /**
- * True if this is an objectMode stream
- */
- get objectMode(): boolean;
- /**
- * @deprecated - This is a read-only property
- */
- set objectMode(_om: boolean);
- /**
- * true if this is an async stream
- */
- get ['async'](): boolean;
- /**
- * Set to true to make this stream async.
- *
- * Once set, it cannot be unset, as this would potentially cause incorrect
- * behavior. Ie, a sync stream can be made async, but an async stream
- * cannot be safely made sync.
- */
- set ['async'](a: boolean);
- [ABORT](): void;
- /**
- * True if the stream has been aborted.
- */
- get aborted(): boolean;
- /**
- * No-op setter. Stream aborted status is set via the AbortSignal provided
- * in the constructor options.
- */
- set aborted(_: boolean);
- /**
- * Write data into the stream
- *
- * If the chunk written is a string, and encoding is not specified, then
- * `utf8` will be assumed. If the stream encoding matches the encoding of
- * a written string, and the state of the string decoder allows it, then
- * the string will be passed through to either the output or the internal
- * buffer without any processing. Otherwise, it will be turned into a
- * Buffer object for processing into the desired encoding.
- *
- * If provided, `cb` function is called immediately before return for
- * sync streams, or on next tick for async streams, because for this
- * base class, a chunk is considered "processed" once it is accepted
- * and either emitted or buffered. That is, the callback does not indicate
- * that the chunk has been eventually emitted, though of course child
- * classes can override this function to do whatever processing is required
- * and call `super.write(...)` only once processing is completed.
- */
- write(chunk: WType, cb?: () => void): boolean;
- write(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): boolean;
- /**
- * Low-level explicit read method.
- *
- * In objectMode, the argument is ignored, and one item is returned if
- * available.
- *
- * `n` is the number of bytes (or in the case of encoding streams,
- * characters) to consume. If `n` is not provided, then the entire buffer
- * is returned, or `null` is returned if no data is available.
- *
- * If `n` is greater that the amount of data in the internal buffer,
- * then `null` is returned.
- */
- read(n?: number | null): RType | null;
- [READ](n: number | null, chunk: RType): RType;
- /**
- * End the stream, optionally providing a final write.
- *
- * See {@link Minipass#write} for argument descriptions
- */
- end(cb?: () => void): this;
- end(chunk: WType, cb?: () => void): this;
- end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this;
- [RESUME](): void;
- /**
- * Resume the stream if it is currently in a paused state
- *
- * If called when there are no pipe destinations or `data` event listeners,
- * this will place the stream in a "discarded" state, where all data will
- * be thrown away. The discarded state is removed if a pipe destination or
- * data handler is added, if pause() is called, or if any synchronous or
- * asynchronous iteration is started.
- */
- resume(): void;
- /**
- * Pause the stream
- */
- pause(): void;
- /**
- * true if the stream has been forcibly destroyed
- */
- get destroyed(): boolean;
- /**
- * true if the stream is currently in a flowing state, meaning that
- * any writes will be immediately emitted.
- */
- get flowing(): boolean;
- /**
- * true if the stream is currently in a paused state
- */
- get paused(): boolean;
- [BUFFERPUSH](chunk: RType): void;
- [BUFFERSHIFT](): RType;
- [FLUSH](noDrain?: boolean): void;
- [FLUSHCHUNK](chunk: RType): boolean;
- /**
- * Pipe all data emitted by this stream into the destination provided.
- *
- * Triggers the flow of data.
- */
- pipe<W extends Minipass.Writable>(dest: W, opts?: PipeOptions): W;
- /**
- * Fully unhook a piped destination stream.
- *
- * If the destination stream was the only consumer of this stream (ie,
- * there are no other piped destinations or `'data'` event listeners)
- * then the flow of data will stop until there is another consumer or
- * {@link Minipass#resume} is explicitly called.
- */
- unpipe<W extends Minipass.Writable>(dest: W): void;
- /**
- * Alias for {@link Minipass#on}
- */
- addListener<Event extends keyof Events>(ev: Event, handler: (...args: Events[Event]) => any): this;
- /**
- * Mostly identical to `EventEmitter.on`, with the following
- * behavior differences to prevent data loss and unnecessary hangs:
- *
- * - Adding a 'data' event handler will trigger the flow of data
- *
- * - Adding a 'readable' event handler when there is data waiting to be read
- * will cause 'readable' to be emitted immediately.
- *
- * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
- * already passed will cause the event to be emitted immediately and all
- * handlers removed.
- *
- * - Adding an 'error' event handler after an error has been emitted will
- * cause the event to be re-emitted immediately with the error previously
- * raised.
- */
- on<Event extends keyof Events>(ev: Event, handler: (...args: Events[Event]) => any): this;
- /**
- * Alias for {@link Minipass#off}
- */
- removeListener<Event extends keyof Events>(ev: Event, handler: (...args: Events[Event]) => any): this;
- /**
- * Mostly identical to `EventEmitter.off`
- *
- * If a 'data' event handler is removed, and it was the last consumer
- * (ie, there are no pipe destinations or other 'data' event listeners),
- * then the flow of data will stop until there is another consumer or
- * {@link Minipass#resume} is explicitly called.
- */
- off<Event extends keyof Events>(ev: Event, handler: (...args: Events[Event]) => any): this;
- /**
- * Mostly identical to `EventEmitter.removeAllListeners`
- *
- * If all 'data' event handlers are removed, and they were the last consumer
- * (ie, there are no pipe destinations), then the flow of data will stop
- * until there is another consumer or {@link Minipass#resume} is explicitly
- * called.
- */
- removeAllListeners<Event extends keyof Events>(ev?: Event): this;
- /**
- * true if the 'end' event has been emitted
- */
- get emittedEnd(): boolean;
- [MAYBE_EMIT_END](): void;
- /**
- * Mostly identical to `EventEmitter.emit`, with the following
- * behavior differences to prevent data loss and unnecessary hangs:
- *
- * If the stream has been destroyed, and the event is something other
- * than 'close' or 'error', then `false` is returned and no handlers
- * are called.
- *
- * If the event is 'end', and has already been emitted, then the event
- * is ignored. If the stream is in a paused or non-flowing state, then
- * the event will be deferred until data flow resumes. If the stream is
- * async, then handlers will be called on the next tick rather than
- * immediately.
- *
- * If the event is 'close', and 'end' has not yet been emitted, then
- * the event will be deferred until after 'end' is emitted.
- *
- * If the event is 'error', and an AbortSignal was provided for the stream,
- * and there are no listeners, then the event is ignored, matching the
- * behavior of node core streams in the presense of an AbortSignal.
- *
- * If the event is 'finish' or 'prefinish', then all listeners will be
- * removed after emitting the event, to prevent double-firing.
- */
- emit<Event extends keyof Events>(ev: Event, ...args: Events[Event]): boolean;
- [EMITDATA](data: RType): boolean;
- [EMITEND](): boolean;
- [EMITEND2](): boolean;
- /**
- * Return a Promise that resolves to an array of all emitted data once
- * the stream ends.
- */
- collect(): Promise<RType[] & {
- dataLength: number;
- }>;
- /**
- * Return a Promise that resolves to the concatenation of all emitted data
- * once the stream ends.
- *
- * Not allowed on objectMode streams.
- */
- concat(): Promise<RType>;
- /**
- * Return a void Promise that resolves once the stream ends.
- */
- promise(): Promise<void>;
- /**
- * Asynchronous `for await of` iteration.
- *
- * This will continue emitting all chunks until the stream terminates.
- */
- [Symbol.asyncIterator](): AsyncGenerator<RType, void, void>;
- /**
- * Synchronous `for of` iteration.
- *
- * The iteration will terminate when the internal buffer runs out, even
- * if the stream has not yet terminated.
- */
- [Symbol.iterator](): Generator<RType, void, void>;
- /**
- * Destroy a stream, preventing it from being used for any further purpose.
- *
- * If the stream has a `close()` method, then it will be called on
- * destruction.
- *
- * After destruction, any attempt to write data, read data, or emit most
- * events will be ignored.
- *
- * If an error argument is provided, then it will be emitted in an
- * 'error' event.
- */
- destroy(er?: unknown): this;
- /**
- * Alias for {@link isStream}
- *
- * Former export location, maintained for backwards compatibility.
- *
- * @deprecated
- */
- static get isStream(): (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass<any, any, any> | (NodeJS.ReadStream & {
- fd: number;
- }) | (EventEmitter & {
- pause(): any;
- resume(): any;
- pipe(...destArgs: any[]): any;
- }) | (NodeJS.WriteStream & {
- fd: number;
- }) | (EventEmitter & {
- end(): any;
- write(chunk: any, ...args: any[]): any;
- });
- }
- //# sourceMappingURL=index.d.ts.map
|