summaryrefslogtreecommitdiff
path: root/std/node/_stream/destroy.ts
diff options
context:
space:
mode:
authorSteven Guerrero <stephenguerrero43@gmail.com>2020-11-26 07:50:08 -0500
committerGitHub <noreply@github.com>2020-11-26 13:50:08 +0100
commit9042fcc12e7774cdd0ca3a5d08918a07dae8102b (patch)
tree8b5ff11412aae9bb714e0bb0b9b0358db64a8657 /std/node/_stream/destroy.ts
parent60e980c78180ee3b0a14d692307be275dc181c8d (diff)
feat(std/node/stream): Add Duplex, Transform, Passthrough, pipeline, finished and promises (#7940)
Diffstat (limited to 'std/node/_stream/destroy.ts')
-rw-r--r--std/node/_stream/destroy.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/std/node/_stream/destroy.ts b/std/node/_stream/destroy.ts
new file mode 100644
index 000000000..d13e12de2
--- /dev/null
+++ b/std/node/_stream/destroy.ts
@@ -0,0 +1,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();
+ }
+}