/
destroy.ts
38 lines (34 loc) · 1.38 KB
/
destroy.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
// Copyright Node.js contributors. All rights reserved. MIT License.
import type Duplex from "./duplex.ts";
import type Readable from "./readable.ts";
import type Stream from "./stream.ts";
import type Writable from "./writable.ts";
//This whole module acts as a 'normalizer'
//Idea behind it is you can pass any kind of streams and functions will execute anyways
//TODO(Soremwar)
//Should be any implementation of stream
//This is a guard to check executed methods exist inside the implementation
type StreamImplementations = Duplex | Readable | Writable;
// TODO(Soremwar)
// Bring back once requests are implemented
// function isRequest(stream: any) {
// return stream && stream.setHeader && typeof stream.abort === "function";
// }
export function destroyer(stream: Stream, err?: Error | null) {
// TODO(Soremwar)
// Bring back once requests are implemented
// if (isRequest(stream)) return stream.abort();
// if (isRequest(stream.req)) return stream.req.abort();
if (
typeof (stream as StreamImplementations).destroy === "function"
) {
return (stream as StreamImplementations).destroy(err);
}
// A test of async iterator mocks an upcoming implementation of stream
// his is casted to any in the meanwhile
// deno-lint-ignore no-explicit-any
if (typeof (stream as any).close === "function") {
// deno-lint-ignore no-explicit-any
return (stream as any).close();
}
}