UNPKG

24.5 kBTypeScriptView Raw
1declare module 'stream' {
2 import { EventEmitter, Abortable } from 'events';
3 import * as streamPromises from "stream/promises";
4
5 class internal extends EventEmitter {
6 pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean; }): T;
7 }
8
9 namespace internal {
10 class Stream extends internal {
11 constructor(opts?: ReadableOptions);
12 }
13
14 interface StreamOptions<T extends Stream> extends Abortable {
15 emitClose?: boolean;
16 highWaterMark?: number;
17 objectMode?: boolean;
18 construct?(this: T, callback: (error?: Error | null) => void): void;
19 destroy?(this: T, error: Error | null, callback: (error: Error | null) => void): void;
20 autoDestroy?: boolean;
21 }
22
23 interface ReadableOptions extends StreamOptions<Readable> {
24 encoding?: BufferEncoding;
25 read?(this: Readable, size: number): void;
26 }
27
28 class Readable extends Stream implements NodeJS.ReadableStream {
29 /**
30 * A utility method for creating Readable Streams out of iterators.
31 */
32 static from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions): Readable;
33
34 readable: boolean;
35 readonly readableEncoding: BufferEncoding | null;
36 readonly readableEnded: boolean;
37 readonly readableFlowing: boolean | null;
38 readonly readableHighWaterMark: number;
39 readonly readableLength: number;
40 readonly readableObjectMode: boolean;
41 destroyed: boolean;
42 constructor(opts?: ReadableOptions);
43 _construct?(callback: (error?: Error | null) => void): void;
44 _read(size: number): void;
45 read(size?: number): any;
46 setEncoding(encoding: BufferEncoding): this;
47 pause(): this;
48 resume(): this;
49 isPaused(): boolean;
50 unpipe(destination?: NodeJS.WritableStream): this;
51 unshift(chunk: any, encoding?: BufferEncoding): void;
52 wrap(oldStream: NodeJS.ReadableStream): this;
53 push(chunk: any, encoding?: BufferEncoding): boolean;
54 _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
55 destroy(error?: Error): void;
56
57 /**
58 * Event emitter
59 * The defined events on documents including:
60 * 1. close
61 * 2. data
62 * 3. end
63 * 4. error
64 * 5. pause
65 * 6. readable
66 * 7. resume
67 */
68 addListener(event: "close", listener: () => void): this;
69 addListener(event: "data", listener: (chunk: any) => void): this;
70 addListener(event: "end", listener: () => void): this;
71 addListener(event: "error", listener: (err: Error) => void): this;
72 addListener(event: "pause", listener: () => void): this;
73 addListener(event: "readable", listener: () => void): this;
74 addListener(event: "resume", listener: () => void): this;
75 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
76
77 emit(event: "close"): boolean;
78 emit(event: "data", chunk: any): boolean;
79 emit(event: "end"): boolean;
80 emit(event: "error", err: Error): boolean;
81 emit(event: "pause"): boolean;
82 emit(event: "readable"): boolean;
83 emit(event: "resume"): boolean;
84 emit(event: string | symbol, ...args: any[]): boolean;
85
86 on(event: "close", listener: () => void): this;
87 on(event: "data", listener: (chunk: any) => void): this;
88 on(event: "end", listener: () => void): this;
89 on(event: "error", listener: (err: Error) => void): this;
90 on(event: "pause", listener: () => void): this;
91 on(event: "readable", listener: () => void): this;
92 on(event: "resume", listener: () => void): this;
93 on(event: string | symbol, listener: (...args: any[]) => void): this;
94
95 once(event: "close", listener: () => void): this;
96 once(event: "data", listener: (chunk: any) => void): this;
97 once(event: "end", listener: () => void): this;
98 once(event: "error", listener: (err: Error) => void): this;
99 once(event: "pause", listener: () => void): this;
100 once(event: "readable", listener: () => void): this;
101 once(event: "resume", listener: () => void): this;
102 once(event: string | symbol, listener: (...args: any[]) => void): this;
103
104 prependListener(event: "close", listener: () => void): this;
105 prependListener(event: "data", listener: (chunk: any) => void): this;
106 prependListener(event: "end", listener: () => void): this;
107 prependListener(event: "error", listener: (err: Error) => void): this;
108 prependListener(event: "pause", listener: () => void): this;
109 prependListener(event: "readable", listener: () => void): this;
110 prependListener(event: "resume", listener: () => void): this;
111 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
112
113 prependOnceListener(event: "close", listener: () => void): this;
114 prependOnceListener(event: "data", listener: (chunk: any) => void): this;
115 prependOnceListener(event: "end", listener: () => void): this;
116 prependOnceListener(event: "error", listener: (err: Error) => void): this;
117 prependOnceListener(event: "pause", listener: () => void): this;
118 prependOnceListener(event: "readable", listener: () => void): this;
119 prependOnceListener(event: "resume", listener: () => void): this;
120 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
121
122 removeListener(event: "close", listener: () => void): this;
123 removeListener(event: "data", listener: (chunk: any) => void): this;
124 removeListener(event: "end", listener: () => void): this;
125 removeListener(event: "error", listener: (err: Error) => void): this;
126 removeListener(event: "pause", listener: () => void): this;
127 removeListener(event: "readable", listener: () => void): this;
128 removeListener(event: "resume", listener: () => void): this;
129 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
130
131 [Symbol.asyncIterator](): AsyncIterableIterator<any>;
132 }
133
134 interface WritableOptions extends StreamOptions<Writable> {
135 decodeStrings?: boolean;
136 defaultEncoding?: BufferEncoding;
137 write?(this: Writable, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
138 writev?(this: Writable, chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
139 final?(this: Writable, callback: (error?: Error | null) => void): void;
140 }
141
142 class Writable extends Stream implements NodeJS.WritableStream {
143 readonly writable: boolean;
144 readonly writableEnded: boolean;
145 readonly writableFinished: boolean;
146 readonly writableHighWaterMark: number;
147 readonly writableLength: number;
148 readonly writableObjectMode: boolean;
149 readonly writableCorked: number;
150 destroyed: boolean;
151 constructor(opts?: WritableOptions);
152 _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
153 _writev?(chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
154 _construct?(callback: (error?: Error | null) => void): void;
155 _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
156 _final(callback: (error?: Error | null) => void): void;
157 write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
158 write(chunk: any, encoding: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
159 setDefaultEncoding(encoding: BufferEncoding): this;
160 end(cb?: () => void): void;
161 end(chunk: any, cb?: () => void): void;
162 end(chunk: any, encoding: BufferEncoding, cb?: () => void): void;
163 cork(): void;
164 uncork(): void;
165 destroy(error?: Error): void;
166
167 /**
168 * Event emitter
169 * The defined events on documents including:
170 * 1. close
171 * 2. drain
172 * 3. error
173 * 4. finish
174 * 5. pipe
175 * 6. unpipe
176 */
177 addListener(event: "close", listener: () => void): this;
178 addListener(event: "drain", listener: () => void): this;
179 addListener(event: "error", listener: (err: Error) => void): this;
180 addListener(event: "finish", listener: () => void): this;
181 addListener(event: "pipe", listener: (src: Readable) => void): this;
182 addListener(event: "unpipe", listener: (src: Readable) => void): this;
183 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
184
185 emit(event: "close"): boolean;
186 emit(event: "drain"): boolean;
187 emit(event: "error", err: Error): boolean;
188 emit(event: "finish"): boolean;
189 emit(event: "pipe", src: Readable): boolean;
190 emit(event: "unpipe", src: Readable): boolean;
191 emit(event: string | symbol, ...args: any[]): boolean;
192
193 on(event: "close", listener: () => void): this;
194 on(event: "drain", listener: () => void): this;
195 on(event: "error", listener: (err: Error) => void): this;
196 on(event: "finish", listener: () => void): this;
197 on(event: "pipe", listener: (src: Readable) => void): this;
198 on(event: "unpipe", listener: (src: Readable) => void): this;
199 on(event: string | symbol, listener: (...args: any[]) => void): this;
200
201 once(event: "close", listener: () => void): this;
202 once(event: "drain", listener: () => void): this;
203 once(event: "error", listener: (err: Error) => void): this;
204 once(event: "finish", listener: () => void): this;
205 once(event: "pipe", listener: (src: Readable) => void): this;
206 once(event: "unpipe", listener: (src: Readable) => void): this;
207 once(event: string | symbol, listener: (...args: any[]) => void): this;
208
209 prependListener(event: "close", listener: () => void): this;
210 prependListener(event: "drain", listener: () => void): this;
211 prependListener(event: "error", listener: (err: Error) => void): this;
212 prependListener(event: "finish", listener: () => void): this;
213 prependListener(event: "pipe", listener: (src: Readable) => void): this;
214 prependListener(event: "unpipe", listener: (src: Readable) => void): this;
215 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
216
217 prependOnceListener(event: "close", listener: () => void): this;
218 prependOnceListener(event: "drain", listener: () => void): this;
219 prependOnceListener(event: "error", listener: (err: Error) => void): this;
220 prependOnceListener(event: "finish", listener: () => void): this;
221 prependOnceListener(event: "pipe", listener: (src: Readable) => void): this;
222 prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this;
223 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
224
225 removeListener(event: "close", listener: () => void): this;
226 removeListener(event: "drain", listener: () => void): this;
227 removeListener(event: "error", listener: (err: Error) => void): this;
228 removeListener(event: "finish", listener: () => void): this;
229 removeListener(event: "pipe", listener: (src: Readable) => void): this;
230 removeListener(event: "unpipe", listener: (src: Readable) => void): this;
231 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
232 }
233
234 interface DuplexOptions extends ReadableOptions, WritableOptions {
235 allowHalfOpen?: boolean;
236 readableObjectMode?: boolean;
237 writableObjectMode?: boolean;
238 readableHighWaterMark?: number;
239 writableHighWaterMark?: number;
240 writableCorked?: number;
241 construct?(this: Duplex, callback: (error?: Error | null) => void): void;
242 read?(this: Duplex, size: number): void;
243 write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
244 writev?(this: Duplex, chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
245 final?(this: Duplex, callback: (error?: Error | null) => void): void;
246 destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void;
247 }
248
249 // Note: Duplex extends both Readable and Writable.
250 class Duplex extends Readable implements Writable {
251 readonly writable: boolean;
252 readonly writableEnded: boolean;
253 readonly writableFinished: boolean;
254 readonly writableHighWaterMark: number;
255 readonly writableLength: number;
256 readonly writableObjectMode: boolean;
257 readonly writableCorked: number;
258 constructor(opts?: DuplexOptions);
259 _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
260 _writev?(chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
261 _destroy(error: Error | null, callback: (error: Error | null) => void): void;
262 _final(callback: (error?: Error | null) => void): void;
263 write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
264 write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
265 setDefaultEncoding(encoding: BufferEncoding): this;
266 end(cb?: () => void): void;
267 end(chunk: any, cb?: () => void): void;
268 end(chunk: any, encoding?: BufferEncoding, cb?: () => void): void;
269 cork(): void;
270 uncork(): void;
271 }
272
273 type TransformCallback = (error?: Error | null, data?: any) => void;
274
275 interface TransformOptions extends DuplexOptions {
276 construct?(this: Transform, callback: (error?: Error | null) => void): void;
277 read?(this: Transform, size: number): void;
278 write?(this: Transform, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
279 writev?(this: Transform, chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
280 final?(this: Transform, callback: (error?: Error | null) => void): void;
281 destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void;
282 transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
283 flush?(this: Transform, callback: TransformCallback): void;
284 }
285
286 class Transform extends Duplex {
287 constructor(opts?: TransformOptions);
288 _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
289 _flush(callback: TransformCallback): void;
290 }
291
292 class PassThrough extends Transform { }
293
294 /**
295 * Attaches an AbortSignal to a readable or writeable stream. This lets code
296 * control stream destruction using an `AbortController`.
297 *
298 * Calling `abort` on the `AbortController` corresponding to the passed
299 * `AbortSignal` will behave the same way as calling `.destroy(new AbortError())`
300 * on the stream.
301 */
302 function addAbortSignal<T extends Stream>(signal: AbortSignal, stream: T): T;
303
304 interface FinishedOptions extends Abortable {
305 error?: boolean;
306 readable?: boolean;
307 writable?: boolean;
308 }
309 function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options: FinishedOptions, callback: (err?: NodeJS.ErrnoException | null) => void): () => void;
310 function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, callback: (err?: NodeJS.ErrnoException | null) => void): () => void;
311 namespace finished {
312 function __promisify__(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options?: FinishedOptions): Promise<void>;
313 }
314
315 type PipelineSourceFunction<T> = () => Iterable<T> | AsyncIterable<T>;
316 type PipelineSource<T> = Iterable<T> | AsyncIterable<T> | NodeJS.ReadableStream | PipelineSourceFunction<T>;
317 type PipelineTransform<S extends PipelineTransformSource<any>, U> =
318 NodeJS.ReadWriteStream |
319 ((source: S extends (...args: any[]) => Iterable<infer ST> | AsyncIterable<infer ST> ?
320 AsyncIterable<ST> : S) => AsyncIterable<U>);
321 type PipelineTransformSource<T> = PipelineSource<T> | PipelineTransform<any, T>;
322
323 type PipelineDestinationIterableFunction<T> = (source: AsyncIterable<T>) => AsyncIterable<any>;
324 type PipelineDestinationPromiseFunction<T, P> = (source: AsyncIterable<T>) => Promise<P>;
325
326 type PipelineDestination<S extends PipelineTransformSource<any>, P> =
327 S extends PipelineTransformSource<infer ST> ?
328 (NodeJS.WritableStream | PipelineDestinationIterableFunction<ST> | PipelineDestinationPromiseFunction<ST, P>) : never;
329 type PipelineCallback<S extends PipelineDestination<any, any>> =
330 S extends PipelineDestinationPromiseFunction<any, infer P> ? (err: NodeJS.ErrnoException | null, value: P) => void :
331 (err: NodeJS.ErrnoException | null) => void;
332 type PipelinePromise<S extends PipelineDestination<any, any>> =
333 S extends PipelineDestinationPromiseFunction<any, infer P> ? Promise<P> : Promise<void>;
334 interface PipelineOptions {
335 signal: AbortSignal;
336 }
337
338 function pipeline<A extends PipelineSource<any>,
339 B extends PipelineDestination<A, any>>(
340 source: A,
341 destination: B,
342 callback?: PipelineCallback<B>
343 ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream;
344 function pipeline<A extends PipelineSource<any>,
345 T1 extends PipelineTransform<A, any>,
346 B extends PipelineDestination<T1, any>>(
347 source: A,
348 transform1: T1,
349 destination: B,
350 callback?: PipelineCallback<B>
351 ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream;
352 function pipeline<A extends PipelineSource<any>,
353 T1 extends PipelineTransform<A, any>,
354 T2 extends PipelineTransform<T1, any>,
355 B extends PipelineDestination<T2, any>>(
356 source: A,
357 transform1: T1,
358 transform2: T2,
359 destination: B,
360 callback?: PipelineCallback<B>
361 ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream;
362 function pipeline<A extends PipelineSource<any>,
363 T1 extends PipelineTransform<A, any>,
364 T2 extends PipelineTransform<T1, any>,
365 T3 extends PipelineTransform<T2, any>,
366 B extends PipelineDestination<T3, any>>(
367 source: A,
368 transform1: T1,
369 transform2: T2,
370 transform3: T3,
371 destination: B,
372 callback?: PipelineCallback<B>
373 ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream;
374 function pipeline<A extends PipelineSource<any>,
375 T1 extends PipelineTransform<A, any>,
376 T2 extends PipelineTransform<T1, any>,
377 T3 extends PipelineTransform<T2, any>,
378 T4 extends PipelineTransform<T3, any>,
379 B extends PipelineDestination<T4, any>>(
380 source: A,
381 transform1: T1,
382 transform2: T2,
383 transform3: T3,
384 transform4: T4,
385 destination: B,
386 callback?: PipelineCallback<B>
387 ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream;
388 function pipeline(
389 streams: ReadonlyArray<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>,
390 callback?: (err: NodeJS.ErrnoException | null) => void,
391 ): NodeJS.WritableStream;
392 function pipeline(
393 stream1: NodeJS.ReadableStream,
394 stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
395 ...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void)>,
396 ): NodeJS.WritableStream;
397 namespace pipeline {
398 function __promisify__<A extends PipelineSource<any>,
399 B extends PipelineDestination<A, any>>(
400 source: A,
401 destination: B,
402 options?: PipelineOptions
403 ): PipelinePromise<B>;
404 function __promisify__<A extends PipelineSource<any>,
405 T1 extends PipelineTransform<A, any>,
406 B extends PipelineDestination<T1, any>>(
407 source: A,
408 transform1: T1,
409 destination: B,
410 options?: PipelineOptions,
411 ): PipelinePromise<B>;
412 function __promisify__<A extends PipelineSource<any>,
413 T1 extends PipelineTransform<A, any>,
414 T2 extends PipelineTransform<T1, any>,
415 B extends PipelineDestination<T2, any>>(
416 source: A,
417 transform1: T1,
418 transform2: T2,
419 destination: B,
420 options?: PipelineOptions
421 ): PipelinePromise<B>;
422 function __promisify__<A extends PipelineSource<any>,
423 T1 extends PipelineTransform<A, any>,
424 T2 extends PipelineTransform<T1, any>,
425 T3 extends PipelineTransform<T2, any>,
426 B extends PipelineDestination<T3, any>>(
427 source: A,
428 transform1: T1,
429 transform2: T2,
430 transform3: T3,
431 destination: B,
432 options?: PipelineOptions
433 ): PipelinePromise<B>;
434 function __promisify__<A extends PipelineSource<any>,
435 T1 extends PipelineTransform<A, any>,
436 T2 extends PipelineTransform<T1, any>,
437 T3 extends PipelineTransform<T2, any>,
438 T4 extends PipelineTransform<T3, any>,
439 B extends PipelineDestination<T4, any>>(
440 source: A,
441 transform1: T1,
442 transform2: T2,
443 transform3: T3,
444 transform4: T4,
445 destination: B,
446 options?: PipelineOptions
447 ): PipelinePromise<B>;
448
449 function __promisify__(
450 streams: ReadonlyArray<NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream>,
451 options?: PipelineOptions
452 ): Promise<void>;
453 function __promisify__(
454 stream1: NodeJS.ReadableStream,
455 stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream,
456 ...streams: Array<NodeJS.ReadWriteStream | NodeJS.WritableStream | PipelineOptions>,
457 ): Promise<void>;
458 }
459
460 interface Pipe {
461 close(): void;
462 hasRef(): boolean;
463 ref(): void;
464 unref(): void;
465 }
466
467 const promises: typeof streamPromises;
468 }
469
470 export = internal;
471}