deno.land / std@0.91.0 / node / _stream / stream.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright Node.js contributors. All rights reserved. MIT License.import { Buffer } from "../buffer.ts";import EventEmitter from "../events.ts";import type Readable from "./readable.ts";import type Writable from "./writable.ts";import { types } from "../util.ts";
class Stream extends EventEmitter { constructor() { super(); }
static _isUint8Array = types.isUint8Array; static _uint8ArrayToBuffer = (chunk: Uint8Array) => Buffer.from(chunk);
pipe(dest: Readable | Writable, options?: { end?: boolean }) { // deno-lint-ignore no-this-alias const source = this;
//TODO(Soremwar) //isStdio exist on stdin || stdout only, which extend from Duplex //if (!dest._isStdio && (options?.end ?? true)) { //Find an alternative to be able to pipe streams to stdin & stdout //Port them as well? if (options?.end ?? true) { source.on("end", onend); source.on("close", onclose); }
let didOnEnd = false; function onend() { if (didOnEnd) return; didOnEnd = true;
// 'end' is only called on Writable streams (dest as Writable).end(); }
function onclose() { if (didOnEnd) return; didOnEnd = true;
if (typeof dest.destroy === "function") dest.destroy(); }
// Don't leave dangling pipes when there are errors. function onerror(this: Stream, er: Error) { cleanup(); if (this.listenerCount("error") === 0) { throw er; // Unhandled stream error in pipe. } }
source.on("error", onerror); dest.on("error", onerror);
// Remove all the event listeners that were added. function cleanup() { source.removeListener("end", onend); source.removeListener("close", onclose);
source.removeListener("error", onerror); dest.removeListener("error", onerror);
source.removeListener("end", cleanup); source.removeListener("close", cleanup);
dest.removeListener("close", cleanup); }
source.on("end", cleanup); source.on("close", cleanup);
dest.on("close", cleanup); dest.emit("pipe", source);
return dest; }}
export default Stream;
std

Version Info

Tagged at
3 years ago

External Dependencies

No external dependencies 🎉