fix(ext/websocket): WebSocketStream don't error with "sending after closing" when closing
const _url = Symbol("[[url]]");
const _connection = Symbol("[[connection]]");
const _closed = Symbol("[[closed]]");
- const _closing = Symbol("[[closing]]");
const _earlyClose = Symbol("[[earlyClose]]");
class WebSocketStream {
[_rid];
}
case "closed":
case "close": {
- if (this[_closing]) {
this[_closed].resolve(value);
core.tryClose(this[_rid]);
- } else {
- PromisePrototypeThen(
- core.opAsync("op_ws_close", {
- rid: this[_rid],
- ...value,
- }),
- () => {
- this[_closed].resolve(value);
- core.tryClose(this[_rid]);
- },
- (err) => {
- this[_closed].reject(err);
- controller.error(err);
- core.tryClose(this[_rid]);
- },
- );
- }
break;
}
case "error": {
}
[_earlyClose] = false;
- [_closing] = false;
[_closed] = new Deferred();
get closed() {
webidl.assertBranded(this, WebSocketStream);
if (this[_connection].state === "pending") {
this[_earlyClose] = true;
} else if (this[_closed].state === "pending") {
- this[_closing] = true;
PromisePrototypeCatch(
core.opAsync("op_ws_close", {
rid: this[_rid],
