mirror of
https://github.com/denoland/deno.git
synced 2025-07-08 05:45:07 +00:00

Fixes https://github.com/denoland/deno/pull/28168#discussion_r1982740706 --------- Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
// Copyright 2018-2025 the Deno authors. MIT license.
|
|
|
|
import { assert, assertEquals } from "@std/assert";
|
|
import { fromFileUrl, relative } from "@std/path";
|
|
import { finished, pipeline } from "node:stream/promises";
|
|
import { getDefaultHighWaterMark, Stream, Writable } from "node:stream";
|
|
import { TextEncoderStream } from "node:stream/web";
|
|
import { createReadStream, createWriteStream } from "node:fs";
|
|
import { EventEmitter } from "node:events";
|
|
|
|
Deno.test("stream/promises pipeline", async () => {
|
|
const filePath = relative(
|
|
Deno.cwd(),
|
|
fromFileUrl(new URL("./testdata/lorem_ipsum.txt", import.meta.url)),
|
|
);
|
|
const input = createReadStream(filePath);
|
|
const output = createWriteStream("lorem_ipsum.txt.copy");
|
|
|
|
await pipeline(input, output);
|
|
|
|
const content = Deno.readTextFileSync("lorem_ipsum.txt.copy");
|
|
assert(content.startsWith("Lorem ipsum dolor sit amet"));
|
|
try {
|
|
Deno.removeSync("lorem_ipsum.txt.copy");
|
|
} catch {
|
|
// pass
|
|
}
|
|
});
|
|
|
|
Deno.test("stream getDefaultHighWaterMark", () => {
|
|
assertEquals(
|
|
getDefaultHighWaterMark(false),
|
|
Deno.build.os === "windows" ? 16 * 1024 : 64 * 1024,
|
|
);
|
|
assertEquals(getDefaultHighWaterMark(true), 16);
|
|
});
|
|
|
|
Deno.test("stream is an instance of EventEmitter", () => {
|
|
const stream = new Stream();
|
|
assert(stream instanceof EventEmitter);
|
|
});
|
|
|
|
Deno.test("finished on web streams", async () => {
|
|
const stream = new ReadableStream({
|
|
start(controller) {
|
|
controller.enqueue("asd");
|
|
controller.close();
|
|
},
|
|
});
|
|
const promise = finished(stream as unknown as NodeJS.ReadableStream);
|
|
for await (const chunk of stream) {
|
|
assertEquals(chunk, "asd");
|
|
}
|
|
await promise;
|
|
});
|
|
|
|
// https://github.com/denoland/deno/issues/28905
|
|
Deno.test("Writable toWeb", async () => {
|
|
const nodeWritable = new Writable({
|
|
write(_chunk, _encoding, callback) {
|
|
// Simulate the issue by delaying the callback slightly
|
|
setTimeout(() => {
|
|
callback();
|
|
}, 10);
|
|
},
|
|
});
|
|
|
|
const webWritable = Writable.toWeb(nodeWritable);
|
|
|
|
const source = ["line1", "line2", "line3"];
|
|
const readable = ReadableStream.from(source);
|
|
|
|
await readable
|
|
// @ts-ignore wrong types
|
|
.pipeThrough(new TextEncoderStream())
|
|
// @ts-ignore wrong types
|
|
.pipeTo(webWritable);
|
|
|
|
await finished(nodeWritable);
|
|
});
|