Skip to content

Add Streams #541

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

Merged
merged 38 commits into from
Nov 5, 2018
Merged
Show file tree
Hide file tree
Changes from 37 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
5d16d63
Add streams WebIDL
MattiasBuelens Jul 23, 2018
576c42f
Make streams generic
MattiasBuelens Jul 23, 2018
1150078
Improve type of ReadableStreamReader
MattiasBuelens Jul 23, 2018
e50dc83
Fetch: use ReadableStream<Uint8Array>
MattiasBuelens Jul 23, 2018
f0f2dda
Fix ReadableStream constructor
MattiasBuelens Jul 23, 2018
b258270
Make reasons and errors optional
MattiasBuelens Jul 23, 2018
3ccfd34
Rename e to error
MattiasBuelens Jul 23, 2018
e0ed218
Accept new baselines
MattiasBuelens Jul 23, 2018
8176a9d
Sort idlSources alphabetically
MattiasBuelens Jul 24, 2018
cc52c69
Mark streams IDL as local
MattiasBuelens Jul 24, 2018
29a7221
Support type parameters on CallbackFunction
MattiasBuelens Jul 24, 2018
1b94c74
Clean up callback functions
MattiasBuelens Jul 24, 2018
dfc6467
Remove unnecessary name overrides
MattiasBuelens Jul 24, 2018
84566cd
Remove unnecessary override-exposed
MattiasBuelens Jul 24, 2018
c318e79
Support extends clause on type parameters
MattiasBuelens Jul 24, 2018
74d8db2
Clean up ReadableWritableStreamPair
MattiasBuelens Jul 24, 2018
827aacc
Use required in IDL
MattiasBuelens Jul 25, 2018
baa31c3
Move ReadableWritableStreamPair to dictionaries
MattiasBuelens Jul 25, 2018
b80572d
Use ReadableWritableStreamPair in IDL to expose where necessary
MattiasBuelens Jul 25, 2018
cb30ef7
Fix typo
MattiasBuelens Jul 25, 2018
5ec290c
Add missing WritableStream overrides
MattiasBuelens Jul 25, 2018
4737e35
Require UnderlyingSource.type to be missing or undefined
MattiasBuelens Jul 25, 2018
607b490
Restrict ByteLengthQueuingStrategy to ArrayBufferView chunks
MattiasBuelens Jul 25, 2018
cddb4d9
Re-order getReader overloads
MattiasBuelens Jul 25, 2018
89d0700
Disallow passing strategy with size callback when constructing a read…
MattiasBuelens Jul 25, 2018
fbe5f96
Add missing default type parameter
MattiasBuelens Jul 25, 2018
fe5ef6a
Add missing TransformStream override
MattiasBuelens Jul 26, 2018
c6b12c6
Replace ReadableWritableStreamPair with WritableReadableStreamPair
MattiasBuelens Oct 27, 2018
d59d957
Replace TransformStream<R, W> with TransformStream<I, O>
MattiasBuelens Oct 27, 2018
b1fffe4
Fix missing default
MattiasBuelens Oct 27, 2018
c43d563
Add no-interface-object to hidden constructors
MattiasBuelens Nov 1, 2018
899e860
Mark optional dictionary members as non-nullable
MattiasBuelens Nov 1, 2018
0c8ed07
Fix arguments of UnderlyingSink.close
MattiasBuelens Nov 1, 2018
0ab7bda
Fix callback return types
MattiasBuelens Nov 1, 2018
a36365e
Change ReadableStreamBYOBRequest.view back to ArrayBufferView
MattiasBuelens Nov 1, 2018
937edaf
Inline and remove WritableReadableStreamPair
MattiasBuelens Nov 1, 2018
db88d1c
Ensure sinks and transformers are forward-compatible
MattiasBuelens Nov 1, 2018
af53881
Simplify pipeThrough
MattiasBuelens Nov 3, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
197 changes: 156 additions & 41 deletions baselines/dom.generated.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -890,6 +890,12 @@ interface PeriodicWaveOptions extends PeriodicWaveConstraints {
real?: number[] | Float32Array;
}

interface PipeOptions {
preventAbort?: boolean;
preventCancel?: boolean;
preventClose?: boolean;
}

interface PointerEventInit extends MouseEventInit {
height?: number;
isPrimary?: boolean;
Expand Down Expand Up @@ -942,9 +948,9 @@ interface PushSubscriptionOptionsInit {
userVisibleOnly?: boolean;
}

interface QueuingStrategy {
interface QueuingStrategy<T = any> {
highWaterMark?: number;
size?: WritableStreamChunkCallback;
size?: QueuingStrategySizeCallback<T>;
}

interface RTCAnswerOptions extends RTCOfferAnswerOptions {
Expand Down Expand Up @@ -1500,6 +1506,14 @@ interface TrackEventInit extends EventInit {
track?: VideoTrack | AudioTrack | TextTrack | null;
}

interface Transformer<I = any, O = any> {
flush?: TransformStreamDefaultControllerCallback<O>;
readableType?: undefined;
start?: TransformStreamDefaultControllerCallback<O>;
transform?: TransformStreamDefaultControllerTransformCallback<I, O>;
writableType?: undefined;
}

interface TransitionEventInit extends EventInit {
elapsedTime?: number;
propertyName?: string;
Expand All @@ -1511,11 +1525,27 @@ interface UIEventInit extends EventInit {
view?: Window | null;
}

interface UnderlyingSink {
interface UnderlyingByteSource {
autoAllocateChunkSize?: number;
cancel?: ReadableStreamErrorCallback;
pull?: ReadableByteStreamControllerCallback;
start?: ReadableByteStreamControllerCallback;
type: "bytes";
}

interface UnderlyingSink<W = any> {
abort?: WritableStreamErrorCallback;
close?: WritableStreamDefaultControllerCallback;
start: WritableStreamDefaultControllerCallback;
write?: WritableStreamChunkCallback;
close?: WritableStreamDefaultControllerCloseCallback;
start?: WritableStreamDefaultControllerStartCallback;
type?: undefined;
write?: WritableStreamDefaultControllerWriteCallback<W>;
}

interface UnderlyingSource<R = any> {
cancel?: ReadableStreamErrorCallback;
pull?: ReadableStreamDefaultControllerCallback<R>;
start?: ReadableStreamDefaultControllerCallback<R>;
type?: undefined;
}

interface VRDisplayEventInit extends EventInit {
Expand Down Expand Up @@ -2172,7 +2202,7 @@ declare var Blob: {
};

interface Body {
readonly body: ReadableStream | null;
readonly body: ReadableStream<Uint8Array> | null;
readonly bodyUsed: boolean;
arrayBuffer(): Promise<ArrayBuffer>;
blob(): Promise<Blob>;
Expand Down Expand Up @@ -2217,14 +2247,14 @@ interface BroadcastChannelEventMap {
messageerror: MessageEvent;
}

interface ByteLengthQueuingStrategy {
interface ByteLengthQueuingStrategy extends QueuingStrategy<ArrayBufferView> {
highWaterMark: number;
size(chunk?: any): number;
size(chunk: ArrayBufferView): number;
}

declare var ByteLengthQueuingStrategy: {
prototype: ByteLengthQueuingStrategy;
new(strategy: QueuingStrategy): ByteLengthQueuingStrategy;
new(options: { highWaterMark: number }): ByteLengthQueuingStrategy;
};

interface CDATASection extends Text {
Expand Down Expand Up @@ -3308,14 +3338,14 @@ interface Coordinates {
readonly speed: number | null;
}

interface CountQueuingStrategy {
interface CountQueuingStrategy extends QueuingStrategy {
highWaterMark: number;
size(): number;
size(chunk: any): 1;
}

declare var CountQueuingStrategy: {
prototype: CountQueuingStrategy;
new(strategy: QueuingStrategy): CountQueuingStrategy;
new(options: { highWaterMark: number }): CountQueuingStrategy;
};

interface Crypto {
Expand Down Expand Up @@ -11834,20 +11864,70 @@ declare var Range: {
readonly START_TO_START: number;
};

interface ReadableStream {
interface ReadableByteStreamController {
readonly byobRequest: ReadableStreamBYOBRequest | undefined;
readonly desiredSize: number | null;
close(): void;
enqueue(chunk: ArrayBufferView): void;
error(error?: any): void;
}

interface ReadableStream<R = any> {
readonly locked: boolean;
cancel(): Promise<void>;
getReader(): ReadableStreamReader;
cancel(reason?: any): Promise<void>;
getReader(options: { mode: "byob" }): ReadableStreamBYOBReader;
getReader(): ReadableStreamDefaultReader<R>;
pipeThrough<T extends ReadableStream>({ writable, readable }: { writable: WritableStream<R>, readable: T }, options?: PipeOptions): T;
pipeTo(dest: WritableStream<R>, options?: PipeOptions): Promise<void>;
tee(): [ReadableStream<R>, ReadableStream<R>];
}

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

interface ReadableStreamBYOBReader {
readonly closed: Promise<void>;
cancel(reason?: any): Promise<void>;
read<T extends ArrayBufferView>(view: T): Promise<ReadableStreamReadResult<T>>;
releaseLock(): void;
}

declare var ReadableStreamBYOBReader: {
prototype: ReadableStreamBYOBReader;
new(stream: ReadableStream<Uint8Array>): ReadableStreamBYOBReader;
};

interface ReadableStreamReader {
interface ReadableStreamBYOBRequest {
readonly view: ArrayBufferView;
respond(bytesWritten: number): void;
respondWithNewView(view: ArrayBufferView): void;
}

interface ReadableStreamDefaultController<R = any> {
readonly desiredSize: number | null;
close(): void;
enqueue(chunk: R): void;
error(error?: any): void;
}

interface ReadableStreamDefaultReader<R = any> {
readonly closed: Promise<void>;
cancel(reason?: any): Promise<void>;
read(): Promise<ReadableStreamReadResult<R>>;
releaseLock(): void;
}

interface ReadableStreamReadResult<T> {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A more precise type for this would be:

type ReadableStreamReadResult<T> = {
    done: false;
    value: T;
} | {
    done: true;
    value: undefined;
};

However, I also want this to be compatible with IteratorResult<T>, which is still defined as a regular interface:

interface IteratorResult<T> {
    done: boolean;
    value: T;
}

So yeah... ¯\_(ツ)_/¯

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In addition, the IteratorResult type is only defined in es2015.lib as I found out the hard way.

done: boolean;
value: T;
}

interface ReadableStreamReader<R = any> {
cancel(): Promise<void>;
read(): Promise<any>;
read(): Promise<ReadableStreamReadResult<R>>;
releaseLock(): void;
}

Expand Down Expand Up @@ -14904,6 +14984,23 @@ declare var TrackEvent: {
new(typeArg: string, eventInitDict?: TrackEventInit): TrackEvent;
};

interface TransformStream<I = any, O = any> {
readonly readable: ReadableStream<O>;
readonly writable: WritableStream<I>;
}

declare var TransformStream: {
prototype: TransformStream;
new<I = any, O = any>(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>): TransformStream<I, O>;
};

interface TransformStreamDefaultController<O = any> {
readonly desiredSize: number | null;
enqueue(chunk: O): void;
error(reason?: any): void;
terminate(): void;
}

interface TransitionEvent extends Event {
readonly elapsedTime: number;
readonly propertyName: string;
Expand Down Expand Up @@ -16637,41 +16734,31 @@ declare var Worklet: {
new(): Worklet;
};

interface WritableStream {
interface WritableStream<W = any> {
readonly locked: boolean;
abort(reason?: any): Promise<void>;
getWriter(): WritableStreamDefaultWriter;
getWriter(): WritableStreamDefaultWriter<W>;
}

declare var WritableStream: {
prototype: WritableStream;
new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream;
new<W = any>(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>): WritableStream<W>;
};

interface WritableStreamDefaultController {
error(error?: any): void;
}

declare var WritableStreamDefaultController: {
prototype: WritableStreamDefaultController;
new(): WritableStreamDefaultController;
};

interface WritableStreamDefaultWriter {
interface WritableStreamDefaultWriter<W = any> {
readonly closed: Promise<void>;
readonly desiredSize: number;
readonly desiredSize: number | null;
readonly ready: Promise<void>;
abort(reason?: any): Promise<void>;
close(): Promise<void>;
releaseLock(): void;
write(chunk?: any): Promise<any>;
write(chunk: W): Promise<void>;
}

declare var WritableStreamDefaultWriter: {
prototype: WritableStreamDefaultWriter;
new(): WritableStreamDefaultWriter;
};

interface XMLDocument extends Document {
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: XMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
Expand Down Expand Up @@ -17021,6 +17108,10 @@ interface PositionErrorCallback {
(positionError: PositionError): void;
}

interface QueuingStrategySizeCallback<T = any> {
(chunk: T): number;
}

interface RTCPeerConnectionErrorCallback {
(error: DOMException): void;
}
Expand All @@ -17033,20 +17124,44 @@ interface RTCStatsCallback {
(report: RTCStatsReport): void;
}

interface ReadableByteStreamControllerCallback {
(controller: ReadableByteStreamController): void | PromiseLike<void>;
}

interface ReadableStreamDefaultControllerCallback<R> {
(controller: ReadableStreamDefaultController<R>): void | PromiseLike<void>;
}

interface ReadableStreamErrorCallback {
(reason: any): void | PromiseLike<void>;
}

interface TransformStreamDefaultControllerCallback<O> {
(controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
}

interface TransformStreamDefaultControllerTransformCallback<I, O> {
(chunk: I, controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
}

interface VoidFunction {
(): void;
}

interface WritableStreamChunkCallback {
(chunk: any, controller: WritableStreamDefaultController): void;
interface WritableStreamDefaultControllerCloseCallback {
(): void | PromiseLike<void>;
}

interface WritableStreamDefaultControllerStartCallback {
(controller: WritableStreamDefaultController): void | PromiseLike<void>;
}

interface WritableStreamDefaultControllerCallback {
(controller: WritableStreamDefaultController): void;
interface WritableStreamDefaultControllerWriteCallback<W> {
(chunk: W, controller: WritableStreamDefaultController): void | PromiseLike<void>;
}

interface WritableStreamErrorCallback {
(reason: string): void;
(reason: any): void | PromiseLike<void>;
}

interface HTMLElementTagNameMap {
Expand Down Expand Up @@ -17680,7 +17795,7 @@ declare function removeEventListener<K extends keyof WindowEventMap>(type: K, li
declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
type BlobPart = BufferSource | Blob | string;
type HeadersInit = Headers | string[][] | Record<string, string>;
type BodyInit = Blob | BufferSource | FormData | URLSearchParams | ReadableStream | string;
type BodyInit = Blob | BufferSource | FormData | URLSearchParams | ReadableStream<Uint8Array> | string;
type RequestInfo = Request | string;
type DOMHighResTimeStamp = number;
type RenderingContext = CanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext;
Expand Down
Loading