1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

feat(WebSocketStream): rename connection to opened (#20878)

This commit is contained in:
Leo Kettmeir 2023-10-11 07:31:05 +02:00 committed by GitHub
parent 2215a3ea2e
commit 8ba1242a05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 57 deletions

View file

@ -1,5 +1,5 @@
const wss = new WebSocketStream("ws://127.0.0.1:4513"); const wss = new WebSocketStream("ws://127.0.0.1:4513");
const { readable } = await wss.connection; const { readable } = await wss.opened;
for await (const _ of readable) { for await (const _ of readable) {
// //
} }

View file

@ -24,14 +24,14 @@ Deno.test("duplicate protocols", () => {
Deno.test("connect & close custom valid code", async () => { Deno.test("connect & close custom valid code", async () => {
const ws = new WebSocketStream("ws://localhost:4242"); const ws = new WebSocketStream("ws://localhost:4242");
await ws.connection; await ws.opened;
ws.close({ code: 1000 }); ws.close({ code: 1000 });
await ws.closed; await ws.closed;
}); });
Deno.test("connect & close custom invalid reason", async () => { Deno.test("connect & close custom invalid reason", async () => {
const ws = new WebSocketStream("ws://localhost:4242"); const ws = new WebSocketStream("ws://localhost:4242");
await ws.connection; await ws.opened;
assertThrows(() => ws.close({ code: 1000, reason: "".padEnd(124, "o") })); assertThrows(() => ws.close({ code: 1000, reason: "".padEnd(124, "o") }));
ws.close(); ws.close();
await ws.closed; await ws.closed;
@ -39,7 +39,7 @@ Deno.test("connect & close custom invalid reason", async () => {
Deno.test("echo string", async () => { Deno.test("echo string", async () => {
const ws = new WebSocketStream("ws://localhost:4242"); const ws = new WebSocketStream("ws://localhost:4242");
const { readable, writable } = await ws.connection; const { readable, writable } = await ws.opened;
await writable.getWriter().write("foo"); await writable.getWriter().write("foo");
const res = await readable.getReader().read(); const res = await readable.getReader().read();
assertEquals(res.value, "foo"); assertEquals(res.value, "foo");
@ -49,7 +49,7 @@ Deno.test("echo string", async () => {
Deno.test("echo string tls", async () => { Deno.test("echo string tls", async () => {
const ws = new WebSocketStream("wss://localhost:4243"); const ws = new WebSocketStream("wss://localhost:4243");
const { readable, writable } = await ws.connection; const { readable, writable } = await ws.opened;
await writable.getWriter().write("foo"); await writable.getWriter().write("foo");
const res = await readable.getReader().read(); const res = await readable.getReader().read();
assertEquals(res.value, "foo"); assertEquals(res.value, "foo");
@ -61,7 +61,7 @@ Deno.test("websocket error", async () => {
const ws = new WebSocketStream("wss://localhost:4242"); const ws = new WebSocketStream("wss://localhost:4242");
await Promise.all([ await Promise.all([
assertRejects( assertRejects(
() => ws.connection, () => ws.opened,
Deno.errors.UnexpectedEof, Deno.errors.UnexpectedEof,
"tls handshake eof", "tls handshake eof",
), ),
@ -75,7 +75,7 @@ Deno.test("websocket error", async () => {
Deno.test("echo uint8array", async () => { Deno.test("echo uint8array", async () => {
const ws = new WebSocketStream("ws://localhost:4242"); const ws = new WebSocketStream("ws://localhost:4242");
const { readable, writable } = await ws.connection; const { readable, writable } = await ws.opened;
const uint = new Uint8Array([102, 111, 111]); const uint = new Uint8Array([102, 111, 111]);
await writable.getWriter().write(uint); await writable.getWriter().write(uint);
const res = await readable.getReader().read(); const res = await readable.getReader().read();
@ -91,7 +91,7 @@ Deno.test("aborting immediately throws an AbortError", async () => {
}); });
controller.abort(); controller.abort();
await assertRejects( await assertRejects(
() => wss.connection, () => wss.opened,
(error: Error) => { (error: Error) => {
assert(error instanceof DOMException); assert(error instanceof DOMException);
assertEquals(error.name, "AbortError"); assertEquals(error.name, "AbortError");
@ -114,7 +114,7 @@ Deno.test("aborting immediately with a reason throws that reason", async () => {
const abortReason = new Error(); const abortReason = new Error();
controller.abort(abortReason); controller.abort(abortReason);
await assertRejects( await assertRejects(
() => wss.connection, () => wss.opened,
(error: Error) => assertEquals(error, abortReason), (error: Error) => assertEquals(error, abortReason),
); );
await assertRejects( await assertRejects(
@ -129,7 +129,7 @@ Deno.test("aborting immediately with a primitive as reason throws that primitive
signal: controller.signal, signal: controller.signal,
}); });
controller.abort("Some string"); controller.abort("Some string");
await wss.connection.then( await wss.opened.then(
() => unreachable(), () => unreachable(),
(e) => assertEquals(e, "Some string"), (e) => assertEquals(e, "Some string"),
); );
@ -159,7 +159,7 @@ Deno.test("headers", async () => {
const ws = new WebSocketStream("ws://localhost:4512", { const ws = new WebSocketStream("ws://localhost:4512", {
headers: [["x-some-header", "foo"]], headers: [["x-some-header", "foo"]],
}); });
await ws.connection; await ws.opened;
await promise; await promise;
await ws.closed; await ws.closed;
listener.close(); listener.close();
@ -196,7 +196,7 @@ Deno.test("forbidden headers", async () => {
const ws = new WebSocketStream("ws://localhost:4512", { const ws = new WebSocketStream("ws://localhost:4512", {
headers: forbiddenHeaders.map((header) => [header, "foo"]), headers: forbiddenHeaders.map((header) => [header, "foo"]),
}); });
await ws.connection; await ws.opened;
await promise; await promise;
await ws.closed; await ws.closed;
listener.close(); listener.close();
@ -221,7 +221,7 @@ Deno.test("sync close with empty stream", async () => {
})(); })();
const ws = new WebSocketStream("ws://localhost:4512"); const ws = new WebSocketStream("ws://localhost:4512");
const { readable } = await ws.connection; const { readable } = await ws.opened;
const reader = readable.getReader(); const reader = readable.getReader();
const firstMessage = await reader.read(); const firstMessage = await reader.read();
assertEquals(firstMessage.value, "first message"); assertEquals(firstMessage.value, "first message");
@ -254,7 +254,7 @@ Deno.test("sync close with unread messages in stream", async () => {
})(); })();
const ws = new WebSocketStream("ws://localhost:4512"); const ws = new WebSocketStream("ws://localhost:4512");
const { readable } = await ws.connection; const { readable } = await ws.opened;
const reader = readable.getReader(); const reader = readable.getReader();
const firstMessage = await reader.read(); const firstMessage = await reader.read();
assertEquals(firstMessage.value, "first message"); assertEquals(firstMessage.value, "first message");
@ -285,7 +285,7 @@ Deno.test("async close with empty stream", async () => {
})(); })();
const ws = new WebSocketStream("ws://localhost:4512"); const ws = new WebSocketStream("ws://localhost:4512");
const { readable } = await ws.connection; const { readable } = await ws.opened;
const reader = readable.getReader(); const reader = readable.getReader();
const firstMessage = await reader.read(); const firstMessage = await reader.read();
assertEquals(firstMessage.value, "first message"); assertEquals(firstMessage.value, "first message");
@ -320,7 +320,7 @@ Deno.test("async close with unread messages in stream", async () => {
})(); })();
const ws = new WebSocketStream("ws://localhost:4512"); const ws = new WebSocketStream("ws://localhost:4512");
const { readable } = await ws.connection; const { readable } = await ws.opened;
const reader = readable.getReader(); const reader = readable.getReader();
const firstMessage = await reader.read(); const firstMessage = await reader.read();
assertEquals(firstMessage.value, "first message"); assertEquals(firstMessage.value, "first message");

View file

@ -2198,7 +2198,7 @@ declare interface WebSocketCloseInfo {
*/ */
declare interface WebSocketStream { declare interface WebSocketStream {
url: string; url: string;
connection: Promise<WebSocketConnection>; opened: Promise<WebSocketConnection>;
closed: Promise<WebSocketCloseInfo>; closed: Promise<WebSocketCloseInfo>;
close(closeInfo?: WebSocketCloseInfo): void; close(closeInfo?: WebSocketCloseInfo): void;
} }

View file

@ -82,7 +82,7 @@ const CLOSE_RESPONSE_TIMEOUT = 5000;
const _rid = Symbol("[[rid]]"); const _rid = Symbol("[[rid]]");
const _url = Symbol("[[url]]"); const _url = Symbol("[[url]]");
const _connection = Symbol("[[connection]]"); const _opened = Symbol("[[opened]]");
const _closed = Symbol("[[closed]]"); const _closed = Symbol("[[closed]]");
const _earlyClose = Symbol("[[earlyClose]]"); const _earlyClose = Symbol("[[earlyClose]]");
const _closeSent = Symbol("[[closeSent]]"); const _closeSent = Symbol("[[closeSent]]");
@ -155,7 +155,7 @@ class WebSocketStream {
if (options.signal?.aborted) { if (options.signal?.aborted) {
core.close(cancelRid); core.close(cancelRid);
const err = options.signal.reason; const err = options.signal.reason;
this[_connection].reject(err); this[_opened].reject(err);
this[_closed].reject(err); this[_closed].reject(err);
} else { } else {
const abort = () => { const abort = () => {
@ -192,7 +192,7 @@ class WebSocketStream {
"Closed while connecting", "Closed while connecting",
"NetworkError", "NetworkError",
); );
this[_connection].reject(err); this[_opened].reject(err);
this[_closed].reject(err); this[_closed].reject(err);
}, },
); );
@ -202,7 +202,7 @@ class WebSocketStream {
"Closed while connecting", "Closed while connecting",
"NetworkError", "NetworkError",
); );
this[_connection].reject(err); this[_opened].reject(err);
this[_closed].reject(err); this[_closed].reject(err);
}, },
); );
@ -334,7 +334,7 @@ class WebSocketStream {
}, },
}); });
this[_connection].resolve({ this[_opened].resolve({
readable, readable,
writable, writable,
extensions: create.extensions ?? "", extensions: create.extensions ?? "",
@ -349,17 +349,17 @@ class WebSocketStream {
} else { } else {
core.tryClose(cancelRid); core.tryClose(cancelRid);
} }
this[_connection].reject(err); this[_opened].reject(err);
this[_closed].reject(err); this[_closed].reject(err);
}, },
); );
} }
} }
[_connection] = new Deferred(); [_opened] = new Deferred();
get connection() { get opened() {
webidl.assertBranded(this, WebSocketStreamPrototype); webidl.assertBranded(this, WebSocketStreamPrototype);
return this[_connection].promise; return this[_opened].promise;
} }
[_earlyClose] = false; [_earlyClose] = false;
@ -405,7 +405,7 @@ class WebSocketStream {
code = 1000; code = 1000;
} }
if (this[_connection].state === "pending") { if (this[_opened].state === "pending") {
this[_earlyClose] = true; this[_earlyClose] = true;
} else if (this[_closed].state === "pending") { } else if (this[_closed].state === "pending") {
PromisePrototypeThen( PromisePrototypeThen(

View file

@ -8180,42 +8180,30 @@
"send-many-64K-messages-with-backpressure.any.worker.html?wss": true, "send-many-64K-messages-with-backpressure.any.worker.html?wss": true,
"stream": { "stream": {
"tentative": { "tentative": {
"abort.any.html?wpt_flags=h2": false, "abort.any.html?wpt_flags=h2": [
"abort.any.html?wss": false, "abort after connect should do nothing"
"abort.any.worker.html?wpt_flags=h2": false, ],
"abort.any.worker.html?wss": false, "abort.any.html?wss": true,
"abort.any.worker.html?wpt_flags=h2": [
"abort after connect should do nothing"
],
"abort.any.worker.html?wss": true,
"backpressure-receive.any.html?wpt_flags=h2": false, "backpressure-receive.any.html?wpt_flags=h2": false,
"backpressure-receive.any.html?wss": false, "backpressure-receive.any.html?wss": true,
"backpressure-receive.any.worker.html?wpt_flags=h2": false, "backpressure-receive.any.worker.html?wpt_flags=h2": false,
"backpressure-receive.any.worker.html?wss": false, "backpressure-receive.any.worker.html?wss": true,
"backpressure-send.any.html?wpt_flags=h2": false, "backpressure-send.any.html?wpt_flags=h2": false,
"backpressure-send.any.html?wss": false, "backpressure-send.any.html?wss": true,
"backpressure-send.any.worker.html?wpt_flags=h2": false, "backpressure-send.any.worker.html?wpt_flags=h2": false,
"backpressure-send.any.worker.html?wss": false, "backpressure-send.any.worker.html?wss": true,
"close.any.html?wpt_flags=h2": false, "close.any.html?wpt_flags=h2": false,
"close.any.html?wss": false, "close.any.html?wss": true,
"close.any.worker.html?wpt_flags=h2": false, "close.any.worker.html?wpt_flags=h2": false,
"close.any.worker.html?wss": false, "close.any.worker.html?wss": true,
"constructor.any.html?wpt_flags=h2": [ "constructor.any.html?wpt_flags=h2": false,
"setting a protocol in the constructor should work", "constructor.any.html?wss": true,
"connection failure should reject the promises", "constructor.any.worker.html?wpt_flags=h2": false,
"wss.opened should resolve to the right types" "constructor.any.worker.html?wss": true
],
"constructor.any.html?wss": [
"setting a protocol in the constructor should work",
"connection failure should reject the promises",
"wss.opened should resolve to the right types"
],
"constructor.any.worker.html?wpt_flags=h2": [
"setting a protocol in the constructor should work",
"connection failure should reject the promises",
"wss.opened should resolve to the right types"
],
"constructor.any.worker.html?wss": [
"setting a protocol in the constructor should work",
"connection failure should reject the promises",
"wss.opened should resolve to the right types"
]
} }
} }
}, },