Skip to content

Commit 1620172

Browse files
committed
WIP
1 parent 2c54ad6 commit 1620172

File tree

7 files changed

+67
-26
lines changed

7 files changed

+67
-26
lines changed

api-reports/2_12.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15625,6 +15625,8 @@ PushSubscriptionJSON[JT] val expirationTime: java.lang.Double
1562515625
PushSubscriptionJSON[JT] val keys: js.Dictionary[String]
1562615626
PushSubscriptionOptions[JT] var applicationServerKey: js.UndefOr[Uint8Array]
1562715627
PushSubscriptionOptions[JT] var userVisibleOnly: js.UndefOr[Boolean]
15628+
QueuingStrategy[JT] var highWaterMark: Int
15629+
QueuingStrategy[JT] var size: js.Function1[T, Int]
1562815630
RTCBundlePolicy[JT]
1562915631
RTCBundlePolicy[SO] val balanced: RTCBundlePolicy
1563015632
RTCBundlePolicy[SO] val `max-bundle` = "max-bundle".asInstanceOf[RTCBundlePolicy]
@@ -15851,13 +15853,11 @@ ReadableStream[JT] def locked: Boolean
1585115853
ReadableStream[JT] def pipeThrough[U](pair: Any, options: Any?): ReadableStream[U]
1585215854
ReadableStream[JT] def pipeTo(dest: WriteableStream[T], options: Any?): Unit
1585315855
ReadableStream[JT] def tee(): js.Array[_ <: ReadableStream[T]]
15854-
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]], queuingStrategy: js.UndefOr[ReadableStreamQueuingStrategy[T]]?): ReadableStream[T]
15856+
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]]?, queuingStrategy: js.UndefOr[QueuingStrategy[T]]?): ReadableStream[T]
1585515857
ReadableStreamController[JC] def close(): Unit
1585615858
ReadableStreamController[JC] def desiredSize: Int
1585715859
ReadableStreamController[JC] def enqueue(chunk: T): js.UndefOr[Int]
1585815860
ReadableStreamController[JC] def error(e: Any): Unit
15859-
ReadableStreamQueuingStrategy[JT] var highWaterMark: Double
15860-
ReadableStreamQueuingStrategy[JT] var size: js.Function1[Chunk[T], Unit]
1586115861
ReadableStreamReader[JC] def cancel(): js.Promise[Unit]
1586215862
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[U]
1586315863
ReadableStreamReader[JC] def closed: js.Promise[ReadableStreamReader[T]]
@@ -15866,9 +15866,9 @@ ReadableStreamReader[JC] def releaseLock(): Unit
1586615866
ReadableStreamType[JT]
1586715867
ReadableStreamType[SO] val bytes: ReadableStreamType
1586815868
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Double]
15869-
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, Unit | js.Promise[Unit]]]
15870-
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]]
15871-
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]]
15869+
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, js.UndefOr[js.Promise[Unit]]]]
15870+
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
15871+
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
1587215872
ReadableStreamUnderlyingSource[JT] var `type`: js.UndefOr[ReadableStreamType]
1587315873
ReferrerPolicy[JT]
1587415874
ReferrerPolicy[SO] val empty: ReferrerPolicy

api-reports/2_13.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15625,6 +15625,8 @@ PushSubscriptionJSON[JT] val expirationTime: java.lang.Double
1562515625
PushSubscriptionJSON[JT] val keys: js.Dictionary[String]
1562615626
PushSubscriptionOptions[JT] var applicationServerKey: js.UndefOr[Uint8Array]
1562715627
PushSubscriptionOptions[JT] var userVisibleOnly: js.UndefOr[Boolean]
15628+
QueuingStrategy[JT] var highWaterMark: Int
15629+
QueuingStrategy[JT] var size: js.Function1[T, Int]
1562815630
RTCBundlePolicy[JT]
1562915631
RTCBundlePolicy[SO] val balanced: RTCBundlePolicy
1563015632
RTCBundlePolicy[SO] val `max-bundle` = "max-bundle".asInstanceOf[RTCBundlePolicy]
@@ -15851,13 +15853,11 @@ ReadableStream[JT] def locked: Boolean
1585115853
ReadableStream[JT] def pipeThrough[U](pair: Any, options: Any?): ReadableStream[U]
1585215854
ReadableStream[JT] def pipeTo(dest: WriteableStream[T], options: Any?): Unit
1585315855
ReadableStream[JT] def tee(): js.Array[_ <: ReadableStream[T]]
15854-
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]], queuingStrategy: js.UndefOr[ReadableStreamQueuingStrategy[T]]?): ReadableStream[T]
15856+
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]]?, queuingStrategy: js.UndefOr[QueuingStrategy[T]]?): ReadableStream[T]
1585515857
ReadableStreamController[JC] def close(): Unit
1585615858
ReadableStreamController[JC] def desiredSize: Int
1585715859
ReadableStreamController[JC] def enqueue(chunk: T): js.UndefOr[Int]
1585815860
ReadableStreamController[JC] def error(e: Any): Unit
15859-
ReadableStreamQueuingStrategy[JT] var highWaterMark: Double
15860-
ReadableStreamQueuingStrategy[JT] var size: js.Function1[Chunk[T], Unit]
1586115861
ReadableStreamReader[JC] def cancel(): js.Promise[Unit]
1586215862
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[U]
1586315863
ReadableStreamReader[JC] def closed: js.Promise[ReadableStreamReader[T]]
@@ -15866,9 +15866,9 @@ ReadableStreamReader[JC] def releaseLock(): Unit
1586615866
ReadableStreamType[JT]
1586715867
ReadableStreamType[SO] val bytes: ReadableStreamType
1586815868
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Double]
15869-
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, Unit | js.Promise[Unit]]]
15870-
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]]
15871-
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]]
15869+
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, js.UndefOr[js.Promise[Unit]]]]
15870+
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
15871+
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
1587215872
ReadableStreamUnderlyingSource[JT] var `type`: js.UndefOr[ReadableStreamType]
1587315873
ReferrerPolicy[JT]
1587415874
ReferrerPolicy[SO] val empty: ReferrerPolicy

dom/src/main/scala/org/scalajs/dom/ReadableStreamQueuingStrategy.scala renamed to dom/src/main/scala/org/scalajs/dom/QueuingStrategy.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import scala.scalajs.js
77
* @tparam T
88
* Type of the Chunks returned by the Stream
99
*/
10-
trait ReadableStreamQueuingStrategy[T] extends js.Object {
10+
trait QueuingStrategy[T] extends js.Object {
1111

1212
/** A non-negative number indicating the high water mark of the stream using this queuing strategy. */
13-
var highWaterMark: Double
13+
var highWaterMark: Int
1414

1515
/** (non-byte streams only)
1616
*
@@ -19,5 +19,5 @@ trait ReadableStreamQueuingStrategy[T] extends js.Object {
1919
*
2020
* A function that computes and returns the finite non-negative size of the given chunk value.
2121
*/
22-
var size: js.Function1[Chunk[T], Unit]
22+
var size: js.Function1[T, Int]
2323
}

dom/src/main/scala/org/scalajs/dom/ReadableStream.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ trait ReadableStream[+T] extends js.Object {
9696
object ReadableStream {
9797

9898
def apply[T](
99-
underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]],
100-
queuingStrategy: js.UndefOr[ReadableStreamQueuingStrategy[T]] = js.undefined
99+
underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]] = js.undefined,
100+
queuingStrategy: js.UndefOr[QueuingStrategy[T]] = js.undefined
101101
): ReadableStream[T] = {
102102
js.Dynamic
103103
.newInstance(js.Dynamic.global.selectDynamic("ReadableStream"))(

dom/src/main/scala/org/scalajs/dom/ReadableStreamController.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import scala.scalajs.js.annotation.JSGlobal
1515
*/
1616
@js.native
1717
@JSGlobal
18-
class ReadableStreamController[-T] private[this] (stream: ReadableStream[T] = null) extends js.Object {
18+
class ReadableStreamController[-T] private[this] () extends js.Object {
1919

2020
/** The desiredSize getter returns the desired size to fill the controlled stream’s internal queue. It can be
2121
* negative, if the queue is over-full. An underlying source should use this information to determine when and how to

dom/src/main/scala/org/scalajs/dom/ReadableStreamUnderlyingSource.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.scalajs.dom
22

33
import scala.scalajs.js
4-
import scala.scalajs.js.|
54

65
/** See [[https://streams.spec.whatwg.org/#underlying-source-api ¶4.2.3. The underlying source API]] of whatwg streams
76
* spec.
@@ -16,7 +15,7 @@ trait ReadableStreamUnderlyingSource[T] extends js.Object {
1615
* If this setup process is asynchronous, it can return a promise to signal success or failure; a rejected promise
1716
* will error the stream. Any thrown exceptions will be re-thrown by the [[ReadableStream]] constructor.
1817
*/
19-
var start: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]] = js.undefined
18+
var start: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]] = js.undefined
2019

2120
/** A function that is called whenever the stream’s internal queue of chunks becomes not full, i.e. whenever the
2221
* queue’s desired size becomes positive. Generally, it will be called repeatedly until the queue reaches its high
@@ -31,7 +30,7 @@ trait ReadableStreamUnderlyingSource[T] extends js.Object {
3130
* returned represents the process of acquiring a new chunk. Throwing an exception is treated the same as returning a
3231
* rejected promise.
3332
*/
34-
var pull: js.UndefOr[js.Function1[ReadableStreamController[T], Unit | js.Promise[Unit]]] = js.undefined
33+
var pull: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]] = js.undefined
3534

3635
/** A function that is called whenever the consumer cancels the stream, via [[ReadableStream.cancel]] or
3736
* [[ReadableStreamReader.cancel():scala\.scalajs\.js\.Promise[Unit]*]]. It takes as its argument the same value as
@@ -40,7 +39,7 @@ trait ReadableStreamUnderlyingSource[T] extends js.Object {
4039
* called. Additionally, a rejected promise will error the stream, instead of letting it close. Throwing an exception
4140
* is treated the same as returning a rejected promise.
4241
*/
43-
var cancel: js.UndefOr[js.Function1[js.Any, Unit | js.Promise[Unit]]] = js.undefined
42+
var cancel: js.UndefOr[js.Function1[js.Any, js.UndefOr[js.Promise[Unit]]]] = js.undefined
4443

4544
/** Can be set to "bytes" to signal that the constructed [[ReadableStream]] is a readable byte stream.
4645
*

tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.scalajs.dom.tests.shared
22

33
import org.junit.Assert.assertEquals
44
import org.junit.Test
5+
import org.scalajs.dom.QueuingStrategy
56
import org.scalajs.dom.ReadableStream
67
import org.scalajs.dom.ReadableStreamController
78
import org.scalajs.dom.ReadableStreamUnderlyingSource
@@ -12,12 +13,11 @@ import org.scalajs.dom.tests.shared.AsyncTesting.async
1213
import scala.concurrent.Future
1314
import scala.scalajs.js
1415
import scala.scalajs.js.Thenable.Implicits._
15-
import scala.scalajs.js.|
1616

1717
trait BrowserTests {
1818

1919
@Test
20-
final def ReadableStreamTest: AsyncResult = async {
20+
final def ReadableStreamConstructionAndConsumptionTest: AsyncResult = async {
2121
case class Tuna(color: String)
2222

2323
val expectedTunas = Seq(
@@ -30,8 +30,8 @@ trait BrowserTests {
3030
start = js.defined({ (controller: ReadableStreamController[Tuna]) =>
3131
controller.enqueue(Tuna("blue"))
3232
controller.enqueue(Tuna("red"))
33-
controller.close(): Unit | js.Promise[Unit]
34-
}): js.UndefOr[js.Function1[ReadableStreamController[Tuna], Unit | js.Promise[Unit]]]
33+
controller.close(): js.UndefOr[js.Promise[Unit]]
34+
}): js.UndefOr[js.Function1[ReadableStreamController[Tuna], js.UndefOr[js.Promise[Unit]]]]
3535
}
3636
)
3737

@@ -53,4 +53,46 @@ trait BrowserTests {
5353
assertEquals(receivedTunas, expectedTunas)
5454
}
5555
}
56+
57+
@Test
58+
final def ReadableStreamQueueingStrategyTest: AsyncResult = async {
59+
val expectedStrings = Seq(
60+
"short one",
61+
"definitely a longer one"
62+
)
63+
64+
val stream = ReadableStream[String](
65+
new ReadableStreamUnderlyingSource[String] {
66+
start = js.defined({ (controller: ReadableStreamController[String]) =>
67+
controller.enqueue("short one")
68+
controller.enqueue("definitely a longer one")
69+
controller.close(): js.UndefOr[js.Promise[Unit]]
70+
}): js.UndefOr[js.Function1[ReadableStreamController[String], js.UndefOr[js.Promise[Unit]]]]
71+
},
72+
new QueuingStrategy[String] {
73+
var highWaterMark = 1
74+
var size: js.Function1[String, Int] = { (chunk: String) =>
75+
chunk.length
76+
}
77+
}
78+
)
79+
80+
val reader = stream.getReader()
81+
82+
def read(strings: Seq[String]): Future[Seq[String]] = {
83+
reader
84+
.read()
85+
.flatMap { chunk =>
86+
if (chunk.done) {
87+
Future.successful(strings)
88+
} else {
89+
read(strings :+ chunk.value)
90+
}
91+
}
92+
}
93+
read(Seq.empty)
94+
.map { receivedStrings =>
95+
assertEquals(receivedStrings, expectedStrings)
96+
}
97+
}
5698
}

0 commit comments

Comments
 (0)