Skip to content

Commit 2ee6b1a

Browse files
petamorikenbartlomieju
authored andcommitted
fix(streams): reject string in ReadableStream.from type (#25116)
WebIDL `async iterable<T>` type rejects `string` Ref whatwg/webidl#1397, #24623
1 parent 8cd9fa6 commit 2ee6b1a

File tree

8 files changed

+18
-6
lines changed

8 files changed

+18
-6
lines changed

cli/tsc/dts/lib.dom.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18277,7 +18277,7 @@ declare var ReadableStream: {
1827718277
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
1827818278
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
1827918279
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
18280-
from<R>(asyncIterable: AsyncIterable<R> | Iterable<R | PromiseLike<R>>): ReadableStream<R>;
18280+
from<R>(asyncIterable: AsyncIterable<R> | Iterable<R | PromiseLike<R>> & object): ReadableStream<R>;
1828118281
};
1828218282

1828318283
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader) */

ext/web/06_streams.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2922,7 +2922,7 @@ function readableStreamPipeTo(
29222922
}
29232923

29242924
/**
2925-
* @param {ReadableStreamGenericReader<any> | ReadableStreamBYOBReader} reader
2925+
* @param {ReadableStreamGenericReader | ReadableStreamBYOBReader} reader
29262926
* @param {any} reason
29272927
* @returns {Promise<void>}
29282928
*/
@@ -2955,7 +2955,7 @@ function readableStreamReaderGenericInitialize(reader, stream) {
29552955

29562956
/**
29572957
* @template R
2958-
* @param {ReadableStreamGenericReader<R> | ReadableStreamBYOBReader} reader
2958+
* @param {ReadableStreamGenericReader | ReadableStreamBYOBReader} reader
29592959
*/
29602960
function readableStreamReaderGenericRelease(reader) {
29612961
const stream = reader[_stream];

ext/web/06_streams_types.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ interface VoidFunction {
6060
(): void;
6161
}
6262

63-
interface ReadableStreamGenericReader<T> {
64-
readonly closed: Promise<void>;
63+
interface ReadableStreamGenericReader {
64+
readonly closed: Promise<undefined>;
6565
// deno-lint-ignore no-explicit-any
6666
cancel(reason?: any): Promise<void>;
6767
}

ext/web/lib.deno_web.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,7 @@ declare var ReadableStream: {
882882
strategy?: QueuingStrategy<R>,
883883
): ReadableStream<R>;
884884
from<R>(
885-
asyncIterable: AsyncIterable<R> | Iterable<R | PromiseLike<R>>,
885+
asyncIterable: AsyncIterable<R> | Iterable<R | PromiseLike<R>> & object,
886886
): ReadableStream<R>;
887887
};
888888

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"args": "check ./main.ts",
3+
"output": "main.out",
4+
"exitCode": 1
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Check [WILDCARD]/main.ts
2+
error: TS2345 [ERROR]: Argument of type 'string' is not assignable to parameter of type 'AsyncIterable<string> | (Iterable<string | PromiseLike<string>> & object)'.
3+
ReadableStream.from("string");
4+
~~~~~~~~
5+
at [WILDCARD]/main.ts:1:21
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ReadableStream.from("string");

tests/unit/streams_test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ Deno.test(async function decompressionStreamInvalidGzipStillReported() {
541541

542542
Deno.test(function readableStreamFromWithStringThrows() {
543543
assertThrows(
544+
// @ts-expect-error: primitives are not acceptable
544545
() => ReadableStream.from("string"),
545546
TypeError,
546547
"Failed to execute 'ReadableStream.from': Argument 1 can not be converted to async iterable.",

0 commit comments

Comments
 (0)