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:
parent
2215a3ea2e
commit
8ba1242a05
5 changed files with 45 additions and 57 deletions
|
@ -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) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
30
cli/tests/testdata/run/websocketstream_test.ts
vendored
30
cli/tests/testdata/run/websocketstream_test.ts
vendored
|
@ -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");
|
||||||
|
|
2
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
2
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue