mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 08:39:09 -05:00
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
|
// 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();
|
||
|
}
|
||
|
}
|