Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add readable byte streams #1362

Merged
merged 13 commits into from
Aug 4, 2022
17 changes: 17 additions & 0 deletions baselines/audioworklet.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,21 @@ interface Transformer<I = any, O = any> {
writableType?: undefined;
}

interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;
start?: (controller: ReadableByteStreamController) => any;
type: "bytes";
}

interface UnderlyingDefaultSource<R = any> {
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;
start?: (controller: ReadableStreamDefaultController<R>) => any;
type?: undefined;
}

interface UnderlyingSink<W = any> {
abort?: UnderlyingSinkAbortCallback;
close?: UnderlyingSinkCloseCallback;
Expand Down Expand Up @@ -549,6 +564,8 @@ interface ReadableStream<R = any> {

declare var ReadableStream: {
prototype: ReadableStream;
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
};

Expand Down
17 changes: 17 additions & 0 deletions baselines/dom.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1780,6 +1780,21 @@ interface ULongRange {
min?: number;
}

interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;
start?: (controller: ReadableByteStreamController) => any;
type: "bytes";
}

interface UnderlyingDefaultSource<R = any> {
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;
start?: (controller: ReadableStreamDefaultController<R>) => any;
type?: undefined;
}

interface UnderlyingSink<W = any> {
abort?: UnderlyingSinkAbortCallback;
close?: UnderlyingSinkCloseCallback;
Expand Down Expand Up @@ -11385,6 +11400,8 @@ interface ReadableStream<R = any> {

declare var ReadableStream: {
prototype: ReadableStream;
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
};

Expand Down
17 changes: 17 additions & 0 deletions baselines/serviceworker.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,21 @@ interface Transformer<I = any, O = any> {
writableType?: undefined;
}

interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;
start?: (controller: ReadableByteStreamController) => any;
type: "bytes";
}

interface UnderlyingDefaultSource<R = any> {
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;
start?: (controller: ReadableStreamDefaultController<R>) => any;
type?: undefined;
}

interface UnderlyingSink<W = any> {
abort?: UnderlyingSinkAbortCallback;
close?: UnderlyingSinkCloseCallback;
Expand Down Expand Up @@ -2613,6 +2628,8 @@ interface ReadableStream<R = any> {

declare var ReadableStream: {
prototype: ReadableStream;
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
};

Expand Down
17 changes: 17 additions & 0 deletions baselines/sharedworker.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,21 @@ interface Transformer<I = any, O = any> {
writableType?: undefined;
}

interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;
start?: (controller: ReadableByteStreamController) => any;
type: "bytes";
}

interface UnderlyingDefaultSource<R = any> {
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;
start?: (controller: ReadableStreamDefaultController<R>) => any;
type?: undefined;
}

interface UnderlyingSink<W = any> {
abort?: UnderlyingSinkAbortCallback;
close?: UnderlyingSinkCloseCallback;
Expand Down Expand Up @@ -2492,6 +2507,8 @@ interface ReadableStream<R = any> {

declare var ReadableStream: {
prototype: ReadableStream;
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
};

Expand Down
17 changes: 17 additions & 0 deletions baselines/webworker.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,21 @@ interface Transformer<I = any, O = any> {
writableType?: undefined;
}

interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;
start?: (controller: ReadableByteStreamController) => any;
type: "bytes";
}

interface UnderlyingDefaultSource<R = any> {
cancel?: UnderlyingSourceCancelCallback;
pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;
start?: (controller: ReadableStreamDefaultController<R>) => any;
type?: undefined;
}

interface UnderlyingSink<W = any> {
abort?: UnderlyingSinkAbortCallback;
close?: UnderlyingSinkCloseCallback;
Expand Down Expand Up @@ -2711,6 +2726,8 @@ interface ReadableStream<R = any> {

declare var ReadableStream: {
prototype: ReadableStream;
new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;
new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;
MattiasBuelens marked this conversation as resolved.
Show resolved Hide resolved
};

Expand Down
57 changes: 57 additions & 0 deletions inputfiles/addedTypes.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -1195,6 +1195,63 @@
}
}
}
},
"UnderlyingByteSource": {
"name": "UnderlyingByteSource",
"members": {
"member": {
"type": {
"name": "type",
"required": true,
"overrideType": "\"bytes\""
},
"autoAllocateChunkSize": {
"name": "autoAllocateChunkSize",
"overrideType": "number"
MattiasBuelens marked this conversation as resolved.
Show resolved Hide resolved
},
"start": {
"name": "start",
"overrideType": "(controller: ReadableByteStreamController) => any"
},
"pull": {
"name": "pull",
"overrideType": "(controller: ReadableByteStreamController) => void | PromiseLike<void>"
},
"cancel": {
"name": "cancel",
"type": "UnderlyingSourceCancelCallback"
}
}
}
},
"UnderlyingDefaultSource": {
"name": "UnderlyingDefaultSource",
"typeParameters": [
{
"name": "R",
"default": "any"
}
],
"members": {
"member": {
"type": {
"name": "type",
"type": "undefined"
},
"start": {
"name": "start",
"overrideType": "(controller: ReadableStreamDefaultController<R>) => any"
},
"pull": {
"name": "pull",
"overrideType": "(controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>"
},
"cancel": {
"name": "cancel",
"type": "UnderlyingSourceCancelCallback"
}
}
}
}
}
},
Expand Down
53 changes: 44 additions & 9 deletions inputfiles/overridingTypes.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -2349,6 +2349,20 @@
"constructor": {
"signature": {
"0": {
"param": [
{
"name": "underlyingSource",
"optional": false,
"overrideType": "UnderlyingByteSource"
MattiasBuelens marked this conversation as resolved.
Show resolved Hide resolved
},
{
"name": "strategy",
"overrideType": "{ highWaterMark?: number }"
}
],
"overrideType": "ReadableStream<Uint8Array>"
},
"1": {
"typeParameters": [
{
"name": "R",
Expand All @@ -2358,10 +2372,33 @@
"param": [
{
"name": "underlyingSource",
"optional": false,
"overrideType": "UnderlyingDefaultSource<R>"
},
{
"name": "strategy",
"optional": true,
"overrideType": "QueuingStrategy<R>"
}
],
"overrideType": "ReadableStream<R>"
},
"2": {
"typeParameters": [
{
"name": "R",
"default": "any"
}
],
"param": [
{
"name": "underlyingSource",
"optional": true,
"overrideType": "UnderlyingSource<R>"
},
{
"name": "strategy",
"optional": true,
"overrideType": "QueuingStrategy<R>"
}
],
Expand All @@ -2372,6 +2409,12 @@
{
"type": "UnderlyingSource"
},
{
"type": "UnderlyingByteSource"
},
{
"type": "UnderlyingDefaultSource"
},
{
"type": "QueuingStrategy"
}
Expand All @@ -2388,15 +2431,7 @@
"0": {
"overrideType": "ReadableStreamReader<R>"
}
},
"force-references": [
{
"type": "ReadableStreamDefaultReader"
},
{
"type": "ReadableStreamBYOBReader"
}
]
}
},
"pipeThrough": {
"signature": {
Expand Down
51 changes: 51 additions & 0 deletions unittests/files/streams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const readableStream = new ReadableStream<string>({
start(controller) {
controller.desiredSize;
controller.enqueue("a");
},
pull(controller) {
controller.enqueue("b");
controller.close();
},
});

const defaultReader1 = readableStream.getReader();
defaultReader1.read().then((result) => {
if (!result.done) {
result.value.charAt(0);
}
});

const readableByteStream = new ReadableStream({
type: "bytes",
start(controller) {
controller.desiredSize;
controller.byobRequest;
},
pull(controller) {
if (controller.byobRequest) {
controller.byobRequest.view;
controller.byobRequest.respond(1);
controller.byobRequest.respondWithNewView(new Uint32Array(1));
} else {
controller.enqueue(new Uint8Array(1));
}
controller.close();
},
});

const defaultReader2 = readableByteStream.getReader();
defaultReader2.read().then((result) => {
if (!result.done) {
result.value.buffer;
result.value[0];
}
});

const byobReader = readableByteStream.getReader({ mode: "byob" });
byobReader.read(new Uint8Array(1));
byobReader.read(new DataView(new ArrayBuffer(1))).then((result) => {
if (!result.done) {
result.value.getUint8(0);
}
});