1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-27 01:29:14 -05:00
denoland-deno/cli/js/web/streams/writable_stream_default_controller.ts
2020-07-14 15:24:17 -04:00

68 lines
2 KiB
TypeScript

// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import {
AbortAlgorithm,
CloseAlgorithm,
isWritableStreamDefaultController,
Pair,
resetQueue,
SizeAlgorithm,
WriteAlgorithm,
writableStreamDefaultControllerClearAlgorithms,
writableStreamDefaultControllerError,
} from "./internals.ts";
import * as sym from "./symbols.ts";
import type { WritableStreamImpl } from "./writable_stream.ts";
import { customInspect } from "../console.ts";
import { setFunctionName } from "../util.ts";
export class WritableStreamDefaultControllerImpl<W>
implements WritableStreamDefaultController {
[sym.abortAlgorithm]: AbortAlgorithm;
[sym.closeAlgorithm]: CloseAlgorithm;
[sym.controlledWritableStream]: WritableStreamImpl;
[sym.queue]: Array<Pair<{ chunk: W } | "close">>;
[sym.queueTotalSize]: number;
[sym.started]: boolean;
[sym.strategyHWM]: number;
[sym.strategySizeAlgorithm]: SizeAlgorithm<W>;
[sym.writeAlgorithm]: WriteAlgorithm<W>;
private constructor() {
throw new TypeError(
"WritableStreamDefaultController's constructor cannot be called.",
);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error(e: any): void {
if (!isWritableStreamDefaultController(this)) {
throw new TypeError("Invalid WritableStreamDefaultController.");
}
const state = this[sym.controlledWritableStream][sym.state];
if (state !== "writable") {
return;
}
writableStreamDefaultControllerError(this, e);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[sym.abortSteps](reason: any): PromiseLike<void> {
const result = this[sym.abortAlgorithm](reason);
writableStreamDefaultControllerClearAlgorithms(this);
return result;
}
[sym.errorSteps](): void {
resetQueue(this);
}
[customInspect](): string {
return `${this.constructor.name} { }`;
}
}
setFunctionName(
WritableStreamDefaultControllerImpl,
"WritableStreamDefaultController",
);